mirror of
https://github.com/christianvidalwolf-prog/Craze-Data-check.git
synced 2026-08-03 16:25:24 +02:00
Add Hard Refresh button to TopBar
Button triggers reload of all data from Dropbox source
This commit is contained in:
+3
-1
@@ -36,6 +36,7 @@ export default function App() {
|
|||||||
const [rowStatuses, setRowStatuses] = useState<Record<string, string>>({});
|
const [rowStatuses, setRowStatuses] = useState<Record<string, string>>({});
|
||||||
const [pendingRows, setPendingRows] = useState<Record<string, { rowIndex: number; originalData: ExcelRow; newData: ExcelRow; articleName: string }>>({});
|
const [pendingRows, setPendingRows] = useState<Record<string, { rowIndex: number; originalData: ExcelRow; newData: ExcelRow; articleName: string }>>({});
|
||||||
const [isSavingAll, setIsSavingAll] = useState(false);
|
const [isSavingAll, setIsSavingAll] = useState(false);
|
||||||
|
const [refreshTrigger, setRefreshTrigger] = useState(0);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log('[App] session changed:', session ? 'logged in' : 'logged out');
|
console.log('[App] session changed:', session ? 'logged in' : 'logged out');
|
||||||
@@ -204,7 +205,7 @@ export default function App() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (session) loadDefaultData();
|
if (session) loadDefaultData();
|
||||||
}, [session]);
|
}, [session, refreshTrigger]);
|
||||||
|
|
||||||
const handleFileUpload = (e: React.ChangeEvent<HTMLInputElement>) => {
|
const handleFileUpload = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
const file = e.target.files?.[0];
|
const file = e.target.files?.[0];
|
||||||
@@ -475,6 +476,7 @@ export default function App() {
|
|||||||
stats={stats}
|
stats={stats}
|
||||||
activeModule={activeModule}
|
activeModule={activeModule}
|
||||||
onExport={handleExport}
|
onExport={handleExport}
|
||||||
|
onRefresh={() => { setRefreshTrigger(t => t + 1); }}
|
||||||
hasData={appState.data.length > 0}
|
hasData={appState.data.length > 0}
|
||||||
hasUnsavedChanges={appState.hasUnsavedChanges}
|
hasUnsavedChanges={appState.hasUnsavedChanges}
|
||||||
userEmail={session.user.email}
|
userEmail={session.user.email}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ interface TopBarProps {
|
|||||||
stats: any;
|
stats: any;
|
||||||
activeModule?: string;
|
activeModule?: string;
|
||||||
onExport: () => void;
|
onExport: () => void;
|
||||||
|
onRefresh?: () => void;
|
||||||
hasData: boolean;
|
hasData: boolean;
|
||||||
hasUnsavedChanges: boolean;
|
hasUnsavedChanges: boolean;
|
||||||
userEmail?: string;
|
userEmail?: string;
|
||||||
@@ -21,7 +22,7 @@ interface TopBarProps {
|
|||||||
isSavingAll: boolean;
|
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 [showPending, setShowPending] = useState(false);
|
||||||
const dropdownRef = useRef<HTMLDivElement>(null);
|
const dropdownRef = useRef<HTMLDivElement>(null);
|
||||||
|
|
||||||
@@ -167,6 +168,17 @@ export function TopBar({ stats, activeModule, onExport, hasData, hasUnsavedChang
|
|||||||
</button>
|
</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
|
<button
|
||||||
onClick={onUndo}
|
onClick={onUndo}
|
||||||
disabled={!canUndo}
|
disabled={!canUndo}
|
||||||
|
|||||||
Reference in New Issue
Block a user