import React, { useState, useEffect } from 'react';
import { connect } from 'react-redux';
import { withRouter } from 'react-router-dom';
import { bindActionCreators } from 'redux';
import * as actions from 'loot-core/src/client/actions';
import * as queries from 'loot-core/src/client/queries';
import { send } from 'loot-core/src/platform/client/fetch';
import {
Button,
Input,
InitialFocus,
Text
} from 'loot-design/src/components/common';
import { Sidebar } from 'loot-design/src/components/sidebar';
import { styles, colors } from 'loot-design/src/style';
function EditableBudgetName({ prefs, savePrefs }) {
const [editing, setEditing] = useState(false);
if (editing) {
return (
{
const newBudgetName = e.target.value;
if (newBudgetName.trim() !== '') {
await savePrefs({
budgetName: e.target.value
});
setEditing(false);
}
}}
onBlur={() => setEditing(false)}
/>
);
} else {
return (
);
}
}
function SidebarWithData({
accounts,
failedAccounts,
updatedAccounts,
replaceModal,
prefs,
floatingSidebar,
savePrefs,
saveGlobalPrefs,
getAccounts
}) {
useEffect(() => void getAccounts(), [getAccounts]);
async function onReorder(id, dropPos, targetId) {
if (dropPos === 'bottom') {
let idx = accounts.findIndex(a => a.id === targetId) + 1;
targetId = idx < accounts.length ? accounts[idx].id : null;
}
await send('account-move', { id, targetId });
await getAccounts();
}
return (
}
accounts={accounts}
failedAccounts={failedAccounts}
updatedAccounts={updatedAccounts}
getBalanceQuery={queries.accountBalance}
getOnBudgetBalance={queries.budgetedAccountBalance}
getOffBudgetBalance={queries.offbudgetAccountBalance}
onFloat={() => saveGlobalPrefs({ floatingSidebar: !floatingSidebar })}
onReorder={onReorder}
onAddAccount={() =>
replaceModal(
prefs['flags.syncAccount'] ? 'add-account' : 'add-local-account'
)
}
showClosedAccounts={prefs['ui.showClosedAccounts']}
onToggleClosedAccounts={() =>
savePrefs({
'ui.showClosedAccounts': !prefs['ui.showClosedAccounts']
})
}
style={[{ flex: 1 }, styles.darkScrollbar]}
/>
);
}
export default withRouter(
connect(
state => ({
accounts: state.queries.accounts,
failedAccounts: state.account.failedAccounts,
updatedAccounts: state.queries.updatedAccounts,
prefs: state.prefs.local,
floatingSidebar: state.prefs.global.floatingSidebar
}),
dispatch => bindActionCreators(actions, dispatch)
)(SidebarWithData)
);