From d999e466b792df0803ad098a1107f312d3f4fac3 Mon Sep 17 00:00:00 2001 From: Joel Jeremy Marquez Date: Fri, 5 Jan 2024 07:05:07 -0800 Subject: [PATCH 01/26] Fix mobile transaction page amount input (#2166) * Request active edit on focus * Release notes * Track previous focus state * use inputRef to focus * Focus total amount effect * Run active edit action synchronously * Revert unneeded changes * Run cleanup synchronously * Cleanup * runAction * Space --- .../components/mobile/MobileAmountInput.jsx | 20 +++-- .../src/hooks/useSingleActiveEditForm.tsx | 73 +++++++++---------- upcoming-release-notes/2166.md | 6 ++ 3 files changed, 53 insertions(+), 46 deletions(-) create mode 100644 upcoming-release-notes/2166.md diff --git a/packages/desktop-client/src/components/mobile/MobileAmountInput.jsx b/packages/desktop-client/src/components/mobile/MobileAmountInput.jsx index 207912155ff..0e89d2e98e0 100644 --- a/packages/desktop-client/src/components/mobile/MobileAmountInput.jsx +++ b/packages/desktop-client/src/components/mobile/MobileAmountInput.jsx @@ -6,6 +6,7 @@ import { getNumberFormat, } from 'loot-core/src/shared/util'; +import { useMergedRefs } from '../../hooks/useMergedRefs'; import { theme } from '../../style'; import Button from '../common/Button'; import Text from '../common/Text'; @@ -21,6 +22,7 @@ const AmountInput = memo(function AmountInput({ const [text, setText] = useState(''); const [value, setValue] = useState(0); const inputRef = useRef(); + const mergedInputRef = useMergedRefs(props.inputRef, inputRef); const getInitialValue = () => Math.abs(props.value); @@ -30,10 +32,6 @@ const AmountInput = memo(function AmountInput({ } }, []); - useEffect(() => { - setEditing(text !== ''); - }, [text]); - useEffect(() => { if (focused) { focus(); @@ -72,12 +70,18 @@ const AmountInput = memo(function AmountInput({ return newValue; }; - const onBlur = () => { + const onFocus = e => { + props.onFocus?.(e); + }; + + const onBlur = e => { const value = applyText(); props.onUpdate?.(value); + props.onBlur?.(e); }; const onChangeText = text => { + setEditing(true); setText(text); props.onChange?.(text); }; @@ -85,11 +89,12 @@ const AmountInput = memo(function AmountInput({ const input = ( onChangeText(e.target.value)} + onFocus={onFocus} onBlur={onBlur} onKeyUp={onKeyPress} data-testid="amount-input" @@ -131,6 +136,7 @@ export const FocusableAmountInput = memo(function FocusableAmountInput({ focusedStyle, buttonProps, onFocus, + onBlur, ...props }) { const [isNegative, setIsNegative] = useState(true); @@ -166,6 +172,8 @@ export const FocusableAmountInput = memo(function FocusableAmountInput({ void; type ActiveEditAction = () => void | ActiveEditCleanup; @@ -19,7 +15,9 @@ type SingleActiveEditFormContextValue = { onRequestActiveEdit: ( field: string, action?: ActiveEditAction, - clearActiveEditDelayMs?: number, + options?: { + clearActiveEditDelayMs?: number; + }, ) => void; onClearActiveEdit: (delayMs?: number) => void; }; @@ -38,22 +36,8 @@ export function SingleActiveEditFormProvider({ children, }: SingleActiveEditFormProviderProps) { const [editingField, setEditingField] = useState(null); - const prevEditingField = usePrevious(editingField); - const actionRef = useRef(null); const cleanupRef = useRef(null); - useEffect(() => { - if (prevEditingField != null && prevEditingField !== editingField) { - runCleanup(); - } else if (prevEditingField == null && editingField !== null) { - runAction(); - } - }, [editingField]); - - const runAction = () => { - cleanupRef.current = actionRef.current?.(); - }; - const runCleanup = () => { const editCleanup = cleanupRef.current; if (typeof editCleanup === 'function') { @@ -62,31 +46,40 @@ export function SingleActiveEditFormProvider({ cleanupRef.current = null; }; + const runAction = (action: ActiveEditAction) => { + cleanupRef.current = action?.(); + }; + const onClearActiveEdit = (delayMs?: number) => { - setTimeout(() => setEditingField(null), delayMs); + setTimeout(() => { + runCleanup(); + setEditingField(null); + }, delayMs); + }; + + const onActiveEdit = (field: string, action: ActiveEditAction) => { + runAction(action); + setEditingField(field); }; - const onRequestActiveEdit = useStableCallback( - ( - field: string, - action: ActiveEditAction, - options: { - clearActiveEditDelayMs?: number; - }, - ) => { - if (editingField === field) { - // Already active. - return; - } - - if (editingField) { - onClearActiveEdit(options?.clearActiveEditDelayMs); - } else { - actionRef.current = action; - setEditingField(field); - } + const onRequestActiveEdit = ( + field: string, + action: ActiveEditAction, + options: { + clearActiveEditDelayMs?: number; }, - ); + ) => { + if (editingField === field) { + // Already active. + return; + } + + if (editingField) { + onClearActiveEdit(options?.clearActiveEditDelayMs); + } else { + onActiveEdit(field, action); + } + }; return ( Date: Fri, 5 Jan 2024 19:06:32 +0000 Subject: [PATCH 02/26] :bug: (rules) fix filtering in the rules page (#2141) --- .../src/components/ManageRules.tsx | 61 ++++++++----------- .../src/components/rules/SimpleTable.tsx | 28 ++++----- upcoming-release-notes/2141.md | 6 ++ 3 files changed, 41 insertions(+), 54 deletions(-) create mode 100644 upcoming-release-notes/2141.md diff --git a/packages/desktop-client/src/components/ManageRules.tsx b/packages/desktop-client/src/components/ManageRules.tsx index 36928d65520..e9fe97548d6 100644 --- a/packages/desktop-client/src/components/ManageRules.tsx +++ b/packages/desktop-client/src/components/ManageRules.tsx @@ -95,8 +95,8 @@ function ManageRulesContent({ payeeId, setLoading, }: ManageRulesContentProps) { - const [allRules, setAllRules] = useState(null); - const [rules, setRules] = useState(null); + const [allRules, setAllRules] = useState([]); + const [page, setPage] = useState(0); const [filter, setFilter] = useState(''); const dispatch = useDispatch(); @@ -117,18 +117,27 @@ function ManageRulesContent({ const filteredRules = useMemo( () => - filter === '' || !rules - ? rules - : rules.filter(rule => + (filter === '' + ? allRules + : allRules.filter(rule => ruleToString(rule, filterData) .toLowerCase() .includes(filter.toLowerCase()), - ), - [rules, filter, filterData], + ) + ).slice(0, 100 + page * 50), + [allRules, filter, filterData, page], ); const selectedInst = useSelected('manage-rules', allRules, []); const [hoveredRule, setHoveredRule] = useState(null); + const onSearchChange = useCallback( + (value: string) => { + setFilter(value); + setPage(0); + }, + [setFilter], + ); + async function loadRules() { setLoading(true); @@ -147,8 +156,7 @@ function ManageRulesContent({ useEffect(() => { async function loadData() { - const loadedRules = await loadRules(); - setRules(loadedRules.slice(0, 100)); + await loadRules(); setLoading(false); await dispatch(initiallyLoadPayees()); @@ -166,7 +174,7 @@ function ManageRulesContent({ }, []); function loadMore() { - setRules(rules.concat(allRules.slice(rules.length, rules.length + 50))); + setPage(page => page + 1); } async function onDeleteSelected() { @@ -179,10 +187,7 @@ function ManageRulesContent({ alert('Some rules were not deleted because they are linked to schedules'); } - const newRules = await loadRules(); - setRules(rules => { - return newRules.slice(0, rules.length); - }); + await loadRules(); selectedInst.dispatch({ type: 'select-none' }); setLoading(false); } @@ -191,19 +196,8 @@ function ManageRulesContent({ dispatch( pushModal('edit-rule', { rule, - onSave: async newRule => { - const newRules = await loadRules(); - - setRules(rules => { - const newIdx = newRules.findIndex(rule => rule.id === newRule.id); - - if (newIdx > rules.length) { - return newRules.slice(0, newIdx + 75); - } else { - return newRules.slice(0, rules.length); - } - }); - + onSave: async () => { + await loadRules(); setLoading(false); }, }), @@ -236,13 +230,7 @@ function ManageRulesContent({ pushModal('edit-rule', { rule, onSave: async newRule => { - const newRules = await loadRules(); - - setRules(rules => { - const newIdx = newRules.findIndex(rule => rule.id === newRule.id); - return newRules.slice(0, newIdx + 75); - }); - + await loadRules(); setLoading(false); }, }), @@ -253,7 +241,7 @@ function ManageRulesContent({ setHoveredRule(id); }, []); - if (rules === null) { + if (allRules.length === 0) { return null; } @@ -290,13 +278,12 @@ function ManageRulesContent({ void; style?: CSSProperties; onHoverLeave?: () => void; @@ -12,32 +11,27 @@ type SimpleTableProps = { }; export default function SimpleTable({ - data, loadMore, style, onHoverLeave, children, }: SimpleTableProps) { const contentRef = useRef(); - const contentHeight = useRef(); const scrollRef = useRef(); - function onScroll(e) { - if (contentHeight.current != null) { - if (loadMore && e.target.scrollTop > contentHeight.current - 750) { - loadMore(); - } + function onScroll(e: UIEvent) { + if ( + loadMore && + Math.abs( + e.currentTarget.scrollHeight - + e.currentTarget.clientHeight - + e.currentTarget.scrollTop, + ) < 1 + ) { + loadMore(); } } - useEffect(() => { - if (contentRef.current) { - contentHeight.current = contentRef.current.getBoundingClientRect().height; - } else { - contentHeight.current = null; - } - }, [contentRef.current, data]); - return ( Date: Sat, 6 Jan 2024 09:56:10 +0000 Subject: [PATCH 03/26] :bookmark: (24.1.0) Mobile split transactions (#2177) --- packages/api/package.json | 2 +- packages/desktop-client/package.json | 2 +- packages/desktop-electron/package.json | 2 +- upcoming-release-notes/1899.md | 6 ------ upcoming-release-notes/1906.md | 6 ------ upcoming-release-notes/1964.md | 6 ------ upcoming-release-notes/1988.md | 6 ------ upcoming-release-notes/1991.md | 6 ------ upcoming-release-notes/1993.md | 6 ------ upcoming-release-notes/2002.md | 6 ------ upcoming-release-notes/2004.md | 6 ------ upcoming-release-notes/2005.md | 6 ------ upcoming-release-notes/2007.md | 6 ------ upcoming-release-notes/2008.md | 6 ------ upcoming-release-notes/2009.md | 6 ------ upcoming-release-notes/2022.md | 6 ------ upcoming-release-notes/2023.md | 6 ------ upcoming-release-notes/2025.md | 6 ------ upcoming-release-notes/2029.md | 6 ------ upcoming-release-notes/2031.md | 6 ------ upcoming-release-notes/2032.md | 6 ------ upcoming-release-notes/2033.md | 6 ------ upcoming-release-notes/2034.md | 6 ------ upcoming-release-notes/2036.md | 6 ------ upcoming-release-notes/2046.md | 6 ------ upcoming-release-notes/2048.md | 6 ------ upcoming-release-notes/2062.md | 6 ------ upcoming-release-notes/2064.md | 6 ------ upcoming-release-notes/2065.md | 6 ------ upcoming-release-notes/2066.md | 6 ------ upcoming-release-notes/2067.md | 6 ------ upcoming-release-notes/2068.md | 6 ------ upcoming-release-notes/2069.md | 6 ------ upcoming-release-notes/2070.md | 6 ------ upcoming-release-notes/2073.md | 6 ------ upcoming-release-notes/2074.md | 6 ------ upcoming-release-notes/2078.md | 6 ------ upcoming-release-notes/2080.md | 6 ------ upcoming-release-notes/2082.md | 6 ------ upcoming-release-notes/2085.md | 6 ------ upcoming-release-notes/2092.md | 6 ------ upcoming-release-notes/2093.md | 6 ------ upcoming-release-notes/2094.md | 6 ------ upcoming-release-notes/2096.md | 6 ------ upcoming-release-notes/2098.md | 6 ------ upcoming-release-notes/2099.md | 6 ------ upcoming-release-notes/2100.md | 6 ------ upcoming-release-notes/2101.md | 6 ------ upcoming-release-notes/2111.md | 6 ------ upcoming-release-notes/2112.md | 6 ------ upcoming-release-notes/2113.md | 6 ------ upcoming-release-notes/2125.md | 6 ------ upcoming-release-notes/2127.md | 6 ------ upcoming-release-notes/2140.md | 6 ------ upcoming-release-notes/2141.md | 6 ------ upcoming-release-notes/2166.md | 6 ------ 56 files changed, 3 insertions(+), 321 deletions(-) delete mode 100644 upcoming-release-notes/1899.md delete mode 100644 upcoming-release-notes/1906.md delete mode 100644 upcoming-release-notes/1964.md delete mode 100644 upcoming-release-notes/1988.md delete mode 100644 upcoming-release-notes/1991.md delete mode 100644 upcoming-release-notes/1993.md delete mode 100644 upcoming-release-notes/2002.md delete mode 100644 upcoming-release-notes/2004.md delete mode 100644 upcoming-release-notes/2005.md delete mode 100644 upcoming-release-notes/2007.md delete mode 100644 upcoming-release-notes/2008.md delete mode 100644 upcoming-release-notes/2009.md delete mode 100644 upcoming-release-notes/2022.md delete mode 100644 upcoming-release-notes/2023.md delete mode 100644 upcoming-release-notes/2025.md delete mode 100644 upcoming-release-notes/2029.md delete mode 100644 upcoming-release-notes/2031.md delete mode 100644 upcoming-release-notes/2032.md delete mode 100644 upcoming-release-notes/2033.md delete mode 100644 upcoming-release-notes/2034.md delete mode 100644 upcoming-release-notes/2036.md delete mode 100644 upcoming-release-notes/2046.md delete mode 100644 upcoming-release-notes/2048.md delete mode 100644 upcoming-release-notes/2062.md delete mode 100644 upcoming-release-notes/2064.md delete mode 100644 upcoming-release-notes/2065.md delete mode 100644 upcoming-release-notes/2066.md delete mode 100644 upcoming-release-notes/2067.md delete mode 100644 upcoming-release-notes/2068.md delete mode 100644 upcoming-release-notes/2069.md delete mode 100644 upcoming-release-notes/2070.md delete mode 100644 upcoming-release-notes/2073.md delete mode 100644 upcoming-release-notes/2074.md delete mode 100644 upcoming-release-notes/2078.md delete mode 100644 upcoming-release-notes/2080.md delete mode 100644 upcoming-release-notes/2082.md delete mode 100644 upcoming-release-notes/2085.md delete mode 100644 upcoming-release-notes/2092.md delete mode 100644 upcoming-release-notes/2093.md delete mode 100644 upcoming-release-notes/2094.md delete mode 100644 upcoming-release-notes/2096.md delete mode 100644 upcoming-release-notes/2098.md delete mode 100644 upcoming-release-notes/2099.md delete mode 100644 upcoming-release-notes/2100.md delete mode 100644 upcoming-release-notes/2101.md delete mode 100644 upcoming-release-notes/2111.md delete mode 100644 upcoming-release-notes/2112.md delete mode 100644 upcoming-release-notes/2113.md delete mode 100644 upcoming-release-notes/2125.md delete mode 100644 upcoming-release-notes/2127.md delete mode 100644 upcoming-release-notes/2140.md delete mode 100644 upcoming-release-notes/2141.md delete mode 100644 upcoming-release-notes/2166.md diff --git a/packages/api/package.json b/packages/api/package.json index e3c71255ff5..0f4c7c5d413 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@actual-app/api", - "version": "6.3.0", + "version": "6.4.0", "license": "MIT", "description": "An API for Actual", "engines": { diff --git a/packages/desktop-client/package.json b/packages/desktop-client/package.json index 023432cc055..7017450d5cc 100644 --- a/packages/desktop-client/package.json +++ b/packages/desktop-client/package.json @@ -1,6 +1,6 @@ { "name": "@actual-app/web", - "version": "23.12.0", + "version": "24.1.0", "license": "MIT", "files": [ "build" diff --git a/packages/desktop-electron/package.json b/packages/desktop-electron/package.json index 641bd974df3..6e3e93b8968 100644 --- a/packages/desktop-electron/package.json +++ b/packages/desktop-electron/package.json @@ -2,7 +2,7 @@ "name": "desktop-electron", "productName": "Actual", "description": "A simple and powerful personal finance system", - "version": "23.12.0", + "version": "24.1.0", "scripts": { "clean": "rm -rf dist", "update-client": "bin/update-client", diff --git a/upcoming-release-notes/1899.md b/upcoming-release-notes/1899.md deleted file mode 100644 index 107fbae012f..00000000000 --- a/upcoming-release-notes/1899.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Features -authors: [jfdoming] ---- - -Add end date/max occurrences field to schedules, useful for things like installments diff --git a/upcoming-release-notes/1906.md b/upcoming-release-notes/1906.md deleted file mode 100644 index 32868386f15..00000000000 --- a/upcoming-release-notes/1906.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [spezzino] ---- - -Add support for automatic theme switching based on system theme \ No newline at end of file diff --git a/upcoming-release-notes/1964.md b/upcoming-release-notes/1964.md deleted file mode 100644 index 16d45249fb9..00000000000 --- a/upcoming-release-notes/1964.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [joel-jeremy] ---- - -Category and group menu/modal in the mobile budget page to manage categories/groups and their notes. diff --git a/upcoming-release-notes/1988.md b/upcoming-release-notes/1988.md deleted file mode 100644 index 8943ac21619..00000000000 --- a/upcoming-release-notes/1988.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [carkom] ---- - -Data loading performance improvements for custom reports \ No newline at end of file diff --git a/upcoming-release-notes/1991.md b/upcoming-release-notes/1991.md deleted file mode 100644 index 5fa4b94bddd..00000000000 --- a/upcoming-release-notes/1991.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [twk3] ---- - -Add some initial api tests for budgets and accounts diff --git a/upcoming-release-notes/1993.md b/upcoming-release-notes/1993.md deleted file mode 100644 index ea16e7de6e4..00000000000 --- a/upcoming-release-notes/1993.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [joel-jeremy] ---- - -Use Page component for mobile pages diff --git a/upcoming-release-notes/2002.md b/upcoming-release-notes/2002.md deleted file mode 100644 index de2fc7cba3d..00000000000 --- a/upcoming-release-notes/2002.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [kymckay] ---- - -Prevent deleted categories blocking creation of new categories with the same name. diff --git a/upcoming-release-notes/2004.md b/upcoming-release-notes/2004.md deleted file mode 100644 index 0ff9d19d9bf..00000000000 --- a/upcoming-release-notes/2004.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MikesGlitch] ---- - -Convert BudgetTotals, GoCardlessLink, Import, WelcomeScreen components to Typescript. diff --git a/upcoming-release-notes/2005.md b/upcoming-release-notes/2005.md deleted file mode 100644 index e3c96ee60e9..00000000000 --- a/upcoming-release-notes/2005.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [lucasboebel] ---- - -Maintenance: Update CashFlow.js to use typescript diff --git a/upcoming-release-notes/2007.md b/upcoming-release-notes/2007.md deleted file mode 100644 index cb0aa92f926..00000000000 --- a/upcoming-release-notes/2007.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [ameekSinghUniversityAcc] ---- - -Migrating the DateRange and UseReport files to typescript diff --git a/upcoming-release-notes/2008.md b/upcoming-release-notes/2008.md deleted file mode 100644 index 2d170fd6cc3..00000000000 --- a/upcoming-release-notes/2008.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [vishnukaushik] ---- - -Fix filter Amount formatting issue \ No newline at end of file diff --git a/upcoming-release-notes/2009.md b/upcoming-release-notes/2009.md deleted file mode 100644 index 43b60f981d9..00000000000 --- a/upcoming-release-notes/2009.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [ghosetuhin] ---- - -Migrating the util.js and chartTheme.js files to typescript \ No newline at end of file diff --git a/upcoming-release-notes/2022.md b/upcoming-release-notes/2022.md deleted file mode 100644 index 1f93be5403a..00000000000 --- a/upcoming-release-notes/2022.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MatissJanis] ---- - -Refactored `FixedSizeList` to TypeScript diff --git a/upcoming-release-notes/2023.md b/upcoming-release-notes/2023.md deleted file mode 100644 index d75b90fdac5..00000000000 --- a/upcoming-release-notes/2023.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MatissJanis] ---- - -Added more strict typings to `utils.ts` and some of its dependencies diff --git a/upcoming-release-notes/2025.md b/upcoming-release-notes/2025.md deleted file mode 100644 index 2571d0a9427..00000000000 --- a/upcoming-release-notes/2025.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MikesGlitch] ---- - -Adding aria-labels to some buttons for greater accessibility diff --git a/upcoming-release-notes/2029.md b/upcoming-release-notes/2029.md deleted file mode 100644 index 68c09ee2a46..00000000000 --- a/upcoming-release-notes/2029.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MatissJanis] ---- - -Enable `react/no-children-prop` rule and fix the issues diff --git a/upcoming-release-notes/2031.md b/upcoming-release-notes/2031.md deleted file mode 100644 index cd7fa53c60a..00000000000 --- a/upcoming-release-notes/2031.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [joel-jeremy] ---- - -Fix bulk edit field modal in desktop diff --git a/upcoming-release-notes/2032.md b/upcoming-release-notes/2032.md deleted file mode 100644 index 3d2ca382bba..00000000000 --- a/upcoming-release-notes/2032.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [joel-jeremy] ---- - -Apply eslint prefer-const rule to loot-core server files. diff --git a/upcoming-release-notes/2033.md b/upcoming-release-notes/2033.md deleted file mode 100644 index afd0770965a..00000000000 --- a/upcoming-release-notes/2033.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [joel-jeremy] ---- - -Apply ESLint prefer-const on components folder part 1 diff --git a/upcoming-release-notes/2034.md b/upcoming-release-notes/2034.md deleted file mode 100644 index 82aadd8c442..00000000000 --- a/upcoming-release-notes/2034.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [joel-jeremy] ---- - -Apply ESLint prefer-const on components folder part 2 diff --git a/upcoming-release-notes/2036.md b/upcoming-release-notes/2036.md deleted file mode 100644 index 913201b7303..00000000000 --- a/upcoming-release-notes/2036.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [twk3] ---- - -Add api tests for categories and category groups diff --git a/upcoming-release-notes/2046.md b/upcoming-release-notes/2046.md deleted file mode 100644 index 8ac334a1eee..00000000000 --- a/upcoming-release-notes/2046.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [carkom] ---- - -Adding typescript to custom report files and small functional changes. \ No newline at end of file diff --git a/upcoming-release-notes/2048.md b/upcoming-release-notes/2048.md deleted file mode 100644 index fa8554f6096..00000000000 --- a/upcoming-release-notes/2048.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [carkom] ---- - -Fixes and updates to dark theme colors. diff --git a/upcoming-release-notes/2062.md b/upcoming-release-notes/2062.md deleted file mode 100644 index c8cb99f6039..00000000000 --- a/upcoming-release-notes/2062.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [iOSLife] ---- - -Adds a property to the returned items in the API for category and categoryGroup to inform if it is hidden. \ No newline at end of file diff --git a/upcoming-release-notes/2064.md b/upcoming-release-notes/2064.md deleted file mode 100644 index 058182970f6..00000000000 --- a/upcoming-release-notes/2064.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [twk3] ---- - -Cleanup older unused version of react-router diff --git a/upcoming-release-notes/2065.md b/upcoming-release-notes/2065.md deleted file mode 100644 index 873d58604ec..00000000000 --- a/upcoming-release-notes/2065.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MatissJanis] ---- - -Fixing TypeScript issues when enabling `strictFunctionTypes`. diff --git a/upcoming-release-notes/2066.md b/upcoming-release-notes/2066.md deleted file mode 100644 index 6ff11102d47..00000000000 --- a/upcoming-release-notes/2066.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MatissJanis] ---- - -Fixing TypeScript issues when enabling `strictFunctionTypes` (pt.2). diff --git a/upcoming-release-notes/2067.md b/upcoming-release-notes/2067.md deleted file mode 100644 index 72b9a7d05f0..00000000000 --- a/upcoming-release-notes/2067.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [carkom] ---- - -Adding types for future typescript changes. diff --git a/upcoming-release-notes/2068.md b/upcoming-release-notes/2068.md deleted file mode 100644 index a4afd516438..00000000000 --- a/upcoming-release-notes/2068.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Features -authors: [joel-jeremy] ---- - -Mobile split transactions diff --git a/upcoming-release-notes/2069.md b/upcoming-release-notes/2069.md deleted file mode 100644 index e8b1f4db822..00000000000 --- a/upcoming-release-notes/2069.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [carkom] ---- - -Updating variable naming for custom reports page. \ No newline at end of file diff --git a/upcoming-release-notes/2070.md b/upcoming-release-notes/2070.md deleted file mode 100644 index f04d8bd7ac7..00000000000 --- a/upcoming-release-notes/2070.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MatissJanis] ---- - -Fixing TypeScript issues when enabling `strictFunctionTypes` (pt.3). diff --git a/upcoming-release-notes/2073.md b/upcoming-release-notes/2073.md deleted file mode 100644 index ec82b1108c5..00000000000 --- a/upcoming-release-notes/2073.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [IzStriker] ---- - -Migrate tooltips.js to typescript diff --git a/upcoming-release-notes/2074.md b/upcoming-release-notes/2074.md deleted file mode 100644 index 665f73d21bb..00000000000 --- a/upcoming-release-notes/2074.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MatissJanis] ---- - -ci: add helpful bot comments if CI jobs fail. diff --git a/upcoming-release-notes/2078.md b/upcoming-release-notes/2078.md deleted file mode 100644 index 56a60e0b50b..00000000000 --- a/upcoming-release-notes/2078.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [carkom] ---- - -Enable Legend for custom reports. diff --git a/upcoming-release-notes/2080.md b/upcoming-release-notes/2080.md deleted file mode 100644 index c43aa923abc..00000000000 --- a/upcoming-release-notes/2080.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [carkom] ---- - -Add live/static choice for date filters. diff --git a/upcoming-release-notes/2082.md b/upcoming-release-notes/2082.md deleted file mode 100644 index e27bde08a46..00000000000 --- a/upcoming-release-notes/2082.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [joel-jeremy] ---- - -Add left and right margin to modals. diff --git a/upcoming-release-notes/2085.md b/upcoming-release-notes/2085.md deleted file mode 100644 index 5f3fefcdb98..00000000000 --- a/upcoming-release-notes/2085.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [carkom] ---- - -Realign and fix header/totals row for table graph in custom reports diff --git a/upcoming-release-notes/2092.md b/upcoming-release-notes/2092.md deleted file mode 100644 index a09e8c46a7b..00000000000 --- a/upcoming-release-notes/2092.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [HansiWursti] ---- - -Fix background color when pinning sidebar (Issue [#2089](https://github.com/actualbudget/actual/issues/2089)) diff --git a/upcoming-release-notes/2093.md b/upcoming-release-notes/2093.md deleted file mode 100644 index 995e6d68e92..00000000000 --- a/upcoming-release-notes/2093.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [HansiWursti] ---- - -Fix missing divider bar issue [#1878](https://github.com/actualbudget/actual/issues/1878) diff --git a/upcoming-release-notes/2094.md b/upcoming-release-notes/2094.md deleted file mode 100644 index 8b11d74b738..00000000000 --- a/upcoming-release-notes/2094.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [carkom] ---- - -Custom reports: Convert the view options (legend/summary/labels) to global preferences that apply to all graphs. \ No newline at end of file diff --git a/upcoming-release-notes/2096.md b/upcoming-release-notes/2096.md deleted file mode 100644 index ee37321c4a8..00000000000 --- a/upcoming-release-notes/2096.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [MatissJanis] ---- - -Fix category spending report (experimental) not loading [#1981](https://github.com/actualbudget/actual/issues/1981) diff --git a/upcoming-release-notes/2098.md b/upcoming-release-notes/2098.md deleted file mode 100644 index fcfa29d54d6..00000000000 --- a/upcoming-release-notes/2098.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Enhancements -authors: [carkom] ---- - -Changing the view and functions for donut graph in custom reports. diff --git a/upcoming-release-notes/2099.md b/upcoming-release-notes/2099.md deleted file mode 100644 index 6482c922b5e..00000000000 --- a/upcoming-release-notes/2099.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [youngcw] ---- - -[Goals]: Fix over budget condition with using apply instead of overwrite diff --git a/upcoming-release-notes/2100.md b/upcoming-release-notes/2100.md deleted file mode 100644 index 228149363a8..00000000000 --- a/upcoming-release-notes/2100.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [youngcw] ---- - -Goals: Don't run templates on non-hidden categories inside of hidden groups diff --git a/upcoming-release-notes/2101.md b/upcoming-release-notes/2101.md deleted file mode 100644 index d7390fbc858..00000000000 --- a/upcoming-release-notes/2101.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [twk3] ---- - -Apply eslint filename extensions for jsx. \ No newline at end of file diff --git a/upcoming-release-notes/2111.md b/upcoming-release-notes/2111.md deleted file mode 100644 index 3da51c67cb9..00000000000 --- a/upcoming-release-notes/2111.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MatissJanis] ---- - -eslint: disallow unnecessary curly braces diff --git a/upcoming-release-notes/2112.md b/upcoming-release-notes/2112.md deleted file mode 100644 index ed16eda983c..00000000000 --- a/upcoming-release-notes/2112.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [MatissJanis] ---- - -TypeScript: moving `DeleteFile` component to TS diff --git a/upcoming-release-notes/2113.md b/upcoming-release-notes/2113.md deleted file mode 100644 index b78ebabc777..00000000000 --- a/upcoming-release-notes/2113.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Maintenance -authors: [joel-jeremy] ---- - -Enable prefer-const ESLint rule project-wide diff --git a/upcoming-release-notes/2125.md b/upcoming-release-notes/2125.md deleted file mode 100644 index 0197a4b53a3..00000000000 --- a/upcoming-release-notes/2125.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [mk-french] ---- - -Goals: Negate schedule amount to budget if income diff --git a/upcoming-release-notes/2127.md b/upcoming-release-notes/2127.md deleted file mode 100644 index d217cfebb58..00000000000 --- a/upcoming-release-notes/2127.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [mk-french] ---- - -Fix update transaction API bug diff --git a/upcoming-release-notes/2140.md b/upcoming-release-notes/2140.md deleted file mode 100644 index 91b0355db3e..00000000000 --- a/upcoming-release-notes/2140.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [MatissJanis] ---- - -Fix imported transactions overriding reconciled (locked) transaction data diff --git a/upcoming-release-notes/2141.md b/upcoming-release-notes/2141.md deleted file mode 100644 index 428b567c32d..00000000000 --- a/upcoming-release-notes/2141.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [MatissJanis, jasonmichalski] ---- - -Fix filtering in rules page: apply the filter on the full data set instead of the limited (paginated) data set. diff --git a/upcoming-release-notes/2166.md b/upcoming-release-notes/2166.md deleted file mode 100644 index 07194832e51..00000000000 --- a/upcoming-release-notes/2166.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [joel-jeremy] ---- - -Fix mobile transaction page amount input bug on iOS. From 7e9921e9e5d9597e79455b9c396bfb26840ae34a Mon Sep 17 00:00:00 2001 From: Matiss Janis Aboltins Date: Sat, 6 Jan 2024 12:48:45 +0000 Subject: [PATCH 04/26] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(TypeScript)=20fix?= =?UTF-8?q?=20strictFunctionTypes=20violations=20(pt=204)=20(#2142)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/desktop-client/src/components/common/Menu.tsx | 10 +++++----- .../src/components/payees/PayeeTable.tsx | 2 +- .../src/components/schedules/SchedulesTable.tsx | 2 +- packages/desktop-client/src/components/table.tsx | 8 ++++---- .../loot-core/src/server/sync/sync.property.test.ts | 2 +- upcoming-release-notes/2142.md | 6 ++++++ 6 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 upcoming-release-notes/2142.md diff --git a/packages/desktop-client/src/components/common/Menu.tsx b/packages/desktop-client/src/components/common/Menu.tsx index 523023f087e..2f0d002f71c 100644 --- a/packages/desktop-client/src/components/common/Menu.tsx +++ b/packages/desktop-client/src/components/common/Menu.tsx @@ -34,21 +34,21 @@ type MenuItem = { style?: CSSProperties; }; -type MenuProps = { +type MenuProps = { header?: ReactNode; footer?: ReactNode; - items: Array; - onMenuSelect: (itemName: MenuItem['name']) => void; + items: Array; + onMenuSelect: (itemName: T['name']) => void; style?: CSSProperties; }; -export default function Menu({ +export default function Menu({ header, footer, items: allItems, onMenuSelect, style, -}: MenuProps) { +}: MenuProps) { const elRef = useRef(null); const items = allItems.filter(x => x); const [hoveredIndex, setHoveredIndex] = useState(null); diff --git a/packages/desktop-client/src/components/payees/PayeeTable.tsx b/packages/desktop-client/src/components/payees/PayeeTable.tsx index b376752ae30..245f0887856 100644 --- a/packages/desktop-client/src/components/payees/PayeeTable.tsx +++ b/packages/desktop-client/src/components/payees/PayeeTable.tsx @@ -53,7 +53,7 @@ const PayeeTable = forwardRef< return ( setHovered(null)}> - + setOpen(false)} > { + onMenuSelect={name => { onAction(name, schedule.id); setOpen(false); }} diff --git a/packages/desktop-client/src/components/table.tsx b/packages/desktop-client/src/components/table.tsx index 92e2e833a47..71986e4b261 100644 --- a/packages/desktop-client/src/components/table.tsx +++ b/packages/desktop-client/src/components/table.tsx @@ -886,9 +886,7 @@ type TableProps = { saveScrollWidth?: (parent, child) => void; }; -export const Table: ( - props: TableProps & { ref?: Ref> }, -) => ReactElement = forwardRef( +export const Table = forwardRef( ( { items, @@ -1161,7 +1159,9 @@ export const Table: ( ); }, -); +) as ( + props: TableProps & { ref?: Ref> }, +) => ReactElement; export type TableNavigator = { onEdit: (id: T['id'], field?: string) => void; diff --git a/packages/loot-core/src/server/sync/sync.property.test.ts b/packages/loot-core/src/server/sync/sync.property.test.ts index 346eb3f16ce..d748f9d5168 100644 --- a/packages/loot-core/src/server/sync/sync.property.test.ts +++ b/packages/loot-core/src/server/sync/sync.property.test.ts @@ -111,7 +111,7 @@ function makeGen>({ value, timestamp: jsc.integer(1000, 10000).smap( x => { - let clientId; + let clientId: string; switch (jsc.random(0, 1)) { case 0: clientId = clientId1; diff --git a/upcoming-release-notes/2142.md b/upcoming-release-notes/2142.md new file mode 100644 index 00000000000..e443cc99adc --- /dev/null +++ b/upcoming-release-notes/2142.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [MatissJanis] +--- + +Fixing TypeScript issues when enabling `strictFunctionTypes` (pt.4). From 7a40a645e6e25367187f8a14416e8e353fafe1e1 Mon Sep 17 00:00:00 2001 From: Matiss Janis Aboltins Date: Sat, 6 Jan 2024 12:58:08 +0000 Subject: [PATCH 05/26] :recycle: (TypeScript) fix strictFunctionTypes violations (pt 5) (#2072) --- .../autocomplete/SavedFilterAutocomplete.tsx | 1 - packages/desktop-client/src/hooks/useActions.ts | 7 ++++++- .../platform/server/sqlite/index.electron.ts | 2 ++ packages/loot-core/src/server/aql/compiler.ts | 17 ++++++++++++++--- .../loot-core/src/server/aql/schema/index.ts | 4 +++- .../src/server/sync/sync.property.test.ts | 3 ++- tsconfig.json | 3 +-- upcoming-release-notes/2072.md | 6 ++++++ 8 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 upcoming-release-notes/2072.md diff --git a/packages/desktop-client/src/components/autocomplete/SavedFilterAutocomplete.tsx b/packages/desktop-client/src/components/autocomplete/SavedFilterAutocomplete.tsx index 989e0b17123..684cdbb54f5 100644 --- a/packages/desktop-client/src/components/autocomplete/SavedFilterAutocomplete.tsx +++ b/packages/desktop-client/src/components/autocomplete/SavedFilterAutocomplete.tsx @@ -74,7 +74,6 @@ export default function SavedFilterAutocomplete({ suggestions={filters} renderItems={(items, getItemProps, highlightedIndex) => ( unknown> = export type BoundActions = { [Key in keyof typeof actions]: ( ...args: Parameters<(typeof actions)[Key]> - ) => ActionReturnType<(typeof actions)[Key]>; + ) => // @ts-expect-error temporarily disabling this TS error; eventually the `useActions` hook should be removed + ActionReturnType<(typeof actions)[Key]>; }; // https://react-redux.js.org/api/hooks#recipe-useactions +/** + * @deprecated please use actions directly with `useDispatch` + * @see https://github.com/reduxjs/react-redux/issues/1252#issuecomment-488160930 + **/ export function useActions() { const dispatch = useDispatch(); return useMemo(() => { diff --git a/packages/loot-core/src/platform/server/sqlite/index.electron.ts b/packages/loot-core/src/platform/server/sqlite/index.electron.ts index 146e8ac192c..0374f34d8b5 100644 --- a/packages/loot-core/src/platform/server/sqlite/index.electron.ts +++ b/packages/loot-core/src/platform/server/sqlite/index.electron.ts @@ -98,9 +98,11 @@ export function openDatabase(pathOrBuffer: string | Buffer) { const db = new SQL(pathOrBuffer); // Define Unicode-aware LOWER and UPPER implementation. // This is necessary because better-sqlite3 uses SQLite build without ICU support. + // @ts-expect-error @types/better-sqlite3 does not support setting strict 3rd argument db.function('UNICODE_LOWER', { deterministic: true }, (arg: string | null) => arg?.toLowerCase(), ); + // @ts-expect-error @types/better-sqlite3 does not support setting strict 3rd argument db.function('UNICODE_UPPER', { deterministic: true }, (arg: string | null) => arg?.toUpperCase(), ); diff --git a/packages/loot-core/src/server/aql/compiler.ts b/packages/loot-core/src/server/aql/compiler.ts index ade3d1d0200..29b437ec38b 100644 --- a/packages/loot-core/src/server/aql/compiler.ts +++ b/packages/loot-core/src/server/aql/compiler.ts @@ -989,10 +989,21 @@ export function isAggregateQuery(queryState) { }); } -type SchemaConfig = { - tableViews?: Record | ((...args: unknown[]) => unknown); +export type SchemaConfig = { + tableViews?: + | Record + | ((name: string, config: { withDead; isJoin; tableOptions }) => unknown); tableFilters?: (name: string) => unknown[]; - customizeQuery?: (queryString: T) => T; + customizeQuery?: ( + queryString: T, + ) => T; + views?: Record< + string, + { + fields?: Record; + [key: `v_${string}`]: string | ((internalFields, publicFields) => string); + } + >; }; export function compileQuery( queryState, diff --git a/packages/loot-core/src/server/aql/schema/index.ts b/packages/loot-core/src/server/aql/schema/index.ts index 26af5205b07..1af6735bdc4 100644 --- a/packages/loot-core/src/server/aql/schema/index.ts +++ b/packages/loot-core/src/server/aql/schema/index.ts @@ -1,3 +1,5 @@ +import { SchemaConfig } from '../compiler'; + function f(type: string, opts?: Record) { return { type, ...opts }; } @@ -140,7 +142,7 @@ export const schema = { }, }; -export const schemaConfig = { +export const schemaConfig: SchemaConfig = { // Note: these views *must* represent the underlying table that we // are mapping here. The compiler makes optimizations with this // assumption diff --git a/packages/loot-core/src/server/sync/sync.property.test.ts b/packages/loot-core/src/server/sync/sync.property.test.ts index d748f9d5168..cbe5cefe01f 100644 --- a/packages/loot-core/src/server/sync/sync.property.test.ts +++ b/packages/loot-core/src/server/sync/sync.property.test.ts @@ -93,7 +93,8 @@ const baseTime = 1565374471903; const clientId1 = '80dd7da215247293'; const clientId2 = '90xU1sd5124329ac'; -function makeGen>({ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function makeGen>({ table, row, field, diff --git a/tsconfig.json b/tsconfig.json index 844bcaf11c4..a426766d86a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,8 +15,7 @@ "downlevelIteration": true, // TODO: enable once every file is ts // "strict": true, - // TODO: enable once the violations are fixed - // "strictFunctionTypes": true, + "strictFunctionTypes": true, "noFallthroughCasesInSwitch": true, "skipLibCheck": true, "jsx": "preserve", diff --git a/upcoming-release-notes/2072.md b/upcoming-release-notes/2072.md new file mode 100644 index 00000000000..edad616bb1f --- /dev/null +++ b/upcoming-release-notes/2072.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [MatissJanis] +--- + +Fixing TypeScript issues when enabling `strictFunctionTypes` (pt.5). From 85c0352abb22cc791adbeaeea6259d9bf629562c Mon Sep 17 00:00:00 2001 From: David Kus Date: Sat, 6 Jan 2024 10:05:49 -0500 Subject: [PATCH 06/26] Adding filter for reconciled transactions (#2108) * Adding filter for reconciled transactions * Adding release note --- .../desktop-client/src/components/filters/FiltersMenu.jsx | 1 + packages/loot-core/src/shared/rules.ts | 1 + upcoming-release-notes/2108.md | 6 ++++++ 3 files changed, 8 insertions(+) create mode 100644 upcoming-release-notes/2108.md diff --git a/packages/desktop-client/src/components/filters/FiltersMenu.jsx b/packages/desktop-client/src/components/filters/FiltersMenu.jsx index 59803286944..e9382c1726a 100644 --- a/packages/desktop-client/src/components/filters/FiltersMenu.jsx +++ b/packages/desktop-client/src/components/filters/FiltersMenu.jsx @@ -48,6 +48,7 @@ const filterFields = [ 'category', 'amount', 'cleared', + 'reconciled', 'saved', ].map(field => [field, mapField(field)]); diff --git a/packages/loot-core/src/shared/rules.ts b/packages/loot-core/src/shared/rules.ts index 0bab72945b7..aa0b855329c 100644 --- a/packages/loot-core/src/shared/rules.ts +++ b/packages/loot-core/src/shared/rules.ts @@ -41,6 +41,7 @@ export const FIELD_TYPES = new Map( category: 'id', account: 'id', cleared: 'boolean', + reconciled: 'boolean', saved: 'saved', }), ); diff --git a/upcoming-release-notes/2108.md b/upcoming-release-notes/2108.md new file mode 100644 index 00000000000..6fbaec594be --- /dev/null +++ b/upcoming-release-notes/2108.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [davidkus] +--- + +Adding filter for reconciled transactions. From d9aeb8db1e36d6d8e737d2fca3d0344d59ec69e1 Mon Sep 17 00:00:00 2001 From: Jason Date: Sat, 6 Jan 2024 10:06:24 -0500 Subject: [PATCH 07/26] Change net worth graph to show more detail in compact card view (#2132) * Change net worth graph to show more detail in compact card view * Added release notes * Update release notes * Update VRT images --- ...and-cash-flow-reports-1-chromium-linux.png | Bin 58118 -> 59582 bytes ...and-cash-flow-reports-2-chromium-linux.png | Bin 57540 -> 58938 bytes .../reports/graphs/NetWorthGraph.tsx | 30 ++++++++---------- upcoming-release-notes/2132.md | 6 ++++ 4 files changed, 20 insertions(+), 16 deletions(-) create mode 100644 upcoming-release-notes/2132.md diff --git a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-1-chromium-linux.png b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-1-chromium-linux.png index cf8cc81acb3fc302af881eaa54adb7b7de78c53c..6ad0736f6f5e432b3ec0479a4e1c7bff47a71d89 100644 GIT binary patch delta 42021 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 Lzcc@K;@f`%nBh~z delta 40632 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�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 PXF>a%ek|B?^4fm@apDp1 delta 40380 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 diff --git a/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.tsx b/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.tsx index d17e37ac1a2..4da88b194d6 100644 --- a/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.tsx +++ b/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.tsx @@ -126,22 +126,20 @@ function NetWorthGraph({ {compact ? null : ( )} - {compact ? null : ( - - )} - {compact ? null : ( - - )} + + } formatter={numberFormatterTooltip} diff --git a/upcoming-release-notes/2132.md b/upcoming-release-notes/2132.md new file mode 100644 index 00000000000..78a90f225e0 --- /dev/null +++ b/upcoming-release-notes/2132.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [jasonmichalski] +--- + +Fix net worth graph to show more detail in compact card view From 458d556e510b634b6d89a93e8a1d0005191c0d03 Mon Sep 17 00:00:00 2001 From: Khanh Nguyen <66460089+kstockk@users.noreply.github.com> Date: Sun, 7 Jan 2024 02:09:48 +1100 Subject: [PATCH 08/26] added cleared column in csv export (#2138) * added cleared column in csv export * added release note --- .../src/server/accounts/export-to-csv.ts | 21 ++++++++++++++++++- upcoming-release-notes/2138.md | 6 ++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 upcoming-release-notes/2138.md diff --git a/packages/loot-core/src/server/accounts/export-to-csv.ts b/packages/loot-core/src/server/accounts/export-to-csv.ts index da8aa17d621..838216cf209 100644 --- a/packages/loot-core/src/server/accounts/export-to-csv.ts +++ b/packages/loot-core/src/server/accounts/export-to-csv.ts @@ -31,13 +31,24 @@ export async function exportToCSV( }, {}); const transactionsForExport = transactions.map( - ({ account, date, payee, notes, category, amount }) => ({ + ({ + account, + date, + payee, + notes, + category, + amount, + cleared, + reconciled, + }) => ({ Account: accountNamesById[account], Date: date, Payee: payeeNamesById[payee], Notes: notes, Category: categoryNamesById[category], Amount: amount == null ? 0 : integerToAmount(amount), + Cleared: cleared, + Reconciled: reconciled, }), ); @@ -57,6 +68,8 @@ export async function exportQueryToCSV(query) { { Notes: 'notes' }, { Category: 'category.name' }, { Amount: 'amount' }, + { Cleared: 'cleared' }, + { Reconciled: 'reconciled' }, ]) .options({ splits: 'all' }), ); @@ -80,6 +93,12 @@ export async function exportQueryToCSV(query) { Notes: trans.Notes, Category: trans.Category, Amount: trans.Amount == null ? 0 : integerToAmount(trans.Amount), + Cleared: + trans.Reconciled === true + ? 'Reconciled' + : trans.Cleared === true + ? 'Cleared' + : 'Not cleared', }; }); diff --git a/upcoming-release-notes/2138.md b/upcoming-release-notes/2138.md new file mode 100644 index 00000000000..9fd1d8b80bf --- /dev/null +++ b/upcoming-release-notes/2138.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [kstockk] +--- + +Add cleared column in csv export From 83d2472a550b192ed233ab91ce2c529cb87a08a9 Mon Sep 17 00:00:00 2001 From: Jakub Kuczys Date: Sat, 6 Jan 2024 16:14:00 +0100 Subject: [PATCH 09/26] Ask for confirmation when editing date of a locked transaction (#2134) * Ask for confirmation when editing date of a locked transaction * Add release note --- packages/desktop-client/src/components/accounts/Account.jsx | 2 +- .../src/components/transactions/TransactionsTable.jsx | 3 ++- upcoming-release-notes/2134.md | 6 ++++++ 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 upcoming-release-notes/2134.md diff --git a/packages/desktop-client/src/components/accounts/Account.jsx b/packages/desktop-client/src/components/accounts/Account.jsx index 37871916290..f9fcda5d5ef 100644 --- a/packages/desktop-client/src/components/accounts/Account.jsx +++ b/packages/desktop-client/src/components/accounts/Account.jsx @@ -864,7 +864,7 @@ class AccountInternal extends PureComponent { } }; - if (name === 'amount' || name === 'payee' || name === 'account') { + if (name === 'amount' || name === 'payee' || name === 'account' || name === 'date') { const { data } = await runQuery( q('transactions') .filter({ id: { $oneof: ids }, reconciled: true }) diff --git a/packages/desktop-client/src/components/transactions/TransactionsTable.jsx b/packages/desktop-client/src/components/transactions/TransactionsTable.jsx index a1009c1aaca..d97d77dbd38 100644 --- a/packages/desktop-client/src/components/transactions/TransactionsTable.jsx +++ b/packages/desktop-client/src/components/transactions/TransactionsTable.jsx @@ -754,7 +754,8 @@ const Transaction = memo(function Transaction(props) { (name === 'credit' || name === 'debit' || name === 'payee' || - name === 'account') + name === 'account' || + name === 'date') ) { if (showReconciliationWarning === false) { setShowReconciliationWarning(true); diff --git a/upcoming-release-notes/2134.md b/upcoming-release-notes/2134.md new file mode 100644 index 00000000000..de428dbadd1 --- /dev/null +++ b/upcoming-release-notes/2134.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [Jackenmen] +--- + +Ask for confirmation when editing date of a locked transaction From 84a9269ae487db05aa4ece2002c282c9077e2ff0 Mon Sep 17 00:00:00 2001 From: Joel Jeremy Marquez Date: Sat, 6 Jan 2024 09:06:26 -0800 Subject: [PATCH 10/26] ESLint no-default-exports 1 (#2115) * ESLint no-default-imports part 1 * Release notes * Remove Notes.tsx default export * Fix Notes imports --- .eslintrc.js | 48 +++++++++++++++++++ packages/api/app/query.js | 2 +- packages/api/methods.js | 2 +- .../src/components/AnimatedRefresh.tsx | 2 +- .../desktop-client/src/components/App.tsx | 26 +++++----- .../src/components/AppBackground.tsx | 9 ++-- .../src/components/Background.tsx | 2 +- .../src/components/BankSyncStatus.tsx | 4 +- .../src/components/DevelopmentTopBar.tsx | 2 +- .../src/components/FatalError.tsx | 4 +- .../src/components/FinancesApp.tsx | 18 +++---- .../src/components/FixedSizeList.tsx | 2 +- .../src/components/GlobalKeys.ts | 2 +- .../src/components/LoggedInUser.tsx | 2 +- .../src/components/ManageRules.tsx | 2 +- .../src/components/ManageRulesPage.tsx | 2 +- .../src/components/MobileBackButton.tsx | 2 +- .../src/components/MobileWebMessage.tsx | 2 +- .../desktop-client/src/components/Modals.tsx | 2 +- .../desktop-client/src/components/Notes.tsx | 2 +- .../src/components/NotesButton.tsx | 4 +- .../src/components/Notifications.tsx | 2 +- .../src/components/PrivacyFilter.tsx | 4 +- .../src/components/ScrollProvider.tsx | 2 +- .../src/components/SyncRefresh.ts | 2 +- .../src/components/Titlebar.tsx | 6 +-- .../src/components/UpdateNotification.tsx | 2 +- .../src/components/accounts/Balance.jsx | 2 +- .../src/components/accounts/Header.jsx | 4 +- .../accounts/MobileAccountDetails.jsx | 2 +- .../src/components/budget/MobileBudget.jsx | 2 +- .../src/components/budget/SidebarCategory.tsx | 2 +- .../src/components/budget/SidebarGroup.tsx | 2 +- .../report/budgetsummary/BudgetSummary.tsx | 2 +- .../budget/report/budgetsummary/Saved.tsx | 2 +- .../rollover/budgetsummary/BudgetSummary.tsx | 2 +- .../rollover/budgetsummary/ToBudget.tsx | 2 +- .../src/components/common/Modal.tsx | 2 +- .../src/components/manager/BudgetList.jsx | 2 +- .../src/components/manager/ManagementApp.jsx | 6 +-- .../components/modals/CategoryGroupMenu.tsx | 2 +- .../src/components/modals/CategoryMenu.tsx | 2 +- .../components/modals/ManageRulesModal.tsx | 2 +- .../src/components/modals/Notes.tsx | 2 +- .../src/components/reports/ReportSummary.tsx | 2 +- .../components/reports/graphs/AreaGraph.tsx | 2 +- .../components/reports/graphs/BarGraph.tsx | 2 +- .../reports/graphs/BarLineGraph.tsx | 2 +- .../components/reports/graphs/LineGraph.tsx | 2 +- .../reports/graphs/StackedBarGraph.tsx | 2 +- .../components/reports/reports/CashFlow.tsx | 2 +- .../reports/reports/CashFlowCard.jsx | 2 +- .../reports/reports/CustomReport.jsx | 2 +- .../components/reports/reports/NetWorth.jsx | 2 +- .../reports/reports/NetWorthCard.jsx | 2 +- .../components/schedules/SchedulesTable.tsx | 2 +- .../src/components/settings/Format.tsx | 2 +- .../src/components/settings/UI.tsx | 2 +- .../src/components/settings/index.tsx | 2 +- .../src/components/spreadsheet/CellValue.tsx | 11 ++--- .../desktop-client/src/components/table.tsx | 11 +++-- .../transactions/MobileTransaction.jsx | 2 +- packages/desktop-client/src/index.tsx | 2 +- packages/desktop-client/src/polyfills.ts | 2 +- packages/desktop-client/src/setupTests.js | 2 +- packages/desktop-client/src/style/styles.ts | 2 +- packages/desktop-client/src/tokens.ts | 4 +- upcoming-release-notes/2115.md | 6 +++ 68 files changed, 161 insertions(+), 110 deletions(-) create mode 100644 upcoming-release-notes/2115.md diff --git a/.eslintrc.js b/.eslintrc.js index 0c2caca16c2..c89dc2f4f65 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -165,6 +165,7 @@ module.exports = { 'prefer-const': 'warn', 'prefer-spread': 'off', '@typescript-eslint/no-empty-function': 'off', + 'import/no-default-export': 'off', }, overrides: [ { @@ -238,6 +239,53 @@ module.exports = { 'no-restricted-imports': ['off', { patterns: restrictedImportColors }], }, }, + { + files: [ + './packages/api/*', + './packages/api/app/**/*', + './packages/crdt/**/*', + './packages/desktop-client/src/*', + './packages/desktop-client/src/components/*', + // './packages/desktop-client/src/components/accounts/**/*', + // './packages/desktop-client/src/components/autocomplete/**/*', + // './packages/desktop-client/src/components/budget/**/*', + // './packages/desktop-client/src/components/common/**/*', + // './packages/desktop-client/src/components/filters/**/*', + // './packages/desktop-client/src/components/gocardless/**/*', + // './packages/desktop-client/src/components/manager/**/*', + // './packages/desktop-client/src/components/mobile/**/*', + // './packages/desktop-client/src/components/modals/**/*', + // './packages/desktop-client/src/components/payees/**/*', + // './packages/desktop-client/src/components/reports/**/*', + // './packages/desktop-client/src/components/responsive/**/*', + // './packages/desktop-client/src/components/rules/**/*', + // './packages/desktop-client/src/components/schedules/**/*', + // './packages/desktop-client/src/components/select/**/*', + // './packages/desktop-client/src/components/settings/**/*', + // './packages/desktop-client/src/components/sidebar/**/*', + // './packages/desktop-client/src/components/spreadsheet/**/*', + // './packages/desktop-client/src/components/transactions/**/*', + // './packages/desktop-client/src/components/util/**/*', + // './packages/desktop-client/src/hooks/**/*', + // './packages/desktop-client/src/icons/**/*', + // './packages/desktop-client/src/style/**/*', + // './packages/desktop-client/src/types/**/*', + // './packages/desktop-client/src/util/**/*', + // './packages/desktop-electron/**/*', + // './packages/eslint-plugin-actual/**/*', + // './packages/loot-core/*', + // './packages/loot-core/src/client/**/*', + // './packages/loot-core/src/mocks/**/*', + // './packages/loot-core/src/platform/**/*', + // './packages/loot-core/src/server/**/*', + // './packages/loot-core/src/shared/**/*', + // './packages/loot-core/src/types/**/*', + // './packages/loot-core/webpack/**/*', + ], + rules: { + 'import/no-default-export': 'warn', + }, + }, ], settings: { 'import/resolver': { diff --git a/packages/api/app/query.js b/packages/api/app/query.js index dddb807de3e..f9f8079951e 100644 --- a/packages/api/app/query.js +++ b/packages/api/app/query.js @@ -99,6 +99,6 @@ class Query { } } -export default function q(table) { +export function q(table) { return new Query({ table }); } diff --git a/packages/api/methods.js b/packages/api/methods.js index 7d6ef8a29f2..9af541f2670 100644 --- a/packages/api/methods.js +++ b/packages/api/methods.js @@ -1,6 +1,6 @@ import * as injected from './injected'; -export { default as q } from './app/query'; +export { q } from './app/query'; function send(name, args) { return injected.send(name, args); diff --git a/packages/desktop-client/src/components/AnimatedRefresh.tsx b/packages/desktop-client/src/components/AnimatedRefresh.tsx index c6e613c956e..1f6ba9e7367 100644 --- a/packages/desktop-client/src/components/AnimatedRefresh.tsx +++ b/packages/desktop-client/src/components/AnimatedRefresh.tsx @@ -19,7 +19,7 @@ type AnimatedRefreshProps = { height?: number; }; -export default function AnimatedRefresh({ +export function AnimatedRefresh({ animating, iconStyle, width, diff --git a/packages/desktop-client/src/components/App.tsx b/packages/desktop-client/src/components/App.tsx index bf5334c42d7..9bae285f7df 100644 --- a/packages/desktop-client/src/components/App.tsx +++ b/packages/desktop-client/src/components/App.tsx @@ -14,20 +14,20 @@ import { import { type GlobalPrefs } from 'loot-core/src/types/prefs'; import { useActions } from '../hooks/useActions'; -import installPolyfills from '../polyfills'; +import { installPolyfills } from '../polyfills'; import { ResponsiveProvider } from '../ResponsiveProvider'; import { styles, hasHiddenScrollbars, ThemeStyle } from '../style'; -import AppBackground from './AppBackground'; +import { AppBackground } from './AppBackground'; import View from './common/View'; -import DevelopmentTopBar from './DevelopmentTopBar'; -import FatalError from './FatalError'; -import FinancesApp from './FinancesApp'; +import { DevelopmentTopBar } from './DevelopmentTopBar'; +import { FatalError } from './FatalError'; +import { FinancesApp } from './FinancesApp'; import ManagementApp from './manager/ManagementApp'; -import MobileWebMessage from './MobileWebMessage'; -import UpdateNotification from './UpdateNotification'; +import { MobileWebMessage } from './MobileWebMessage'; +import { UpdateNotification } from './UpdateNotification'; -type AppProps = { +type AppInnerProps = { budgetId: string; cloudFileId: string; loadingText: string; @@ -40,14 +40,14 @@ type AppProps = { loadGlobalPrefs: () => Promise; }; -function App({ +function AppInner({ budgetId, cloudFileId, loadingText, loadBudget, closeBudget, loadGlobalPrefs, -}: AppProps) { +}: AppInnerProps) { const [initializing, setInitializing] = useState(true); const { showBoundary: showErrorBoundary } = useErrorBoundary(); @@ -121,7 +121,7 @@ function ErrorFallback({ error }: FallbackProps) { ); } -function AppWrapper() { +export function App() { const budgetId = useSelector( state => state.prefs.local && state.prefs.local.id, ); @@ -178,7 +178,7 @@ function AppWrapper() { {process.env.REACT_APP_REVIEW_ID && !Platform.isPlaywright && ( )} - ); } - -export default AppWrapper; diff --git a/packages/desktop-client/src/components/AppBackground.tsx b/packages/desktop-client/src/components/AppBackground.tsx index b23e84af6ab..258ded5153a 100644 --- a/packages/desktop-client/src/components/AppBackground.tsx +++ b/packages/desktop-client/src/components/AppBackground.tsx @@ -5,7 +5,7 @@ import { css } from 'glamor'; import AnimatedLoading from '../icons/AnimatedLoading'; import { theme } from '../style'; -import Background from './Background'; +import { Background } from './Background'; import Block from './common/Block'; import View from './common/View'; @@ -14,7 +14,10 @@ type AppBackgroundProps = { loadingText?: string; }; -function AppBackground({ initializing, loadingText }: AppBackgroundProps) { +export function AppBackground({ + initializing, + loadingText, +}: AppBackgroundProps) { return ( <> @@ -41,5 +44,3 @@ function AppBackground({ initializing, loadingText }: AppBackgroundProps) { ); } - -export default AppBackground; diff --git a/packages/desktop-client/src/components/Background.tsx b/packages/desktop-client/src/components/Background.tsx index 3f2c687b50b..3aa8f367b33 100644 --- a/packages/desktop-client/src/components/Background.tsx +++ b/packages/desktop-client/src/components/Background.tsx @@ -4,7 +4,7 @@ import { theme } from '../style'; import { LoadComponent } from './util/LoadComponent'; -export default function Background() { +export function Background() { return (
state.account.accountsSyncing); const name = accountsSyncing diff --git a/packages/desktop-client/src/components/DevelopmentTopBar.tsx b/packages/desktop-client/src/components/DevelopmentTopBar.tsx index a98533e64c1..f163863fa73 100644 --- a/packages/desktop-client/src/components/DevelopmentTopBar.tsx +++ b/packages/desktop-client/src/components/DevelopmentTopBar.tsx @@ -3,7 +3,7 @@ import { theme } from '../style'; import ExternalLink from './common/ExternalLink'; import View from './common/View'; -export default function DevelopmentTopBar() { +export function DevelopmentTopBar() { return ( ); } - -export default FatalError; diff --git a/packages/desktop-client/src/components/FinancesApp.tsx b/packages/desktop-client/src/components/FinancesApp.tsx index 1d79cce61a5..c14a616368a 100644 --- a/packages/desktop-client/src/components/FinancesApp.tsx +++ b/packages/desktop-client/src/components/FinancesApp.tsx @@ -25,21 +25,21 @@ import { theme } from '../style'; import { ExposeNavigate } from '../util/router-tools'; import { getIsOutdated, getLatestVersion } from '../util/versions'; -import BankSyncStatus from './BankSyncStatus'; +import { BankSyncStatus } from './BankSyncStatus'; import { BudgetMonthCountProvider } from './budget/BudgetMonthCountContext'; import View from './common/View'; -import GlobalKeys from './GlobalKeys'; +import { GlobalKeys } from './GlobalKeys'; import { ManageRulesPage } from './ManageRulesPage'; import MobileNavTabs from './mobile/MobileNavTabs'; -import Modals from './Modals'; -import Notifications from './Notifications'; +import { Modals } from './Modals'; +import { Notifications } from './Notifications'; import { ManagePayeesPage } from './payees/ManagePayeesPage'; import Reports from './reports'; import { NarrowAlternate, WideComponent } from './responsive'; -import ScrollProvider from './ScrollProvider'; +import { ScrollProvider } from './ScrollProvider'; import Settings from './settings'; import FloatableSidebar, { SidebarProvider } from './sidebar'; -import Titlebar, { TitlebarProvider } from './Titlebar'; +import { Titlebar, TitlebarProvider } from './Titlebar'; import { TransactionEdit } from './transactions/MobileTransaction'; function NarrowNotSupported({ @@ -92,7 +92,7 @@ function RouterBehaviors({ getAccounts }) { return null; } -function FinancesApp() { +function FinancesAppWithoutContext() { const actions = useActions(); useEffect(() => { // The default key handler scope @@ -256,8 +256,8 @@ function FinancesApp() { ); } -export default function FinancesAppWithContext() { - const app = useMemo(() => , []); +export function FinancesApp() { + const app = useMemo(() => , []); return ( diff --git a/packages/desktop-client/src/components/FixedSizeList.tsx b/packages/desktop-client/src/components/FixedSizeList.tsx index f94bc890db0..d7dd84d8e22 100644 --- a/packages/desktop-client/src/components/FixedSizeList.tsx +++ b/packages/desktop-client/src/components/FixedSizeList.tsx @@ -73,7 +73,7 @@ type FixedSizeListState = { scrollUpdateWasRequested: boolean; }; -export default class FixedSizeList extends PureComponent< +export class FixedSizeList extends PureComponent< FixedSizeListProps, FixedSizeListState > { diff --git a/packages/desktop-client/src/components/GlobalKeys.ts b/packages/desktop-client/src/components/GlobalKeys.ts index edcfe148aab..11b72693a7e 100644 --- a/packages/desktop-client/src/components/GlobalKeys.ts +++ b/packages/desktop-client/src/components/GlobalKeys.ts @@ -4,7 +4,7 @@ import * as Platform from 'loot-core/src/client/platform'; import useNavigate from '../hooks/useNavigate'; -export default function GlobalKeys() { +export function GlobalKeys() { const navigate = useNavigate(); useEffect(() => { const handleKeys = e => { diff --git a/packages/desktop-client/src/components/LoggedInUser.tsx b/packages/desktop-client/src/components/LoggedInUser.tsx index 91418dc0719..02db70b5d38 100644 --- a/packages/desktop-client/src/components/LoggedInUser.tsx +++ b/packages/desktop-client/src/components/LoggedInUser.tsx @@ -16,7 +16,7 @@ type LoggedInUserProps = { style?: CSSProperties; color?: string; }; -export default function LoggedInUser({ +export function LoggedInUser({ hideIfNoServer, style, color, diff --git a/packages/desktop-client/src/components/ManageRules.tsx b/packages/desktop-client/src/components/ManageRules.tsx index e9fe97548d6..5d921053e3c 100644 --- a/packages/desktop-client/src/components/ManageRules.tsx +++ b/packages/desktop-client/src/components/ManageRules.tsx @@ -327,7 +327,7 @@ type ManageRulesProps = { setLoading?: Dispatch>; }; -export default function ManageRules({ +export function ManageRules({ isModal, payeeId, setLoading = () => {}, diff --git a/packages/desktop-client/src/components/ManageRulesPage.tsx b/packages/desktop-client/src/components/ManageRulesPage.tsx index e64f57e8788..ad57e2bd2d9 100644 --- a/packages/desktop-client/src/components/ManageRulesPage.tsx +++ b/packages/desktop-client/src/components/ManageRulesPage.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import ManageRules from './ManageRules'; +import { ManageRules } from './ManageRules'; import { Page } from './Page'; export function ManageRulesPage() { diff --git a/packages/desktop-client/src/components/MobileBackButton.tsx b/packages/desktop-client/src/components/MobileBackButton.tsx index 6ea749fdbbd..061e8f03dfa 100644 --- a/packages/desktop-client/src/components/MobileBackButton.tsx +++ b/packages/desktop-client/src/components/MobileBackButton.tsx @@ -11,7 +11,7 @@ type MobileBackButtonProps = { style?: CSSProperties; }; -export default function MobileBackButton({ style }: MobileBackButtonProps) { +export function MobileBackButton({ style }: MobileBackButtonProps) { const navigate = useNavigate(); return ( ); }); - -export default Button; diff --git a/packages/desktop-client/src/components/common/ButtonLink.tsx b/packages/desktop-client/src/components/common/ButtonLink.tsx index 1ab6215b61d..ad953ecb611 100644 --- a/packages/desktop-client/src/components/common/ButtonLink.tsx +++ b/packages/desktop-client/src/components/common/ButtonLink.tsx @@ -4,7 +4,7 @@ import { useMatch } from 'react-router-dom'; import useNavigate from '../../hooks/useNavigate'; import { type CSSProperties } from '../../style'; -import Button from './Button'; +import { Button } from './Button'; type ButtonLinkProps = ComponentProps & { to: string; diff --git a/packages/desktop-client/src/components/common/Link.tsx b/packages/desktop-client/src/components/common/Link.tsx index 17b146cf349..ce847a48f38 100644 --- a/packages/desktop-client/src/components/common/Link.tsx +++ b/packages/desktop-client/src/components/common/Link.tsx @@ -6,7 +6,7 @@ import { css } from 'glamor'; import useNavigate from '../../hooks/useNavigate'; import { type CSSProperties, styles } from '../../style'; -import Button from './Button'; +import { Button } from './Button'; type ButtonLinkProps = ComponentProps & { to: string; diff --git a/packages/desktop-client/src/components/common/MenuButton.tsx b/packages/desktop-client/src/components/common/MenuButton.tsx index 66d4b58ec23..52f96f5787f 100644 --- a/packages/desktop-client/src/components/common/MenuButton.tsx +++ b/packages/desktop-client/src/components/common/MenuButton.tsx @@ -2,7 +2,7 @@ import React from 'react'; import DotsHorizontalTriple from '../../icons/v1/DotsHorizontalTriple'; -import Button from './Button'; +import { Button } from './Button'; export default function MenuButton({ onClick }) { return ( diff --git a/packages/desktop-client/src/components/common/Modal.tsx b/packages/desktop-client/src/components/common/Modal.tsx index a79e1bc4706..cf4a96f33a6 100644 --- a/packages/desktop-client/src/components/common/Modal.tsx +++ b/packages/desktop-client/src/components/common/Modal.tsx @@ -14,7 +14,7 @@ import Delete from '../../icons/v0/Delete'; import { type CSSProperties, styles, theme } from '../../style'; import { tokens } from '../../tokens'; -import Button from './Button'; +import { Button } from './Button'; import Input from './Input'; import Text from './Text'; import View from './View'; diff --git a/packages/desktop-client/src/components/common/Search.tsx b/packages/desktop-client/src/components/common/Search.tsx index 9281d75d57d..644be48f169 100644 --- a/packages/desktop-client/src/components/common/Search.tsx +++ b/packages/desktop-client/src/components/common/Search.tsx @@ -4,7 +4,7 @@ import SvgRemove from '../../icons/v2/Remove'; import SearchAlternate from '../../icons/v2/SearchAlternate'; import { theme } from '../../style'; -import Button from './Button'; +import { Button } from './Button'; import InputWithContent from './InputWithContent'; type SearchProps = { diff --git a/packages/desktop-client/src/components/filters/CompactFiltersButton.tsx b/packages/desktop-client/src/components/filters/CompactFiltersButton.tsx index 28f73ef9a1b..98661197bb7 100644 --- a/packages/desktop-client/src/components/filters/CompactFiltersButton.tsx +++ b/packages/desktop-client/src/components/filters/CompactFiltersButton.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Filter } from '../../icons/v1'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; type CompactFiltersButtonProps = { onClick: (newValue) => void; diff --git a/packages/desktop-client/src/components/filters/FiltersButton.tsx b/packages/desktop-client/src/components/filters/FiltersButton.tsx index 7aff00b7ad3..c368cc81d61 100644 --- a/packages/desktop-client/src/components/filters/FiltersButton.tsx +++ b/packages/desktop-client/src/components/filters/FiltersButton.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { SettingsSliderAlternate } from '../../icons/v2'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; type FiltersButtonProps = { onClick: (newValue) => void; diff --git a/packages/desktop-client/src/components/filters/FiltersMenu.jsx b/packages/desktop-client/src/components/filters/FiltersMenu.jsx index e9382c1726a..95154f17003 100644 --- a/packages/desktop-client/src/components/filters/FiltersMenu.jsx +++ b/packages/desktop-client/src/components/filters/FiltersMenu.jsx @@ -25,7 +25,7 @@ import { titleFirst, integerToCurrency } from 'loot-core/src/shared/util'; import DeleteIcon from '../../icons/v0/Delete'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import HoverTarget from '../common/HoverTarget'; import Menu from '../common/Menu'; import Select from '../common/Select'; diff --git a/packages/desktop-client/src/components/filters/SavedFilters.jsx b/packages/desktop-client/src/components/filters/SavedFilters.jsx index fce9af440cd..4cb2183f2e5 100644 --- a/packages/desktop-client/src/components/filters/SavedFilters.jsx +++ b/packages/desktop-client/src/components/filters/SavedFilters.jsx @@ -4,7 +4,7 @@ import { send, sendCatch } from 'loot-core/src/platform/client/fetch'; import ExpandArrow from '../../icons/v0/ExpandArrow'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Menu from '../common/Menu'; import MenuTooltip from '../common/MenuTooltip'; import Stack from '../common/Stack'; diff --git a/packages/desktop-client/src/components/manager/BudgetList.jsx b/packages/desktop-client/src/components/manager/BudgetList.jsx index c42105615e6..42de48e86b5 100644 --- a/packages/desktop-client/src/components/manager/BudgetList.jsx +++ b/packages/desktop-client/src/components/manager/BudgetList.jsx @@ -15,7 +15,7 @@ import Key from '../../icons/v2/Key'; import RefreshArrow from '../../icons/v2/RefreshArrow'; import { styles, theme } from '../../style'; import { tokens } from '../../tokens'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Menu from '../common/Menu'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/manager/ConfigServer.tsx b/packages/desktop-client/src/components/manager/ConfigServer.tsx index 20cf42356f7..8c4b34a7646 100644 --- a/packages/desktop-client/src/components/manager/ConfigServer.tsx +++ b/packages/desktop-client/src/components/manager/ConfigServer.tsx @@ -9,7 +9,7 @@ import { useActions } from '../../hooks/useActions'; import useNavigate from '../../hooks/useNavigate'; import { useSetThemeColor } from '../../hooks/useSetThemeColor'; import { theme } from '../../style'; -import Button, { ButtonWithLoading } from '../common/Button'; +import { Button, ButtonWithLoading } from '../common/Button'; import { BigInput } from '../common/Input'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/manager/Import.tsx b/packages/desktop-client/src/components/manager/Import.tsx index 823a565cdf0..a2022e8ba9a 100644 --- a/packages/desktop-client/src/components/manager/Import.tsx +++ b/packages/desktop-client/src/components/manager/Import.tsx @@ -4,7 +4,7 @@ import { type BoundActions } from '../../hooks/useActions'; import { styles, theme } from '../../style'; import { type CommonModalProps } from '../../types/modals'; import Block from '../common/Block'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal from '../common/Modal'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/manager/WelcomeScreen.tsx b/packages/desktop-client/src/components/manager/WelcomeScreen.tsx index 89f45cf1074..32761410859 100644 --- a/packages/desktop-client/src/components/manager/WelcomeScreen.tsx +++ b/packages/desktop-client/src/components/manager/WelcomeScreen.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useActions } from '../../hooks/useActions'; import { styles, theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import ExternalLink from '../common/ExternalLink'; import Paragraph from '../common/Paragraph'; import Text from '../common/Text'; diff --git a/packages/desktop-client/src/components/manager/subscribe/Bootstrap.tsx b/packages/desktop-client/src/components/manager/subscribe/Bootstrap.tsx index 479833542a3..7d5c62e8288 100644 --- a/packages/desktop-client/src/components/manager/subscribe/Bootstrap.tsx +++ b/packages/desktop-client/src/components/manager/subscribe/Bootstrap.tsx @@ -6,7 +6,7 @@ import { loggedIn } from 'loot-core/src/client/actions/user'; import { send } from 'loot-core/src/platform/client/fetch'; import { theme } from '../../../style'; -import Button from '../../common/Button'; +import { Button } from '../../common/Button'; import ExternalLink from '../../common/ExternalLink'; import Paragraph from '../../common/Paragraph'; import Text from '../../common/Text'; diff --git a/packages/desktop-client/src/components/manager/subscribe/ChangePassword.tsx b/packages/desktop-client/src/components/manager/subscribe/ChangePassword.tsx index 3988553ad6c..06b0594e606 100644 --- a/packages/desktop-client/src/components/manager/subscribe/ChangePassword.tsx +++ b/packages/desktop-client/src/components/manager/subscribe/ChangePassword.tsx @@ -4,7 +4,7 @@ import { send } from 'loot-core/src/platform/client/fetch'; import useNavigate from '../../../hooks/useNavigate'; import { theme } from '../../../style'; -import Button from '../../common/Button'; +import { Button } from '../../common/Button'; import Text from '../../common/Text'; import View from '../../common/View'; diff --git a/packages/desktop-client/src/components/manager/subscribe/Error.tsx b/packages/desktop-client/src/components/manager/subscribe/Error.tsx index a26ff87c66b..242f6f53239 100644 --- a/packages/desktop-client/src/components/manager/subscribe/Error.tsx +++ b/packages/desktop-client/src/components/manager/subscribe/Error.tsx @@ -3,7 +3,7 @@ import { useLocation } from 'react-router-dom'; import useNavigate from '../../../hooks/useNavigate'; import { theme } from '../../../style'; -import Button from '../../common/Button'; +import { Button } from '../../common/Button'; import Text from '../../common/Text'; import View from '../../common/View'; diff --git a/packages/desktop-client/src/components/manager/subscribe/Login.tsx b/packages/desktop-client/src/components/manager/subscribe/Login.tsx index 3ed5cef99a5..32cd1732ff7 100644 --- a/packages/desktop-client/src/components/manager/subscribe/Login.tsx +++ b/packages/desktop-client/src/components/manager/subscribe/Login.tsx @@ -6,7 +6,7 @@ import { loggedIn } from 'loot-core/src/client/actions/user'; import { send } from 'loot-core/src/platform/client/fetch'; import { theme } from '../../../style'; -import Button, { ButtonWithLoading } from '../../common/Button'; +import { Button, ButtonWithLoading } from '../../common/Button'; import { BigInput } from '../../common/Input'; import Text from '../../common/Text'; import View from '../../common/View'; diff --git a/packages/desktop-client/src/components/mobile/MobileAmountInput.jsx b/packages/desktop-client/src/components/mobile/MobileAmountInput.jsx index 0e89d2e98e0..c6275cb627f 100644 --- a/packages/desktop-client/src/components/mobile/MobileAmountInput.jsx +++ b/packages/desktop-client/src/components/mobile/MobileAmountInput.jsx @@ -8,7 +8,7 @@ import { import { useMergedRefs } from '../../hooks/useMergedRefs'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/mobile/MobileForms.jsx b/packages/desktop-client/src/components/mobile/MobileForms.jsx index 4a7334fbd84..8ebfda0a37f 100644 --- a/packages/desktop-client/src/components/mobile/MobileForms.jsx +++ b/packages/desktop-client/src/components/mobile/MobileForms.jsx @@ -3,7 +3,7 @@ import { forwardRef } from 'react'; import { css } from 'glamor'; import { theme, styles } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Input from '../common/Input'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/modals/CategoryGroupMenu.tsx b/packages/desktop-client/src/components/modals/CategoryGroupMenu.tsx index e1d1d1c733b..1b753fec6aa 100644 --- a/packages/desktop-client/src/components/modals/CategoryGroupMenu.tsx +++ b/packages/desktop-client/src/components/modals/CategoryGroupMenu.tsx @@ -13,7 +13,7 @@ import ViewHide from '../../icons/v2/ViewHide'; import ViewShow from '../../icons/v2/ViewShow'; import { type CSSProperties, styles, theme } from '../../style'; import { type CommonModalProps } from '../../types/modals'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Menu from '../common/Menu'; import Modal from '../common/Modal'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/modals/CategoryMenu.tsx b/packages/desktop-client/src/components/modals/CategoryMenu.tsx index 58962df061a..84952aa9eb4 100644 --- a/packages/desktop-client/src/components/modals/CategoryMenu.tsx +++ b/packages/desktop-client/src/components/modals/CategoryMenu.tsx @@ -12,7 +12,7 @@ import ViewHide from '../../icons/v2/ViewHide'; import ViewShow from '../../icons/v2/ViewShow'; import { type CSSProperties, styles, theme } from '../../style'; import { type CommonModalProps } from '../../types/modals'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Menu from '../common/Menu'; import Modal from '../common/Modal'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/modals/CloseAccount.tsx b/packages/desktop-client/src/components/modals/CloseAccount.tsx index 2b58b0852d3..582ce0fe986 100644 --- a/packages/desktop-client/src/components/modals/CloseAccount.tsx +++ b/packages/desktop-client/src/components/modals/CloseAccount.tsx @@ -11,7 +11,7 @@ import { theme } from '../../style'; import { type CommonModalProps } from '../../types/modals'; import AccountAutocomplete from '../autocomplete/AccountAutocomplete'; import CategoryAutocomplete from '../autocomplete/CategoryAutocomplete'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import FormError from '../common/FormError'; import LinkButton from '../common/LinkButton'; import Modal from '../common/Modal'; diff --git a/packages/desktop-client/src/components/modals/ConfirmCategoryDelete.tsx b/packages/desktop-client/src/components/modals/ConfirmCategoryDelete.tsx index 6b8c9bde2c5..f86c7b66a44 100644 --- a/packages/desktop-client/src/components/modals/ConfirmCategoryDelete.tsx +++ b/packages/desktop-client/src/components/modals/ConfirmCategoryDelete.tsx @@ -6,7 +6,7 @@ import { theme } from '../../style'; import { type CommonModalProps } from '../../types/modals'; import CategoryAutocomplete from '../autocomplete/CategoryAutocomplete'; import Block from '../common/Block'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal from '../common/Modal'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/modals/ConfirmTransactionEdit.tsx b/packages/desktop-client/src/components/modals/ConfirmTransactionEdit.tsx index a15de63e2ad..096768a7270 100644 --- a/packages/desktop-client/src/components/modals/ConfirmTransactionEdit.tsx +++ b/packages/desktop-client/src/components/modals/ConfirmTransactionEdit.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { type CommonModalProps } from '../../types/modals'; import Block from '../common/Block'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal from '../common/Modal'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/modals/CreateAccount.tsx b/packages/desktop-client/src/components/modals/CreateAccount.tsx index dde2f32c854..a7ff9a680bf 100644 --- a/packages/desktop-client/src/components/modals/CreateAccount.tsx +++ b/packages/desktop-client/src/components/modals/CreateAccount.tsx @@ -6,7 +6,7 @@ import useGoCardlessStatus from '../../hooks/useGoCardlessStatus'; import { type SyncServerStatus } from '../../hooks/useSyncServerStatus'; import { theme } from '../../style'; import { type CommonModalProps } from '../../types/modals'; -import Button, { ButtonWithLoading } from '../common/Button'; +import { Button, ButtonWithLoading } from '../common/Button'; import ExternalLink from '../common/ExternalLink'; import Modal from '../common/Modal'; import Paragraph from '../common/Paragraph'; diff --git a/packages/desktop-client/src/components/modals/CreateLocalAccount.tsx b/packages/desktop-client/src/components/modals/CreateLocalAccount.tsx index 5f5cc59e6ff..df1a5594785 100644 --- a/packages/desktop-client/src/components/modals/CreateLocalAccount.tsx +++ b/packages/desktop-client/src/components/modals/CreateLocalAccount.tsx @@ -6,7 +6,7 @@ import { type BoundActions } from '../../hooks/useActions'; import useNavigate from '../../hooks/useNavigate'; import { theme } from '../../style'; import { type CommonModalProps } from '../../types/modals'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import ExternalLink from '../common/ExternalLink'; import FormError from '../common/FormError'; import InitialFocus from '../common/InitialFocus'; diff --git a/packages/desktop-client/src/components/modals/EditRule.jsx b/packages/desktop-client/src/components/modals/EditRule.jsx index ee0707bad80..65e9404b2a1 100644 --- a/packages/desktop-client/src/components/modals/EditRule.jsx +++ b/packages/desktop-client/src/components/modals/EditRule.jsx @@ -30,7 +30,7 @@ import AddIcon from '../../icons/v0/Add'; import SubtractIcon from '../../icons/v0/Subtract'; import InformationOutline from '../../icons/v1/InformationOutline'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal from '../common/Modal'; import Select from '../common/Select'; import Stack from '../common/Stack'; diff --git a/packages/desktop-client/src/components/modals/FixEncryptionKey.tsx b/packages/desktop-client/src/components/modals/FixEncryptionKey.tsx index c7e0d96365a..a5335a52b65 100644 --- a/packages/desktop-client/src/components/modals/FixEncryptionKey.tsx +++ b/packages/desktop-client/src/components/modals/FixEncryptionKey.tsx @@ -7,7 +7,7 @@ import { getTestKeyError } from 'loot-core/src/shared/errors'; import { type BoundActions } from '../../hooks/useActions'; import { theme } from '../../style'; import { type CommonModalProps } from '../../types/modals'; -import Button, { ButtonWithLoading } from '../common/Button'; +import { Button, ButtonWithLoading } from '../common/Button'; import ExternalLink from '../common/ExternalLink'; import InitialFocus from '../common/InitialFocus'; import Input from '../common/Input'; diff --git a/packages/desktop-client/src/components/modals/GoCardlessExternalMsg.tsx b/packages/desktop-client/src/components/modals/GoCardlessExternalMsg.tsx index ccdcad5a0a5..0ea0c279d71 100644 --- a/packages/desktop-client/src/components/modals/GoCardlessExternalMsg.tsx +++ b/packages/desktop-client/src/components/modals/GoCardlessExternalMsg.tsx @@ -15,7 +15,7 @@ import { theme } from '../../style'; import { type CommonModalProps } from '../../types/modals'; import { Error, Warning } from '../alerts'; import Autocomplete from '../autocomplete/Autocomplete'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import ExternalLink from '../common/ExternalLink'; import LinkButton from '../common/LinkButton'; import Menu from '../common/Menu'; diff --git a/packages/desktop-client/src/components/modals/ImportTransactions.jsx b/packages/desktop-client/src/components/modals/ImportTransactions.jsx index b66597e1125..072f58a3d9d 100644 --- a/packages/desktop-client/src/components/modals/ImportTransactions.jsx +++ b/packages/desktop-client/src/components/modals/ImportTransactions.jsx @@ -13,7 +13,7 @@ import { import { useActions } from '../../hooks/useActions'; import useFeatureFlag from '../../hooks/useFeatureFlag'; import { theme, styles } from '../../style'; -import Button, { ButtonWithLoading } from '../common/Button'; +import { Button, ButtonWithLoading } from '../common/Button'; import Input from '../common/Input'; import Modal from '../common/Modal'; import Select from '../common/Select'; diff --git a/packages/desktop-client/src/components/modals/LoadBackup.jsx b/packages/desktop-client/src/components/modals/LoadBackup.jsx index 64786e72407..1685baad181 100644 --- a/packages/desktop-client/src/components/modals/LoadBackup.jsx +++ b/packages/desktop-client/src/components/modals/LoadBackup.jsx @@ -4,7 +4,7 @@ import { send, listen, unlisten } from 'loot-core/src/platform/client/fetch'; import { theme } from '../../style'; import Block from '../common/Block'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal from '../common/Modal'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/modals/MergeUnusedPayees.jsx b/packages/desktop-client/src/components/modals/MergeUnusedPayees.jsx index d857cdd6a90..dcada00ae9b 100644 --- a/packages/desktop-client/src/components/modals/MergeUnusedPayees.jsx +++ b/packages/desktop-client/src/components/modals/MergeUnusedPayees.jsx @@ -6,7 +6,7 @@ import { send } from 'loot-core/src/platform/client/fetch'; import { theme } from '../../style'; import { Information } from '../alerts'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal, { ModalButtons } from '../common/Modal'; import Paragraph from '../common/Paragraph'; import Text from '../common/Text'; diff --git a/packages/desktop-client/src/components/modals/Notes.tsx b/packages/desktop-client/src/components/modals/Notes.tsx index 8d6e27abad9..79fb3149498 100644 --- a/packages/desktop-client/src/components/modals/Notes.tsx +++ b/packages/desktop-client/src/components/modals/Notes.tsx @@ -5,7 +5,7 @@ import q from 'loot-core/src/shared/query'; import Check from '../../icons/v2/Check'; import { type CommonModalProps } from '../../types/modals'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal from '../common/Modal'; import View from '../common/View'; import { Notes as NotesComponent } from '../Notes'; diff --git a/packages/desktop-client/src/components/modals/PlaidExternalMsg.tsx b/packages/desktop-client/src/components/modals/PlaidExternalMsg.tsx index e9146a7e039..07afe4f3e85 100644 --- a/packages/desktop-client/src/components/modals/PlaidExternalMsg.tsx +++ b/packages/desktop-client/src/components/modals/PlaidExternalMsg.tsx @@ -4,7 +4,7 @@ import AnimatedLoading from '../../icons/AnimatedLoading'; import { theme } from '../../style'; import { type CommonModalProps } from '../../types/modals'; import { Error } from '../alerts'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal, { ModalButtons } from '../common/Modal'; import Paragraph from '../common/Paragraph'; import Text from '../common/Text'; diff --git a/packages/desktop-client/src/components/modals/SelectLinkedAccounts.jsx b/packages/desktop-client/src/components/modals/SelectLinkedAccounts.jsx index 132f346688c..3f78b65c874 100644 --- a/packages/desktop-client/src/components/modals/SelectLinkedAccounts.jsx +++ b/packages/desktop-client/src/components/modals/SelectLinkedAccounts.jsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { theme } from '../../style'; import Autocomplete from '../autocomplete/Autocomplete'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal from '../common/Modal'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/modals/SingleInput.tsx b/packages/desktop-client/src/components/modals/SingleInput.tsx index db2ed81a088..a4046910ada 100644 --- a/packages/desktop-client/src/components/modals/SingleInput.tsx +++ b/packages/desktop-client/src/components/modals/SingleInput.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { styles } from '../../style'; import { type CommonModalProps } from '../../types/modals'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import FormError from '../common/FormError'; import InitialFocus from '../common/InitialFocus'; import Input from '../common/Input'; diff --git a/packages/desktop-client/src/components/modals/SwitchBudgetType.tsx b/packages/desktop-client/src/components/modals/SwitchBudgetType.tsx index 814d8c75573..801127f78a8 100644 --- a/packages/desktop-client/src/components/modals/SwitchBudgetType.tsx +++ b/packages/desktop-client/src/components/modals/SwitchBudgetType.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useSelector } from 'react-redux'; import { type CommonModalProps } from '../../types/modals'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import ExternalLink from '../common/ExternalLink'; import Modal from '../common/Modal'; import Paragraph from '../common/Paragraph'; diff --git a/packages/desktop-client/src/components/payees/ManagePayees.jsx b/packages/desktop-client/src/components/payees/ManagePayees.jsx index 3e60c6a7508..a95724fc61e 100644 --- a/packages/desktop-client/src/components/payees/ManagePayees.jsx +++ b/packages/desktop-client/src/components/payees/ManagePayees.jsx @@ -21,7 +21,7 @@ import useSelected, { import useStableCallback from '../../hooks/useStableCallback'; import ExpandArrow from '../../icons/v0/ExpandArrow'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Search from '../common/Search'; import View from '../common/View'; import { TableHeader, Cell, SelectCell, useTableNavigator } from '../table'; diff --git a/packages/desktop-client/src/components/reports/CategorySelector.tsx b/packages/desktop-client/src/components/reports/CategorySelector.tsx index d83825eedb4..8033e6538f3 100644 --- a/packages/desktop-client/src/components/reports/CategorySelector.tsx +++ b/packages/desktop-client/src/components/reports/CategorySelector.tsx @@ -9,7 +9,7 @@ import { CheckAll, UncheckAll } from '../../icons/v2'; import ViewHide from '../../icons/v2/ViewHide'; import ViewShow from '../../icons/v2/ViewShow'; import { type CategoryListProps } from '../autocomplete/CategoryAutocomplete'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Text from '../common/Text'; import View from '../common/View'; import { Checkbox } from '../forms'; diff --git a/packages/desktop-client/src/components/reports/GraphButton.tsx b/packages/desktop-client/src/components/reports/GraphButton.tsx index 50c50297dd6..d7a06453e61 100644 --- a/packages/desktop-client/src/components/reports/GraphButton.tsx +++ b/packages/desktop-client/src/components/reports/GraphButton.tsx @@ -1,7 +1,7 @@ import React, { type HTMLProps } from 'react'; import { type CSSProperties, theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import HoverTarget from '../common/HoverTarget'; import Text from '../common/Text'; import { Tooltip } from '../tooltips'; diff --git a/packages/desktop-client/src/components/reports/Header.jsx b/packages/desktop-client/src/components/reports/Header.jsx index dffee4321ca..a3db665b810 100644 --- a/packages/desktop-client/src/components/reports/Header.jsx +++ b/packages/desktop-client/src/components/reports/Header.jsx @@ -4,7 +4,7 @@ import * as monthUtils from 'loot-core/src/shared/months'; import ArrowLeft from '../../icons/v1/ArrowLeft'; import { styles } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import ButtonLink from '../common/ButtonLink'; import Select from '../common/Select'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/reports/ModeButton.tsx b/packages/desktop-client/src/components/reports/ModeButton.tsx index e0f216d84fa..1cc1aed1f24 100644 --- a/packages/desktop-client/src/components/reports/ModeButton.tsx +++ b/packages/desktop-client/src/components/reports/ModeButton.tsx @@ -1,7 +1,7 @@ import React, { type MouseEventHandler, type ReactNode } from 'react'; import { type CSSProperties, theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; type ModeButtonProps = { selected: boolean; diff --git a/packages/desktop-client/src/components/reports/SaveReport.tsx b/packages/desktop-client/src/components/reports/SaveReport.tsx index a634223c004..ed0476b1e17 100644 --- a/packages/desktop-client/src/components/reports/SaveReport.tsx +++ b/packages/desktop-client/src/components/reports/SaveReport.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import ExpandArrow from '../../icons/v0/ExpandArrow'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Menu from '../common/Menu'; import MenuTooltip from '../common/MenuTooltip'; import Text from '../common/Text'; diff --git a/packages/desktop-client/src/components/rules/RuleRow.tsx b/packages/desktop-client/src/components/rules/RuleRow.tsx index c9977fb19bf..60630b39879 100644 --- a/packages/desktop-client/src/components/rules/RuleRow.tsx +++ b/packages/desktop-client/src/components/rules/RuleRow.tsx @@ -6,7 +6,7 @@ import { type RuleEntity } from 'loot-core/src/types/models'; import { useSelectedDispatch } from '../../hooks/useSelected'; import ArrowRight from '../../icons/v0/RightArrow2'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Stack from '../common/Stack'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/schedules/EditSchedule.jsx b/packages/desktop-client/src/components/schedules/EditSchedule.jsx index 5beaa5968c8..7f9f0c89e8c 100644 --- a/packages/desktop-client/src/components/schedules/EditSchedule.jsx +++ b/packages/desktop-client/src/components/schedules/EditSchedule.jsx @@ -12,7 +12,7 @@ import useSelected, { SelectedProvider } from '../../hooks/useSelected'; import { theme } from '../../style'; import AccountAutocomplete from '../autocomplete/AccountAutocomplete'; import PayeeAutocomplete from '../autocomplete/PayeeAutocomplete'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal from '../common/Modal'; import Stack from '../common/Stack'; import Text from '../common/Text'; diff --git a/packages/desktop-client/src/components/schedules/PostsOfflineNotification.jsx b/packages/desktop-client/src/components/schedules/PostsOfflineNotification.jsx index 48c5c2d2edd..194d46cc5e1 100644 --- a/packages/desktop-client/src/components/schedules/PostsOfflineNotification.jsx +++ b/packages/desktop-client/src/components/schedules/PostsOfflineNotification.jsx @@ -4,7 +4,7 @@ import { useLocation } from 'react-router-dom'; import { send } from 'loot-core/src/platform/client/fetch'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Modal from '../common/Modal'; import Paragraph from '../common/Paragraph'; import Stack from '../common/Stack'; diff --git a/packages/desktop-client/src/components/schedules/SchedulesTable.tsx b/packages/desktop-client/src/components/schedules/SchedulesTable.tsx index 3484e67c144..e16efa873c2 100644 --- a/packages/desktop-client/src/components/schedules/SchedulesTable.tsx +++ b/packages/desktop-client/src/components/schedules/SchedulesTable.tsx @@ -15,7 +15,7 @@ import { type ScheduleEntity } from 'loot-core/src/types/models'; import DotsHorizontalTriple from '../../icons/v1/DotsHorizontalTriple'; import Check from '../../icons/v2/Check'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Menu from '../common/Menu'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/schedules/index.tsx b/packages/desktop-client/src/components/schedules/index.tsx index a4fb235e77d..04171948ddd 100644 --- a/packages/desktop-client/src/components/schedules/index.tsx +++ b/packages/desktop-client/src/components/schedules/index.tsx @@ -6,7 +6,7 @@ import { type ScheduleEntity } from 'loot-core/src/types/models'; import { useActions } from '../../hooks/useActions'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Search from '../common/Search'; import View from '../common/View'; import { Page } from '../Page'; diff --git a/packages/desktop-client/src/components/select/RecurringSchedulePicker.jsx b/packages/desktop-client/src/components/select/RecurringSchedulePicker.jsx index 0bfd696308d..f865328e81c 100644 --- a/packages/desktop-client/src/components/select/RecurringSchedulePicker.jsx +++ b/packages/desktop-client/src/components/select/RecurringSchedulePicker.jsx @@ -8,7 +8,7 @@ import { getRecurringDescription } from 'loot-core/src/shared/schedules'; import AddIcon from '../../icons/v0/Add'; import SubtractIcon from '../../icons/v0/Subtract'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Input from '../common/Input'; import Select from '../common/Select'; import Stack from '../common/Stack'; diff --git a/packages/desktop-client/src/components/settings/Encryption.tsx b/packages/desktop-client/src/components/settings/Encryption.tsx index 9c5636793b6..cca17a173e4 100644 --- a/packages/desktop-client/src/components/settings/Encryption.tsx +++ b/packages/desktop-client/src/components/settings/Encryption.tsx @@ -3,7 +3,7 @@ import { useSelector } from 'react-redux'; import { useActions } from '../../hooks/useActions'; import { theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import ExternalLink from '../common/ExternalLink'; import Text from '../common/Text'; import { useServerURL } from '../ServerContext'; diff --git a/packages/desktop-client/src/components/settings/Format.tsx b/packages/desktop-client/src/components/settings/Format.tsx index 38511f84c18..a140d23b9cd 100644 --- a/packages/desktop-client/src/components/settings/Format.tsx +++ b/packages/desktop-client/src/components/settings/Format.tsx @@ -6,7 +6,7 @@ import { type LocalPrefs } from 'loot-core/src/types/prefs'; import { useActions } from '../../hooks/useActions'; import { tokens } from '../../tokens'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Select from '../common/Select'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/settings/Global.tsx b/packages/desktop-client/src/components/settings/Global.tsx index 0a28d43d1c9..1b258becd59 100644 --- a/packages/desktop-client/src/components/settings/Global.tsx +++ b/packages/desktop-client/src/components/settings/Global.tsx @@ -4,7 +4,7 @@ import { useSelector } from 'react-redux'; import { useActions } from '../../hooks/useActions'; import { theme } from '../../style'; import { Information } from '../alerts'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Text from '../common/Text'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/settings/Themes.tsx b/packages/desktop-client/src/components/settings/Themes.tsx index c43a1447e2c..f528735fe72 100644 --- a/packages/desktop-client/src/components/settings/Themes.tsx +++ b/packages/desktop-client/src/components/settings/Themes.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useActions } from '../../hooks/useActions'; import { themeOptions, useTheme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Select from '../common/Select'; import Text from '../common/Text'; diff --git a/packages/desktop-client/src/components/settings/UI.tsx b/packages/desktop-client/src/components/settings/UI.tsx index ebdc6be7c10..82025dbb567 100644 --- a/packages/desktop-client/src/components/settings/UI.tsx +++ b/packages/desktop-client/src/components/settings/UI.tsx @@ -5,7 +5,7 @@ import { css, media } from 'glamor'; import { type CSSProperties, theme } from '../../style'; import { tokens } from '../../tokens'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import View from '../common/View'; type SettingProps = { diff --git a/packages/desktop-client/src/components/settings/index.tsx b/packages/desktop-client/src/components/settings/index.tsx index 3744b612055..6d4c82adb2e 100644 --- a/packages/desktop-client/src/components/settings/index.tsx +++ b/packages/desktop-client/src/components/settings/index.tsx @@ -12,7 +12,7 @@ import { useSetThemeColor } from '../../hooks/useSetThemeColor'; import { useResponsive } from '../../ResponsiveProvider'; import { theme } from '../../style'; import { tokens } from '../../tokens'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import ExternalLink from '../common/ExternalLink'; import Input from '../common/Input'; import Text from '../common/Text'; diff --git a/packages/desktop-client/src/components/sidebar/SidebarWithData.tsx b/packages/desktop-client/src/components/sidebar/SidebarWithData.tsx index 3ea71ba13f9..06ec2c65101 100644 --- a/packages/desktop-client/src/components/sidebar/SidebarWithData.tsx +++ b/packages/desktop-client/src/components/sidebar/SidebarWithData.tsx @@ -11,7 +11,7 @@ import { useActions } from '../../hooks/useActions'; import useNavigate from '../../hooks/useNavigate'; import ExpandArrow from '../../icons/v0/ExpandArrow'; import { styles, theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import InitialFocus from '../common/InitialFocus'; import Input from '../common/Input'; import Menu from '../common/Menu'; diff --git a/packages/desktop-client/src/components/sidebar/ToggleButton.tsx b/packages/desktop-client/src/components/sidebar/ToggleButton.tsx index 69c7dfe4486..6e8f90f2a3a 100644 --- a/packages/desktop-client/src/components/sidebar/ToggleButton.tsx +++ b/packages/desktop-client/src/components/sidebar/ToggleButton.tsx @@ -3,7 +3,7 @@ import React, { type MouseEventHandler } from 'react'; import Pin from '../../icons/v1/Pin'; import ArrowButtonLeft1 from '../../icons/v2/ArrowButtonLeft1'; import { type CSSProperties, theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import View from '../common/View'; type ToggleButtonProps = { diff --git a/packages/desktop-client/src/components/table.tsx b/packages/desktop-client/src/components/table.tsx index 1337c85b973..28f5776aa9b 100644 --- a/packages/desktop-client/src/components/table.tsx +++ b/packages/desktop-client/src/components/table.tsx @@ -28,7 +28,7 @@ import ExpandArrow from '../icons/v0/ExpandArrow'; import Checkmark from '../icons/v1/Checkmark'; import { type CSSProperties, styles, theme } from '../style'; -import Button from './common/Button'; +import { Button } from './common/Button'; import Input from './common/Input'; import Menu from './common/Menu'; import Text from './common/Text'; diff --git a/packages/desktop-client/src/components/transactions/MobileTransaction.jsx b/packages/desktop-client/src/components/transactions/MobileTransaction.jsx index a0a9a676920..30573af4782 100644 --- a/packages/desktop-client/src/components/transactions/MobileTransaction.jsx +++ b/packages/desktop-client/src/components/transactions/MobileTransaction.jsx @@ -61,7 +61,7 @@ import CheckCircle1 from '../../icons/v2/CheckCircle1'; import Lock from '../../icons/v2/LockClosed'; import PencilWriteAlternate from '../../icons/v2/PencilWriteAlternate'; import { styles, theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Text from '../common/Text'; import TextOneLine from '../common/TextOneLine'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/transactions/TransactionsTable.jsx b/packages/desktop-client/src/components/transactions/TransactionsTable.jsx index d97d77dbd38..6a9f5d65648 100644 --- a/packages/desktop-client/src/components/transactions/TransactionsTable.jsx +++ b/packages/desktop-client/src/components/transactions/TransactionsTable.jsx @@ -57,7 +57,7 @@ import { styles, theme } from '../../style'; import AccountAutocomplete from '../autocomplete/AccountAutocomplete'; import CategoryAutocomplete from '../autocomplete/CategoryAutocomplete'; import PayeeAutocomplete from '../autocomplete/PayeeAutocomplete'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import Text from '../common/Text'; import View from '../common/View'; import { getStatusProps } from '../schedules/StatusBadge'; diff --git a/packages/desktop-client/src/components/util/AmountInput.tsx b/packages/desktop-client/src/components/util/AmountInput.tsx index 9adec5f3adb..848672b01e6 100644 --- a/packages/desktop-client/src/components/util/AmountInput.tsx +++ b/packages/desktop-client/src/components/util/AmountInput.tsx @@ -13,7 +13,7 @@ import { useMergedRefs } from '../../hooks/useMergedRefs'; import Add from '../../icons/v1/Add'; import Subtract from '../../icons/v1/Subtract'; import { type CSSProperties, theme } from '../../style'; -import Button from '../common/Button'; +import { Button } from '../common/Button'; import InputWithContent from '../common/InputWithContent'; import View from '../common/View'; import useFormat from '../spreadsheet/useFormat'; diff --git a/upcoming-release-notes/2116.md b/upcoming-release-notes/2116.md new file mode 100644 index 00000000000..56222efbc89 --- /dev/null +++ b/upcoming-release-notes/2116.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [joel-jeremy] +--- + +eslint: no default exports - part 2 From d203def2309f4d0032e5b9f6f0400377f15491bf Mon Sep 17 00:00:00 2001 From: Jason Date: Sat, 6 Jan 2024 12:43:06 -0500 Subject: [PATCH 12/26] Fix when pressing Enter adds an extra split transaction when no split remains (#2144) * Fix pressing enter adds split transaction when no split remains * Added release notes * Refactor to use find indstead of findIndex --- .../src/components/transactions/TransactionsTable.jsx | 4 +++- upcoming-release-notes/2144.md | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 upcoming-release-notes/2144.md diff --git a/packages/desktop-client/src/components/transactions/TransactionsTable.jsx b/packages/desktop-client/src/components/transactions/TransactionsTable.jsx index 6a9f5d65648..fe4549a1e0f 100644 --- a/packages/desktop-client/src/components/transactions/TransactionsTable.jsx +++ b/packages/desktop-client/src/components/transactions/TransactionsTable.jsx @@ -1968,7 +1968,9 @@ export const TransactionTable = forwardRef((props, ref) => { afterSave(() => { const transactions = latestState.current.transactions; const idx = transactions.findIndex(t => t.id === id); - const parent = transactionMap.get(transactions[idx]?.parent_id); + const parent = transactions.find( + t => t.id === transactions[idx]?.parent_id, + ); if ( isLastChild(transactions, idx) && diff --git a/upcoming-release-notes/2144.md b/upcoming-release-notes/2144.md new file mode 100644 index 00000000000..d03b7b0ce7d --- /dev/null +++ b/upcoming-release-notes/2144.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [jasonmichalski] +--- + +Fix when pressing Enter adds an extra split transaction when no split remains From 882fd9f5cdffa8835f9dcf2988792ed99cb41a83 Mon Sep 17 00:00:00 2001 From: Joel Jeremy Marquez Date: Sat, 6 Jan 2024 10:57:19 -0800 Subject: [PATCH 13/26] ESLint no-default-exports 3 (#2117) * ESLint no default exports - part 3 * Fix default imports * Release notes * Fix Menu --- .eslintrc.js | 17 +++++++++++++++++ .../src/components/AppBackground.tsx | 2 +- .../src/components/DevelopmentTopBar.tsx | 2 +- .../src/components/FatalError.tsx | 6 +++--- .../src/components/LoggedInUser.tsx | 2 +- .../src/components/ManageRules.tsx | 2 +- .../src/components/Notifications.tsx | 4 ++-- .../src/components/ThemeSelector.tsx | 2 +- .../desktop-client/src/components/Titlebar.tsx | 4 ++-- .../src/components/UpdateNotification.tsx | 2 +- .../components/accounts/AccountSyncCheck.jsx | 2 +- .../src/components/accounts/Header.jsx | 8 ++++---- .../accounts/MobileAccountDetails.jsx | 6 +++--- .../src/components/accounts/Reconcile.jsx | 4 ++-- .../components/autocomplete/Autocomplete.tsx | 2 +- .../src/components/budget/BudgetTotals.tsx | 2 +- .../src/components/budget/MobileBudgetTable.jsx | 6 +++--- .../src/components/budget/SidebarCategory.tsx | 2 +- .../src/components/budget/SidebarGroup.tsx | 2 +- .../components/budget/report/BalanceTooltip.tsx | 2 +- .../budget/report/ReportComponents.tsx | 2 +- .../report/budgetsummary/BudgetSummary.tsx | 2 +- .../budget/report/budgetsummary/Saved.tsx | 4 ++-- .../budget/rollover/BalanceTooltip.tsx | 2 +- .../components/budget/rollover/CoverTooltip.tsx | 2 +- .../components/budget/rollover/HoldTooltip.tsx | 4 ++-- .../budget/rollover/RolloverComponents.tsx | 2 +- .../budget/rollover/TransferTooltip.tsx | 4 ++-- .../rollover/budgetsummary/BudgetSummary.tsx | 2 +- .../budget/rollover/budgetsummary/ToBudget.tsx | 6 +++--- .../rollover/budgetsummary/TotalsList.tsx | 6 +++--- .../src/components/common/AlignedText.tsx | 4 ++-- .../src/components/common/AnchorLink.tsx | 2 +- .../src/components/common/Block.tsx | 2 +- .../src/components/common/ButtonLink.tsx | 2 +- .../src/components/common/Card.tsx | 4 +--- .../src/components/common/ExternalLink.tsx | 4 +--- .../src/components/common/FormError.tsx | 2 +- .../src/components/common/HoverTarget.tsx | 2 +- .../src/components/common/InitialFocus.ts | 2 +- .../src/components/common/InlineField.tsx | 2 +- .../src/components/common/Input.tsx | 2 +- .../src/components/common/InputWithContent.tsx | 4 ++-- .../src/components/common/Label.tsx | 2 +- .../src/components/common/Link.tsx | 2 +- .../src/components/common/LinkButton.tsx | 6 +----- .../src/components/common/Menu.tsx | 2 +- .../src/components/common/MenuTooltip.tsx | 2 +- .../src/components/common/Modal.tsx | 2 +- .../src/components/common/Search.tsx | 2 +- .../src/components/filters/FiltersMenu.jsx | 4 ++-- .../src/components/filters/SavedFilters.jsx | 4 ++-- .../src/components/manager/BudgetList.jsx | 2 +- .../src/components/manager/Import.tsx | 2 +- .../src/components/manager/ImportActual.tsx | 2 +- .../src/components/manager/ImportYNAB4.tsx | 2 +- .../src/components/manager/ImportYNAB5.tsx | 4 ++-- .../src/components/manager/ServerURL.tsx | 2 +- .../src/components/manager/WelcomeScreen.tsx | 2 +- .../components/manager/subscribe/Bootstrap.tsx | 2 +- .../src/components/mobile/MobileForms.jsx | 2 +- .../src/components/modals/CategoryGroupMenu.tsx | 2 +- .../src/components/modals/CategoryMenu.tsx | 2 +- .../src/components/modals/CloseAccount.tsx | 4 ++-- .../components/modals/ConfirmCategoryDelete.tsx | 2 +- .../modals/ConfirmTransactionEdit.tsx | 2 +- .../src/components/modals/CreateAccount.tsx | 2 +- .../components/modals/CreateEncryptionKey.tsx | 6 +++--- .../components/modals/CreateLocalAccount.tsx | 10 +++++----- .../src/components/modals/EditField.jsx | 2 +- .../src/components/modals/FixEncryptionKey.tsx | 6 +++--- .../components/modals/GoCardlessExternalMsg.tsx | 6 +++--- .../components/modals/GoCardlessInitialise.tsx | 4 ++-- .../components/modals/ImportTransactions.jsx | 2 +- .../src/components/modals/LoadBackup.jsx | 2 +- .../src/components/modals/SingleInput.tsx | 6 +++--- .../src/components/modals/SwitchBudgetType.tsx | 2 +- .../src/components/payees/PayeeMenu.tsx | 2 +- .../src/components/reports/Change.jsx | 2 +- .../src/components/reports/DateRange.tsx | 2 +- .../src/components/reports/GraphButton.tsx | 2 +- .../src/components/reports/Header.jsx | 2 +- .../src/components/reports/LoadingIndicator.tsx | 2 +- .../src/components/reports/ReportCard.tsx | 2 +- .../src/components/reports/SaveReport.tsx | 4 ++-- .../src/components/reports/graphs/AreaGraph.tsx | 2 +- .../src/components/reports/graphs/BarGraph.tsx | 2 +- .../components/reports/graphs/BarLineGraph.tsx | 2 +- .../src/components/reports/graphs/LineGraph.tsx | 2 +- .../components/reports/graphs/NetWorthGraph.tsx | 2 +- .../reports/graphs/StackedBarGraph.tsx | 2 +- .../src/components/reports/reports/CashFlow.tsx | 4 ++-- .../components/reports/reports/CashFlowCard.jsx | 2 +- .../reports/reports/CategorySpendingCard.jsx | 2 +- .../components/reports/reports/CustomReport.jsx | 4 ++-- .../reports/reports/CustomReportCard.jsx | 2 +- .../components/reports/reports/NetWorthCard.jsx | 2 +- .../components/reports/reports/SankeyCard.jsx | 2 +- .../spreadsheets/cash-flow-spreadsheet.tsx | 2 +- .../category-spending-spreadsheet.tsx | 2 +- .../src/components/rules/Value.tsx | 2 +- .../src/components/schedules/SchedulesTable.tsx | 2 +- .../src/components/select/DateSelect.tsx | 2 +- .../select/RecurringSchedulePicker.jsx | 2 +- .../src/components/settings/Encryption.tsx | 2 +- .../src/components/settings/Experimental.tsx | 2 +- .../src/components/settings/Export.tsx | 2 +- .../src/components/settings/index.tsx | 4 ++-- .../src/components/sidebar/Account.tsx | 4 ++-- .../src/components/sidebar/Item.tsx | 2 +- .../src/components/sidebar/ItemContent.tsx | 2 +- .../src/components/sidebar/SecondaryItem.tsx | 2 +- .../src/components/sidebar/SidebarWithData.tsx | 6 +++--- .../desktop-client/src/components/table.tsx | 4 ++-- .../transactions/SelectedTransactions.jsx | 2 +- .../src/components/util/AmountInput.tsx | 2 +- .../src/components/util/GenericInput.jsx | 2 +- .../src/components/util/LoadComponent.tsx | 2 +- upcoming-release-notes/2117.md | 6 ++++++ 119 files changed, 186 insertions(+), 171 deletions(-) create mode 100644 upcoming-release-notes/2117.md diff --git a/.eslintrc.js b/.eslintrc.js index 9b20e7bb39f..aabdb637eac 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -249,7 +249,24 @@ module.exports = { // './packages/desktop-client/src/components/accounts/**/*', // './packages/desktop-client/src/components/autocomplete/**/*', // './packages/desktop-client/src/components/budget/**/*', + './packages/desktop-client/src/components/common/AlignedText.tsx', + './packages/desktop-client/src/components/common/AnchorLink.tsx', + './packages/desktop-client/src/components/common/Block.tsx', './packages/desktop-client/src/components/common/Button.tsx', + './packages/desktop-client/src/components/common/ButtonLink.tsx', + './packages/desktop-client/src/components/common/Card.tsx', + './packages/desktop-client/src/components/common/ExternalLink.tsx', + './packages/desktop-client/src/components/common/FormError.tsx', + './packages/desktop-client/src/components/common/HoverTarget.tsx', + './packages/desktop-client/src/components/common/InitialFocus.tsx', + './packages/desktop-client/src/components/common/InlineField.tsx', + './packages/desktop-client/src/components/common/Input.tsx', + './packages/desktop-client/src/components/common/InputWithContent.tsx', + './packages/desktop-client/src/components/common/Label.tsx', + './packages/desktop-client/src/components/common/Link.tsx', + './packages/desktop-client/src/components/common/LinkButton.tsx', + './packages/desktop-client/src/components/common/Menu.tsx', + './packages/desktop-client/src/components/common/MenuTooltip.tsx', // './packages/desktop-client/src/components/common/**/*', // './packages/desktop-client/src/components/filters/**/*', // './packages/desktop-client/src/components/gocardless/**/*', diff --git a/packages/desktop-client/src/components/AppBackground.tsx b/packages/desktop-client/src/components/AppBackground.tsx index 258ded5153a..7f4d12b327b 100644 --- a/packages/desktop-client/src/components/AppBackground.tsx +++ b/packages/desktop-client/src/components/AppBackground.tsx @@ -6,7 +6,7 @@ import AnimatedLoading from '../icons/AnimatedLoading'; import { theme } from '../style'; import { Background } from './Background'; -import Block from './common/Block'; +import { Block } from './common/Block'; import View from './common/View'; type AppBackgroundProps = { diff --git a/packages/desktop-client/src/components/DevelopmentTopBar.tsx b/packages/desktop-client/src/components/DevelopmentTopBar.tsx index f163863fa73..170c90f1510 100644 --- a/packages/desktop-client/src/components/DevelopmentTopBar.tsx +++ b/packages/desktop-client/src/components/DevelopmentTopBar.tsx @@ -1,6 +1,6 @@ import { theme } from '../style'; -import ExternalLink from './common/ExternalLink'; +import { ExternalLink } from './common/ExternalLink'; import View from './common/View'; export function DevelopmentTopBar() { diff --git a/packages/desktop-client/src/components/FatalError.tsx b/packages/desktop-client/src/components/FatalError.tsx index 6fb0c803187..187a6270bf1 100644 --- a/packages/desktop-client/src/components/FatalError.tsx +++ b/packages/desktop-client/src/components/FatalError.tsx @@ -1,9 +1,9 @@ import React, { useState } from 'react'; -import Block from './common/Block'; +import { Block } from './common/Block'; import { Button } from './common/Button'; -import ExternalLink from './common/ExternalLink'; -import LinkButton from './common/LinkButton'; +import { ExternalLink } from './common/ExternalLink'; +import { LinkButton } from './common/LinkButton'; import Modal from './common/Modal'; import Paragraph from './common/Paragraph'; import Stack from './common/Stack'; diff --git a/packages/desktop-client/src/components/LoggedInUser.tsx b/packages/desktop-client/src/components/LoggedInUser.tsx index c834b88ca57..a3fddb94180 100644 --- a/packages/desktop-client/src/components/LoggedInUser.tsx +++ b/packages/desktop-client/src/components/LoggedInUser.tsx @@ -5,7 +5,7 @@ import { useActions } from '../hooks/useActions'; import { theme, styles, type CSSProperties } from '../style'; import { Button } from './common/Button'; -import Menu from './common/Menu'; +import { Menu } from './common/Menu'; import Text from './common/Text'; import View from './common/View'; import { useServerURL } from './ServerContext'; diff --git a/packages/desktop-client/src/components/ManageRules.tsx b/packages/desktop-client/src/components/ManageRules.tsx index 8caa447a81a..638fa13e22b 100644 --- a/packages/desktop-client/src/components/ManageRules.tsx +++ b/packages/desktop-client/src/components/ManageRules.tsx @@ -21,7 +21,7 @@ import useSelected, { SelectedProvider } from '../hooks/useSelected'; import { theme } from '../style'; import { Button } from './common/Button'; -import ExternalLink from './common/ExternalLink'; +import { ExternalLink } from './common/ExternalLink'; import Search from './common/Search'; import Stack from './common/Stack'; import Text from './common/Text'; diff --git a/packages/desktop-client/src/components/Notifications.tsx b/packages/desktop-client/src/components/Notifications.tsx index 881b562c648..48b8b229eaf 100644 --- a/packages/desktop-client/src/components/Notifications.tsx +++ b/packages/desktop-client/src/components/Notifications.tsx @@ -14,8 +14,8 @@ import Delete from '../icons/v0/Delete'; import { styles, theme, type CSSProperties } from '../style'; import { Button, ButtonWithLoading } from './common/Button'; -import ExternalLink from './common/ExternalLink'; -import LinkButton from './common/LinkButton'; +import { ExternalLink } from './common/ExternalLink'; +import { LinkButton } from './common/LinkButton'; import Stack from './common/Stack'; import Text from './common/Text'; import View from './common/View'; diff --git a/packages/desktop-client/src/components/ThemeSelector.tsx b/packages/desktop-client/src/components/ThemeSelector.tsx index 45987b63099..667fb272ba8 100644 --- a/packages/desktop-client/src/components/ThemeSelector.tsx +++ b/packages/desktop-client/src/components/ThemeSelector.tsx @@ -10,7 +10,7 @@ import { useResponsive } from '../ResponsiveProvider'; import { type CSSProperties, themeOptions, useTheme } from '../style'; import { Button } from './common/Button'; -import Menu from './common/Menu'; +import { Menu } from './common/Menu'; import { Tooltip } from './tooltips'; type ThemeSelectorProps = { diff --git a/packages/desktop-client/src/components/Titlebar.tsx b/packages/desktop-client/src/components/Titlebar.tsx index 34d61014b40..4b6bb75cda2 100644 --- a/packages/desktop-client/src/components/Titlebar.tsx +++ b/packages/desktop-client/src/components/Titlebar.tsx @@ -29,8 +29,8 @@ import AccountSyncCheck from './accounts/AccountSyncCheck'; import { AnimatedRefresh } from './AnimatedRefresh'; import { MonthCountSelector } from './budget/MonthCountSelector'; import { Button, ButtonWithLoading } from './common/Button'; -import ExternalLink from './common/ExternalLink'; -import Link from './common/Link'; +import { ExternalLink } from './common/ExternalLink'; +import { Link } from './common/Link'; import Paragraph from './common/Paragraph'; import Text from './common/Text'; import View from './common/View'; diff --git a/packages/desktop-client/src/components/UpdateNotification.tsx b/packages/desktop-client/src/components/UpdateNotification.tsx index f6d224accbc..9430f4e3ad4 100644 --- a/packages/desktop-client/src/components/UpdateNotification.tsx +++ b/packages/desktop-client/src/components/UpdateNotification.tsx @@ -6,7 +6,7 @@ import Close from '../icons/v1/Close'; import { theme } from '../style'; import { Button } from './common/Button'; -import LinkButton from './common/LinkButton'; +import { LinkButton } from './common/LinkButton'; import Text from './common/Text'; import View from './common/View'; diff --git a/packages/desktop-client/src/components/accounts/AccountSyncCheck.jsx b/packages/desktop-client/src/components/accounts/AccountSyncCheck.jsx index 7cb042e1083..05274e49445 100644 --- a/packages/desktop-client/src/components/accounts/AccountSyncCheck.jsx +++ b/packages/desktop-client/src/components/accounts/AccountSyncCheck.jsx @@ -7,7 +7,7 @@ import { useActions } from '../../hooks/useActions'; import ExclamationOutline from '../../icons/v1/ExclamationOutline'; import { theme } from '../../style'; import { Button } from '../common/Button'; -import ExternalLink from '../common/ExternalLink'; +import { ExternalLink } from '../common/ExternalLink'; import View from '../common/View'; import { Tooltip } from '../tooltips'; diff --git a/packages/desktop-client/src/components/accounts/Header.jsx b/packages/desktop-client/src/components/accounts/Header.jsx index e9738eb401f..d5bad60712d 100644 --- a/packages/desktop-client/src/components/accounts/Header.jsx +++ b/packages/desktop-client/src/components/accounts/Header.jsx @@ -10,11 +10,11 @@ import Pencil1 from '../../icons/v2/Pencil1'; import { theme, styles } from '../../style'; import { AnimatedRefresh } from '../AnimatedRefresh'; import { Button } from '../common/Button'; -import InitialFocus from '../common/InitialFocus'; -import Input from '../common/Input'; -import Menu from '../common/Menu'; +import { InitialFocus } from '../common/InitialFocus'; +import { Input } from '../common/Input'; +import { Menu } from '../common/Menu'; import MenuButton from '../common/MenuButton'; -import MenuTooltip from '../common/MenuTooltip'; +import { MenuTooltip } from '../common/MenuTooltip'; import Search from '../common/Search'; import Stack from '../common/Stack'; import View from '../common/View'; diff --git a/packages/desktop-client/src/components/accounts/MobileAccountDetails.jsx b/packages/desktop-client/src/components/accounts/MobileAccountDetails.jsx index 37b0d016dd8..7fd1b09abd1 100644 --- a/packages/desktop-client/src/components/accounts/MobileAccountDetails.jsx +++ b/packages/desktop-client/src/components/accounts/MobileAccountDetails.jsx @@ -4,9 +4,9 @@ import { useActions } from '../../hooks/useActions'; import Add from '../../icons/v1/Add'; import SearchAlternate from '../../icons/v2/SearchAlternate'; import { theme } from '../../style'; -import ButtonLink from '../common/ButtonLink'; -import InputWithContent from '../common/InputWithContent'; -import Label from '../common/Label'; +import { ButtonLink } from '../common/ButtonLink'; +import { InputWithContent } from '../common/InputWithContent'; +import { Label } from '../common/Label'; import View from '../common/View'; import { MobileBackButton } from '../MobileBackButton'; import { Page } from '../Page'; diff --git a/packages/desktop-client/src/components/accounts/Reconcile.jsx b/packages/desktop-client/src/components/accounts/Reconcile.jsx index 0efd70f36cb..bd3f4a59b63 100644 --- a/packages/desktop-client/src/components/accounts/Reconcile.jsx +++ b/packages/desktop-client/src/components/accounts/Reconcile.jsx @@ -6,8 +6,8 @@ import { currencyToInteger } from 'loot-core/src/shared/util'; import CheckCircle1 from '../../icons/v2/CheckCircle1'; import { styles, theme } from '../../style'; import { Button } from '../common/Button'; -import InitialFocus from '../common/InitialFocus'; -import Input from '../common/Input'; +import { InitialFocus } from '../common/InitialFocus'; +import { Input } from '../common/Input'; import Text from '../common/Text'; import View from '../common/View'; import useFormat from '../spreadsheet/useFormat'; diff --git a/packages/desktop-client/src/components/autocomplete/Autocomplete.tsx b/packages/desktop-client/src/components/autocomplete/Autocomplete.tsx index 81b838b725c..71d49edd1eb 100644 --- a/packages/desktop-client/src/components/autocomplete/Autocomplete.tsx +++ b/packages/desktop-client/src/components/autocomplete/Autocomplete.tsx @@ -16,7 +16,7 @@ import { css } from 'glamor'; import Remove from '../../icons/v2/Remove'; import { theme, type CSSProperties } from '../../style'; import { Button } from '../common/Button'; -import Input from '../common/Input'; +import { Input } from '../common/Input'; import View from '../common/View'; import { Tooltip } from '../tooltips'; diff --git a/packages/desktop-client/src/components/budget/BudgetTotals.tsx b/packages/desktop-client/src/components/budget/BudgetTotals.tsx index 11e42842688..3864660d559 100644 --- a/packages/desktop-client/src/components/budget/BudgetTotals.tsx +++ b/packages/desktop-client/src/components/budget/BudgetTotals.tsx @@ -3,7 +3,7 @@ import React, { type ComponentProps, memo, useState } from 'react'; import DotsHorizontalTriple from '../../icons/v1/DotsHorizontalTriple'; import { theme, styles } from '../../style'; import { Button } from '../common/Button'; -import Menu from '../common/Menu'; +import { Menu } from '../common/Menu'; import View from '../common/View'; import { Tooltip } from '../tooltips'; diff --git a/packages/desktop-client/src/components/budget/MobileBudgetTable.jsx b/packages/desktop-client/src/components/budget/MobileBudgetTable.jsx index c3297e72c30..59e50bc20e8 100644 --- a/packages/desktop-client/src/components/budget/MobileBudgetTable.jsx +++ b/packages/desktop-client/src/components/budget/MobileBudgetTable.jsx @@ -13,9 +13,9 @@ import DotsHorizontalTriple from '../../icons/v1/DotsHorizontalTriple'; import { useResponsive } from '../../ResponsiveProvider'; import { theme, styles } from '../../style'; import { Button } from '../common/Button'; -import Card from '../common/Card'; -import Label from '../common/Label'; -import Menu from '../common/Menu'; +import { Card } from '../common/Card'; +import { Label } from '../common/Label'; +import { Menu } from '../common/Menu'; import Text from '../common/Text'; import View from '../common/View'; import { Page } from '../Page'; diff --git a/packages/desktop-client/src/components/budget/SidebarCategory.tsx b/packages/desktop-client/src/components/budget/SidebarCategory.tsx index 52947951e4b..9b367bb2189 100644 --- a/packages/desktop-client/src/components/budget/SidebarCategory.tsx +++ b/packages/desktop-client/src/components/budget/SidebarCategory.tsx @@ -5,7 +5,7 @@ import { type CategoryEntity } from 'loot-core/src/types/models'; import CheveronDown from '../../icons/v1/CheveronDown'; import { theme } from '../../style'; import { Button } from '../common/Button'; -import Menu from '../common/Menu'; +import { Menu } from '../common/Menu'; import View from '../common/View'; import { NotesButton } from '../NotesButton'; import { InputCell } from '../table'; diff --git a/packages/desktop-client/src/components/budget/SidebarGroup.tsx b/packages/desktop-client/src/components/budget/SidebarGroup.tsx index 9621b2b5a1d..8c951c62917 100644 --- a/packages/desktop-client/src/components/budget/SidebarGroup.tsx +++ b/packages/desktop-client/src/components/budget/SidebarGroup.tsx @@ -5,7 +5,7 @@ import ExpandArrow from '../../icons/v0/ExpandArrow'; import CheveronDown from '../../icons/v1/CheveronDown'; import { theme } from '../../style'; import { Button } from '../common/Button'; -import Menu from '../common/Menu'; +import { Menu } from '../common/Menu'; import Text from '../common/Text'; import View from '../common/View'; import { NotesButton } from '../NotesButton'; diff --git a/packages/desktop-client/src/components/budget/report/BalanceTooltip.tsx b/packages/desktop-client/src/components/budget/report/BalanceTooltip.tsx index c1c297518a8..ceefd77dcca 100644 --- a/packages/desktop-client/src/components/budget/report/BalanceTooltip.tsx +++ b/packages/desktop-client/src/components/budget/report/BalanceTooltip.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { reportBudget } from 'loot-core/src/client/queries'; -import Menu from '../../common/Menu'; +import { Menu } from '../../common/Menu'; import useSheetValue from '../../spreadsheet/useSheetValue'; import { Tooltip } from '../../tooltips'; diff --git a/packages/desktop-client/src/components/budget/report/ReportComponents.tsx b/packages/desktop-client/src/components/budget/report/ReportComponents.tsx index 13f03a653d7..5e96e234c94 100644 --- a/packages/desktop-client/src/components/budget/report/ReportComponents.tsx +++ b/packages/desktop-client/src/components/budget/report/ReportComponents.tsx @@ -8,7 +8,7 @@ import useFeatureFlag from '../../../hooks/useFeatureFlag'; import CheveronDown from '../../../icons/v1/CheveronDown'; import { styles, theme, type CSSProperties } from '../../../style'; import { Button } from '../../common/Button'; -import Menu from '../../common/Menu'; +import { Menu } from '../../common/Menu'; import Text from '../../common/Text'; import View from '../../common/View'; import CellValue from '../../spreadsheet/CellValue'; diff --git a/packages/desktop-client/src/components/budget/report/budgetsummary/BudgetSummary.tsx b/packages/desktop-client/src/components/budget/report/budgetsummary/BudgetSummary.tsx index 0bcc7e5ea09..ee4b80ca1d5 100644 --- a/packages/desktop-client/src/components/budget/report/budgetsummary/BudgetSummary.tsx +++ b/packages/desktop-client/src/components/budget/report/budgetsummary/BudgetSummary.tsx @@ -10,7 +10,7 @@ import ArrowButtonDown1 from '../../../../icons/v2/ArrowButtonDown1'; import ArrowButtonUp1 from '../../../../icons/v2/ArrowButtonUp1'; import { theme, styles } from '../../../../style'; import { Button } from '../../../common/Button'; -import Menu from '../../../common/Menu'; +import { Menu } from '../../../common/Menu'; import Stack from '../../../common/Stack'; import View from '../../../common/View'; import { NotesButton } from '../../../NotesButton'; diff --git a/packages/desktop-client/src/components/budget/report/budgetsummary/Saved.tsx b/packages/desktop-client/src/components/budget/report/budgetsummary/Saved.tsx index 59ede1c3a2f..e1e94de9e16 100644 --- a/packages/desktop-client/src/components/budget/report/budgetsummary/Saved.tsx +++ b/packages/desktop-client/src/components/budget/report/budgetsummary/Saved.tsx @@ -5,8 +5,8 @@ import { css } from 'glamor'; import { reportBudget } from 'loot-core/src/client/queries'; import { theme, type CSSProperties, styles } from '../../../../style'; -import AlignedText from '../../../common/AlignedText'; -import HoverTarget from '../../../common/HoverTarget'; +import { AlignedText } from '../../../common/AlignedText'; +import { HoverTarget } from '../../../common/HoverTarget'; import Text from '../../../common/Text'; import View from '../../../common/View'; import { PrivacyFilter } from '../../../PrivacyFilter'; diff --git a/packages/desktop-client/src/components/budget/rollover/BalanceTooltip.tsx b/packages/desktop-client/src/components/budget/rollover/BalanceTooltip.tsx index 6df17d977bc..1df4d380638 100644 --- a/packages/desktop-client/src/components/budget/rollover/BalanceTooltip.tsx +++ b/packages/desktop-client/src/components/budget/rollover/BalanceTooltip.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { rolloverBudget } from 'loot-core/src/client/queries'; -import Menu from '../../common/Menu'; +import { Menu } from '../../common/Menu'; import useSheetValue from '../../spreadsheet/useSheetValue'; import { Tooltip } from '../../tooltips'; diff --git a/packages/desktop-client/src/components/budget/rollover/CoverTooltip.tsx b/packages/desktop-client/src/components/budget/rollover/CoverTooltip.tsx index 6cbc8be7b70..e9a2294577d 100644 --- a/packages/desktop-client/src/components/budget/rollover/CoverTooltip.tsx +++ b/packages/desktop-client/src/components/budget/rollover/CoverTooltip.tsx @@ -3,7 +3,7 @@ import React, { type ComponentProps, useState } from 'react'; import useCategories from '../../../hooks/useCategories'; import CategoryAutocomplete from '../../autocomplete/CategoryAutocomplete'; import { Button } from '../../common/Button'; -import InitialFocus from '../../common/InitialFocus'; +import { InitialFocus } from '../../common/InitialFocus'; import View from '../../common/View'; import { Tooltip } from '../../tooltips'; import { addToBeBudgetedGroup } from '../util'; diff --git a/packages/desktop-client/src/components/budget/rollover/HoldTooltip.tsx b/packages/desktop-client/src/components/budget/rollover/HoldTooltip.tsx index adf170f2e52..e072ae527f4 100644 --- a/packages/desktop-client/src/components/budget/rollover/HoldTooltip.tsx +++ b/packages/desktop-client/src/components/budget/rollover/HoldTooltip.tsx @@ -11,8 +11,8 @@ import evalArithmetic from 'loot-core/src/shared/arithmetic'; import { integerToCurrency, amountToInteger } from 'loot-core/src/shared/util'; import { Button } from '../../common/Button'; -import InitialFocus from '../../common/InitialFocus'; -import Input from '../../common/Input'; +import { InitialFocus } from '../../common/InitialFocus'; +import { Input } from '../../common/Input'; import View from '../../common/View'; import NamespaceContext from '../../spreadsheet/NamespaceContext'; import { Tooltip } from '../../tooltips'; diff --git a/packages/desktop-client/src/components/budget/rollover/RolloverComponents.tsx b/packages/desktop-client/src/components/budget/rollover/RolloverComponents.tsx index e29dbacf794..50fb3f62995 100644 --- a/packages/desktop-client/src/components/budget/rollover/RolloverComponents.tsx +++ b/packages/desktop-client/src/components/budget/rollover/RolloverComponents.tsx @@ -8,7 +8,7 @@ import useFeatureFlag from '../../../hooks/useFeatureFlag'; import CheveronDown from '../../../icons/v1/CheveronDown'; import { styles, theme, type CSSProperties } from '../../../style'; import { Button } from '../../common/Button'; -import Menu from '../../common/Menu'; +import { Menu } from '../../common/Menu'; import Text from '../../common/Text'; import View from '../../common/View'; import CellValue from '../../spreadsheet/CellValue'; diff --git a/packages/desktop-client/src/components/budget/rollover/TransferTooltip.tsx b/packages/desktop-client/src/components/budget/rollover/TransferTooltip.tsx index 6b397bbc35b..dea5dc50905 100644 --- a/packages/desktop-client/src/components/budget/rollover/TransferTooltip.tsx +++ b/packages/desktop-client/src/components/budget/rollover/TransferTooltip.tsx @@ -12,8 +12,8 @@ import { integerToCurrency, amountToInteger } from 'loot-core/src/shared/util'; import useCategories from '../../../hooks/useCategories'; import CategoryAutocomplete from '../../autocomplete/CategoryAutocomplete'; import { Button } from '../../common/Button'; -import InitialFocus from '../../common/InitialFocus'; -import Input from '../../common/Input'; +import { InitialFocus } from '../../common/InitialFocus'; +import { Input } from '../../common/Input'; import View from '../../common/View'; import NamespaceContext from '../../spreadsheet/NamespaceContext'; import { Tooltip } from '../../tooltips'; diff --git a/packages/desktop-client/src/components/budget/rollover/budgetsummary/BudgetSummary.tsx b/packages/desktop-client/src/components/budget/rollover/budgetsummary/BudgetSummary.tsx index 799fbbd81b9..584fdf2c55d 100644 --- a/packages/desktop-client/src/components/budget/rollover/budgetsummary/BudgetSummary.tsx +++ b/packages/desktop-client/src/components/budget/rollover/budgetsummary/BudgetSummary.tsx @@ -9,7 +9,7 @@ import ArrowButtonDown1 from '../../../../icons/v2/ArrowButtonDown1'; import ArrowButtonUp1 from '../../../../icons/v2/ArrowButtonUp1'; import { theme, styles } from '../../../../style'; import { Button } from '../../../common/Button'; -import Menu from '../../../common/Menu'; +import { Menu } from '../../../common/Menu'; import View from '../../../common/View'; import { NotesButton } from '../../../NotesButton'; import NamespaceContext from '../../../spreadsheet/NamespaceContext'; diff --git a/packages/desktop-client/src/components/budget/rollover/budgetsummary/ToBudget.tsx b/packages/desktop-client/src/components/budget/rollover/budgetsummary/ToBudget.tsx index cd3b7d09b9a..50e2da3b502 100644 --- a/packages/desktop-client/src/components/budget/rollover/budgetsummary/ToBudget.tsx +++ b/packages/desktop-client/src/components/budget/rollover/budgetsummary/ToBudget.tsx @@ -5,9 +5,9 @@ import { css } from 'glamor'; import { rolloverBudget } from 'loot-core/src/client/queries'; import { theme, styles, type CSSProperties } from '../../../../style'; -import Block from '../../../common/Block'; -import HoverTarget from '../../../common/HoverTarget'; -import Menu from '../../../common/Menu'; +import { Block } from '../../../common/Block'; +import { HoverTarget } from '../../../common/HoverTarget'; +import { Menu } from '../../../common/Menu'; import View from '../../../common/View'; import { PrivacyFilter } from '../../../PrivacyFilter'; import useFormat from '../../../spreadsheet/useFormat'; diff --git a/packages/desktop-client/src/components/budget/rollover/budgetsummary/TotalsList.tsx b/packages/desktop-client/src/components/budget/rollover/budgetsummary/TotalsList.tsx index 20a5fd4b9cf..fc85dfb07bf 100644 --- a/packages/desktop-client/src/components/budget/rollover/budgetsummary/TotalsList.tsx +++ b/packages/desktop-client/src/components/budget/rollover/budgetsummary/TotalsList.tsx @@ -3,9 +3,9 @@ import React from 'react'; import { rolloverBudget } from 'loot-core/src/client/queries'; import { styles, type CSSProperties } from '../../../../style'; -import AlignedText from '../../../common/AlignedText'; -import Block from '../../../common/Block'; -import HoverTarget from '../../../common/HoverTarget'; +import { AlignedText } from '../../../common/AlignedText'; +import { Block } from '../../../common/Block'; +import { HoverTarget } from '../../../common/HoverTarget'; import View from '../../../common/View'; import CellValue from '../../../spreadsheet/CellValue'; import useFormat from '../../../spreadsheet/useFormat'; diff --git a/packages/desktop-client/src/components/common/AlignedText.tsx b/packages/desktop-client/src/components/common/AlignedText.tsx index a119449a397..08085361940 100644 --- a/packages/desktop-client/src/components/common/AlignedText.tsx +++ b/packages/desktop-client/src/components/common/AlignedText.tsx @@ -2,7 +2,7 @@ import { type ComponentProps } from 'react'; import { type CSSProperties } from '../../style'; -import Block from './Block'; +import { Block } from './Block'; import View from './View'; type AlignedTextProps = ComponentProps & { @@ -13,7 +13,7 @@ type AlignedTextProps = ComponentProps & { rightStyle?: CSSProperties; truncate?: 'left' | 'right'; }; -export default function AlignedText({ +export function AlignedText({ left, right, style, diff --git a/packages/desktop-client/src/components/common/AnchorLink.tsx b/packages/desktop-client/src/components/common/AnchorLink.tsx index 2cc6ba3fd01..5defecba686 100644 --- a/packages/desktop-client/src/components/common/AnchorLink.tsx +++ b/packages/desktop-client/src/components/common/AnchorLink.tsx @@ -12,7 +12,7 @@ type AnchorLinkProps = { children?: ReactNode; }; -export default function AnchorLink({ +export function AnchorLink({ to, style, activeStyle, diff --git a/packages/desktop-client/src/components/common/Block.tsx b/packages/desktop-client/src/components/common/Block.tsx index 4a4db9b9686..a1603aef0cf 100644 --- a/packages/desktop-client/src/components/common/Block.tsx +++ b/packages/desktop-client/src/components/common/Block.tsx @@ -6,7 +6,7 @@ type BlockProps = HTMLProps & { innerRef?: Ref; }; -export default function Block(props: BlockProps) { +export function Block(props: BlockProps) { const { className = '', style, innerRef, ...restProps } = props; return (
& { to: string; activeStyle?: CSSProperties; }; -export default function ButtonLink({ +export function ButtonLink({ to, style, activeStyle, diff --git a/packages/desktop-client/src/components/common/Card.tsx b/packages/desktop-client/src/components/common/Card.tsx index 5f143cd3553..da6e177a8b3 100644 --- a/packages/desktop-client/src/components/common/Card.tsx +++ b/packages/desktop-client/src/components/common/Card.tsx @@ -6,7 +6,7 @@ import View from './View'; type CardProps = ComponentProps; -const Card = forwardRef( +export const Card = forwardRef( ({ children, ...props }, ref) => { return ( ( ); }, ); - -export default Card; diff --git a/packages/desktop-client/src/components/common/ExternalLink.tsx b/packages/desktop-client/src/components/common/ExternalLink.tsx index f31d240c9b5..979a62a9021 100644 --- a/packages/desktop-client/src/components/common/ExternalLink.tsx +++ b/packages/desktop-client/src/components/common/ExternalLink.tsx @@ -13,7 +13,7 @@ type ExternalLinkProps = { linkColor?: keyof typeof externalLinkColors; }; -const ExternalLink = forwardRef( +export const ExternalLink = forwardRef( ({ children, to, linkColor = 'blue' }, ref) => ( // we can’t use here for obvious reasons // eslint-disable-next-line no-restricted-syntax @@ -28,5 +28,3 @@ const ExternalLink = forwardRef( ), ); - -export default ExternalLink; diff --git a/packages/desktop-client/src/components/common/FormError.tsx b/packages/desktop-client/src/components/common/FormError.tsx index 505388caf4a..fafca109ad6 100644 --- a/packages/desktop-client/src/components/common/FormError.tsx +++ b/packages/desktop-client/src/components/common/FormError.tsx @@ -9,7 +9,7 @@ type FormErrorProps = { children?: ReactNode; }; -export default function FormError({ style, children }: FormErrorProps) { +export function FormError({ style, children }: FormErrorProps) { return ( {children} ); diff --git a/packages/desktop-client/src/components/common/HoverTarget.tsx b/packages/desktop-client/src/components/common/HoverTarget.tsx index 097ad9c013d..9df85a11f82 100644 --- a/packages/desktop-client/src/components/common/HoverTarget.tsx +++ b/packages/desktop-client/src/components/common/HoverTarget.tsx @@ -12,7 +12,7 @@ type HoverTargetProps = { disabled?: boolean; }; -export default function HoverTarget({ +export function HoverTarget({ style, contentStyle, children, diff --git a/packages/desktop-client/src/components/common/InitialFocus.ts b/packages/desktop-client/src/components/common/InitialFocus.ts index 6f88cbb60f0..1e8a0cb7062 100644 --- a/packages/desktop-client/src/components/common/InitialFocus.ts +++ b/packages/desktop-client/src/components/common/InitialFocus.ts @@ -10,7 +10,7 @@ type InitialFocusProps = { children?: ReactElement | ((node: Ref) => ReactElement); }; -export default function InitialFocus({ children }: InitialFocusProps) { +export function InitialFocus({ children }: InitialFocusProps) { const node = useRef(null); useEffect(() => { diff --git a/packages/desktop-client/src/components/common/InlineField.tsx b/packages/desktop-client/src/components/common/InlineField.tsx index 0a31f198651..9328f674fdf 100644 --- a/packages/desktop-client/src/components/common/InlineField.tsx +++ b/packages/desktop-client/src/components/common/InlineField.tsx @@ -12,7 +12,7 @@ type InlineFieldProps = { style?: CSSProperties; }; -export default function InlineField({ +export function InlineField({ label, labelWidth, children, diff --git a/packages/desktop-client/src/components/common/Input.tsx b/packages/desktop-client/src/components/common/Input.tsx index 6a4e6eaf965..aab2993a3d2 100644 --- a/packages/desktop-client/src/components/common/Input.tsx +++ b/packages/desktop-client/src/components/common/Input.tsx @@ -29,7 +29,7 @@ export type InputProps = InputHTMLAttributes & { focused?: boolean; }; -export default function Input({ +export function Input({ style, inputRef, onEnter, diff --git a/packages/desktop-client/src/components/common/InputWithContent.tsx b/packages/desktop-client/src/components/common/InputWithContent.tsx index 24b357342a8..e9a65695885 100644 --- a/packages/desktop-client/src/components/common/InputWithContent.tsx +++ b/packages/desktop-client/src/components/common/InputWithContent.tsx @@ -2,7 +2,7 @@ import { useState, type ComponentProps, type ReactNode } from 'react'; import { type CSSProperties, theme } from '../../style'; -import Input, { defaultInputStyle } from './Input'; +import { Input, defaultInputStyle } from './Input'; import View from './View'; type InputWithContentProps = ComponentProps & { @@ -13,7 +13,7 @@ type InputWithContentProps = ComponentProps & { style?: CSSProperties; getStyle?: (focused: boolean) => CSSProperties; }; -export default function InputWithContent({ +export function InputWithContent({ leftContent, rightContent, inputStyle, diff --git a/packages/desktop-client/src/components/common/Label.tsx b/packages/desktop-client/src/components/common/Label.tsx index a540214a53e..09dafa4e01f 100644 --- a/packages/desktop-client/src/components/common/Label.tsx +++ b/packages/desktop-client/src/components/common/Label.tsx @@ -9,7 +9,7 @@ type LabelProps = { style?: CSSProperties; }; -export default function Label({ title, style }: LabelProps) { +export function Label({ title, style }: LabelProps) { return ( ; diff --git a/packages/desktop-client/src/components/common/LinkButton.tsx b/packages/desktop-client/src/components/common/LinkButton.tsx index e5f1ba8a1aa..daec85d6843 100644 --- a/packages/desktop-client/src/components/common/LinkButton.tsx +++ b/packages/desktop-client/src/components/common/LinkButton.tsx @@ -6,11 +6,7 @@ import { styles, theme } from '../../style'; type LinkProps = HTMLAttributes; -export default function LinkButton({ - style, - children, - ...nativeProps -}: LinkProps) { +export function LinkButton({ style, children, ...nativeProps }: LinkProps) { return (