feat: Add user data import feature (Fixes #26) #27

Merged
egullickson merged 11 commits from issue-26-add-user-data-import into main 2026-01-12 03:22:32 +00:00
Showing only changes of commit 5648f4c3d0 - Show all commits

View File

@@ -14,6 +14,8 @@ import { useVehicles } from '../features/vehicles/hooks/useVehicles';
import { useTheme } from '../shared-minimal/theme/ThemeContext';
import { DeleteAccountDialog } from '../features/settings/components/DeleteAccountDialog';
import { PendingDeletionBanner } from '../features/settings/components/PendingDeletionBanner';
import { ImportButton } from '../features/settings/components/ImportButton';
import { ImportDialog } from '../features/settings/components/ImportDialog';
import {
Box,
Typography,
@@ -64,6 +66,8 @@ export const SettingsPage: React.FC = () => {
const [editedDisplayName, setEditedDisplayName] = useState('');
const [editedNotificationEmail, setEditedNotificationEmail] = useState('');
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
const [importDialogOpen, setImportDialogOpen] = useState(false);
const [selectedFile, setSelectedFile] = useState<File | null>(null);
const exportMutation = useExportUserData();
// Initialize edit form when profile loads or edit mode starts
@@ -112,6 +116,16 @@ export const SettingsPage: React.FC = () => {
}
};
const handleImportFileSelected = (file: File) => {
setSelectedFile(file);
setImportDialogOpen(true);
};
const handleImportClose = () => {
setImportDialogOpen(false);
setSelectedFile(null);
};
return (
<Box sx={{ py: 2 }}>
<Typography variant="h4" sx={{ fontWeight: 700, color: 'text.primary', mb: 4 }}>
@@ -444,9 +458,20 @@ export const SettingsPage: React.FC = () => {
<ListItemIcon>
<StorageIcon />
</ListItemIcon>
<ListItemText
primary="Import Data"
secondary="Upload and restore your vehicle data from a backup"
/>
<ListItemSecondaryAction>
<ImportButton onFileSelected={handleImportFileSelected} />
</ListItemSecondaryAction>
</ListItem>
<Divider />
<ListItem>
<ListItemText
primary="Export Data"
secondary="Download your vehicle and fuel log data"
sx={{ pl: 7 }}
/>
<ListItemSecondaryAction>
<MuiButton
@@ -636,6 +661,11 @@ export const SettingsPage: React.FC = () => {
</Box>
<DeleteAccountDialog open={deleteDialogOpen} onClose={() => setDeleteDialogOpen(false)} />
<ImportDialog
isOpen={importDialogOpen}
onClose={handleImportClose}
file={selectedFile}
/>
</Box>
);
};