feat: improve preview screen workflow, persist edits, remove retake button
This commit is contained in:
@@ -5,6 +5,7 @@ import CameraScreen from './src/screens/CameraScreen';
|
||||
import PreviewScreen from './src/screens/PreviewScreen';
|
||||
import AdminScreen from './src/screens/AdminScreen';
|
||||
import { loadSettings, saveSettings, AppSettings } from './src/services/settings';
|
||||
import { StickerData } from './src/components/DraggableSticker';
|
||||
import { logger, setLogsEnabled } from './src/services/logger';
|
||||
import * as FileSystem from 'expo-file-system/legacy';
|
||||
|
||||
@@ -29,6 +30,10 @@ export default function App() {
|
||||
const [settings, setSettings] = useState<AppSettings | null>(null);
|
||||
const [showEventModal, setShowEventModal] = useState(false);
|
||||
const [tempEventName, setTempEventName] = useState('');
|
||||
|
||||
// Persist edits across camera switches for collages
|
||||
const [stickers, setStickers] = useState<StickerData[]>([]);
|
||||
const [selectedFrameId, setSelectedFrameId] = useState<string | null>(null);
|
||||
|
||||
// 1. Load configuration settings on app start
|
||||
useEffect(() => {
|
||||
@@ -45,6 +50,10 @@ export default function App() {
|
||||
console.warn('Failed to auto-start Kiosk mode:', e);
|
||||
}
|
||||
}
|
||||
|
||||
if (savedSettings.frameMode === 'always') {
|
||||
setSelectedFrameId(savedSettings.selectedFrameId);
|
||||
}
|
||||
}
|
||||
initApp();
|
||||
}, []);
|
||||
@@ -67,6 +76,8 @@ export default function App() {
|
||||
}
|
||||
setPhotoUris([]);
|
||||
setCaptureHistory([]);
|
||||
setStickers([]);
|
||||
setSelectedFrameId(settings?.frameMode === 'always' ? settings.selectedFrameId : null);
|
||||
setCurrentScreen('camera');
|
||||
};
|
||||
|
||||
@@ -81,6 +92,8 @@ export default function App() {
|
||||
// Resume start
|
||||
setPhotoUris([]);
|
||||
setCaptureHistory([]);
|
||||
setStickers([]);
|
||||
setSelectedFrameId(updated.frameMode === 'always' ? updated.selectedFrameId : null);
|
||||
setCurrentScreen('camera');
|
||||
};
|
||||
|
||||
@@ -110,26 +123,7 @@ export default function App() {
|
||||
setCurrentScreen('preview');
|
||||
};
|
||||
|
||||
const handleRetakeLast = async () => {
|
||||
// Remove photos from the last capture event
|
||||
const lastCaptureCount = captureHistory.length > 0 ? captureHistory[captureHistory.length - 1] : 1;
|
||||
const updatedUris = [...photoUris];
|
||||
const removedUris = updatedUris.splice(-lastCaptureCount, lastCaptureCount);
|
||||
setPhotoUris(updatedUris);
|
||||
setCaptureHistory((prev) => prev.slice(0, -1));
|
||||
|
||||
// Clean up temp files
|
||||
for (const uri of removedUris) {
|
||||
try {
|
||||
await FileSystem.deleteAsync(uri, { idempotent: true });
|
||||
} catch (e) {
|
||||
console.warn('Failed to delete temp file:', e);
|
||||
}
|
||||
}
|
||||
|
||||
// Always let user retake
|
||||
setCurrentScreen('camera');
|
||||
};
|
||||
|
||||
const handleAddAnother = () => {
|
||||
setCurrentScreen('camera');
|
||||
@@ -146,6 +140,8 @@ export default function App() {
|
||||
}
|
||||
setPhotoUris([]);
|
||||
setCaptureHistory([]);
|
||||
setStickers([]);
|
||||
setSelectedFrameId(settings?.frameMode === 'always' ? settings.selectedFrameId : null);
|
||||
setCurrentScreen('home'); // Go to home when cancelled
|
||||
};
|
||||
|
||||
@@ -199,7 +195,6 @@ export default function App() {
|
||||
<PreviewScreen
|
||||
photoUris={photoUris}
|
||||
printerIp={settings.printerIp}
|
||||
onRetakeLast={handleRetakeLast}
|
||||
onAddAnother={handleAddAnother}
|
||||
onReset={handleReset}
|
||||
frameMode={settings.frameMode}
|
||||
@@ -208,6 +203,10 @@ export default function App() {
|
||||
dateOverlay={settings.dateOverlay}
|
||||
dateOverlayTransform={settings.dateOverlayTransform}
|
||||
eventText={settings.eventText}
|
||||
stickers={stickers}
|
||||
setStickers={setStickers}
|
||||
selectedFrameId={selectedFrameId}
|
||||
setSelectedFrameId={setSelectedFrameId}
|
||||
/>
|
||||
</View>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user