diff --git a/.eslintrc.js b/.eslintrc.js
index f0ee86d..46cbd36 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,10 +1,35 @@
module.exports = {
- plugins: ['prettier'],
+ plugins: ['prettier', 'import'],
extends: ['react-app'],
rules: {
'prettier/prettier': 'error',
'no-unused-vars': 'off',
'no-loop-func': 'off',
- 'no-restricted-globals': 'off'
+ 'no-restricted-globals': 'off',
+
+ 'import/no-useless-path-segments': 'error',
+ 'import/order': [
+ 'error',
+ {
+ groups: [
+ 'builtin', // Built-in types are first
+ 'external',
+ ['sibling', 'parent'], // Then sibling and parent types. They can be mingled together
+ 'index' // Then the index file
+ ],
+ 'newlines-between': 'always',
+ pathGroups: [
+ // Enforce that React (and react-related packages) is the first import
+ { group: 'builtin', pattern: 'react?(-*)', position: 'before' },
+ // Separate imports from Actual from "real" external imports
+ {
+ group: 'external',
+ pattern: 'loot-{core,design}/**/*',
+ position: 'after'
+ }
+ ],
+ pathGroupsExcludedImportTypes: ['react']
+ }
+ ]
}
};
diff --git a/packages/desktop-client/package.json b/packages/desktop-client/package.json
index cd8c29b..b5cfe67 100644
--- a/packages/desktop-client/package.json
+++ b/packages/desktop-client/package.json
@@ -32,7 +32,7 @@
"eslint-config-react-app": "3.0.5",
"eslint-loader": "2.1.1",
"eslint-plugin-flowtype": "2.50.1",
- "eslint-plugin-import": "2.14.0",
+ "eslint-plugin-import": "^2.26.0",
"eslint-plugin-jsx-a11y": "6.1.2",
"eslint-plugin-prettier": "^3.1.4",
"eslint-plugin-react": "7.11.1",
diff --git a/packages/desktop-client/src/components/AnimatedRefresh.js b/packages/desktop-client/src/components/AnimatedRefresh.js
index 4318fea..175529f 100644
--- a/packages/desktop-client/src/components/AnimatedRefresh.js
+++ b/packages/desktop-client/src/components/AnimatedRefresh.js
@@ -1,5 +1,7 @@
import React from 'react';
+
import { css } from 'glamor';
+
import { View } from 'loot-design/src/components/common';
import Refresh from 'loot-design/src/svg/v1/Refresh';
diff --git a/packages/desktop-client/src/components/App.js b/packages/desktop-client/src/components/App.js
index 2280386..1f4d8f8 100644
--- a/packages/desktop-client/src/components/App.js
+++ b/packages/desktop-client/src/components/App.js
@@ -1,12 +1,15 @@
import React from 'react';
import { connect } from 'react-redux';
+
import { css } from 'glamor';
+
import * as actions from 'loot-core/src/client/actions';
import {
init as initConnection,
send
} from 'loot-core/src/platform/client/fetch';
import { styles, hasHiddenScrollbars } from 'loot-design/src/style';
+
import installPolyfills from '../polyfills';
import FatalError from './FatalError';
import ManagementApp from './manager/ManagementApp';
diff --git a/packages/desktop-client/src/components/AppBackground.js b/packages/desktop-client/src/components/AppBackground.js
index f01ff69..c617e4f 100644
--- a/packages/desktop-client/src/components/AppBackground.js
+++ b/packages/desktop-client/src/components/AppBackground.js
@@ -1,8 +1,11 @@
import React from 'react';
-import { View, Block } from 'loot-design/src/components/common';
+
import { css } from 'glamor';
+
+import { View, Block } from 'loot-design/src/components/common';
import AnimatedLoading from 'loot-design/src/svg/v1/AnimatedLoading';
import { colors } from 'loot-design/src/style';
+
import Background from './Background';
function AppBackground({ initializing, loadingText }) {
diff --git a/packages/desktop-client/src/components/Background.js b/packages/desktop-client/src/components/Background.js
index fe39d02..7d337ad 100644
--- a/packages/desktop-client/src/components/Background.js
+++ b/packages/desktop-client/src/components/Background.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { css } from 'glamor';
import BG from './manager/bg.svg';
diff --git a/packages/desktop-client/src/components/BankSyncStatus.js b/packages/desktop-client/src/components/BankSyncStatus.js
index dddc3fc..1387516 100644
--- a/packages/desktop-client/src/components/BankSyncStatus.js
+++ b/packages/desktop-client/src/components/BankSyncStatus.js
@@ -1,9 +1,11 @@
import React from 'react';
import { connect } from 'react-redux';
import { useTransition, animated } from 'react-spring';
+
import * as actions from 'loot-core/src/client/actions';
import { View, Text } from 'loot-design/src/components/common';
import { colors, styles } from 'loot-design/src/style';
+
import AnimatedRefresh from './AnimatedRefresh';
function BankSyncStatus({ accountsSyncing }) {
diff --git a/packages/desktop-client/src/components/Debugger.js b/packages/desktop-client/src/components/Debugger.js
index 770ab6b..eb37911 100644
--- a/packages/desktop-client/src/components/Debugger.js
+++ b/packages/desktop-client/src/components/Debugger.js
@@ -1,10 +1,12 @@
import React from 'react';
+
+import CodeMirror from 'codemirror';
+
import {
send,
init as initConnection
} from 'loot-core/src/platform/client/fetch';
import * as spreadsheet from 'loot-core/src/client/sheetql/spreadsheet';
-import CodeMirror from 'codemirror';
import {
View,
Button,
diff --git a/packages/desktop-client/src/components/FatalError.js b/packages/desktop-client/src/components/FatalError.js
index 48dd267..6666c86 100644
--- a/packages/desktop-client/src/components/FatalError.js
+++ b/packages/desktop-client/src/components/FatalError.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import {
View,
Stack,
diff --git a/packages/desktop-client/src/components/FinancesApp.js b/packages/desktop-client/src/components/FinancesApp.js
index f28507d..04cd497 100644
--- a/packages/desktop-client/src/components/FinancesApp.js
+++ b/packages/desktop-client/src/components/FinancesApp.js
@@ -1,10 +1,12 @@
import React, { useMemo } from 'react';
import { Router, Route, Redirect, Switch, useLocation } from 'react-router-dom';
-import { createBrowserHistory } from 'history';
import { connect } from 'react-redux';
import { DndProvider } from 'react-dnd';
import Backend from 'react-dnd-html5-backend';
+
+import { createBrowserHistory } from 'history';
import hotkeys from 'hotkeys-js';
+
import * as actions from 'loot-core/src/client/actions';
import { SpreadsheetProvider } from 'loot-core/src/client/SpreadsheetProvider';
import checkForUpgradeNotifications from 'loot-core/src/client/upgrade-notifications';
@@ -14,12 +16,12 @@ import { BudgetMonthCountProvider } from 'loot-design/src/components/budget/Budg
import * as undo from 'loot-core/src/platform/client/undo';
import { PayeesProvider } from 'loot-core/src/client/data-hooks/payees';
import { AccountsProvider } from 'loot-core/src/client/data-hooks/accounts';
+
import { getLocationState } from '../util/location-state';
import { makeLocationState } from '../util/location-state';
import { PageTypeProvider } from './Page';
import { ActiveLocationProvider } from './ActiveLocation';
import BankSyncStatus from './BankSyncStatus';
-
import Titlebar, { TitlebarProvider } from './Titlebar';
import FloatableSidebar, { SidebarProvider } from './FloatableSidebar';
import Account from './accounts/Account';
diff --git a/packages/desktop-client/src/components/FloatableSidebar.js b/packages/desktop-client/src/components/FloatableSidebar.js
index 3d676f2..a272c61 100644
--- a/packages/desktop-client/src/components/FloatableSidebar.js
+++ b/packages/desktop-client/src/components/FloatableSidebar.js
@@ -1,7 +1,9 @@
import React, { useState, useEffect, useContext } from 'react';
import { connect } from 'react-redux';
import { withRouter } from 'react-router-dom';
+
import mitt from 'mitt';
+
import * as actions from 'loot-core/src/client/actions';
import { View } from 'loot-design/src/components/common';
import { SIDEBAR_WIDTH } from 'loot-design/src/components/sidebar';
diff --git a/packages/desktop-client/src/components/GlobalKeys.js b/packages/desktop-client/src/components/GlobalKeys.js
index 08d3ad8..0b38966 100644
--- a/packages/desktop-client/src/components/GlobalKeys.js
+++ b/packages/desktop-client/src/components/GlobalKeys.js
@@ -1,5 +1,6 @@
import React from 'react';
import { withRouter } from 'react-router-dom';
+
import Platform from 'loot-core/src/client/platform';
class GlobalKeys extends React.Component {
diff --git a/packages/desktop-client/src/components/LoggedInUser.js b/packages/desktop-client/src/components/LoggedInUser.js
index 46d472f..c02a23c 100644
--- a/packages/desktop-client/src/components/LoggedInUser.js
+++ b/packages/desktop-client/src/components/LoggedInUser.js
@@ -1,6 +1,7 @@
import React, { useState, useEffect } from 'react';
import { connect } from 'react-redux';
import { withRouter } from 'react-router';
+
import * as actions from 'loot-core/src/client/actions';
import {
View,
diff --git a/packages/desktop-client/src/components/MobileWebMessage.js b/packages/desktop-client/src/components/MobileWebMessage.js
index ad0666a..cca240e 100644
--- a/packages/desktop-client/src/components/MobileWebMessage.js
+++ b/packages/desktop-client/src/components/MobileWebMessage.js
@@ -1,4 +1,5 @@
import React, { useState } from 'react';
+
import {
View,
Text,
diff --git a/packages/desktop-client/src/components/Modals.js b/packages/desktop-client/src/components/Modals.js
index 5e756bb..ee19f3a 100644
--- a/packages/desktop-client/src/components/Modals.js
+++ b/packages/desktop-client/src/components/Modals.js
@@ -1,12 +1,13 @@
import React from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import { Route, Switch } from 'react-router-dom';
+
+import { bindActionCreators } from 'redux';
import { createLocation } from 'history';
import Component from '@reactions/component';
+
import * as actions from 'loot-core/src/client/actions';
import { send, listen, unlisten } from 'loot-core/src/platform/client/fetch';
-
import CreateLocalAccount from 'loot-design/src/components/modals/CreateLocalAccount';
import CloseAccount from 'loot-design/src/components/modals/CloseAccount';
import SelectLinkedAccounts from 'loot-design/src/components/modals/SelectLinkedAccounts';
@@ -15,6 +16,7 @@ import LoadBackup from 'loot-design/src/components/modals/LoadBackup';
import PlaidExternalMsg from 'loot-design/src/components/modals/PlaidExternalMsg';
import ImportTransactions from 'loot-design/src/components/modals/ImportTransactions';
import EditField from 'loot-design/src/components/modals/EditField';
+
import CreateAccount from './modals/CreateAccount';
import ManagePayeesWithData from './payees/ManagePayeesWithData';
import ManageRules from './modals/ManageRules';
diff --git a/packages/desktop-client/src/components/Notifications.js b/packages/desktop-client/src/components/Notifications.js
index ff03df4..3875c49 100644
--- a/packages/desktop-client/src/components/Notifications.js
+++ b/packages/desktop-client/src/components/Notifications.js
@@ -1,6 +1,8 @@
import React, { useState, useEffect, useMemo } from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
+
+import { bindActionCreators } from 'redux';
+
import * as actions from 'loot-core/src/client/actions';
import {
View,
diff --git a/packages/desktop-client/src/components/Page.js b/packages/desktop-client/src/components/Page.js
index 757993d..f18332d 100644
--- a/packages/desktop-client/src/components/Page.js
+++ b/packages/desktop-client/src/components/Page.js
@@ -1,5 +1,6 @@
import React from 'react';
import { useHistory } from 'react-router-dom';
+
import { Modal, View, Text } from 'loot-design/src/components/common';
import { styles } from 'loot-design/src/style';
diff --git a/packages/desktop-client/src/components/Settings.js b/packages/desktop-client/src/components/Settings.js
index e9c9a68..f2cb991 100644
--- a/packages/desktop-client/src/components/Settings.js
+++ b/packages/desktop-client/src/components/Settings.js
@@ -1,7 +1,9 @@
import React, { useState, useEffect, useRef } from 'react';
import { connect } from 'react-redux';
-import { css } from 'glamor';
import { Route, Switch, Redirect } from 'react-router-dom';
+
+import { css } from 'glamor';
+
import * as actions from 'loot-core/src/client/actions';
import {
View,
diff --git a/packages/desktop-client/src/components/SidebarWithData.js b/packages/desktop-client/src/components/SidebarWithData.js
index eeaa5e2..1943bbb 100644
--- a/packages/desktop-client/src/components/SidebarWithData.js
+++ b/packages/desktop-client/src/components/SidebarWithData.js
@@ -1,7 +1,9 @@
import React, { useState, useEffect } from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import { withRouter } from 'react-router-dom';
+
+import { bindActionCreators } from 'redux';
+
import { send } from 'loot-core/src/platform/client/fetch';
import { styles, colors } from 'loot-design/src/style';
import {
diff --git a/packages/desktop-client/src/components/SpreadsheetInterface.js b/packages/desktop-client/src/components/SpreadsheetInterface.js
index 856ddc6..4066530 100644
--- a/packages/desktop-client/src/components/SpreadsheetInterface.js
+++ b/packages/desktop-client/src/components/SpreadsheetInterface.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import Cell from 'loot-design/src/components/spreadsheet/Cell';
import { View } from 'loot-design/src/components/common';
diff --git a/packages/desktop-client/src/components/Titlebar.js b/packages/desktop-client/src/components/Titlebar.js
index b96d5a9..dcbdd8f 100644
--- a/packages/desktop-client/src/components/Titlebar.js
+++ b/packages/desktop-client/src/components/Titlebar.js
@@ -1,6 +1,7 @@
import React, { useState, useEffect, useRef, useContext } from 'react';
import { Switch, Route, withRouter } from 'react-router-dom';
import { connect } from 'react-redux';
+
import * as actions from 'loot-core/src/client/actions';
import * as queries from 'loot-core/src/client/queries';
import { listen } from 'loot-core/src/platform/client/fetch';
@@ -20,6 +21,7 @@ import ArrowButtonRight1 from 'loot-design/src/svg/v2/ArrowButtonRight1';
import NavigationMenu from 'loot-design/src/svg/v2/NavigationMenu';
import ArrowLeft from 'loot-design/src/svg/v1/ArrowLeft';
import AlertTriangle from 'loot-design/src/svg/v2/AlertTriangle';
+
import { MonthCountSelector } from './budget/MonthCountSelector';
import AccountSyncCheck from './accounts/AccountSyncCheck';
import LoggedInUser from './LoggedInUser';
diff --git a/packages/desktop-client/src/components/Tutorial.js b/packages/desktop-client/src/components/Tutorial.js
index aeaa4e3..3cbe6e9 100644
--- a/packages/desktop-client/src/components/Tutorial.js
+++ b/packages/desktop-client/src/components/Tutorial.js
@@ -1,9 +1,12 @@
import React from 'react';
import ReactDOM from 'react-dom';
+import { connect } from 'react-redux';
+
import PropTypes from 'prop-types';
import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
+
import * as actions from 'loot-core/src/client/actions';
+
import Intro from './tutorial/Intro';
import BudgetSummary from './tutorial/BudgetSummary';
import BudgetCategories from './tutorial/BudgetCategories';
diff --git a/packages/desktop-client/src/components/TutorialPoints.js b/packages/desktop-client/src/components/TutorialPoints.js
index 91ed03a..f7027e1 100644
--- a/packages/desktop-client/src/components/TutorialPoints.js
+++ b/packages/desktop-client/src/components/TutorialPoints.js
@@ -1,5 +1,6 @@
import React from 'react';
import { connect } from 'react-redux';
+
import PropTypes from 'prop-types';
class Tutorial extends React.Component {
diff --git a/packages/desktop-client/src/components/UpdateNotification.js b/packages/desktop-client/src/components/UpdateNotification.js
index a2af5e8..5804946 100644
--- a/packages/desktop-client/src/components/UpdateNotification.js
+++ b/packages/desktop-client/src/components/UpdateNotification.js
@@ -1,6 +1,8 @@
import React from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
+
+import { bindActionCreators } from 'redux';
+
import * as actions from 'loot-core/src/client/actions';
import { View, Text, Link, Button } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
diff --git a/packages/desktop-client/src/components/accounts/Account.js b/packages/desktop-client/src/components/accounts/Account.js
index 9702010..636f557 100644
--- a/packages/desktop-client/src/components/accounts/Account.js
+++ b/packages/desktop-client/src/components/accounts/Account.js
@@ -1,8 +1,10 @@
import React, { useState, useEffect, useRef, useMemo } from 'react';
-import { bindActionCreators } from 'redux';
import { useSelector, useDispatch } from 'react-redux';
import { Redirect, useParams, useHistory, useLocation } from 'react-router-dom';
+
+import { bindActionCreators } from 'redux';
import { debounce } from 'debounce';
+
import { send, listen } from 'loot-core/src/platform/client/fetch';
import * as actions from 'loot-core/src/client/actions';
import {
@@ -52,6 +54,7 @@ import {
SchedulesProvider,
useCachedSchedules
} from 'loot-core/src/client/data-hooks/schedules';
+
import { authorizeBank } from '../../plaid';
import AnimatedRefresh from '../AnimatedRefresh';
import { useActiveLocation } from '../ActiveLocation';
diff --git a/packages/desktop-client/src/components/accounts/AccountSyncCheck.js b/packages/desktop-client/src/components/accounts/AccountSyncCheck.js
index d32311e..c6e6955 100644
--- a/packages/desktop-client/src/components/accounts/AccountSyncCheck.js
+++ b/packages/desktop-client/src/components/accounts/AccountSyncCheck.js
@@ -1,9 +1,11 @@
import React, { useState } from 'react';
import { connect } from 'react-redux';
+
import * as actions from 'loot-core/src/client/actions';
import { View, Button, Tooltip } from 'loot-design/src/components/common';
import ExclamationOutline from 'loot-design/src/svg/v1/ExclamationOutline';
import { colors } from 'loot-design/src/style';
+
import { reauthorizeBank } from '../../plaid';
function getErrorMessage(type, code) {
diff --git a/packages/desktop-client/src/components/accounts/Filters.js b/packages/desktop-client/src/components/accounts/Filters.js
index e39a9cd..495bfe7 100644
--- a/packages/desktop-client/src/components/accounts/Filters.js
+++ b/packages/desktop-client/src/components/accounts/Filters.js
@@ -1,11 +1,13 @@
import React, { useState, useRef, useEffect, useReducer } from 'react';
import { useSelector } from 'react-redux';
+
import scopeTab from 'react-modal/lib/helpers/scopeTab';
import {
parse as parseDate,
format as formatDate,
isValid as isDateValid
} from 'date-fns';
+
import { send } from 'loot-core/src/platform/client/fetch';
import { getMonthYearFormat } from 'loot-core/src/shared/months';
import { titleFirst } from 'loot-core/src/shared/util';
@@ -31,6 +33,7 @@ import {
import DeleteIcon from 'loot-design/src/svg/Delete';
import SettingsSliderAlternate from 'loot-design/src/svg/v2/SettingsSliderAlternate';
import { colors } from 'loot-design/src/style';
+
import GenericInput from '../util/GenericInput';
import { Value } from '../modals/ManageRules';
diff --git a/packages/desktop-client/src/components/accounts/SimpleTransactionsTable.js b/packages/desktop-client/src/components/accounts/SimpleTransactionsTable.js
index ea84192..1db3fa0 100644
--- a/packages/desktop-client/src/components/accounts/SimpleTransactionsTable.js
+++ b/packages/desktop-client/src/components/accounts/SimpleTransactionsTable.js
@@ -1,10 +1,12 @@
import React, { useMemo, useCallback } from 'react';
import { useSelector } from 'react-redux';
+
import {
format as formatDate,
parseISO,
isValid as isDateValid
} from 'date-fns';
+
import {
Table,
Row,
@@ -23,6 +25,7 @@ import {
} from 'loot-core/src/client/reducers/queries';
import ArrowsSynchronize from 'loot-design/src/svg/v2/ArrowsSynchronize';
import { styles } from 'loot-design/src/style';
+
import DisplayId from '../util/DisplayId';
function serializeTransaction(transaction, dateFormat) {
diff --git a/packages/desktop-client/src/components/accounts/TransactionList.js b/packages/desktop-client/src/components/accounts/TransactionList.js
index a07c31f..7ea870d 100644
--- a/packages/desktop-client/src/components/accounts/TransactionList.js
+++ b/packages/desktop-client/src/components/accounts/TransactionList.js
@@ -1,5 +1,6 @@
import React, { useRef, useEffect, useCallback, useLayoutEffect } from 'react';
import { useDispatch } from 'react-redux';
+
import {
splitTransaction,
updateTransaction,
@@ -9,7 +10,9 @@ import {
} from 'loot-core/src/shared/transactions';
import { send } from 'loot-core/src/platform/client/fetch';
import { getChangedValues, applyChanges } from 'loot-core/src/shared/util';
+
import { TransactionTable } from './TransactionsTable';
+
const uuid = require('loot-core/src/platform/uuid');
// When data changes, there are two ways to update the UI:
diff --git a/packages/desktop-client/src/components/accounts/TransactionsTable.js b/packages/desktop-client/src/components/accounts/TransactionsTable.js
index 3ba3d9d..0fd3469 100644
--- a/packages/desktop-client/src/components/accounts/TransactionsTable.js
+++ b/packages/desktop-client/src/components/accounts/TransactionsTable.js
@@ -9,11 +9,13 @@ import React, {
useReducer
} from 'react';
import { useSelector, useDispatch } from 'react-redux';
+
import {
format as formatDate,
parseISO,
isValid as isDateValid
} from 'date-fns';
+
import { View, Text, Tooltip, Button } from 'loot-design/src/components/common';
import CategoryAutocomplete from 'loot-design/src/components/CategorySelect';
import PayeeAutocomplete from 'loot-design/src/components/PayeeAutocomplete';
@@ -63,6 +65,7 @@ import {
import { useMergedRefs } from 'loot-design/src/components/useMergedRefs';
import { useCachedSchedules } from 'loot-core/src/client/data-hooks/schedules';
import { getScheduledAmount } from 'loot-core/src/shared/schedules';
+
import { getStatusProps } from '../schedules/StatusBadge';
let TABLE_BACKGROUND_COLOR = colors.n11;
diff --git a/packages/desktop-client/src/components/accounts/TransactionsTable.test.js b/packages/desktop-client/src/components/accounts/TransactionsTable.test.js
index eb4a9f3..f3f5519 100644
--- a/packages/desktop-client/src/components/accounts/TransactionsTable.test.js
+++ b/packages/desktop-client/src/components/accounts/TransactionsTable.test.js
@@ -1,7 +1,9 @@
import React from 'react';
+
import { act } from 'react-dom/test-utils';
import { render, fireEvent } from '@testing-library/react';
import { format as formatDate, parse as parseDate } from 'date-fns';
+
import { integerToCurrency } from 'loot-core/src/shared/util';
import { initServer } from 'loot-core/src/platform/client/fetch';
import {
@@ -17,7 +19,9 @@ import {
updateTransaction
} from 'loot-core/src/shared';
import { SelectedProviderWithItems } from 'loot-design/src/components';
+
import { SplitsExpandedProvider, TransactionTable } from './TransactionsTable';
+
const uuid = require('loot-core/src/platform/uuid');
const accounts = [generateAccount('Bank of America')];
diff --git a/packages/desktop-client/src/components/budget/MonthCountSelector.js b/packages/desktop-client/src/components/budget/MonthCountSelector.js
index ce90820..b11b28b 100644
--- a/packages/desktop-client/src/components/budget/MonthCountSelector.js
+++ b/packages/desktop-client/src/components/budget/MonthCountSelector.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { colors } from 'loot-design/src/style';
import { View } from 'loot-design/src/components/common';
import { useBudgetMonthCount } from 'loot-design/src/components/budget/BudgetMonthCountContext';
diff --git a/packages/desktop-client/src/components/budget/index.js b/packages/desktop-client/src/components/budget/index.js
index b1d862d..a063fe8 100644
--- a/packages/desktop-client/src/components/budget/index.js
+++ b/packages/desktop-client/src/components/budget/index.js
@@ -1,16 +1,14 @@
import React, { useContext, useMemo } from 'react';
import { connect } from 'react-redux';
+
import * as actions from 'loot-core/src/client/actions';
import { send, listen } from 'loot-core/src/platform/client/fetch';
import * as monthUtils from 'loot-core/src/shared/months';
import { getValidMonthBounds } from 'loot-design/src/components/budget/MonthsContext';
-
import * as rollover from 'loot-design/src/components/budget/rollover/rollover-components';
import { RolloverContext } from 'loot-design/src/components/budget/rollover/RolloverContext';
-
import * as report from 'loot-design/src/components/budget/report/components';
import { ReportProvider } from 'loot-design/src/components/budget/report/ReportContext';
-
import DynamicBudgetTable from 'loot-design/src/components/budget/DynamicBudgetTable';
import SpreadsheetContext from 'loot-design/src/components/spreadsheet/SpreadsheetContext';
import { View } from 'loot-design/src/components/common';
@@ -25,6 +23,7 @@ import {
updateGroup,
deleteGroup
} from 'loot-core/src/shared/categories.js';
+
import { TitlebarContext } from '../Titlebar';
let _initialBudgetMonth = null;
diff --git a/packages/desktop-client/src/components/debug/index.js b/packages/desktop-client/src/components/debug/index.js
index f7419d8..9270c49 100644
--- a/packages/desktop-client/src/components/debug/index.js
+++ b/packages/desktop-client/src/components/debug/index.js
@@ -1,5 +1,7 @@
import React from 'react';
+
import styled from 'styled-components';
+
import { send } from 'loot-core/src/platform/client/fetch';
const Container = styled.div`
diff --git a/packages/desktop-client/src/components/manager/ConfigServer.js b/packages/desktop-client/src/components/manager/ConfigServer.js
index b9380b0..81ca32e 100644
--- a/packages/desktop-client/src/components/manager/ConfigServer.js
+++ b/packages/desktop-client/src/components/manager/ConfigServer.js
@@ -1,6 +1,7 @@
import React, { useState, useEffect } from 'react';
import { useDispatch } from 'react-redux';
import { useHistory } from 'react-router-dom';
+
import {
View,
Text,
@@ -10,6 +11,7 @@ import {
import { colors } from 'loot-design/src/style';
import { signOut, loggedIn } from 'loot-core/src/client/actions/user';
import { send } from 'loot-core/src/platform/client/fetch';
+
import { Title, Input } from './subscribe/common';
export default function ConfigServer() {
diff --git a/packages/desktop-client/src/components/manager/ManagementApp.js b/packages/desktop-client/src/components/manager/ManagementApp.js
index 7d574c7..4bb4b1a 100644
--- a/packages/desktop-client/src/components/manager/ManagementApp.js
+++ b/packages/desktop-client/src/components/manager/ManagementApp.js
@@ -1,15 +1,17 @@
import React from 'react';
import { connect } from 'react-redux';
-import { createBrowserHistory } from 'history';
import { Switch, Redirect, Router, Route } from 'react-router-dom';
+
+import { createBrowserHistory } from 'history';
+
import * as actions from 'loot-core/src/client/actions';
import { View, Text } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
+
import LoggedInUser from '../LoggedInUser';
import Notifications from '../Notifications';
import useServerVersion from '../../hooks/useServerVersion';
import ServerURL from './ServerURL';
-
import Modals from './Modals';
import Login from './subscribe/Login';
import Bootstrap from './subscribe/Bootstrap';
diff --git a/packages/desktop-client/src/components/manager/Modals.js b/packages/desktop-client/src/components/manager/Modals.js
index e45b1ec..6fa892a 100644
--- a/packages/desktop-client/src/components/manager/Modals.js
+++ b/packages/desktop-client/src/components/manager/Modals.js
@@ -1,7 +1,9 @@
import React from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
+
+import { bindActionCreators } from 'redux';
import Component from '@reactions/component';
+
import { send } from 'loot-core/src/platform/client/fetch';
import * as actions from 'loot-core/src/client/actions';
import { View } from 'loot-design/src/components/common';
@@ -12,6 +14,7 @@ import ImportYNAB4 from 'loot-design/src/components/manager/ImportYNAB4';
import ImportYNAB5 from 'loot-design/src/components/manager/ImportYNAB5';
import ImportActual from 'loot-design/src/components/manager/ImportActual';
import DeleteFile from 'loot-design/src/components/manager/DeleteFile';
+
import CreateEncryptionKey from '../modals/CreateEncryptionKey';
import FixEncryptionKey from '../modals/FixEncryptionKey';
diff --git a/packages/desktop-client/src/components/manager/ServerURL.js b/packages/desktop-client/src/components/manager/ServerURL.js
index c1ba72f..ef3f6f0 100644
--- a/packages/desktop-client/src/components/manager/ServerURL.js
+++ b/packages/desktop-client/src/components/manager/ServerURL.js
@@ -1,4 +1,5 @@
import React, { useState, useEffect } from 'react';
+
import { View, Text, AnchorLink } from 'loot-design/src/components/common';
import { send } from 'loot-core/src/platform/client/fetch';
diff --git a/packages/desktop-client/src/components/manager/subscribe/Bootstrap.js b/packages/desktop-client/src/components/manager/subscribe/Bootstrap.js
index 534c90c..7824a3f 100644
--- a/packages/desktop-client/src/components/manager/subscribe/Bootstrap.js
+++ b/packages/desktop-client/src/components/manager/subscribe/Bootstrap.js
@@ -1,11 +1,13 @@
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
import { useHistory } from 'react-router-dom';
+
import { View, Text, Button } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
import { loggedIn } from 'loot-core/src/client/actions/user';
import { createBudget } from 'loot-core/src/client/actions/budgets';
import { send } from 'loot-core/src/platform/client/fetch';
+
import { ConfirmPasswordForm } from './ConfirmPasswordForm';
import { useBootstrapped, Title } from './common';
diff --git a/packages/desktop-client/src/components/manager/subscribe/ChangePassword.js b/packages/desktop-client/src/components/manager/subscribe/ChangePassword.js
index 60daf23..b77834a 100644
--- a/packages/desktop-client/src/components/manager/subscribe/ChangePassword.js
+++ b/packages/desktop-client/src/components/manager/subscribe/ChangePassword.js
@@ -1,9 +1,11 @@
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
import { useHistory } from 'react-router-dom';
+
import { View, Text, Button } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
import { send } from 'loot-core/src/platform/client/fetch';
+
import { ConfirmPasswordForm } from './ConfirmPasswordForm';
import { Title } from './common';
diff --git a/packages/desktop-client/src/components/manager/subscribe/ConfirmPasswordForm.js b/packages/desktop-client/src/components/manager/subscribe/ConfirmPasswordForm.js
index c71f7a5..52453cd 100644
--- a/packages/desktop-client/src/components/manager/subscribe/ConfirmPasswordForm.js
+++ b/packages/desktop-client/src/components/manager/subscribe/ConfirmPasswordForm.js
@@ -1,5 +1,7 @@
import React, { useState } from 'react';
+
import { View, ButtonWithLoading } from 'loot-design/src/components/common';
+
import { Input } from './common';
export function ConfirmPasswordForm({ buttons, onSetPassword, onError }) {
diff --git a/packages/desktop-client/src/components/manager/subscribe/Error.js b/packages/desktop-client/src/components/manager/subscribe/Error.js
index 8de45a9..82903b1 100644
--- a/packages/desktop-client/src/components/manager/subscribe/Error.js
+++ b/packages/desktop-client/src/components/manager/subscribe/Error.js
@@ -1,5 +1,6 @@
import React from 'react';
import { useHistory, useLocation } from 'react-router-dom';
+
import { View, Text, Button } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
diff --git a/packages/desktop-client/src/components/manager/subscribe/Login.js b/packages/desktop-client/src/components/manager/subscribe/Login.js
index 76befa8..0844a46 100644
--- a/packages/desktop-client/src/components/manager/subscribe/Login.js
+++ b/packages/desktop-client/src/components/manager/subscribe/Login.js
@@ -1,6 +1,7 @@
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
import { useHistory } from 'react-router-dom';
+
import {
View,
Text,
@@ -11,6 +12,7 @@ import { colors } from 'loot-design/src/style';
import { loggedIn } from 'loot-core/src/client/actions/user';
import { createBudget } from 'loot-core/src/client/actions/budgets';
import { send } from 'loot-core/src/platform/client/fetch';
+
import { useBootstrapped, Title, Input } from './common';
export default function Login() {
diff --git a/packages/desktop-client/src/components/manager/subscribe/common.js b/packages/desktop-client/src/components/manager/subscribe/common.js
index 4c5a25c..2d0778f 100644
--- a/packages/desktop-client/src/components/manager/subscribe/common.js
+++ b/packages/desktop-client/src/components/manager/subscribe/common.js
@@ -1,5 +1,6 @@
import React, { useEffect, useState } from 'react';
import { useHistory, useLocation } from 'react-router-dom';
+
import {
Text,
Button,
diff --git a/packages/desktop-client/src/components/modals/ConfirmCategoryDelete.js b/packages/desktop-client/src/components/modals/ConfirmCategoryDelete.js
index dd315a8..74af79b 100644
--- a/packages/desktop-client/src/components/modals/ConfirmCategoryDelete.js
+++ b/packages/desktop-client/src/components/modals/ConfirmCategoryDelete.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import {
View,
Text,
diff --git a/packages/desktop-client/src/components/modals/CreateAccount.js b/packages/desktop-client/src/components/modals/CreateAccount.js
index 1930d2f..c81e295 100644
--- a/packages/desktop-client/src/components/modals/CreateAccount.js
+++ b/packages/desktop-client/src/components/modals/CreateAccount.js
@@ -1,9 +1,12 @@
import React from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
+
+import { bindActionCreators } from 'redux';
+
import * as actions from 'loot-core/src/client/actions';
import { View, Text, Modal, Button } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
+
import { authorizeBank } from '../../plaid';
class CreateAccount extends React.Component {
diff --git a/packages/desktop-client/src/components/modals/CreateEncryptionKey.js b/packages/desktop-client/src/components/modals/CreateEncryptionKey.js
index c26de87..ff5ad00 100644
--- a/packages/desktop-client/src/components/modals/CreateEncryptionKey.js
+++ b/packages/desktop-client/src/components/modals/CreateEncryptionKey.js
@@ -1,5 +1,7 @@
import React, { useState } from 'react';
+
import { css } from 'glamor';
+
import {
View,
Text,
diff --git a/packages/desktop-client/src/components/modals/EditRule.js b/packages/desktop-client/src/components/modals/EditRule.js
index c55c2c3..9d33ca0 100644
--- a/packages/desktop-client/src/components/modals/EditRule.js
+++ b/packages/desktop-client/src/components/modals/EditRule.js
@@ -1,5 +1,6 @@
import React, { useState, useEffect, useRef, useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
+
import {
initiallyLoadPayees,
setUndoEnabled
@@ -39,6 +40,7 @@ import {
amountToInteger
} from 'loot-core/src/shared/util';
import * as monthUtils from 'loot-core/src/shared/months';
+
import SimpleTransactionsTable from '../accounts/SimpleTransactionsTable';
import { StatusBadge } from '../schedules/StatusBadge';
import DisplayId from '../util/DisplayId';
diff --git a/packages/desktop-client/src/components/modals/FixEncryptionKey.js b/packages/desktop-client/src/components/modals/FixEncryptionKey.js
index c9c43ca..b196ee4 100644
--- a/packages/desktop-client/src/components/modals/FixEncryptionKey.js
+++ b/packages/desktop-client/src/components/modals/FixEncryptionKey.js
@@ -1,4 +1,5 @@
import React, { useState } from 'react';
+
import {
View,
Text,
diff --git a/packages/desktop-client/src/components/modals/ManageRules.js b/packages/desktop-client/src/components/modals/ManageRules.js
index 61f89bb..3fdd12c 100644
--- a/packages/desktop-client/src/components/modals/ManageRules.js
+++ b/packages/desktop-client/src/components/modals/ManageRules.js
@@ -1,7 +1,9 @@
import React, { useState, useEffect, useRef, useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
+
import { css } from 'glamor';
import { format as formatDate, parseISO } from 'date-fns';
+
import * as undo from 'loot-core/src/platform/client/undo';
import { initiallyLoadPayees } from 'loot-core/src/client/actions/queries';
import q from 'loot-core/src/client/query-helpers';
diff --git a/packages/desktop-client/src/components/modals/MergeUnusedPayees.js b/packages/desktop-client/src/components/modals/MergeUnusedPayees.js
index 58920d0..0f705e9 100644
--- a/packages/desktop-client/src/components/modals/MergeUnusedPayees.js
+++ b/packages/desktop-client/src/components/modals/MergeUnusedPayees.js
@@ -1,5 +1,6 @@
import React, { useState, useRef, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
+
import {
View,
Text,
diff --git a/packages/desktop-client/src/components/modals/WelcomeScreen.js b/packages/desktop-client/src/components/modals/WelcomeScreen.js
index 8cab2fe..b627230 100644
--- a/packages/desktop-client/src/components/modals/WelcomeScreen.js
+++ b/packages/desktop-client/src/components/modals/WelcomeScreen.js
@@ -1,5 +1,6 @@
import React from 'react';
import { connect } from 'react-redux';
+
import * as actions from 'loot-core/src/client/actions';
import {
View,
diff --git a/packages/desktop-client/src/components/payees/ManagePayeesWithData.js b/packages/desktop-client/src/components/payees/ManagePayeesWithData.js
index c80927f..89be6a2 100644
--- a/packages/desktop-client/src/components/payees/ManagePayeesWithData.js
+++ b/packages/desktop-client/src/components/payees/ManagePayeesWithData.js
@@ -1,5 +1,6 @@
import React, { useState, useEffect, useRef } from 'react';
import { connect } from 'react-redux';
+
import * as actions from 'loot-core/src/client/actions';
import * as undo from 'loot-core/src/platform/client/undo';
import { send, listen } from 'loot-core/src/platform/client/fetch';
diff --git a/packages/desktop-client/src/components/reports/CashFlow.js b/packages/desktop-client/src/components/reports/CashFlow.js
index 45b3ee4..a970144 100644
--- a/packages/desktop-client/src/components/reports/CashFlow.js
+++ b/packages/desktop-client/src/components/reports/CashFlow.js
@@ -1,5 +1,7 @@
import React, { useState, useEffect } from 'react';
+
import * as d from 'date-fns';
+
import {
View,
Text,
@@ -12,6 +14,7 @@ import { send } from 'loot-core/src/platform/client/fetch';
import * as monthUtils from 'loot-core/src/shared/months';
import { integerToCurrency } from 'loot-core/src/shared/util';
import { colors } from 'loot-design/src/style';
+
import Header from './Header';
import Change from './Change';
import CashFlowGraph from './graphs/CashFlowGraph';
diff --git a/packages/desktop-client/src/components/reports/Change.js b/packages/desktop-client/src/components/reports/Change.js
index 61e9a37..cbdfc0f 100644
--- a/packages/desktop-client/src/components/reports/Change.js
+++ b/packages/desktop-client/src/components/reports/Change.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { styles } from 'loot-design/src/style';
import { integerToCurrency } from 'loot-core/src/shared/util';
import { Block } from 'loot-design/src/components/common';
diff --git a/packages/desktop-client/src/components/reports/Container.js b/packages/desktop-client/src/components/reports/Container.js
index 0c53f5d..5542081 100644
--- a/packages/desktop-client/src/components/reports/Container.js
+++ b/packages/desktop-client/src/components/reports/Container.js
@@ -1,7 +1,8 @@
import React from 'react';
-import { View } from 'loot-design/src/components/common';
import AutoSizer from 'react-virtualized-auto-sizer';
+import { View } from 'loot-design/src/components/common';
+
class Container extends React.Component {
render() {
const { style, children } = this.props;
diff --git a/packages/desktop-client/src/components/reports/DateRange.js b/packages/desktop-client/src/components/reports/DateRange.js
index 33719b4..0a98466 100644
--- a/packages/desktop-client/src/components/reports/DateRange.js
+++ b/packages/desktop-client/src/components/reports/DateRange.js
@@ -1,5 +1,7 @@
import React from 'react';
+
import * as d from 'date-fns';
+
import { colors } from 'loot-design/src/style';
import { Block } from 'loot-design/src/components/common';
diff --git a/packages/desktop-client/src/components/reports/Header.js b/packages/desktop-client/src/components/reports/Header.js
index a73c9e8..546f7c4 100644
--- a/packages/desktop-client/src/components/reports/Header.js
+++ b/packages/desktop-client/src/components/reports/Header.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { styles } from 'loot-design/src/style';
import {
View,
diff --git a/packages/desktop-client/src/components/reports/NetWorth.js b/packages/desktop-client/src/components/reports/NetWorth.js
index 40e007d..f2ffec7 100644
--- a/packages/desktop-client/src/components/reports/NetWorth.js
+++ b/packages/desktop-client/src/components/reports/NetWorth.js
@@ -1,13 +1,16 @@
import React, { useState, useEffect } from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
+
+import { bindActionCreators } from 'redux';
import * as d from 'date-fns';
+
import * as actions from 'loot-core/src/client/actions';
import { View, P } from 'loot-design/src/components/common';
import { styles } from 'loot-design/src/style';
import * as monthUtils from 'loot-core/src/shared/months';
import { integerToCurrency } from 'loot-core/src/shared/util';
import { send } from 'loot-core/src/platform/client/fetch';
+
import Header from './Header';
import { fromDateRepr } from './util';
import useReport from './useReport';
diff --git a/packages/desktop-client/src/components/reports/Overview.js b/packages/desktop-client/src/components/reports/Overview.js
index 2366656..456a52c 100644
--- a/packages/desktop-client/src/components/reports/Overview.js
+++ b/packages/desktop-client/src/components/reports/Overview.js
@@ -1,12 +1,15 @@
import React from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
+
+import { bindActionCreators } from 'redux';
import { VictoryBar, VictoryGroup, VictoryVoronoiContainer } from 'victory';
+
import * as actions from 'loot-core/src/client/actions';
import { View, Block, AnchorLink } from 'loot-design/src/components/common';
import { colors, styles } from 'loot-design/src/style';
import * as monthUtils from 'loot-core/src/shared/months';
import { integerToCurrency } from 'loot-core/src/shared/util';
+
import { useArgsMemo } from './util';
import theme from './chart-theme';
import Container from './Container';
diff --git a/packages/desktop-client/src/components/reports/Tooltip.js b/packages/desktop-client/src/components/reports/Tooltip.js
index b2a1654..254b9a2 100644
--- a/packages/desktop-client/src/components/reports/Tooltip.js
+++ b/packages/desktop-client/src/components/reports/Tooltip.js
@@ -1,7 +1,9 @@
import React from 'react';
import ReactDOM from 'react-dom';
+
import { VictoryTooltip } from 'victory';
import { css, before } from 'glamor';
+
import { colors } from 'loot-design/src/style';
class Tooltip extends React.Component {
diff --git a/packages/desktop-client/src/components/reports/graphs/CashFlowGraph.js b/packages/desktop-client/src/components/reports/graphs/CashFlowGraph.js
index ea050ab..3091921 100644
--- a/packages/desktop-client/src/components/reports/graphs/CashFlowGraph.js
+++ b/packages/desktop-client/src/components/reports/graphs/CashFlowGraph.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import {
VictoryChart,
VictoryBar,
@@ -8,7 +9,9 @@ import {
VictoryGroup
} from 'victory';
import * as d from 'date-fns';
+
import { colors } from 'loot-design/src/style';
+
import Container from '../Container';
import Tooltip from '../Tooltip';
import theme from '../chart-theme';
diff --git a/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.js b/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.js
index 0a894fd..43502f5 100644
--- a/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.js
+++ b/packages/desktop-client/src/components/reports/graphs/NetWorthGraph.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import {
VictoryChart,
VictoryBar,
@@ -8,6 +9,7 @@ import {
VictoryGroup
} from 'victory';
import * as d from 'date-fns';
+
import Container from '../Container';
import Tooltip from '../Tooltip';
import theme from '../chart-theme';
diff --git a/packages/desktop-client/src/components/reports/graphs/cash-flow-spreadsheet.js b/packages/desktop-client/src/components/reports/graphs/cash-flow-spreadsheet.js
index e7400fa..a632d81 100644
--- a/packages/desktop-client/src/components/reports/graphs/cash-flow-spreadsheet.js
+++ b/packages/desktop-client/src/components/reports/graphs/cash-flow-spreadsheet.js
@@ -1,9 +1,12 @@
import React from 'react';
-import * as monthUtils from 'loot-core/src/shared/months';
+
import * as d from 'date-fns';
+
+import * as monthUtils from 'loot-core/src/shared/months';
import { AlignedText } from 'loot-design/src/components/common';
import { integerToCurrency, integerToAmount } from 'loot-core/src/shared/util';
import q from 'loot-core/src/client/query-helpers';
+
import { fromDateRepr, fromDateReprToDay, runAll, index } from '../util';
export function simpleCashFlow(start, end) {
diff --git a/packages/desktop-client/src/components/reports/graphs/net-worth-spreadsheet.js b/packages/desktop-client/src/components/reports/graphs/net-worth-spreadsheet.js
index 7c09f2b..58135c5 100644
--- a/packages/desktop-client/src/components/reports/graphs/net-worth-spreadsheet.js
+++ b/packages/desktop-client/src/components/reports/graphs/net-worth-spreadsheet.js
@@ -1,6 +1,8 @@
import React from 'react';
-import * as monthUtils from 'loot-core/src/shared/months';
+
import * as d from 'date-fns';
+
+import * as monthUtils from 'loot-core/src/shared/months';
import { AlignedText } from 'loot-design/src/components/common';
import q, { runQuery } from 'loot-core/src/client/query-helpers';
import {
@@ -8,6 +10,7 @@ import {
integerToAmount,
amountToInteger
} from 'loot-core/src/shared/util';
+
import { index } from '../util';
export default function createSpreadsheet(start, end, accounts) {
diff --git a/packages/desktop-client/src/components/reports/index.js b/packages/desktop-client/src/components/reports/index.js
index b4ff198..07f2f1d 100644
--- a/packages/desktop-client/src/components/reports/index.js
+++ b/packages/desktop-client/src/components/reports/index.js
@@ -1,6 +1,8 @@
import React from 'react';
import { Route } from 'react-router-dom';
+
import { View } from 'loot-design/src/components/common';
+
import Overview from './Overview';
import NetWorth from './NetWorth';
import CashFlow from './CashFlow';
diff --git a/packages/desktop-client/src/components/reports/util.js b/packages/desktop-client/src/components/reports/util.js
index 5c297ca..078d54d 100644
--- a/packages/desktop-client/src/components/reports/util.js
+++ b/packages/desktop-client/src/components/reports/util.js
@@ -1,4 +1,5 @@
import { useMemo } from 'react';
+
import { runQuery } from 'loot-core/src/client/query-helpers';
export function useArgsMemo(func) {
diff --git a/packages/desktop-client/src/components/schedules/DiscoverSchedules.js b/packages/desktop-client/src/components/schedules/DiscoverSchedules.js
index ae2602c..86c5d52 100644
--- a/packages/desktop-client/src/components/schedules/DiscoverSchedules.js
+++ b/packages/desktop-client/src/components/schedules/DiscoverSchedules.js
@@ -1,5 +1,6 @@
import React, { useState, useEffect } from 'react';
import { useLocation, useHistory } from 'react-router-dom';
+
import q, { runQuery } from 'loot-core/src/client/query-helpers';
import Platform from 'loot-core/src/client/platform';
import { send } from 'loot-core/src/platform/client/fetch';
@@ -24,6 +25,7 @@ import useSelected, {
useSelectedItems,
SelectedProvider
} from 'loot-design/src/components/useSelected';
+
import { Page } from '../Page';
import DisplayId from '../util/DisplayId';
import { ScheduleAmountCell } from './SchedulesTable';
diff --git a/packages/desktop-client/src/components/schedules/EditSchedule.js b/packages/desktop-client/src/components/schedules/EditSchedule.js
index 0e25e3b..8af6f50 100644
--- a/packages/desktop-client/src/components/schedules/EditSchedule.js
+++ b/packages/desktop-client/src/components/schedules/EditSchedule.js
@@ -1,6 +1,7 @@
import React, { useEffect, useReducer } from 'react';
import { useParams, useHistory } from 'react-router-dom';
import { useDispatch, useSelector } from 'react-redux';
+
import { pushModal } from 'loot-core/src/client/actions/modals';
import { send, sendCatch } from 'loot-core/src/platform/client/fetch';
import q, { runQuery, liveQuery } from 'loot-core/src/client/query-helpers';
@@ -22,6 +23,7 @@ import useSelected, {
SelectedProvider
} from 'loot-design/src/components/useSelected';
import RecurringSchedulePicker from 'loot-design/src/components/RecurringSchedulePicker';
+
import SimpleTransactionsTable from '../accounts/SimpleTransactionsTable';
import { usePageType } from '../Page';
import { Page } from '../Page';
diff --git a/packages/desktop-client/src/components/schedules/LinkSchedule.js b/packages/desktop-client/src/components/schedules/LinkSchedule.js
index 1daa056..07d1b46 100644
--- a/packages/desktop-client/src/components/schedules/LinkSchedule.js
+++ b/packages/desktop-client/src/components/schedules/LinkSchedule.js
@@ -1,9 +1,11 @@
import React, { useCallback } from 'react';
import { useSelector } from 'react-redux';
import { useLocation, useHistory } from 'react-router-dom';
+
import { useSchedules } from 'loot-core/src/client/data-hooks/schedules';
import { send } from 'loot-core/src/platform/client/fetch';
import { Text } from 'loot-design/src/components/common';
+
import { Page } from '../Page';
import { SchedulesTable } from './SchedulesTable';
diff --git a/packages/desktop-client/src/components/schedules/PostsOfflineNotification.js b/packages/desktop-client/src/components/schedules/PostsOfflineNotification.js
index 2d7cdcd..722379c 100644
--- a/packages/desktop-client/src/components/schedules/PostsOfflineNotification.js
+++ b/packages/desktop-client/src/components/schedules/PostsOfflineNotification.js
@@ -1,8 +1,10 @@
import React from 'react';
import { useLocation, useHistory } from 'react-router-dom';
+
import { send } from 'loot-core/src/platform/client/fetch';
import { Text, P, Button, Stack } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
+
import { Page } from '../Page';
import DisplayId from '../util/DisplayId';
diff --git a/packages/desktop-client/src/components/schedules/SchedulesTable.js b/packages/desktop-client/src/components/schedules/SchedulesTable.js
index fa2a339..6d8d732 100644
--- a/packages/desktop-client/src/components/schedules/SchedulesTable.js
+++ b/packages/desktop-client/src/components/schedules/SchedulesTable.js
@@ -1,5 +1,6 @@
import React, { useState, useMemo } from 'react';
import { useSelector } from 'react-redux';
+
import { integerToCurrency } from 'loot-core/src/shared/util';
import { colors } from 'loot-design/src/style';
import {
@@ -20,6 +21,7 @@ import * as monthUtils from 'loot-core/src/shared/months';
import { getScheduledAmount } from 'loot-core/src/shared/schedules';
import DotsHorizontalTriple from 'loot-design/src/svg/v1/DotsHorizontalTriple';
import Check from 'loot-design/src/svg/v2/Check';
+
import DisplayId from '../util/DisplayId';
import { StatusBadge } from './StatusBadge';
diff --git a/packages/desktop-client/src/components/schedules/StatusBadge.js b/packages/desktop-client/src/components/schedules/StatusBadge.js
index 8a2eb5f..2f97a04 100644
--- a/packages/desktop-client/src/components/schedules/StatusBadge.js
+++ b/packages/desktop-client/src/components/schedules/StatusBadge.js
@@ -1,8 +1,8 @@
import React from 'react';
+
import { colors } from 'loot-design/src/style';
import { View, Text } from 'loot-design/src/components/common';
import { titleFirst } from 'loot-core/src/shared/util';
-
import EditSkull1 from 'loot-design/src/svg/v2/EditSkull1';
import AlertTriangle from 'loot-design/src/svg/v2/AlertTriangle';
import CalendarIcon from 'loot-design/src/svg/v2/Calendar';
diff --git a/packages/desktop-client/src/components/schedules/index.js b/packages/desktop-client/src/components/schedules/index.js
index ede1a8c..2e39691 100644
--- a/packages/desktop-client/src/components/schedules/index.js
+++ b/packages/desktop-client/src/components/schedules/index.js
@@ -1,8 +1,10 @@
import React from 'react';
import { useHistory } from 'react-router-dom';
+
import { View, Button } from 'loot-design/src/components/common';
import { send } from 'loot-core/src/platform/client/fetch';
import { useSchedules } from 'loot-core/src/client/data-hooks/schedules';
+
import { Page } from '../Page';
import { SchedulesTable, ROW_HEIGHT } from './SchedulesTable';
diff --git a/packages/desktop-client/src/components/tools/FixSplitsTool.js b/packages/desktop-client/src/components/tools/FixSplitsTool.js
index 15e5026..2d82c85 100644
--- a/packages/desktop-client/src/components/tools/FixSplitsTool.js
+++ b/packages/desktop-client/src/components/tools/FixSplitsTool.js
@@ -1,7 +1,9 @@
import React, { useState } from 'react';
+
import { send } from 'loot-core/src/platform/client/fetch';
import { colors } from 'loot-design/src/style';
import { View, P, ButtonWithLoading } from 'loot-design/src/components/common';
+
import { Page } from '../Page';
function renderResults(results) {
diff --git a/packages/desktop-client/src/components/tutorial/BudgetCategories.js b/packages/desktop-client/src/components/tutorial/BudgetCategories.js
index 3efb8de..fbda816 100644
--- a/packages/desktop-client/src/components/tutorial/BudgetCategories.js
+++ b/packages/desktop-client/src/components/tutorial/BudgetCategories.js
@@ -1,6 +1,8 @@
import React from 'react';
+
import { Tooltip, Pointer, P } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
+
import Navigation from './Navigation';
import { Title } from './common';
diff --git a/packages/desktop-client/src/components/tutorial/BudgetInitial.js b/packages/desktop-client/src/components/tutorial/BudgetInitial.js
index 55d5bf2..ba10504 100644
--- a/packages/desktop-client/src/components/tutorial/BudgetInitial.js
+++ b/packages/desktop-client/src/components/tutorial/BudgetInitial.js
@@ -1,8 +1,11 @@
import React from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
+
+import { bindActionCreators } from 'redux';
+
import * as actions from 'loot-core/src/client/actions';
import { P, Button } from 'loot-design/src/components/common';
+
import { Title, Standalone, useMinimized } from './common';
import Navigation from './Navigation';
diff --git a/packages/desktop-client/src/components/tutorial/BudgetNewIncome.js b/packages/desktop-client/src/components/tutorial/BudgetNewIncome.js
index ff1bf88..9222b2e 100644
--- a/packages/desktop-client/src/components/tutorial/BudgetNewIncome.js
+++ b/packages/desktop-client/src/components/tutorial/BudgetNewIncome.js
@@ -1,6 +1,8 @@
import React from 'react';
+
import { Tooltip, Pointer, P } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
+
import Navigation from './Navigation';
import { Title } from './common';
diff --git a/packages/desktop-client/src/components/tutorial/BudgetNextMonth.js b/packages/desktop-client/src/components/tutorial/BudgetNextMonth.js
index 7e36c49..708368f 100644
--- a/packages/desktop-client/src/components/tutorial/BudgetNextMonth.js
+++ b/packages/desktop-client/src/components/tutorial/BudgetNextMonth.js
@@ -1,8 +1,11 @@
import React from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
+
+import { bindActionCreators } from 'redux';
+
import * as actions from 'loot-core/src/client/actions';
import { View, P, Button } from 'loot-design/src/components/common';
+
import Navigation from './Navigation';
import { Standalone, Title, useMinimized } from './common';
diff --git a/packages/desktop-client/src/components/tutorial/BudgetSummary.js b/packages/desktop-client/src/components/tutorial/BudgetSummary.js
index 0a3e4ab..dae0ae7 100644
--- a/packages/desktop-client/src/components/tutorial/BudgetSummary.js
+++ b/packages/desktop-client/src/components/tutorial/BudgetSummary.js
@@ -1,6 +1,8 @@
import React from 'react';
+
import { Tooltip, Pointer, P } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
+
import Navigation from './Navigation';
import { Title } from './common';
diff --git a/packages/desktop-client/src/components/tutorial/CategoryBalance.js b/packages/desktop-client/src/components/tutorial/CategoryBalance.js
index ff99329..861c55b 100644
--- a/packages/desktop-client/src/components/tutorial/CategoryBalance.js
+++ b/packages/desktop-client/src/components/tutorial/CategoryBalance.js
@@ -1,5 +1,7 @@
import React from 'react';
+
import { P, Button } from 'loot-design/src/components/common';
+
import Navigation from './Navigation';
import { Standalone, Title, useMinimized } from './common';
diff --git a/packages/desktop-client/src/components/tutorial/DeleteTransactions.js b/packages/desktop-client/src/components/tutorial/DeleteTransactions.js
index b432a71..69eb52f 100644
--- a/packages/desktop-client/src/components/tutorial/DeleteTransactions.js
+++ b/packages/desktop-client/src/components/tutorial/DeleteTransactions.js
@@ -1,5 +1,7 @@
import React from 'react';
+
import { P } from 'loot-design/src/components/common';
+
import Navigation from './Navigation';
import { Standalone, Title } from './common';
diff --git a/packages/desktop-client/src/components/tutorial/Final.js b/packages/desktop-client/src/components/tutorial/Final.js
index 91d8a70..7b11fb0 100644
--- a/packages/desktop-client/src/components/tutorial/Final.js
+++ b/packages/desktop-client/src/components/tutorial/Final.js
@@ -1,5 +1,7 @@
import React from 'react';
+
import { P, ModalButtons, Button } from 'loot-design/src/components/common';
+
import { Standalone, Title, ExternalLink } from './common';
function Final({ targetRect, navigationProps }) {
diff --git a/packages/desktop-client/src/components/tutorial/Intro.js b/packages/desktop-client/src/components/tutorial/Intro.js
index 2bab2fb..2bb9396 100644
--- a/packages/desktop-client/src/components/tutorial/Intro.js
+++ b/packages/desktop-client/src/components/tutorial/Intro.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import {
View,
Text,
@@ -6,6 +7,7 @@ import {
ModalButtons,
Button
} from 'loot-design/src/components/common';
+
import { Standalone, Title, ExternalLink } from './common';
function Intro({ fromYNAB, nextTutorialStage, closeTutorial }) {
diff --git a/packages/desktop-client/src/components/tutorial/Navigation.js b/packages/desktop-client/src/components/tutorial/Navigation.js
index 5301db3..2ab184c 100644
--- a/packages/desktop-client/src/components/tutorial/Navigation.js
+++ b/packages/desktop-client/src/components/tutorial/Navigation.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { Button, ModalButtons } from 'loot-design/src/components/common';
function Navigation({
diff --git a/packages/desktop-client/src/components/tutorial/Overspending.js b/packages/desktop-client/src/components/tutorial/Overspending.js
index 26b9a3c..bb7dd06 100644
--- a/packages/desktop-client/src/components/tutorial/Overspending.js
+++ b/packages/desktop-client/src/components/tutorial/Overspending.js
@@ -1,12 +1,15 @@
import React from 'react';
-import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
+
+import { bindActionCreators } from 'redux';
+
import * as actions from 'loot-core/src/client/actions';
import SheetValue from 'loot-design/src/components/spreadsheet/SheetValue';
import NamespaceContext from 'loot-design/src/components/spreadsheet/NamespaceContext';
import { P, View, Text, Button } from 'loot-design/src/components/common';
import * as monthUtils from 'loot-core/src/shared/months';
import { integerToCurrency } from 'loot-core/src/shared/util';
+
import Navigation from './Navigation';
import { Standalone, Title, useMinimized } from './common';
diff --git a/packages/desktop-client/src/components/tutorial/TransactionAdd.js b/packages/desktop-client/src/components/tutorial/TransactionAdd.js
index 5f2e9b0..d97118e 100644
--- a/packages/desktop-client/src/components/tutorial/TransactionAdd.js
+++ b/packages/desktop-client/src/components/tutorial/TransactionAdd.js
@@ -1,6 +1,8 @@
import React from 'react';
+
import { Tooltip, Pointer, P } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
+
import Navigation from './Navigation';
import { Title } from './common';
diff --git a/packages/desktop-client/src/components/tutorial/TransactionEnter.js b/packages/desktop-client/src/components/tutorial/TransactionEnter.js
index f06ecc1..f70e32d 100644
--- a/packages/desktop-client/src/components/tutorial/TransactionEnter.js
+++ b/packages/desktop-client/src/components/tutorial/TransactionEnter.js
@@ -1,6 +1,8 @@
import React from 'react';
+
import { P } from 'loot-design/src/components/common';
import * as monthUtils from 'loot-core/src/shared/months';
+
import Navigation from './Navigation';
import { Standalone, Title } from './common';
diff --git a/packages/desktop-client/src/components/tutorial/TransactionFinalize.js b/packages/desktop-client/src/components/tutorial/TransactionFinalize.js
index 266e583..deebba9 100644
--- a/packages/desktop-client/src/components/tutorial/TransactionFinalize.js
+++ b/packages/desktop-client/src/components/tutorial/TransactionFinalize.js
@@ -1,6 +1,9 @@
import React from 'react';
-import { P } from 'loot-design/src/components/common';
+
import { css } from 'glamor';
+
+import { P } from 'loot-design/src/components/common';
+
import Navigation from './Navigation';
import { Standalone } from './common';
diff --git a/packages/desktop-client/src/components/tutorial/common.js b/packages/desktop-client/src/components/tutorial/common.js
index 8ec1f69..39d64bb 100644
--- a/packages/desktop-client/src/components/tutorial/common.js
+++ b/packages/desktop-client/src/components/tutorial/common.js
@@ -1,6 +1,8 @@
import React, { useState } from 'react';
+
import { View, AnchorLink } from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
+
import AnimateIn from './AnimateIn';
export function Title({ children }) {
diff --git a/packages/desktop-client/src/components/util/AmountInput.js b/packages/desktop-client/src/components/util/AmountInput.js
index 1e4184c..bdf657e 100644
--- a/packages/desktop-client/src/components/util/AmountInput.js
+++ b/packages/desktop-client/src/components/util/AmountInput.js
@@ -1,4 +1,5 @@
import React, { useState } from 'react';
+
import {
integerToCurrency,
currencyToInteger
diff --git a/packages/desktop-client/src/components/util/DisplayId.js b/packages/desktop-client/src/components/util/DisplayId.js
index c69df07..c3bef77 100644
--- a/packages/desktop-client/src/components/util/DisplayId.js
+++ b/packages/desktop-client/src/components/util/DisplayId.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { CachedPayees } from 'loot-core/src/client/data-hooks/payees';
import { CachedAccounts } from 'loot-core/src/client/data-hooks/accounts';
import { Text } from 'loot-design/src/components/common';
diff --git a/packages/desktop-client/src/components/util/GenericInput.js b/packages/desktop-client/src/components/util/GenericInput.js
index ffefd22..f4a2cd3 100644
--- a/packages/desktop-client/src/components/util/GenericInput.js
+++ b/packages/desktop-client/src/components/util/GenericInput.js
@@ -1,5 +1,6 @@
import React from 'react';
import { useSelector } from 'react-redux';
+
import { getMonthYearFormat } from 'loot-core/src/shared/months';
import { View, Input } from 'loot-design/src/components/common';
import PayeeAutocomplete from 'loot-design/src/components/PayeeAutocomplete';
diff --git a/packages/desktop-client/src/hooks/useServerVersion.js b/packages/desktop-client/src/hooks/useServerVersion.js
index 3b3f272..07fd31d 100644
--- a/packages/desktop-client/src/hooks/useServerVersion.js
+++ b/packages/desktop-client/src/hooks/useServerVersion.js
@@ -1,4 +1,5 @@
import { useState, useEffect } from 'react';
+
import { send } from 'loot-core/src/platform/client/fetch';
function useServerVersion() {
diff --git a/packages/desktop-client/src/index.js b/packages/desktop-client/src/index.js
index 2134f6d..067cc2d 100644
--- a/packages/desktop-client/src/index.js
+++ b/packages/desktop-client/src/index.js
@@ -7,20 +7,23 @@ import '@reach/listbox/styles.css';
import React from 'react';
import ReactDOM from 'react-dom';
+import { Provider } from 'react-redux';
+
import {
createStore,
combineReducers,
applyMiddleware,
bindActionCreators
} from 'redux';
-import { Provider } from 'react-redux';
+import thunk from 'redux-thunk';
+
import constants from 'loot-core/src/client/constants';
import reducers from 'loot-core/src/client/reducers';
import { send } from 'loot-core/src/platform/client/fetch';
import q, { runQuery } from 'loot-core/src/client/query-helpers';
import * as actions from 'loot-core/src/client/actions';
-import thunk from 'redux-thunk';
import { initialState as initialAppState } from 'loot-core/src/client/reducers/app';
+
import { handleGlobalEvents } from './global-events';
import App from './components/App';
diff --git a/packages/loot-core/package.json b/packages/loot-core/package.json
index 48b50c3..72dbd19 100644
--- a/packages/loot-core/package.json
+++ b/packages/loot-core/package.json
@@ -50,6 +50,7 @@
"damerau-levenshtein": "^1.0.4",
"date-fns": "2.0.0-alpha.27",
"eslint": "5.6.0",
+ "eslint-plugin-import": "^2.26.0",
"eslint-plugin-prettier": "^3.1.4",
"esm": "^3.0.82",
"fake-indexeddb": "^3.1.3",
diff --git a/packages/loot-core/src/client/SpreadsheetProvider.js b/packages/loot-core/src/client/SpreadsheetProvider.js
index aedacbe..cf6e884 100644
--- a/packages/loot-core/src/client/SpreadsheetProvider.js
+++ b/packages/loot-core/src/client/SpreadsheetProvider.js
@@ -1,7 +1,10 @@
import * as React from 'react';
import { useEffect, useMemo } from 'react';
+
import LRU from 'lru-cache';
+
import SpreadsheetContext from 'loot-design/src/components/spreadsheet/SpreadsheetContext';
+
import { listen, send } from '../platform/client/fetch';
function makeSpreadsheet() {
diff --git a/packages/loot-core/src/client/actions/budgets.js b/packages/loot-core/src/client/actions/budgets.js
index d370b01..3a20240 100644
--- a/packages/loot-core/src/client/actions/budgets.js
+++ b/packages/loot-core/src/client/actions/budgets.js
@@ -5,6 +5,7 @@ import { send } from '../../platform/client/fetch';
import { setAppState } from './app';
import { startTutorialFirstTime } from './tutorial';
import { getDownloadError } from '../../shared/errors';
+
const uuid = require('../../platform/uuid');
export function updateStatusText(text) {
diff --git a/packages/loot-core/src/client/actions/notifications.js b/packages/loot-core/src/client/actions/notifications.js
index 1a2f236..52eb7e4 100644
--- a/packages/loot-core/src/client/actions/notifications.js
+++ b/packages/loot-core/src/client/actions/notifications.js
@@ -1,4 +1,5 @@
import constants from '../constants';
+
const uuid = require('../../platform/uuid');
export function addNotification(notification) {
diff --git a/packages/loot-core/src/client/actions/queries.js b/packages/loot-core/src/client/actions/queries.js
index e42ea7a..363ee35 100644
--- a/packages/loot-core/src/client/actions/queries.js
+++ b/packages/loot-core/src/client/actions/queries.js
@@ -1,4 +1,5 @@
import throttle from 'throttleit';
+
import { send } from '../../platform/client/fetch';
import constants from '../constants';
import { addNotification, addGenericErrorNotification } from './notifications';
diff --git a/packages/loot-core/src/client/data-hooks/accounts.js b/packages/loot-core/src/client/data-hooks/accounts.js
index c665939..405ad6b 100644
--- a/packages/loot-core/src/client/data-hooks/accounts.js
+++ b/packages/loot-core/src/client/data-hooks/accounts.js
@@ -1,4 +1,5 @@
import React, { useEffect, useState, useContext } from 'react';
+
import q, { liveQuery } from 'loot-core/src/client/query-helpers';
import { getAccountsById } from 'loot-core/src/client/reducers/queries';
diff --git a/packages/loot-core/src/client/data-hooks/payees.js b/packages/loot-core/src/client/data-hooks/payees.js
index 5cae0b9..b8383aa 100644
--- a/packages/loot-core/src/client/data-hooks/payees.js
+++ b/packages/loot-core/src/client/data-hooks/payees.js
@@ -1,4 +1,5 @@
import React, { useEffect, useState, useContext } from 'react';
+
import q, { liveQuery } from 'loot-core/src/client/query-helpers';
import { getPayeesById } from 'loot-core/src/client/reducers/queries';
diff --git a/packages/loot-core/src/client/data-hooks/schedules.js b/packages/loot-core/src/client/data-hooks/schedules.js
index 7cd0438..b7d5f63 100644
--- a/packages/loot-core/src/client/data-hooks/schedules.js
+++ b/packages/loot-core/src/client/data-hooks/schedules.js
@@ -1,4 +1,5 @@
import React, { useEffect, useState, useContext } from 'react';
+
import {
getStatus,
getHasTransactionsQuery
diff --git a/packages/loot-core/src/client/queries.js b/packages/loot-core/src/client/queries.js
index 7ce78ad..b783b5a 100644
--- a/packages/loot-core/src/client/queries.js
+++ b/packages/loot-core/src/client/queries.js
@@ -1,4 +1,5 @@
import { parse as parseDate, isValid as isDateValid } from 'date-fns';
+
import { currencyToAmount, amountToInteger } from '../shared/util';
import {
dayFromDate,
diff --git a/packages/loot-core/src/client/query-helpers.js b/packages/loot-core/src/client/query-helpers.js
index b1a1d83..0a9b2a8 100644
--- a/packages/loot-core/src/client/query-helpers.js
+++ b/packages/loot-core/src/client/query-helpers.js
@@ -1,6 +1,5 @@
import { listen, send } from '../platform/client/fetch';
import { once } from '../shared/async';
-
import q, { getPrimaryOrderBy } from '../shared/query';
export default q;
diff --git a/packages/loot-core/src/client/query-hooks.js b/packages/loot-core/src/client/query-hooks.js
index 6c680f4..97ef446 100644
--- a/packages/loot-core/src/client/query-hooks.js
+++ b/packages/loot-core/src/client/query-hooks.js
@@ -1,4 +1,5 @@
import React, { useState, useContext, useMemo, useEffect } from 'react';
+
import { runQuery, liveQuery, LiveQuery, PagedQuery } from './query-helpers';
function makeContext(queryState, opts, QueryClass) {
diff --git a/packages/loot-core/src/client/reducers/queries.js b/packages/loot-core/src/client/reducers/queries.js
index c413744..87dff6c 100644
--- a/packages/loot-core/src/client/reducers/queries.js
+++ b/packages/loot-core/src/client/reducers/queries.js
@@ -1,5 +1,6 @@
-import constants from '../constants';
import memoizeOne from 'memoize-one';
+
+import constants from '../constants';
import { groupById } from '../../shared/util';
const initialState = {
diff --git a/packages/loot-core/src/mocks/arbitrary-schema.js b/packages/loot-core/src/mocks/arbitrary-schema.js
index 0f508f2..2fee695 100644
--- a/packages/loot-core/src/mocks/arbitrary-schema.js
+++ b/packages/loot-core/src/mocks/arbitrary-schema.js
@@ -1,4 +1,5 @@
import fc from 'fast-check';
+
import { schema } from '../server/aql';
import { addDays } from '../shared/months';
diff --git a/packages/loot-core/src/mocks/index.js b/packages/loot-core/src/mocks/index.js
index a2423d8..ed2b174 100644
--- a/packages/loot-core/src/mocks/index.js
+++ b/packages/loot-core/src/mocks/index.js
@@ -1,4 +1,5 @@
import * as monthUtils from '../shared/months';
+
const uuid = require('../platform/uuid');
export function generateAccount(name, isConnected, type, offbudget) {
diff --git a/packages/loot-core/src/mocks/redux.js b/packages/loot-core/src/mocks/redux.js
index 4c0a15f..47f1124 100644
--- a/packages/loot-core/src/mocks/redux.js
+++ b/packages/loot-core/src/mocks/redux.js
@@ -1,7 +1,9 @@
import React from 'react';
import { Provider } from 'react-redux';
+
import thunk from 'redux-thunk';
import { createStore, combineReducers, applyMiddleware } from 'redux';
+
import reducers from '../client/reducers';
let appReducer = combineReducers(reducers);
diff --git a/packages/loot-core/src/mocks/util.js b/packages/loot-core/src/mocks/util.js
index c430538..9508b0e 100644
--- a/packages/loot-core/src/mocks/util.js
+++ b/packages/loot-core/src/mocks/util.js
@@ -1,6 +1,7 @@
-const snapshotDiff = require('snapshot-diff');
const { join, dirname, basename } = require('path');
+const snapshotDiff = require('snapshot-diff');
+
export function expectSnapshotWithDiffer(initialValue, { onlyUpdates } = {}) {
let currentValue = initialValue;
if (!onlyUpdates) {
diff --git a/packages/loot-core/src/platform/server/asyncStorage/index.electron.js b/packages/loot-core/src/platform/server/asyncStorage/index.electron.js
index b94b742..b2a8853 100644
--- a/packages/loot-core/src/platform/server/asyncStorage/index.electron.js
+++ b/packages/loot-core/src/platform/server/asyncStorage/index.electron.js
@@ -1,7 +1,8 @@
-const lootFs = require('../fs');
const fs = require('fs');
const { join } = require('path');
+const lootFs = require('../fs');
+
let getStorePath = () => join(lootFs.getDataDir(), 'global-store.json');
let store;
let persisted = true;
diff --git a/packages/loot-core/src/platform/server/connection/index.electron.js b/packages/loot-core/src/platform/server/connection/index.electron.js
index 3bd2b15..f31ab61 100644
--- a/packages/loot-core/src/platform/server/connection/index.electron.js
+++ b/packages/loot-core/src/platform/server/connection/index.electron.js
@@ -1,5 +1,6 @@
-const { runHandler, isMutating } = require('../../../server/mutators');
const ipc = require('node-ipc');
+
+const { runHandler, isMutating } = require('../../../server/mutators');
const { captureException } = require('../../exceptions');
function coerceError(error) {
diff --git a/packages/loot-core/src/platform/server/connection/index.mobile.js b/packages/loot-core/src/platform/server/connection/index.mobile.js
index c11f0c0..02e1307 100644
--- a/packages/loot-core/src/platform/server/connection/index.mobile.js
+++ b/packages/loot-core/src/platform/server/connection/index.mobile.js
@@ -1,6 +1,7 @@
+let rn_bridge = require('rn-bridge');
+
const { runHandler } = require('../../../server/mutators');
let { captureException } = require('../../exceptions');
-let rn_bridge = require('rn-bridge');
function coerceError(error) {
if (error.type && error.type === 'APIError') {
diff --git a/packages/loot-core/src/platform/server/fetch/index.electron.js b/packages/loot-core/src/platform/server/fetch/index.electron.js
index ebad971..a553219 100644
--- a/packages/loot-core/src/platform/server/fetch/index.electron.js
+++ b/packages/loot-core/src/platform/server/fetch/index.electron.js
@@ -1,4 +1,5 @@
let fs = require('fs');
+
let fetch = require('node-fetch');
async function fetchBinary(url, filepath) {
diff --git a/packages/loot-core/src/platform/server/fs/index.mobile.js b/packages/loot-core/src/platform/server/fs/index.mobile.js
index b8af10e..53ec5b2 100644
--- a/packages/loot-core/src/platform/server/fs/index.mobile.js
+++ b/packages/loot-core/src/platform/server/fs/index.mobile.js
@@ -1,4 +1,5 @@
let path = require('path');
+
let fs = require('./index.electron.js');
// On mobile, the backend runs from a single bundle mounted at the
diff --git a/packages/loot-core/src/platform/server/fs/index.web.js b/packages/loot-core/src/platform/server/fs/index.web.js
index 591824f..f775c0f 100644
--- a/packages/loot-core/src/platform/server/fs/index.web.js
+++ b/packages/loot-core/src/platform/server/fs/index.web.js
@@ -1,5 +1,6 @@
let { SQLiteFS } = require('absurd-sql');
let IndexedDBBackend = require('absurd-sql/dist/indexeddb-backend').default;
+
let connection = require('../connection');
let { _getModule } = require('../sqlite');
let idb = require('../indexeddb');
diff --git a/packages/loot-core/src/platform/server/fs/index.web.test.js b/packages/loot-core/src/platform/server/fs/index.web.test.js
index 965b3e9..c83f50f 100644
--- a/packages/loot-core/src/platform/server/fs/index.web.test.js
+++ b/packages/loot-core/src/platform/server/fs/index.web.test.js
@@ -4,6 +4,7 @@ require('fake-indexeddb/auto');
let FDBFactory = require('fake-indexeddb/lib/FDBFactory');
let idb = require('../indexeddb');
+
let { init, readFile, writeFile, exists, pathToId, join } = require('./index');
beforeAll(() => {
diff --git a/packages/loot-core/src/platform/server/sqlite/index.web.test.js b/packages/loot-core/src/platform/server/sqlite/index.web.test.js
index 377516f..3d343f1 100644
--- a/packages/loot-core/src/platform/server/sqlite/index.web.test.js
+++ b/packages/loot-core/src/platform/server/sqlite/index.web.test.js
@@ -5,6 +5,7 @@ import {
execQuery,
runQuery
} from './index.web';
+
let os = require('os');
beforeAll(() => {
diff --git a/packages/loot-core/src/server/accounts/export-to-csv.js b/packages/loot-core/src/server/accounts/export-to-csv.js
index f58e468..3716f00 100644
--- a/packages/loot-core/src/server/accounts/export-to-csv.js
+++ b/packages/loot-core/src/server/accounts/export-to-csv.js
@@ -1,4 +1,5 @@
import csvStringify from 'csv-stringify/lib/sync';
+
import { runQuery as aqlQuery } from '../aql';
import { integerToAmount } from '../../shared/util';
diff --git a/packages/loot-core/src/server/accounts/link.js b/packages/loot-core/src/server/accounts/link.js
index 7f97be6..bcd7899 100644
--- a/packages/loot-core/src/server/accounts/link.js
+++ b/packages/loot-core/src/server/accounts/link.js
@@ -6,6 +6,7 @@ import { fromPlaidAccountType } from '../../shared/accounts';
import { amountToInteger } from '../../shared/util';
import { post } from '../post';
import { runMutator } from '../mutators';
+
const uuid = require('../../platform/uuid');
export async function handoffPublicToken(institution, publicToken) {
diff --git a/packages/loot-core/src/server/accounts/parse-file.js b/packages/loot-core/src/server/accounts/parse-file.js
index 8887195..62f1e28 100644
--- a/packages/loot-core/src/server/accounts/parse-file.js
+++ b/packages/loot-core/src/server/accounts/parse-file.js
@@ -1,6 +1,7 @@
+import csv2json from 'csv-parse/lib/sync';
+
import fs from '../../platform/server/fs';
import qif2json from './qif2json';
-import csv2json from 'csv-parse/lib/sync';
import { dayFromDate } from '../../shared/months';
import { looselyParseAmount } from '../../shared/util';
diff --git a/packages/loot-core/src/server/accounts/parse-file.test.js b/packages/loot-core/src/server/accounts/parse-file.test.js
index 0c47088..6354852 100644
--- a/packages/loot-core/src/server/accounts/parse-file.test.js
+++ b/packages/loot-core/src/server/accounts/parse-file.test.js
@@ -1,9 +1,10 @@
+import * as d from 'date-fns';
+
import { parseFile } from './parse-file';
import { reconcileTransactions } from './sync';
import * as prefs from '../prefs';
import * as db from '../db';
import { amountToInteger } from '../../shared/util';
-import * as d from 'date-fns';
beforeEach(global.emptyDatabase());
diff --git a/packages/loot-core/src/server/accounts/rules.js b/packages/loot-core/src/server/accounts/rules.js
index 798cd09..f14a9b2 100644
--- a/packages/loot-core/src/server/accounts/rules.js
+++ b/packages/loot-core/src/server/accounts/rules.js
@@ -1,5 +1,6 @@
-import { RuleError } from '../errors';
import * as dateFns from 'date-fns';
+
+import { RuleError } from '../errors';
import {
monthFromDate,
yearFromDate,
diff --git a/packages/loot-core/src/server/accounts/sync.js b/packages/loot-core/src/server/accounts/sync.js
index 2106fda..ce2d643 100644
--- a/packages/loot-core/src/server/accounts/sync.js
+++ b/packages/loot-core/src/server/accounts/sync.js
@@ -14,8 +14,9 @@ import { runRules } from './transaction-rules';
import { batchUpdateTransactions } from './transactions';
const dateFns = require('date-fns');
-const { post } = require('../post');
const levenshtein = require('damerau-levenshtein');
+
+const { post } = require('../post');
const uuid = require('../../platform/uuid');
// Plaid article about API options:
diff --git a/packages/loot-core/src/server/accounts/sync.test.js b/packages/loot-core/src/server/accounts/sync.test.js
index 0ab189a..2f904f9 100644
--- a/packages/loot-core/src/server/accounts/sync.test.js
+++ b/packages/loot-core/src/server/accounts/sync.test.js
@@ -10,7 +10,9 @@ import {
import * as monthUtils from '../../shared/months';
import * as transfer from './transfer';
import { loadRules, insertRule } from './transaction-rules';
+
const snapshotDiff = require('snapshot-diff');
+
const { post } = require('../post');
const mockSyncServer = require('../tests/mockSyncServer');
diff --git a/packages/loot-core/src/server/accounts/transactions.js b/packages/loot-core/src/server/accounts/transactions.js
index 092379e..d8e71c8 100644
--- a/packages/loot-core/src/server/accounts/transactions.js
+++ b/packages/loot-core/src/server/accounts/transactions.js
@@ -3,6 +3,7 @@ import * as db from '../db';
import { incrFetch, whereIn } from '../db/util';
import * as transfer from './transfer';
import * as rules from './transaction-rules';
+
const connection = require('../../platform/server/connection');
async function idsWithChildren(ids) {
diff --git a/packages/loot-core/src/server/app.js b/packages/loot-core/src/server/app.js
index c1740ef..964398e 100644
--- a/packages/loot-core/src/server/app.js
+++ b/packages/loot-core/src/server/app.js
@@ -1,4 +1,5 @@
import mitt from 'mitt';
+
import { captureException } from '../platform/exceptions';
// This is a simple helper abstraction for defining methods exposed to
diff --git a/packages/loot-core/src/server/aql/exec.test.js b/packages/loot-core/src/server/aql/exec.test.js
index f64ab12..e7a3c40 100644
--- a/packages/loot-core/src/server/aql/exec.test.js
+++ b/packages/loot-core/src/server/aql/exec.test.js
@@ -3,6 +3,7 @@ import query from '../../shared/query';
import { makeChild } from '../../shared/transactions';
import * as aql from './exec';
import { schema, schemaConfig } from './schema';
+
const uuid = require('../../platform/uuid');
beforeEach(global.emptyDatabase());
diff --git a/packages/loot-core/src/server/aql/schema/executors.test.js b/packages/loot-core/src/server/aql/schema/executors.test.js
index 0bd4a1a..547ab86 100644
--- a/packages/loot-core/src/server/aql/schema/executors.test.js
+++ b/packages/loot-core/src/server/aql/schema/executors.test.js
@@ -1,4 +1,5 @@
import fc from 'fast-check';
+
import * as db from '../../db';
import query from '../../../shared/query';
import { batchMessages, setSyncingMode } from '../../sync/index';
diff --git a/packages/loot-core/src/server/aql/schema/run-query.js b/packages/loot-core/src/server/aql/schema/run-query.js
index f32847e..80ec3cc 100644
--- a/packages/loot-core/src/server/aql/schema/run-query.js
+++ b/packages/loot-core/src/server/aql/schema/run-query.js
@@ -1,4 +1,3 @@
-import { schema, schemaConfig } from './index';
import schemaExecutors from './executors';
import {
runQuery as _runQuery,
@@ -6,6 +5,8 @@ import {
} from '../exec';
import { Query } from '../../../shared/query';
+import { schema, schemaConfig } from './index';
+
export function runCompiledQuery(query, sqlPieces, state, params) {
return _runCompiledQuery(query, sqlPieces, state, {
params,
diff --git a/packages/loot-core/src/server/backups.js b/packages/loot-core/src/server/backups.js
index cba241a..da5a8af 100644
--- a/packages/loot-core/src/server/backups.js
+++ b/packages/loot-core/src/server/backups.js
@@ -3,9 +3,11 @@ import * as monthUtils from '../shared/months';
import * as sqlite from '../platform/server/sqlite';
import * as prefs from './prefs';
import * as cloudStorage from './cloud-storage';
+
+const dateFns = require('date-fns');
+
const connection = require('../platform/server/connection');
const uuid = require('../platform/uuid');
-const dateFns = require('date-fns');
// A special backup that represents the latest version of the db that
// can be reverted to after loading a backup
diff --git a/packages/loot-core/src/server/backups.test.js b/packages/loot-core/src/server/backups.test.js
index 35b7dc7..a1c86cb 100644
--- a/packages/loot-core/src/server/backups.test.js
+++ b/packages/loot-core/src/server/backups.test.js
@@ -1,4 +1,5 @@
import { updateBackups } from './backups';
+
const dateFns = require('date-fns');
describe('Backups', () => {
diff --git a/packages/loot-core/src/server/budget/base.js b/packages/loot-core/src/server/budget/base.js
index 139b0cb..c1c95e6 100644
--- a/packages/loot-core/src/server/budget/base.js
+++ b/packages/loot-core/src/server/budget/base.js
@@ -6,7 +6,7 @@ import { resolveName } from '../spreadsheet/util';
import * as report from './report';
import * as rollover from './rollover';
import { sumAmounts } from './util';
-import * as budgetActions from '../budget/actions';
+import * as budgetActions from './actions';
function mergeUpdates(updates) {
const merged = {};
diff --git a/packages/loot-core/src/server/budget/report.js b/packages/loot-core/src/server/budget/report.js
index 150d050..90901f7 100644
--- a/packages/loot-core/src/server/budget/report.js
+++ b/packages/loot-core/src/server/budget/report.js
@@ -1,5 +1,6 @@
import * as sheet from '../sheet';
import { number, sumAmounts } from './util';
+
const { resolveName } = require('../spreadsheet/util');
export async function createCategory(cat, sheetName, prevSheetName) {
diff --git a/packages/loot-core/src/server/budget/rollover.js b/packages/loot-core/src/server/budget/rollover.js
index 5f5356f..4b2734b 100644
--- a/packages/loot-core/src/server/budget/rollover.js
+++ b/packages/loot-core/src/server/budget/rollover.js
@@ -1,6 +1,7 @@
import * as sheet from '../sheet';
import * as monthUtils from '../../shared/months';
import { number, sumAmounts, flatten2, unflatten2 } from './util';
+
const { resolveName } = require('../spreadsheet/util');
function getBlankSheet(months) {
diff --git a/packages/loot-core/src/server/cloud-storage.js b/packages/loot-core/src/server/cloud-storage.js
index 498571d..9670290 100644
--- a/packages/loot-core/src/server/cloud-storage.js
+++ b/packages/loot-core/src/server/cloud-storage.js
@@ -14,9 +14,11 @@ import {
} from './errors';
import encryption from './encryption';
import { post } from './post';
-let uuid = require('../platform/uuid');
+
let AdmZip = require('adm-zip');
+let uuid = require('../platform/uuid');
+
let UPLOAD_FREQUENCY_IN_DAYS = 7;
async function checkHTTPStatus(res) {
diff --git a/packages/loot-core/src/server/crdt/timestamp.js b/packages/loot-core/src/server/crdt/timestamp.js
index b78a161..cf1f5fa 100644
--- a/packages/loot-core/src/server/crdt/timestamp.js
+++ b/packages/loot-core/src/server/crdt/timestamp.js
@@ -1,4 +1,5 @@
import murmurhash from 'murmurhash';
+
const uuid = require('../../platform/uuid');
/**
diff --git a/packages/loot-core/src/server/db/index.js b/packages/loot-core/src/server/db/index.js
index fdc432c..7b96f29 100644
--- a/packages/loot-core/src/server/db/index.js
+++ b/packages/loot-core/src/server/db/index.js
@@ -1,4 +1,5 @@
import LRU from 'lru-cache';
+
import * as sqlite from '../../platform/server/sqlite';
import fs from '../../platform/server/fs';
import { sendMessages, batchMessages } from '../sync';
diff --git a/packages/loot-core/src/server/db/mappings.js b/packages/loot-core/src/server/db/mappings.js
index 4c0f19f..91d0007 100644
--- a/packages/loot-core/src/server/db/mappings.js
+++ b/packages/loot-core/src/server/db/mappings.js
@@ -1,6 +1,7 @@
-import * as db from './index';
import { addSyncListener } from '../sync/index';
+import * as db from './index';
+
// This file keeps all the mappings in memory so we can access it
// synchronously. This is primarily used in the rules system, but
// there may be other uses in the future. You don't need to worry
diff --git a/packages/loot-core/src/server/encryption.js b/packages/loot-core/src/server/encryption.js
index 25018d7..1763c09 100644
--- a/packages/loot-core/src/server/encryption.js
+++ b/packages/loot-core/src/server/encryption.js
@@ -1,4 +1,5 @@
import * as internals from './encryption-internals';
+
let uuid = require('../platform/uuid/index.electron.js');
// A map of all possible master encryption keys to use, keyed by
diff --git a/packages/loot-core/src/server/main-app.js b/packages/loot-core/src/server/main-app.js
index 3080039..e3597cb 100644
--- a/packages/loot-core/src/server/main-app.js
+++ b/packages/loot-core/src/server/main-app.js
@@ -1,4 +1,5 @@
import { createApp } from './app';
+
const connection = require('../platform/server/connection');
// Main app
diff --git a/packages/loot-core/src/server/main.js b/packages/loot-core/src/server/main.js
index 6eca6a1..0ed999e 100644
--- a/packages/loot-core/src/server/main.js
+++ b/packages/loot-core/src/server/main.js
@@ -1,4 +1,6 @@
import './polyfills';
+import injectAPI from '@actual-app/api/injected';
+
import asyncStorage from '../platform/server/asyncStorage';
import { captureException, captureBreadcrumb } from '../platform/exceptions';
import * as prefs from './prefs';
@@ -57,7 +59,6 @@ import { parseFile } from './accounts/parse-file';
import { exportToCSV, exportQueryToCSV } from './accounts/export-to-csv';
import { getServer, setServer } from './server-config';
import installAPI from './api';
-import injectAPI from '@actual-app/api/injected';
import * as cloudStorage from './cloud-storage';
import encryption from './encryption';
import * as tracking from './tracking/events';
@@ -67,7 +68,6 @@ import { createTestBudget } from '../mocks/budget';
import { runQuery as aqlQuery } from './aql';
import q, { Query } from '../shared/query';
import app from './main-app';
-
// Apps
import schedulesApp from './schedules/app';
import budgetApp from './budget/app';
@@ -76,6 +76,7 @@ import toolsApp from './tools/app';
const YNAB4 = require('@actual-app/import-ynab4/importer');
const YNAB5 = require('@actual-app/import-ynab5/importer');
+
const uuid = require('../platform/uuid');
const connection = require('../platform/server/connection');
const { resolveName, unresolveName } = require('./spreadsheet/util');
diff --git a/packages/loot-core/src/server/migrate/cli.js b/packages/loot-core/src/server/migrate/cli.js
index a8a9a72..2ca3f98 100755
--- a/packages/loot-core/src/server/migrate/cli.js
+++ b/packages/loot-core/src/server/migrate/cli.js
@@ -1,6 +1,5 @@
#!/usr/bin/env node --trace-warnings
import * as sqlite from '../../platform/server/sqlite';
-
import {
getMigrationsDir,
withMigrationsDir,
@@ -10,6 +9,7 @@ import {
getPending,
migrate
} from './migrations';
+
const fs = require('fs');
const path = require('path');
diff --git a/packages/loot-core/src/server/migrate/migrations.js b/packages/loot-core/src/server/migrate/migrations.js
index fe2e808..3bf278e 100644
--- a/packages/loot-core/src/server/migrate/migrations.js
+++ b/packages/loot-core/src/server/migrate/migrations.js
@@ -1,10 +1,9 @@
-import fs from '../../platform/server/fs';
-import * as sqlite from '../../platform/server/sqlite';
-
// We have to bundle in JS migrations manually to avoid having to `eval`
// them which doesn't play well with CSP. There isn't great, and eventually
// we can remove this migration.
import m1632571489012 from '../../../migrations/1632571489012_remove_cache.js';
+import fs from '../../platform/server/fs';
+import * as sqlite from '../../platform/server/sqlite';
const uuid = require('../../platform/uuid');
diff --git a/packages/loot-core/src/server/post.js b/packages/loot-core/src/server/post.js
index 75fa24c..60d7696 100644
--- a/packages/loot-core/src/server/post.js
+++ b/packages/loot-core/src/server/post.js
@@ -1,4 +1,5 @@
import Platform from './platform';
+
const { PostError } = require('./errors');
const { fetch } = require('../platform/server/fetch');
diff --git a/packages/loot-core/src/server/prefs.js b/packages/loot-core/src/server/prefs.js
index fb7df91..495679d 100644
--- a/packages/loot-core/src/server/prefs.js
+++ b/packages/loot-core/src/server/prefs.js
@@ -1,5 +1,6 @@
import { sendMessages } from './sync';
import { Timestamp } from './crdt';
+
const fs = require('../platform/server/fs');
let prefs = null;
diff --git a/packages/loot-core/src/server/schedules/app.js b/packages/loot-core/src/server/schedules/app.js
index 34f6994..e1b9666 100644
--- a/packages/loot-core/src/server/schedules/app.js
+++ b/packages/loot-core/src/server/schedules/app.js
@@ -1,5 +1,6 @@
import deepEqual from 'deep-equal';
import * as d from 'date-fns';
+
import { createApp } from '../app';
import * as db from '../db';
import * as prefs from '../prefs';
diff --git a/packages/loot-core/src/server/schedules/app.test.js b/packages/loot-core/src/server/schedules/app.test.js
index 5ba23b2..8cb0fe7 100644
--- a/packages/loot-core/src/server/schedules/app.test.js
+++ b/packages/loot-core/src/server/schedules/app.test.js
@@ -1,3 +1,5 @@
+import MockDate from 'mockdate';
+
import { runQuery as aqlQuery } from '../aql';
import q from '../../shared/query';
import { loadRules, updateRule } from '../accounts/transaction-rules';
@@ -10,7 +12,6 @@ import {
deleteSchedule,
setNextDate
} from './app';
-import MockDate from 'mockdate';
beforeEach(async () => {
await global.emptyDatabase()();
diff --git a/packages/loot-core/src/server/schedules/find-schedules.js b/packages/loot-core/src/server/schedules/find-schedules.js
index b40edad..5731aaf 100644
--- a/packages/loot-core/src/server/schedules/find-schedules.js
+++ b/packages/loot-core/src/server/schedules/find-schedules.js
@@ -1,4 +1,5 @@
import * as d from 'date-fns';
+
import * as db from '../db';
import { Schedule as RSchedule } from '../util/rschedule';
import { groupBy } from '../../shared/util';
@@ -9,6 +10,7 @@ import { getApproxNumberThreshold } from '../../shared/rules';
import { recurConfigToRSchedule } from '../../shared/schedules';
import { dayFromDate, parseDate } from '../../shared/months';
import { conditionsToAQL } from '../accounts/transaction-rules';
+
const uuid = require('../../platform/uuid');
function takeDates(config) {
diff --git a/packages/loot-core/src/server/sheet.js b/packages/loot-core/src/server/sheet.js
index 5df2ec4..5619241 100644
--- a/packages/loot-core/src/server/sheet.js
+++ b/packages/loot-core/src/server/sheet.js
@@ -4,6 +4,7 @@ import { captureBreadcrumb } from '../platform/exceptions';
import * as sqlite from '../platform/server/sqlite';
import { sheetForMonth } from '../shared/months';
import Platform from './platform';
+
const { resolveName } = require('./spreadsheet/util');
let globalSheet, globalOnChange;
diff --git a/packages/loot-core/src/server/spreadsheet/interpreter.js b/packages/loot-core/src/server/spreadsheet/interpreter.js
index d659995..38aecd7 100644
--- a/packages/loot-core/src/server/spreadsheet/interpreter.js
+++ b/packages/loot-core/src/server/spreadsheet/interpreter.js
@@ -1,4 +1,5 @@
const escodegen = require('@jlongster/escodegen');
+
const globals = require('./globals');
// Unfortunately we need to use eval to bypass babel's transform of
diff --git a/packages/loot-core/src/server/spreadsheet/new/vm.test.js b/packages/loot-core/src/server/spreadsheet/new/vm.test.js
index 6c3a726..bfebe10 100644
--- a/packages/loot-core/src/server/spreadsheet/new/vm.test.js
+++ b/packages/loot-core/src/server/spreadsheet/new/vm.test.js
@@ -1,4 +1,5 @@
import VM from './vm';
+
const { unresolveName } = require('../util');
const db = {
diff --git a/packages/loot-core/src/server/spreadsheet/spreadsheet.js b/packages/loot-core/src/server/spreadsheet/spreadsheet.js
index c24ccd1..459be7b 100644
--- a/packages/loot-core/src/server/spreadsheet/spreadsheet.js
+++ b/packages/loot-core/src/server/spreadsheet/spreadsheet.js
@@ -1,4 +1,5 @@
import mitt from 'mitt';
+
import { compileQuery, runCompiledQuery, schema, schemaConfig } from '../aql';
const Graph = require('./graph-data-structure');
diff --git a/packages/loot-core/src/server/spreadsheet/tests/data-propagation.js b/packages/loot-core/src/server/spreadsheet/tests/data-propagation.js
index 9d8544f..8268ef7 100644
--- a/packages/loot-core/src/server/spreadsheet/tests/data-propagation.js
+++ b/packages/loot-core/src/server/spreadsheet/tests/data-propagation.js
@@ -1,4 +1,5 @@
const expect = require('expect');
+
const propagate = require('../data-compute/propagate.js');
describe('data propagation', () => {
diff --git a/packages/loot-core/src/server/spreadsheet/usage.js b/packages/loot-core/src/server/spreadsheet/usage.js
index abe6f8c..c053a06 100644
--- a/packages/loot-core/src/server/spreadsheet/usage.js
+++ b/packages/loot-core/src/server/spreadsheet/usage.js
@@ -1,11 +1,11 @@
const sqlite = require('sqlite3');
const escodegen = require('escodegen');
+
const sqlgen = require('./sqlgen');
+const Spreadsheet = require('./spreadsheet');
// Example usage:
-const Spreadsheet = require('./spreadsheet');
-
const db = new sqlite.Database(__dirname + '/../../db.sqlite');
const sheet = new Spreadsheet({
plugins: {
diff --git a/packages/loot-core/src/server/sync/encoder.js b/packages/loot-core/src/server/sync/encoder.js
index 82b9c20..b2db4bf 100644
--- a/packages/loot-core/src/server/sync/encoder.js
+++ b/packages/loot-core/src/server/sync/encoder.js
@@ -1,5 +1,6 @@
import encryption from '../encryption';
import * as prefs from '../prefs';
+
let { SyncError } = require('../errors');
let SyncPb = require('./proto/sync_pb');
diff --git a/packages/loot-core/src/server/sync/make-test-message.js b/packages/loot-core/src/server/sync/make-test-message.js
index ca02aaf..88ebf1c 100644
--- a/packages/loot-core/src/server/sync/make-test-message.js
+++ b/packages/loot-core/src/server/sync/make-test-message.js
@@ -1,4 +1,5 @@
import encryption from '../encryption';
+
let SyncPb = require('./proto/sync_pb');
async function randomString() {
diff --git a/packages/loot-core/src/server/sync/migrate.js b/packages/loot-core/src/server/sync/migrate.js
index 40fcaa3..20f055c 100644
--- a/packages/loot-core/src/server/sync/migrate.js
+++ b/packages/loot-core/src/server/sync/migrate.js
@@ -1,6 +1,7 @@
-import { addSyncListener, applyMessages } from './index';
import { Timestamp } from '../crdt';
+import { addSyncListener, applyMessages } from './index';
+
function migrateParentIds(oldValues, newValues) {
newValues.forEach((items, table) => {
if (table === 'transactions') {
diff --git a/packages/loot-core/src/server/sync/migrate.test.js b/packages/loot-core/src/server/sync/migrate.test.js
index 9a33561..2042965 100644
--- a/packages/loot-core/src/server/sync/migrate.test.js
+++ b/packages/loot-core/src/server/sync/migrate.test.js
@@ -1,11 +1,13 @@
import fc from 'fast-check';
+
import * as db from '../db';
import { listen, unlisten } from './migrate';
-import { addSyncListener, sendMessages } from './index';
import { execTracer } from '../../shared/test-helpers';
import { convertInputType, schema, schemaConfig } from '../aql';
import arbs from '../../mocks/arbitrary-schema';
+import { addSyncListener, sendMessages } from './index';
+
beforeEach(() => {
listen();
return global.emptyDatabase()();
diff --git a/packages/loot-core/src/server/sync/reset.js b/packages/loot-core/src/server/sync/reset.js
index fda144c..cbd3bff 100644
--- a/packages/loot-core/src/server/sync/reset.js
+++ b/packages/loot-core/src/server/sync/reset.js
@@ -4,6 +4,7 @@ import * as prefs from '../prefs';
import asyncStorage from '../../platform/server/asyncStorage';
import { captureException } from '../../platform/exceptions';
import { runMutator } from '../mutators';
+
const connection = require('../../platform/server/connection');
export default async function resetSync(keyState) {
diff --git a/packages/loot-core/src/server/sync/sync.property.test.js b/packages/loot-core/src/server/sync/sync.property.test.js
index 0c798c8..943b888 100644
--- a/packages/loot-core/src/server/sync/sync.property.test.js
+++ b/packages/loot-core/src/server/sync/sync.property.test.js
@@ -1,9 +1,11 @@
import * as prefs from '../prefs';
import * as db from '../db';
import * as sheet from '../sheet';
-import * as sync from './index';
import { merkle, getClock, Timestamp } from '../crdt';
import * as encoder from './encoder';
+
+import * as sync from './index';
+
const jsc = require('jsverify');
const uuidGenerator = jsc.integer(97, 122).smap(
x => String.fromCharCode(x),
diff --git a/packages/loot-core/src/server/sync/sync.test.js b/packages/loot-core/src/server/sync/sync.test.js
index cea7d05..4778360 100644
--- a/packages/loot-core/src/server/sync/sync.test.js
+++ b/packages/loot-core/src/server/sync/sync.test.js
@@ -3,8 +3,10 @@ import * as db from '../db';
import * as sheet from '../sheet';
import { getClock, Timestamp } from '../crdt';
import { resolveName } from '../spreadsheet/util';
-import { setSyncingMode, sendMessages, applyMessages, fullSync } from './index';
import * as encoder from './encoder';
+
+import { setSyncingMode, sendMessages, applyMessages, fullSync } from './index';
+
const mockSyncServer = require('../tests/mockSyncServer');
beforeEach(() => {
diff --git a/packages/loot-core/src/server/tests/mockSyncServer.js b/packages/loot-core/src/server/tests/mockSyncServer.js
index ceb12d7..d245e45 100644
--- a/packages/loot-core/src/server/tests/mockSyncServer.js
+++ b/packages/loot-core/src/server/tests/mockSyncServer.js
@@ -1,5 +1,7 @@
import dateFns from 'date-fns';
+
import { makeClock, Timestamp, merkle } from '../crdt';
+
const defaultMockData = require('./mockData').basic;
const SyncPb = require('../sync/proto/sync_pb');
diff --git a/packages/loot-core/src/server/undo.js b/packages/loot-core/src/server/undo.js
index bc96741..039c5a0 100644
--- a/packages/loot-core/src/server/undo.js
+++ b/packages/loot-core/src/server/undo.js
@@ -2,6 +2,7 @@ import { sendMessages } from './sync';
import { getIn } from '../shared/util';
import { Timestamp } from './crdt';
import { withMutatorContext, getMutatorContext } from './mutators';
+
const connection = require('../platform/server/connection');
// A marker always sits as the first entry to simplify logic
diff --git a/packages/loot-core/src/server/update.js b/packages/loot-core/src/server/update.js
index f4e6459..679e8d9 100644
--- a/packages/loot-core/src/server/update.js
+++ b/packages/loot-core/src/server/update.js
@@ -1,4 +1,5 @@
import md5 from 'md5';
+
import * as migrations from './migrate/migrations';
import * as db from './db';
import { schema, schemaConfig, makeViews } from './aql';
diff --git a/packages/loot-core/src/server/util/budget-name.js b/packages/loot-core/src/server/util/budget-name.js
index 6163cb1..811904b 100644
--- a/packages/loot-core/src/server/util/budget-name.js
+++ b/packages/loot-core/src/server/util/budget-name.js
@@ -1,4 +1,5 @@
import fs from '../../platform/server/fs';
+
const uuid = require('../../platform/uuid');
export async function uniqueFileName(existingFiles) {
diff --git a/packages/loot-core/src/shared/schedules.test.js b/packages/loot-core/src/shared/schedules.test.js
index 880899d..a3733b4 100644
--- a/packages/loot-core/src/shared/schedules.test.js
+++ b/packages/loot-core/src/shared/schedules.test.js
@@ -1,6 +1,7 @@
-import { getRecurringDescription } from './schedules';
import MockDate from 'mockdate';
+import { getRecurringDescription } from './schedules';
+
describe('recurring date description', () => {
beforeEach(() => {
MockDate.set(new Date(2021, 4, 14));
diff --git a/packages/loot-core/src/shared/transactions.js b/packages/loot-core/src/shared/transactions.js
index b5bf3fd..97559e9 100644
--- a/packages/loot-core/src/shared/transactions.js
+++ b/packages/loot-core/src/shared/transactions.js
@@ -1,4 +1,5 @@
import { last, diffItems, applyChanges } from './util';
+
const uuid = require('../platform/uuid');
// The amount might be null when adding a new transaction
diff --git a/packages/loot-core/src/shared/transactions.test.js b/packages/loot-core/src/shared/transactions.test.js
index b95471e..743e553 100644
--- a/packages/loot-core/src/shared/transactions.test.js
+++ b/packages/loot-core/src/shared/transactions.test.js
@@ -5,6 +5,7 @@ import {
addSplitTransaction,
makeChild
} from './transactions';
+
const uuid = require('../platform/uuid');
// const data = {
diff --git a/packages/loot-design/src/components/AccountAutocomplete.js b/packages/loot-design/src/components/AccountAutocomplete.js
index 2eccf66..764d60f 100644
--- a/packages/loot-design/src/components/AccountAutocomplete.js
+++ b/packages/loot-design/src/components/AccountAutocomplete.js
@@ -1,5 +1,7 @@
import React from 'react';
+
import { useCachedAccounts } from 'loot-core/src/client/data-hooks/accounts';
+
import Autocomplete from './Autocomplete';
import { View } from './common';
import { colors } from '../style';
diff --git a/packages/loot-design/src/components/Autocomplete.js b/packages/loot-design/src/components/Autocomplete.js
index ccb002f..52c1759 100644
--- a/packages/loot-design/src/components/Autocomplete.js
+++ b/packages/loot-design/src/components/Autocomplete.js
@@ -1,7 +1,9 @@
import React, { useState, useRef, useEffect } from 'react';
+
import lively from '@jlongster/lively';
import Downshift from 'downshift';
import { css } from 'glamor';
+
import { colors } from '../style';
import Remove from '../svg/v2/Remove';
import { View, Input, Tooltip, Button } from './common';
diff --git a/packages/loot-design/src/components/Autocomplete.usage.js b/packages/loot-design/src/components/Autocomplete.usage.js
index 987a68e..8b50770 100644
--- a/packages/loot-design/src/components/Autocomplete.usage.js
+++ b/packages/loot-design/src/components/Autocomplete.usage.js
@@ -1,6 +1,8 @@
import React from 'react';
-import Autocomplete, { MultiAutocomplete } from './Autocomplete';
+
import Component from '@reactions/component';
+
+import Autocomplete, { MultiAutocomplete } from './Autocomplete';
import { Section } from '../guide/components';
let items = [
diff --git a/packages/loot-design/src/components/CategorySelect.js b/packages/loot-design/src/components/CategorySelect.js
index f94dd23..599a874 100644
--- a/packages/loot-design/src/components/CategorySelect.js
+++ b/packages/loot-design/src/components/CategorySelect.js
@@ -1,4 +1,5 @@
import React, { useMemo } from 'react';
+
import { View, Text, Select } from './common';
import Autocomplete, { defaultFilterSuggestion } from './Autocomplete';
import { colors } from '../style';
diff --git a/packages/loot-design/src/components/DateSelect.js b/packages/loot-design/src/components/DateSelect.js
index db9b998..dbb766b 100644
--- a/packages/loot-design/src/components/DateSelect.js
+++ b/packages/loot-design/src/components/DateSelect.js
@@ -6,11 +6,11 @@ import React, {
useImperativeHandle,
useMemo
} from 'react';
+
import * as d from 'date-fns';
import Pikaday from 'pikaday';
+
import 'pikaday/css/pikaday.css';
-import { colors } from '../style';
-import { View, Input, Tooltip } from './common';
import {
getDayMonthFormat,
getDayMonthRegex,
@@ -18,6 +18,8 @@ import {
getShortYearRegex
} from 'loot-core/src/shared/months';
+import { colors } from '../style';
+import { View, Input, Tooltip } from './common';
import DateSelectLeft from './DateSelect.left.png';
import DateSelectRight from './DateSelect.right.png';
diff --git a/packages/loot-design/src/components/DateSelect.usage.js b/packages/loot-design/src/components/DateSelect.usage.js
index c583ae9..64cb218 100644
--- a/packages/loot-design/src/components/DateSelect.usage.js
+++ b/packages/loot-design/src/components/DateSelect.usage.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import DateSelect from './DateSelect';
import { Section } from '../guide/components';
diff --git a/packages/loot-design/src/components/FixedSizeList.js b/packages/loot-design/src/components/FixedSizeList.js
index 72e902f..d3f341b 100644
--- a/packages/loot-design/src/components/FixedSizeList.js
+++ b/packages/loot-design/src/components/FixedSizeList.js
@@ -1,5 +1,7 @@
import React from 'react';
+
import memoizeOne from 'memoize-one';
+
import useResizeObserver from './useResizeObserver';
import { View } from './common';
diff --git a/packages/loot-design/src/components/KeyHandlers.js b/packages/loot-design/src/components/KeyHandlers.js
index d784df9..dc31bbe 100644
--- a/packages/loot-design/src/components/KeyHandlers.js
+++ b/packages/loot-design/src/components/KeyHandlers.js
@@ -1,6 +1,7 @@
-import hotkeys from 'hotkeys-js';
import React, { useEffect, useContext } from 'react';
+import hotkeys from 'hotkeys-js';
+
let KeyScopeContext = React.createContext('app');
hotkeys.filter = event => {
diff --git a/packages/loot-design/src/components/NotesButton.js b/packages/loot-design/src/components/NotesButton.js
index 8ef0b5f..990d1ea 100644
--- a/packages/loot-design/src/components/NotesButton.js
+++ b/packages/loot-design/src/components/NotesButton.js
@@ -1,8 +1,11 @@
import React, { useState, useEffect, useMemo } from 'react';
+
import { css } from 'glamor';
+
import { send } from 'loot-core/src/platform/client/fetch';
import { useLiveQuery } from 'loot-core/src/client/query-hooks';
import q from 'loot-core/src/client/query-helpers';
+
import { View, Button, Tooltip, useTooltip } from './common';
import CustomNotesPaper from '../svg/v2/CustomNotesPaper';
import { colors } from '../style';
diff --git a/packages/loot-design/src/components/PayeeAutocomplete.js b/packages/loot-design/src/components/PayeeAutocomplete.js
index 4c3ee16..e6fd723 100644
--- a/packages/loot-design/src/components/PayeeAutocomplete.js
+++ b/packages/loot-design/src/components/PayeeAutocomplete.js
@@ -1,9 +1,11 @@
import React, { useState, useMemo, useRef } from 'react';
import { useDispatch } from 'react-redux';
+
import { getActivePayees } from 'loot-core/src/client/reducers/queries';
import { createPayee } from 'loot-core/src/client/actions/queries';
import { useCachedPayees } from 'loot-core/src/client/data-hooks/payees';
import { useCachedAccounts } from 'loot-core/src/client/data-hooks/accounts';
+
import { View } from './common';
import Add from '../svg/v1/Add';
import Autocomplete, {
diff --git a/packages/loot-design/src/components/RecurringSchedulePicker.js b/packages/loot-design/src/components/RecurringSchedulePicker.js
index 496b481..351b37b 100644
--- a/packages/loot-design/src/components/RecurringSchedulePicker.js
+++ b/packages/loot-design/src/components/RecurringSchedulePicker.js
@@ -1,23 +1,17 @@
import React, { useEffect, useReducer, useState } from 'react';
import { useSelector } from 'react-redux';
+
import { sendCatch } from 'loot-core/src/platform/client/fetch';
import * as monthUtils from 'loot-core/src/shared/months';
import { getRecurringDescription } from 'loot-core/src/shared/schedules';
-import DateSelect from './DateSelect';
-import {
- Button,
- Select,
- Input,
- Tooltip,
- View,
- Text,
- Stack
-} from '../components/common';
import { colors } from 'loot-design/src/style';
import { useTooltip } from 'loot-design/src/components/tooltips';
import SubtractIcon from 'loot-design/src/svg/Subtract';
import AddIcon from 'loot-design/src/svg/Add';
+import { Button, Select, Input, Tooltip, View, Text, Stack } from './common';
+import DateSelect from './DateSelect';
+
const DATE_FORMAT = 'yyyy-MM-dd';
// ex: There is no 6th Friday of the Month
diff --git a/packages/loot-design/src/components/RecurringSchedulePicker.usage.js b/packages/loot-design/src/components/RecurringSchedulePicker.usage.js
index 9529de2..c746b21 100644
--- a/packages/loot-design/src/components/RecurringSchedulePicker.usage.js
+++ b/packages/loot-design/src/components/RecurringSchedulePicker.usage.js
@@ -1,8 +1,9 @@
import React from 'react';
+
import RecurringSchedulePicker from './RecurringSchedulePicker';
import { Section } from '../guide/components';
import { Button, View } from './common';
-import { useTooltip } from '../components/tooltips';
+import { useTooltip } from './tooltips';
export default () => {
const { isOpen, close, getOpenEvents } = useTooltip();
diff --git a/packages/loot-design/src/components/Stack.js b/packages/loot-design/src/components/Stack.js
index d268930..d7108b9 100644
--- a/packages/loot-design/src/components/Stack.js
+++ b/packages/loot-design/src/components/Stack.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import View from './View';
import Text from './Text';
diff --git a/packages/loot-design/src/components/Text.js b/packages/loot-design/src/components/Text.js
index 61156f9..7a6fae6 100644
--- a/packages/loot-design/src/components/Text.js
+++ b/packages/loot-design/src/components/Text.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { css } from 'glamor';
function Text(props) {
diff --git a/packages/loot-design/src/components/TutorialPoint.js b/packages/loot-design/src/components/TutorialPoint.js
index 2c4466c..c581c36 100644
--- a/packages/loot-design/src/components/TutorialPoint.js
+++ b/packages/loot-design/src/components/TutorialPoint.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import PropTypes from 'prop-types';
class TutorialPoint extends React.Component {
diff --git a/packages/loot-design/src/components/View.js b/packages/loot-design/src/components/View.js
index 8002dd5..69ea703 100644
--- a/packages/loot-design/src/components/View.js
+++ b/packages/loot-design/src/components/View.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { css } from 'glamor';
function View(props) {
diff --git a/packages/loot-design/src/components/alerts.js b/packages/loot-design/src/components/alerts.js
index ae41b94..866bea8 100644
--- a/packages/loot-design/src/components/alerts.js
+++ b/packages/loot-design/src/components/alerts.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { View, Text } from './common';
import { styles, colors } from '../style';
import InformationOutline from '../svg/v1/InformationOutline';
diff --git a/packages/loot-design/src/components/budget/BalanceWithCarryover.js b/packages/loot-design/src/components/budget/BalanceWithCarryover.js
index dabda92..9a0745c 100644
--- a/packages/loot-design/src/components/budget/BalanceWithCarryover.js
+++ b/packages/loot-design/src/components/budget/BalanceWithCarryover.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import useSheetValue from '../spreadsheet/useSheetValue';
import { makeAmountStyle } from './util';
import { View } from '../common';
diff --git a/packages/loot-design/src/components/budget/BudgetMonthCountContext.js b/packages/loot-design/src/components/budget/BudgetMonthCountContext.js
index dbb2651..e615369 100644
--- a/packages/loot-design/src/components/budget/BudgetMonthCountContext.js
+++ b/packages/loot-design/src/components/budget/BudgetMonthCountContext.js
@@ -1,4 +1,5 @@
import React, { useContext, useState } from 'react';
+
import mitt from 'mitt';
export let BudgetMonthCountContext = React.createContext();
diff --git a/packages/loot-design/src/components/budget/BudgetSummaries.js b/packages/loot-design/src/components/budget/BudgetSummaries.js
index 9bcf2e5..75a65ac 100644
--- a/packages/loot-design/src/components/budget/BudgetSummaries.js
+++ b/packages/loot-design/src/components/budget/BudgetSummaries.js
@@ -5,10 +5,13 @@ import React, {
useCallback,
useLayoutEffect
} from 'react';
+
import { Spring } from 'wobble';
import { css } from 'glamor';
-import { MonthsContext } from './MonthsContext';
+
import * as monthUtils from 'loot-core/src/shared/months';
+
+import { MonthsContext } from './MonthsContext';
import { View } from '../common';
import useResizeObserver from '../useResizeObserver';
diff --git a/packages/loot-design/src/components/budget/DynamicBudgetTable.js b/packages/loot-design/src/components/budget/DynamicBudgetTable.js
index 33f9bd6..fac8f98 100644
--- a/packages/loot-design/src/components/budget/DynamicBudgetTable.js
+++ b/packages/loot-design/src/components/budget/DynamicBudgetTable.js
@@ -1,10 +1,12 @@
import React, { useEffect } from 'react';
import AutoSizer from 'react-virtualized-auto-sizer';
+
import { View } from '../common';
-import { BudgetPageHeader, BudgetTable } from './index';
import { CategoryGroupsContext } from './util';
import { useBudgetMonthCount } from './BudgetMonthCountContext';
+import { BudgetPageHeader, BudgetTable } from './index';
+
function getNumPossibleMonths(width) {
let estimatedTableWidth = width - 200;
diff --git a/packages/loot-design/src/components/budget/MonthsContext.js b/packages/loot-design/src/components/budget/MonthsContext.js
index d481d71..102a75a 100644
--- a/packages/loot-design/src/components/budget/MonthsContext.js
+++ b/packages/loot-design/src/components/budget/MonthsContext.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import * as monthUtils from 'loot-core/src/shared/months';
export function getValidMonthBounds(bounds, startMonth, endMonth) {
diff --git a/packages/loot-design/src/components/budget/index.js b/packages/loot-design/src/components/budget/index.js
index 5c0ee22..4f03742 100644
--- a/packages/loot-design/src/components/budget/index.js
+++ b/packages/loot-design/src/components/budget/index.js
@@ -1,4 +1,9 @@
import React, { useContext, useState, useMemo } from 'react';
+
+import { scope } from '@jlongster/lively';
+
+import * as monthUtils from 'loot-core/src/shared/months';
+
import ElementQuery from '../ElementQuery';
import {
View,
@@ -16,19 +21,15 @@ import {
DropHighlightPosContext
} from '../sort.js';
import NamespaceContext from '../spreadsheet/NamespaceContext';
-import { scope } from '@jlongster/lively';
import { styles, colors } from '../../style';
import ArrowThinLeft from '../../svg/v1/ArrowThinLeft';
import ArrowThinRight from '../../svg/v1/ArrowThinRight';
import ExpandArrow from '../../svg/ExpandArrow';
import CheveronDown from '../../svg/v1/CheveronDown';
-import * as monthUtils from 'loot-core/src/shared/months';
import { separateGroups, findSortDown, findSortUp } from './util';
import { MonthsProvider, MonthsContext } from './MonthsContext';
import NotesButton from '../NotesButton';
-
import BudgetSummaries from './BudgetSummaries';
-
import { INCOME_HEADER_HEIGHT, MONTH_BOX_SHADOW } from './constants';
function getScrollbarWidth() {
diff --git a/packages/loot-design/src/components/budget/index.usage.js b/packages/loot-design/src/components/budget/index.usage.js
index 025e51d..50e16d7 100644
--- a/packages/loot-design/src/components/budget/index.usage.js
+++ b/packages/loot-design/src/components/budget/index.usage.js
@@ -1,14 +1,16 @@
import React from 'react';
import { DndProvider } from 'react-dnd';
import Backend from 'react-dnd-html5-backend';
+
+import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet';
+import { generateCategoryGroups } from 'loot-core/src/mocks';
+import * as monthUtils from 'loot-core/src/shared/months';
+
import { Section } from '../../guide/components';
import { View } from '../common';
import SpreadsheetContext from '../spreadsheet/SpreadsheetContext';
-import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet';
import DynamicBudgetTable from './DynamicBudgetTable';
import { BudgetMonthCountContext } from './BudgetMonthCountContext';
-import { generateCategoryGroups } from 'loot-core/src/mocks';
-import * as monthUtils from 'loot-core/src/shared/months';
import * as rollover from './rollover/rollover-components';
import { RolloverContext } from './rollover/RolloverContext';
import { colors } from '../../style';
diff --git a/packages/loot-design/src/components/budget/report/BudgetSummary.js b/packages/loot-design/src/components/budget/report/BudgetSummary.js
index 57e8da7..585dc46 100644
--- a/packages/loot-design/src/components/budget/report/BudgetSummary.js
+++ b/packages/loot-design/src/components/budget/report/BudgetSummary.js
@@ -1,7 +1,10 @@
import React, { useState } from 'react';
+
import { css } from 'glamor';
+
import * as monthUtils from 'loot-core/src/shared/months';
import { reportBudget } from 'loot-core/src/client/queries';
+
import NamespaceContext from '../../spreadsheet/NamespaceContext';
import CellValue from '../../spreadsheet/CellValue';
import useSheetValue from '../../spreadsheet/useSheetValue';
diff --git a/packages/loot-design/src/components/budget/report/ReportContext.js b/packages/loot-design/src/components/budget/report/ReportContext.js
index 9933ae1..2f5057a 100644
--- a/packages/loot-design/src/components/budget/report/ReportContext.js
+++ b/packages/loot-design/src/components/budget/report/ReportContext.js
@@ -1,4 +1,5 @@
import React, { useContext } from 'react';
+
import * as monthUtils from 'loot-core/src/shared/months';
let Context = React.createContext(null);
diff --git a/packages/loot-design/src/components/budget/report/components.js b/packages/loot-design/src/components/budget/report/components.js
index b3d87f9..87c73c0 100644
--- a/packages/loot-design/src/components/budget/report/components.js
+++ b/packages/loot-design/src/components/budget/report/components.js
@@ -1,7 +1,9 @@
import React from 'react';
+
import { integerToCurrency, amountToInteger } from 'loot-core/src/shared/util';
import evalArithmetic from 'loot-core/src/shared/arithmetic';
import { reportBudget } from 'loot-core/src/client/queries';
+
import { styles, colors } from '../../../style';
import { View, Text, Tooltip, Menu, useTooltip } from '../../common';
import { Field, SheetCell } from '../../table';
diff --git a/packages/loot-design/src/components/budget/rollover/BudgetSummary.js b/packages/loot-design/src/components/budget/rollover/BudgetSummary.js
index 160fa64..c260017 100644
--- a/packages/loot-design/src/components/budget/rollover/BudgetSummary.js
+++ b/packages/loot-design/src/components/budget/rollover/BudgetSummary.js
@@ -1,8 +1,11 @@
import React, { useState } from 'react';
+
import { css } from 'glamor';
import Component from '@reactions/component';
+
import * as monthUtils from 'loot-core/src/shared/months';
import { rolloverBudget } from 'loot-core/src/client/queries';
+
import NamespaceContext from '../../spreadsheet/NamespaceContext';
import format from '../../spreadsheet/format';
import SheetValue from '../../spreadsheet/SheetValue';
diff --git a/packages/loot-design/src/components/budget/rollover/HoldTooltip.js b/packages/loot-design/src/components/budget/rollover/HoldTooltip.js
index c1ef163..cccbdbc 100644
--- a/packages/loot-design/src/components/budget/rollover/HoldTooltip.js
+++ b/packages/loot-design/src/components/budget/rollover/HoldTooltip.js
@@ -1,6 +1,8 @@
import React, { useState, useContext, useEffect } from 'react';
+
import { integerToCurrency, amountToInteger } from 'loot-core/src/shared/util';
import evalArithmetic from 'loot-core/src/shared/arithmetic';
+
import { View, Button, Tooltip, InitialFocus, Input } from '../../common';
import SpreadsheetContext from '../../spreadsheet/SpreadsheetContext';
import NamespaceContext from '../../spreadsheet/NamespaceContext';
diff --git a/packages/loot-design/src/components/budget/rollover/RolloverContext.js b/packages/loot-design/src/components/budget/rollover/RolloverContext.js
index 7367b1c..2c3c406 100644
--- a/packages/loot-design/src/components/budget/rollover/RolloverContext.js
+++ b/packages/loot-design/src/components/budget/rollover/RolloverContext.js
@@ -1,4 +1,5 @@
import React, { useContext } from 'react';
+
import * as monthUtils from 'loot-core/src/shared/months';
let Context = React.createContext(null);
diff --git a/packages/loot-design/src/components/budget/rollover/TransferTooltip.js b/packages/loot-design/src/components/budget/rollover/TransferTooltip.js
index ab2bf82..4e7a76d 100644
--- a/packages/loot-design/src/components/budget/rollover/TransferTooltip.js
+++ b/packages/loot-design/src/components/budget/rollover/TransferTooltip.js
@@ -1,6 +1,8 @@
import React, { useState, useContext, useEffect } from 'react';
+
import { integerToCurrency, amountToInteger } from 'loot-core/src/shared/util';
import evalArithmetic from 'loot-core/src/shared/arithmetic';
+
import { View, Button, Tooltip, InitialFocus, Input } from '../../common';
import SpreadsheetContext from '../../spreadsheet/SpreadsheetContext';
import NamespaceContext from '../../spreadsheet/NamespaceContext';
diff --git a/packages/loot-design/src/components/budget/rollover/rollover-components.js b/packages/loot-design/src/components/budget/rollover/rollover-components.js
index 69f22d1..8dfca9e 100644
--- a/packages/loot-design/src/components/budget/rollover/rollover-components.js
+++ b/packages/loot-design/src/components/budget/rollover/rollover-components.js
@@ -1,7 +1,9 @@
import React, { useContext, useState } from 'react';
+
import { integerToCurrency, amountToInteger } from 'loot-core/src/shared/util';
import evalArithmetic from 'loot-core/src/shared/arithmetic';
import { rolloverBudget } from 'loot-core/src/client/queries';
+
import { styles, colors } from '../../../style';
import {
View,
diff --git a/packages/loot-design/src/components/budget/util.js b/packages/loot-design/src/components/budget/util.js
index 0eb439a..5f26fa8 100644
--- a/packages/loot-design/src/components/budget/util.js
+++ b/packages/loot-design/src/components/budget/util.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { colors } from '../../style';
export let CategoryGroupsContext = React.createContext([]);
diff --git a/packages/loot-design/src/components/common.js b/packages/loot-design/src/components/common.js
index 1aea5a5..db86d08 100644
--- a/packages/loot-design/src/components/common.js
+++ b/packages/loot-design/src/components/common.js
@@ -5,9 +5,7 @@ import React, {
useState,
useCallback
} from 'react';
-import { css } from 'glamor';
import mergeRefs from 'react-merge-refs';
-import hotkeys from 'hotkeys-js';
import ReactModal from 'react-modal';
import {
Route,
@@ -16,6 +14,9 @@ import {
useHistory,
useRouteMatch
} from 'react-router-dom';
+
+import { css } from 'glamor';
+import hotkeys from 'hotkeys-js';
import {
ListboxInput,
ListboxButton,
@@ -23,11 +24,13 @@ import {
ListboxList,
ListboxOption
} from '@reach/listbox';
-import { styles, colors } from '../style';
+
import { integerToCurrency } from 'loot-core/src/shared/util';
+import ExpandArrow from 'loot-design/src/svg/ExpandArrow';
+
+import { styles, colors } from '../style';
import Delete from '../svg/Delete';
import Loading from '../svg/v1/AnimatedLoading';
-import ExpandArrow from 'loot-design/src/svg/ExpandArrow';
import View from './View';
import Text from './Text';
import { useProperFocus } from './useProperFocus';
diff --git a/packages/loot-design/src/components/common.usage.js b/packages/loot-design/src/components/common.usage.js
index d84fd0a..88f6fcf 100644
--- a/packages/loot-design/src/components/common.usage.js
+++ b/packages/loot-design/src/components/common.usage.js
@@ -1,5 +1,7 @@
import React from 'react';
+
import Component from '@reactions/component';
+
import { Section, TestModal } from '../guide/components';
import { Input, Modal, View, Button, Stack } from './common';
diff --git a/packages/loot-design/src/components/forms.js b/packages/loot-design/src/components/forms.js
index 1697b3a..b37e997 100644
--- a/packages/loot-design/src/components/forms.js
+++ b/packages/loot-design/src/components/forms.js
@@ -1,5 +1,7 @@
import React from 'react';
+
import { css } from 'glamor';
+
import { View, Text } from './common';
import { colors } from '../style';
diff --git a/packages/loot-design/src/components/icons.usage.js b/packages/loot-design/src/components/icons.usage.js
index e07424c..f7f313a 100644
--- a/packages/loot-design/src/components/icons.usage.js
+++ b/packages/loot-design/src/components/icons.usage.js
@@ -1,4 +1,5 @@
import React, { useState } from 'react';
+
import { Section } from '../guide/components';
import { View, Button } from './common';
diff --git a/packages/loot-design/src/components/manager/BudgetList.js b/packages/loot-design/src/components/manager/BudgetList.js
index 0ceee3e..13863b2 100644
--- a/packages/loot-design/src/components/manager/BudgetList.js
+++ b/packages/loot-design/src/components/manager/BudgetList.js
@@ -1,14 +1,16 @@
import React, { useState, useRef } from 'react';
+
+import Key from 'loot-design/src/svg/v2/Key';
+import RefreshArrow from 'loot-design/src/svg/v2/RefreshArrow';
+import Loading from 'loot-design/src/svg/v1/AnimatedLoading';
+
import { View, Text, Modal, Button, Tooltip, Menu } from '../common';
import { styles, colors } from '../../style';
import CloudCheck from '../../svg/v1/CloudCheck';
import CloudDownload from '../../svg/v1/CloudDownload';
import CloudUnknown from '../../svg/v2/CloudUnknown';
import FileDouble from '../../svg/v1/FileDouble';
-import Key from 'loot-design/src/svg/v2/Key';
import DotsHorizontalTriple from '../../svg/v1/DotsHorizontalTriple';
-import RefreshArrow from 'loot-design/src/svg/v2/RefreshArrow';
-import Loading from 'loot-design/src/svg/v1/AnimatedLoading';
function getFileDescription(file) {
if (file.state === 'unknown') {
diff --git a/packages/loot-design/src/components/manager/BudgetList.usage.js b/packages/loot-design/src/components/manager/BudgetList.usage.js
index bbd358e..22c23f0 100644
--- a/packages/loot-design/src/components/manager/BudgetList.usage.js
+++ b/packages/loot-design/src/components/manager/BudgetList.usage.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { Section, TestModal } from '../../guide/components';
import { colors } from '../../style';
import BudgetList from './BudgetList';
diff --git a/packages/loot-design/src/components/manager/DeleteFile.js b/packages/loot-design/src/components/manager/DeleteFile.js
index 9a15d6b..16c523a 100644
--- a/packages/loot-design/src/components/manager/DeleteFile.js
+++ b/packages/loot-design/src/components/manager/DeleteFile.js
@@ -1,4 +1,5 @@
import React, { useState } from 'react';
+
import { View, Text, Modal, ButtonWithLoading } from '../common';
import { colors } from '../../style';
diff --git a/packages/loot-design/src/components/manager/DeleteFile.usage.js b/packages/loot-design/src/components/manager/DeleteFile.usage.js
index 7439513..645e491 100644
--- a/packages/loot-design/src/components/manager/DeleteFile.usage.js
+++ b/packages/loot-design/src/components/manager/DeleteFile.usage.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { Section, TestModal } from '../../guide/components';
import { colors } from '../../style';
import DeleteFile from './DeleteFile';
diff --git a/packages/loot-design/src/components/manager/Import.js b/packages/loot-design/src/components/manager/Import.js
index 5b02465..cbf39c8 100644
--- a/packages/loot-design/src/components/manager/Import.js
+++ b/packages/loot-design/src/components/manager/Import.js
@@ -1,4 +1,5 @@
import React, { useState } from 'react';
+
import { View, Block, Modal, Button } from '../common';
import { styles, colors } from '../../style';
diff --git a/packages/loot-design/src/components/manager/Import.usage.js b/packages/loot-design/src/components/manager/Import.usage.js
index e940db9..e1f278a 100644
--- a/packages/loot-design/src/components/manager/Import.usage.js
+++ b/packages/loot-design/src/components/manager/Import.usage.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { Section, TestModal } from '../../guide/components';
import { colors } from '../../style';
import Import from './Import';
diff --git a/packages/loot-design/src/components/manager/ImportActual.js b/packages/loot-design/src/components/manager/ImportActual.js
index a44926e..850bcde 100644
--- a/packages/loot-design/src/components/manager/ImportActual.js
+++ b/packages/loot-design/src/components/manager/ImportActual.js
@@ -1,6 +1,8 @@
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
+
import { importBudget } from 'loot-core/src/client/actions/budgets';
+
import {
View,
Block,
diff --git a/packages/loot-design/src/components/manager/ImportYNAB4.js b/packages/loot-design/src/components/manager/ImportYNAB4.js
index dbe9f93..fcb4ed5 100644
--- a/packages/loot-design/src/components/manager/ImportYNAB4.js
+++ b/packages/loot-design/src/components/manager/ImportYNAB4.js
@@ -1,6 +1,8 @@
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
+
import { importBudget } from 'loot-core/src/client/actions/budgets';
+
import { View, Block, Modal, Button, ButtonWithLoading, P } from '../common';
import { styles, colors } from '../../style';
diff --git a/packages/loot-design/src/components/manager/ImportYNAB5.js b/packages/loot-design/src/components/manager/ImportYNAB5.js
index 009f2b6..c6929d9 100644
--- a/packages/loot-design/src/components/manager/ImportYNAB5.js
+++ b/packages/loot-design/src/components/manager/ImportYNAB5.js
@@ -1,6 +1,8 @@
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
+
import { importBudget } from 'loot-core/src/client/actions/budgets';
+
import {
View,
Block,
diff --git a/packages/loot-design/src/components/mobile/AmountInput.js b/packages/loot-design/src/components/mobile/AmountInput.js
index 17bf4f8..14cfc6e 100644
--- a/packages/loot-design/src/components/mobile/AmountInput.js
+++ b/packages/loot-design/src/components/mobile/AmountInput.js
@@ -1,5 +1,4 @@
import React from 'react';
-import mitt from 'mitt';
import {
View,
Text,
@@ -9,16 +8,20 @@ import {
StyleSheet
} from 'react-native';
import { RectButton } from 'react-native-gesture-handler';
-import { colors } from '../../style';
-import { KeyboardButton } from './common';
-import TextInputWithAccessory from './TextInputWithAccessory';
+
+import mitt from 'mitt';
+
import {
toRelaxedNumber,
amountToCurrency,
getNumberFormat
} from 'loot-core/src/shared/util';
-import MathIcon from '../../svg/Math';
import Platform from 'loot-core/src/client/platform';
+
+import { colors } from '../../style';
+import { KeyboardButton } from './common';
+import TextInputWithAccessory from './TextInputWithAccessory';
+import MathIcon from '../../svg/Math';
import Add from '../../svg/v1/Add';
import Subtract from '../../svg/v1/Subtract';
import Equals from '../../svg/v1/Equals';
diff --git a/packages/loot-design/src/components/mobile/AndroidKeyboardAvoidingView.android.js b/packages/loot-design/src/components/mobile/AndroidKeyboardAvoidingView.android.js
index ca9c332..d522fa5 100644
--- a/packages/loot-design/src/components/mobile/AndroidKeyboardAvoidingView.android.js
+++ b/packages/loot-design/src/components/mobile/AndroidKeyboardAvoidingView.android.js
@@ -1,5 +1,6 @@
import React, { useState, useEffect } from 'react';
import { KeyboardAvoidingView, NativeModules, Keyboard } from 'react-native';
+
import { AmountAccessoryView } from 'loot-design/src/components/mobile/AmountInput';
import { BudgetAccessoryView } from 'loot-design/src/components/mobile/budget';
diff --git a/packages/loot-design/src/components/mobile/FocusAwareStatusBar.js b/packages/loot-design/src/components/mobile/FocusAwareStatusBar.js
index a766fdc..cad53fd 100644
--- a/packages/loot-design/src/components/mobile/FocusAwareStatusBar.js
+++ b/packages/loot-design/src/components/mobile/FocusAwareStatusBar.js
@@ -1,5 +1,6 @@
import * as React from 'react';
import { StatusBar } from 'react-native';
+
import { useIsFocused } from 'mobile/node_modules/@react-navigation/native';
export default function FocusAwareStatusBar(props) {
diff --git a/packages/loot-design/src/components/mobile/TextInputWithAccessory.android.js b/packages/loot-design/src/components/mobile/TextInputWithAccessory.android.js
index f283142..81e6c24 100644
--- a/packages/loot-design/src/components/mobile/TextInputWithAccessory.android.js
+++ b/packages/loot-design/src/components/mobile/TextInputWithAccessory.android.js
@@ -1,5 +1,6 @@
import React, { useContext } from 'react';
import { TextInput } from 'react-native';
+
import { AccessoryIdContext } from './AndroidKeyboardAvoidingView';
export default React.forwardRef(function TextInputWithAccessory(
diff --git a/packages/loot-design/src/components/mobile/account.js b/packages/loot-design/src/components/mobile/account.js
index ae3a2fe..2e9bafb 100644
--- a/packages/loot-design/src/components/mobile/account.js
+++ b/packages/loot-design/src/components/mobile/account.js
@@ -1,5 +1,6 @@
import React, { useMemo } from 'react';
import { View, TextInput } from 'react-native';
+
import CellValue from '../spreadsheet/CellValue';
import { TransactionList } from './transaction';
import Search from '../../svg/v1/Search';
diff --git a/packages/loot-design/src/components/mobile/account.usage.js b/packages/loot-design/src/components/mobile/account.usage.js
index 5a6af0a..c27b241 100644
--- a/packages/loot-design/src/components/mobile/account.usage.js
+++ b/packages/loot-design/src/components/mobile/account.usage.js
@@ -1,6 +1,8 @@
import React from 'react';
-import SpreadsheetContext from '../spreadsheet/SpreadsheetContext';
+
import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet';
+
+import SpreadsheetContext from '../spreadsheet/SpreadsheetContext';
import { MobileSection, WithHeader } from '../../guide/components';
import { accounts, categories, transactions } from './accounts.usage';
import { AccountDetails } from './account';
diff --git a/packages/loot-design/src/components/mobile/accounts.js b/packages/loot-design/src/components/mobile/accounts.js
index a95c55b..88da1f1 100644
--- a/packages/loot-design/src/components/mobile/accounts.js
+++ b/packages/loot-design/src/components/mobile/accounts.js
@@ -1,7 +1,9 @@
import React from 'react';
import { View, Text } from 'react-native';
import { RectButton } from 'react-native-gesture-handler';
+
import { prettyAccountType } from 'loot-core/src/shared/accounts';
+
import { Button, TextOneLine } from './common';
import { TransactionList } from './transaction';
import CellValue from '../spreadsheet/CellValue';
diff --git a/packages/loot-design/src/components/mobile/accounts.usage.js b/packages/loot-design/src/components/mobile/accounts.usage.js
index 6abd0ef..f889e76 100644
--- a/packages/loot-design/src/components/mobile/accounts.usage.js
+++ b/packages/loot-design/src/components/mobile/accounts.usage.js
@@ -1,14 +1,16 @@
import React from 'react';
-import { MobileSection } from '../../guide/components';
-import SpreadsheetContext from '../spreadsheet/SpreadsheetContext';
+
import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet';
-import { AccountList } from './accounts';
import {
generateAccount,
generateCategory,
generateTransaction
} from 'loot-core/src/mocks';
+import { MobileSection } from '../../guide/components';
+import SpreadsheetContext from '../spreadsheet/SpreadsheetContext';
+import { AccountList } from './accounts';
+
export const accounts = [
generateAccount('Bank of America', false, null, false),
generateAccount('Wells Fargo', false, null, true),
diff --git a/packages/loot-design/src/components/mobile/alerts.js b/packages/loot-design/src/components/mobile/alerts.js
index 12bf8bf..cb5fa9c 100644
--- a/packages/loot-design/src/components/mobile/alerts.js
+++ b/packages/loot-design/src/components/mobile/alerts.js
@@ -1,5 +1,6 @@
import React from 'react';
import { View, Text } from 'react-native';
+
import InformationSolid from 'loot-design/src/svg/v1/InformationOutline';
import { styles, colors } from 'loot-design/src/style';
diff --git a/packages/loot-design/src/components/mobile/budget.js b/packages/loot-design/src/components/mobile/budget.js
index 65033ff..3b5e080 100644
--- a/packages/loot-design/src/components/mobile/budget.js
+++ b/packages/loot-design/src/components/mobile/budget.js
@@ -14,10 +14,15 @@ import {
NativeViewGestureHandler
} from 'react-native-gesture-handler';
import Animated, { Easing } from 'react-native-reanimated';
-import AndroidKeyboardAvoidingView from './AndroidKeyboardAvoidingView';
+
+import memoizeOne from 'memoize-one';
+
import { amountToInteger, integerToAmount } from 'loot-core/src/shared/util';
import * as monthUtils from 'loot-core/src/shared/months';
-import memoizeOne from 'memoize-one';
+import Platform from 'loot-core/src/client/platform';
+import { rolloverBudget, reportBudget } from 'loot-core/src/client/queries';
+
+import AndroidKeyboardAvoidingView from './AndroidKeyboardAvoidingView';
import CellValue from '../spreadsheet/CellValue';
import SheetValue from '../spreadsheet/SheetValue';
import useSheetValue from '../spreadsheet/useSheetValue';
@@ -25,15 +30,12 @@ import { colors, mobileStyles as styles } from '../../style';
import format from '../spreadsheet/format';
import { Button, KeyboardButton, Card, Label } from './common';
import { ListItem, ROW_HEIGHT } from './table';
-import Platform from 'loot-core/src/client/platform';
import NamespaceContext from '../spreadsheet/NamespaceContext';
import AmountInput, {
MathOperations,
AmountAccessoryContext
} from './AmountInput';
import { DragDrop, Draggable, Droppable, DragDropHighlight } from './dragdrop';
-import { rolloverBudget, reportBudget } from 'loot-core/src/client/queries';
-
import ArrowThinLeft from '../../svg/v1/ArrowThinLeft';
import ArrowThinRight from '../../svg/v1/ArrowThinRight';
import ArrowThinUp from '../../svg/v1/ArrowThinUp';
diff --git a/packages/loot-design/src/components/mobile/budget.test.js b/packages/loot-design/src/components/mobile/budget.test.js
index 3fd5929..ea71e35 100644
--- a/packages/loot-design/src/components/mobile/budget.test.js
+++ b/packages/loot-design/src/components/mobile/budget.test.js
@@ -1,12 +1,15 @@
import React from 'react';
+
import { render, fireEvent } from '@testing-library/react';
+
+import * as monthUtils from 'loot-core/src/shared/months';
+import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet';
+
import { MobileScreen } from '../../guide/components';
import { categories, categoryGroups } from './budget.usage';
import { BudgetTable, BudgetAccessoryView } from './budget';
import InputAccessoryView from './InputAccessoryView';
import SpreadsheetContext from '../spreadsheet/SpreadsheetContext';
-import * as monthUtils from 'loot-core/src/shared/months';
-import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet';
function makeLoadedSpreadsheet() {
let spreadsheet = makeSpreadsheet();
diff --git a/packages/loot-design/src/components/mobile/budget.usage.js b/packages/loot-design/src/components/mobile/budget.usage.js
index 6c9b907..01d268e 100644
--- a/packages/loot-design/src/components/mobile/budget.usage.js
+++ b/packages/loot-design/src/components/mobile/budget.usage.js
@@ -1,11 +1,13 @@
import React from 'react';
import { View } from 'react-native';
+
+import { generateCategoryGroups } from 'loot-core/src/mocks';
+import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet';
+
import { MobileSection } from '../../guide/components';
import { BudgetTable, BudgetAccessoryView } from './budget';
import InputAccessoryView from './InputAccessoryView';
-import { generateCategoryGroups } from 'loot-core/src/mocks';
import SpreadsheetContext from '../spreadsheet/SpreadsheetContext';
-import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet';
export const categoryGroups = generateCategoryGroups([
{
diff --git a/packages/loot-design/src/components/mobile/common.js b/packages/loot-design/src/components/mobile/common.js
index 9f4298b..cb533ee 100644
--- a/packages/loot-design/src/components/mobile/common.js
+++ b/packages/loot-design/src/components/mobile/common.js
@@ -1,6 +1,7 @@
import React from 'react';
import { Text, View } from 'react-native';
import { RectButton } from 'react-native-gesture-handler';
+
import { styles, colors } from '../../style';
import Loading from '../../svg/v1/AnimatedLoading';
diff --git a/packages/loot-design/src/components/mobile/dragdrop.js b/packages/loot-design/src/components/mobile/dragdrop.js
index 959af4d..d8372c0 100644
--- a/packages/loot-design/src/components/mobile/dragdrop.js
+++ b/packages/loot-design/src/components/mobile/dragdrop.js
@@ -9,6 +9,7 @@ import React, {
import { View, findNodeHandle } from 'react-native';
import { State, LongPressGestureHandler } from 'react-native-gesture-handler';
import Animated from 'react-native-reanimated';
+
import { colors } from '../../style';
export const DragDropContext = React.createContext(null);
diff --git a/packages/loot-design/src/components/mobile/forms.js b/packages/loot-design/src/components/mobile/forms.js
index 1ea1436..1fe6877 100644
--- a/packages/loot-design/src/components/mobile/forms.js
+++ b/packages/loot-design/src/components/mobile/forms.js
@@ -1,6 +1,7 @@
import React from 'react';
import { View, Text, TextInput, Switch } from 'react-native';
import { RectButton } from 'react-native-gesture-handler';
+
import { colors } from '../../style';
export const EDITING_PADDING = 12;
diff --git a/packages/loot-design/src/components/mobile/table.js b/packages/loot-design/src/components/mobile/table.js
index a35d157..82eebf8 100644
--- a/packages/loot-design/src/components/mobile/table.js
+++ b/packages/loot-design/src/components/mobile/table.js
@@ -1,8 +1,10 @@
import React from 'react';
import { View } from 'react-native';
-import { colors } from '../../style';
+
import Platform from 'loot-core/src/client/platform';
+import { colors } from '../../style';
+
export const ROW_HEIGHT = 50;
export const ListItem = React.forwardRef(
diff --git a/packages/loot-design/src/components/mobile/transaction.js b/packages/loot-design/src/components/mobile/transaction.js
index fcedc83..6b8cc91 100644
--- a/packages/loot-design/src/components/mobile/transaction.js
+++ b/packages/loot-design/src/components/mobile/transaction.js
@@ -1,5 +1,7 @@
import React from 'react';
import { View, Text, SectionList, ScrollView, Animated } from 'react-native';
+import { Swipeable, RectButton } from 'react-native-gesture-handler';
+
import memoizeOne from 'memoize-one';
import {
format as formatDate,
@@ -7,7 +9,7 @@ import {
parseISO,
isValid as isValidDate
} from 'date-fns';
-import { Swipeable, RectButton } from 'react-native-gesture-handler';
+
import * as monthUtils from 'loot-core/src/shared/months';
import {
splitTransaction,
@@ -23,6 +25,8 @@ import {
amountToInteger,
groupById
} from 'loot-core/src/shared/util';
+import ArrowsSynchronize from 'loot-design/src/svg/v2/ArrowsSynchronize';
+
import KeyboardAvoidingView from './KeyboardAvoidingView';
import { ListItem } from './table';
import { Button, TextOneLine } from './common';
@@ -39,11 +43,9 @@ import {
BooleanField,
EDITING_PADDING
} from './forms';
-
import EditSkull1 from '../../svg/v2/EditSkull1';
import AlertTriangle from '../../svg/v2/AlertTriangle';
import CheckCircle1 from '../../svg/v2/CheckCircle1';
-import ArrowsSynchronize from 'loot-design/src/svg/v2/ArrowsSynchronize';
let getPayeesById = memoizeOne(payees => groupById(payees));
let getAccountsById = memoizeOne(accounts => groupById(accounts));
diff --git a/packages/loot-design/src/components/mobile/transaction.usage.js b/packages/loot-design/src/components/mobile/transaction.usage.js
index 90830f9..669c48f 100644
--- a/packages/loot-design/src/components/mobile/transaction.usage.js
+++ b/packages/loot-design/src/components/mobile/transaction.usage.js
@@ -1,12 +1,14 @@
import React from 'react';
-import { Section, MobileSection } from '../../guide/components';
+
import * as monthUtils from 'loot-core/src/shared/months';
-import { TransactionList, TransactionEdit } from './transaction';
import {
generateAccount,
generateCategory,
generateTransaction
} from 'loot-core/src/mocks';
+
+import { Section, MobileSection } from '../../guide/components';
+import { TransactionList, TransactionEdit } from './transaction';
import { colors } from '../../style';
export const accounts = [generateAccount('Checking')];
diff --git a/packages/loot-design/src/components/modals/CloseAccount.js b/packages/loot-design/src/components/modals/CloseAccount.js
index b53a8b3..f1963ae 100644
--- a/packages/loot-design/src/components/modals/CloseAccount.js
+++ b/packages/loot-design/src/components/modals/CloseAccount.js
@@ -1,7 +1,10 @@
import React, { useState } from 'react';
+
import { Formik } from 'formik';
-import { View, Text, Modal, Button, P, Select, FormError } from '../common';
+
import { integerToCurrency } from 'loot-core/src/shared/util';
+
+import { View, Text, Modal, Button, P, Select, FormError } from '../common';
import { colors } from '../../style';
function needsCategory(account, currentTransfer, accounts) {
diff --git a/packages/loot-design/src/components/modals/CloseAccount.usage.js b/packages/loot-design/src/components/modals/CloseAccount.usage.js
index c191aad..8ef5fc2 100644
--- a/packages/loot-design/src/components/modals/CloseAccount.usage.js
+++ b/packages/loot-design/src/components/modals/CloseAccount.usage.js
@@ -1,8 +1,10 @@
import React from 'react';
import { MemoryRouter as Router } from 'react-router-dom';
+
+import { generateAccount, generateCategoryGroups } from 'loot-core/src/mocks';
+
import { Section, TestModal } from '../../guide/components';
import CloseAccount from './CloseAccount';
-import { generateAccount, generateCategoryGroups } from 'loot-core/src/mocks';
const accounts = [
generateAccount('Bank of America', null, null, false),
diff --git a/packages/loot-design/src/components/modals/ConfigureLinkedAccounts.js b/packages/loot-design/src/components/modals/ConfigureLinkedAccounts.js
index eeb1bc0..045df62 100644
--- a/packages/loot-design/src/components/modals/ConfigureLinkedAccounts.js
+++ b/packages/loot-design/src/components/modals/ConfigureLinkedAccounts.js
@@ -1,6 +1,5 @@
import React, { useState } from 'react';
-import { View, Text, Modal, Button } from '../common';
-import { styles, colors } from '../../style';
+
import {
fromPlaidAccountType,
determineOffBudget,
@@ -8,6 +7,9 @@ import {
} from 'loot-core/src/shared/accounts';
import Checkmark from 'loot-design/src/svg/v1/Checkmark';
+import { View, Text, Modal, Button } from '../common';
+import { styles, colors } from '../../style';
+
function EmptyMessage() {
return null;
}
diff --git a/packages/loot-design/src/components/modals/ConfigureLinkedAccounts.usage.js b/packages/loot-design/src/components/modals/ConfigureLinkedAccounts.usage.js
index 4d7cf3c..faa6fd3 100644
--- a/packages/loot-design/src/components/modals/ConfigureLinkedAccounts.usage.js
+++ b/packages/loot-design/src/components/modals/ConfigureLinkedAccounts.usage.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { Section, TestModal } from '../../guide/components';
import ConfigureLinkedAccounts from './ConfigureLinkedAccounts';
diff --git a/packages/loot-design/src/components/modals/CreateLocalAccount.js b/packages/loot-design/src/components/modals/CreateLocalAccount.js
index 459f4e1..b5d59b8 100644
--- a/packages/loot-design/src/components/modals/CreateLocalAccount.js
+++ b/packages/loot-design/src/components/modals/CreateLocalAccount.js
@@ -1,6 +1,10 @@
import React from 'react';
+
+import { Formik } from 'formik';
+
import { toRelaxedNumber } from 'loot-core/src/shared/util';
import { determineOffBudget } from 'loot-core/src/shared/accounts';
+
import {
View,
Modal,
@@ -13,7 +17,6 @@ import {
FormError,
InitialFocus
} from '../common';
-import { Formik } from 'formik';
function CreateLocalAccount({ modalProps, actions, history }) {
return (
diff --git a/packages/loot-design/src/components/modals/CreateLocalAccount.usage.js b/packages/loot-design/src/components/modals/CreateLocalAccount.usage.js
index 8335b96..6533a22 100644
--- a/packages/loot-design/src/components/modals/CreateLocalAccount.usage.js
+++ b/packages/loot-design/src/components/modals/CreateLocalAccount.usage.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { Section, TestModal } from '../../guide/components';
import CreateLocalAccount from './CreateLocalAccount';
diff --git a/packages/loot-design/src/components/modals/EditField.js b/packages/loot-design/src/components/modals/EditField.js
index 24bff28..5d9e269 100644
--- a/packages/loot-design/src/components/modals/EditField.js
+++ b/packages/loot-design/src/components/modals/EditField.js
@@ -1,9 +1,12 @@
import React, { useRef } from 'react';
import { connect } from 'react-redux';
+
import { parseISO, format as formatDate, parse as parseDate } from 'date-fns';
+
import * as actions from 'loot-core/src/client/actions';
import { amountToInteger } from 'loot-core/src/shared/util';
import { currentDay, dayFromDate } from 'loot-core/src/shared/months';
+
import { View, Modal, Input } from '../common';
import DateSelect from '../DateSelect';
import CategoryAutocomplete from '../CategorySelect';
diff --git a/packages/loot-design/src/components/modals/ImportTransactions.js b/packages/loot-design/src/components/modals/ImportTransactions.js
index ce2df1c..2972847 100644
--- a/packages/loot-design/src/components/modals/ImportTransactions.js
+++ b/packages/loot-design/src/components/modals/ImportTransactions.js
@@ -1,6 +1,8 @@
import React, { useState, useEffect, useMemo } from 'react';
import { connect } from 'react-redux';
+
import * as d from 'date-fns';
+
import * as actions from 'loot-core/src/client/actions';
import { format as formatDate_ } from 'loot-core/src/shared/months';
import {
@@ -8,6 +10,7 @@ import {
amountToInteger,
looselyParseAmount
} from 'loot-core/src/shared/util';
+
import {
View,
Text,
diff --git a/packages/loot-design/src/components/modals/ImportTransactions.usage.js b/packages/loot-design/src/components/modals/ImportTransactions.usage.js
index e59f1c4..922d472 100644
--- a/packages/loot-design/src/components/modals/ImportTransactions.usage.js
+++ b/packages/loot-design/src/components/modals/ImportTransactions.usage.js
@@ -1,8 +1,10 @@
import React from 'react';
+
import { TestProvider } from 'loot-core/src/mocks/redux';
+import { generateTransactions } from 'loot-core/src/mocks';
+
import { Section, TestModal } from '../../guide/components';
import { ImportTransactions } from './ImportTransactions';
-import { generateTransactions } from 'loot-core/src/mocks';
let transactions = generateTransactions(20, 'acct', 'group');
// The mocks generate "internal" transactions... but we need the
diff --git a/packages/loot-design/src/components/modals/LoadBackup.js b/packages/loot-design/src/components/modals/LoadBackup.js
index 9548020..8eb66d9 100644
--- a/packages/loot-design/src/components/modals/LoadBackup.js
+++ b/packages/loot-design/src/components/modals/LoadBackup.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { View, Text, Block, Modal, Button } from '../common';
import { Row, Cell } from '../table';
import { colors } from '../../style';
diff --git a/packages/loot-design/src/components/modals/LoadBackup.usage.js b/packages/loot-design/src/components/modals/LoadBackup.usage.js
index ed7b92b..bed8369 100644
--- a/packages/loot-design/src/components/modals/LoadBackup.usage.js
+++ b/packages/loot-design/src/components/modals/LoadBackup.usage.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { Section, TestModal } from '../../guide/components';
import { colors } from '../../style';
import LoadBackup from './LoadBackup';
diff --git a/packages/loot-design/src/components/modals/PlaidExternalMsg.js b/packages/loot-design/src/components/modals/PlaidExternalMsg.js
index edfbb32..0bbce03 100644
--- a/packages/loot-design/src/components/modals/PlaidExternalMsg.js
+++ b/packages/loot-design/src/components/modals/PlaidExternalMsg.js
@@ -1,4 +1,5 @@
import React, { useState, useRef } from 'react';
+
import { View, Text, Modal, Button, P, ModalButtons } from '../common';
import { Error } from '../alerts';
import { colors } from '../../style';
diff --git a/packages/loot-design/src/components/modals/PlaidExternalMsg.usage.js b/packages/loot-design/src/components/modals/PlaidExternalMsg.usage.js
index 0c363e8..3ebde8f 100644
--- a/packages/loot-design/src/components/modals/PlaidExternalMsg.usage.js
+++ b/packages/loot-design/src/components/modals/PlaidExternalMsg.usage.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { Section, TestModal } from '../../guide/components';
import PlaidExternalMsg from './PlaidExternalMsg';
diff --git a/packages/loot-design/src/components/modals/SelectLinkedAccounts.js b/packages/loot-design/src/components/modals/SelectLinkedAccounts.js
index 862f3bf..3cba119 100644
--- a/packages/loot-design/src/components/modals/SelectLinkedAccounts.js
+++ b/packages/loot-design/src/components/modals/SelectLinkedAccounts.js
@@ -1,11 +1,13 @@
import React, { useState } from 'react';
-import { styles, colors } from '../../style';
-import { View, Text, Modal, P, Button } from '../common';
+
import {
fromPlaidAccountType,
prettyAccountType
} from 'loot-core/src/shared/accounts';
+import { styles, colors } from '../../style';
+import { View, Text, Modal, P, Button } from '../common';
+
let selectedStyle = {
color: colors.n1
};
diff --git a/packages/loot-design/src/components/modals/SelectLinkedAccounts.usage.js b/packages/loot-design/src/components/modals/SelectLinkedAccounts.usage.js
index 6b2ec16..2b59478 100644
--- a/packages/loot-design/src/components/modals/SelectLinkedAccounts.usage.js
+++ b/packages/loot-design/src/components/modals/SelectLinkedAccounts.usage.js
@@ -1,4 +1,5 @@
import React from 'react';
+
import { Section, TestModal } from '../../guide/components';
import SelectLinkedAccounts from './SelectLinkedAccounts';
diff --git a/packages/loot-design/src/components/payees.js b/packages/loot-design/src/components/payees.js
index e917ea7..7805975 100644
--- a/packages/loot-design/src/components/payees.js
+++ b/packages/loot-design/src/components/payees.js
@@ -7,6 +7,12 @@ import React, {
useCallback,
useImperativeHandle
} from 'react';
+
+import memoizeOne from 'memoize-one';
+import Component from '@reactions/component';
+
+import { groupById } from 'loot-core/src/shared/util';
+
import {
useStableCallback,
View,
@@ -17,9 +23,6 @@ import {
Tooltip,
Menu
} from './common';
-import memoizeOne from 'memoize-one';
-import Component from '@reactions/component';
-import { groupById } from 'loot-core/src/shared/util';
import { colors } from '../style';
import {
Table,
diff --git a/packages/loot-design/src/components/payees.usage.js b/packages/loot-design/src/components/payees.usage.js
index c40aa48..e6c439d 100644
--- a/packages/loot-design/src/components/payees.usage.js
+++ b/packages/loot-design/src/components/payees.usage.js
@@ -1,10 +1,13 @@
import React from 'react';
+
import Component from '@reactions/component';
-import { Section, TestModal } from './../guide/components';
-import { ManagePayees } from './payees';
+
import { applyChanges } from 'loot-core/src/shared/util';
import { TestProvider } from 'loot-core/src/mocks/redux';
+import { Section, TestModal } from '../guide/components';
+import { ManagePayees } from './payees';
+
let categoryGroups = [
{
id: 'foo',
diff --git a/packages/loot-design/src/components/sidebar.js b/packages/loot-design/src/components/sidebar.js
index 1a7a826..a03f3c7 100644
--- a/packages/loot-design/src/components/sidebar.js
+++ b/packages/loot-design/src/components/sidebar.js
@@ -1,7 +1,14 @@
import React, { useState, useMemo } from 'react';
import { useDispatch } from 'react-redux';
import { withRouter } from 'react-router-dom';
+
import { css } from 'glamor';
+
+import { pushModal } from 'loot-core/src/client/actions/modals';
+import { closeBudget } from 'loot-core/src/client/actions/budgets';
+import Platform from 'loot-core/src/client/platform';
+import PiggyBank from 'loot-design/src/svg/v1/PiggyBank';
+
import {
View,
Block,
@@ -12,9 +19,6 @@ import {
Menu,
Tooltip
} from './common';
-import { pushModal } from 'loot-core/src/client/actions/modals';
-import { closeBudget } from 'loot-core/src/client/actions/budgets';
-import Platform from 'loot-core/src/client/platform';
import CellValue from './spreadsheet/CellValue';
import Add from '../svg/v1/Add';
import CalendarIcon from '../svg/v2/Calendar';
@@ -22,10 +26,8 @@ import { styles, colors } from '../style';
import Wallet from '../svg/v1/Wallet';
import Reports from '../svg/v1/Reports';
import ArrowButtonLeft1 from '../svg/v2/ArrowButtonLeft1';
-import PiggyBank from 'loot-design/src/svg/v1/PiggyBank';
import Cog from '../svg/v1/Cog';
import DotsHorizontalTriple from '../svg/v1/DotsHorizontalTriple';
-
import { useDraggable, useDroppable, DropHighlight } from './sort.js';
export const SIDEBAR_WIDTH = 240;
diff --git a/packages/loot-design/src/components/sidebar.usage.js b/packages/loot-design/src/components/sidebar.usage.js
index 5c4f0e5..242fa25 100644
--- a/packages/loot-design/src/components/sidebar.usage.js
+++ b/packages/loot-design/src/components/sidebar.usage.js
@@ -1,14 +1,17 @@
import React from 'react';
-import lively from '@jlongster/lively';
import { MemoryRouter as Router } from 'react-router-dom';
import { DndProvider } from 'react-dnd';
import Backend from 'react-dnd-html5-backend';
-import SpreadsheetContext from './spreadsheet/SpreadsheetContext';
+
+import lively from '@jlongster/lively';
+
import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet';
-import { Sidebar } from './sidebar';
-import { Section } from '../guide/components';
import { generateAccount } from 'loot-core/src/mocks';
+import SpreadsheetContext from './spreadsheet/SpreadsheetContext';
+import { Section } from '../guide/components';
+import { Sidebar } from './sidebar';
+
function withState(state, render) {
const Component = lively(render, { getInitialState: () => state });
return