Add Hard Refresh button to TopBar

Button triggers reload of all data from Dropbox source
This commit is contained in:
Christian Vidal Wolf
2026-04-20 20:30:21 +02:00
parent 369e37c8f5
commit ecf1c7831c
2 changed files with 16 additions and 2 deletions
+3 -1
View File
@@ -36,6 +36,7 @@ export default function App() {
const [rowStatuses, setRowStatuses] = useState<Record<string, string>>({});
const [pendingRows, setPendingRows] = useState<Record<string, { rowIndex: number; originalData: ExcelRow; newData: ExcelRow; articleName: string }>>({});
const [isSavingAll, setIsSavingAll] = useState(false);
const [refreshTrigger, setRefreshTrigger] = useState(0);
useEffect(() => {
console.log('[App] session changed:', session ? 'logged in' : 'logged out');
@@ -204,7 +205,7 @@ export default function App() {
};
if (session) loadDefaultData();
}, [session]);
}, [session, refreshTrigger]);
const handleFileUpload = (e: React.ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0];
@@ -475,6 +476,7 @@ export default function App() {
stats={stats}
activeModule={activeModule}
onExport={handleExport}
onRefresh={() => { setRefreshTrigger(t => t + 1); }}
hasData={appState.data.length > 0}
hasUnsavedChanges={appState.hasUnsavedChanges}
userEmail={session.user.email}
+13 -1
View File
@@ -6,6 +6,7 @@ interface TopBarProps {
stats: any;
activeModule?: string;
onExport: () => void;
onRefresh?: () => void;
hasData: boolean;
hasUnsavedChanges: boolean;
userEmail?: string;
@@ -21,7 +22,7 @@ interface TopBarProps {
isSavingAll: boolean;
}
export function TopBar({ stats, activeModule, onExport, hasData, hasUnsavedChanges, userEmail, onSignOut, canUndo, onUndo, undoMessage, undoSteps, pendingCount, pendingChanges, onSaveAll, onRevertRow, isSavingAll }: TopBarProps) {
export function TopBar({ stats, activeModule, onExport, onRefresh, hasData, hasUnsavedChanges, userEmail, onSignOut, canUndo, onUndo, undoMessage, undoSteps, pendingCount, pendingChanges, onSaveAll, onRevertRow, isSavingAll }: TopBarProps) {
const [showPending, setShowPending] = useState(false);
const dropdownRef = useRef<HTMLDivElement>(null);
@@ -167,6 +168,17 @@ export function TopBar({ stats, activeModule, onExport, hasData, hasUnsavedChang
</button>
)}
{onRefresh && (
<button
onClick={onRefresh}
className="flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium bg-violet-600 hover:bg-violet-700 text-white transition-colors"
title="Hard Refresh - Reload all data from source"
>
<RotateCcw className="w-4 h-4" />
Refresh
</button>
)}
<button
onClick={onUndo}
disabled={!canUndo}