fix(mobile): address code review feedback - error handling, filename collision, hash display
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
@@ -70,7 +70,7 @@ export function t(key: string, params?: Record<string, string>): string {
|
||||
|
||||
if (params) {
|
||||
for (const [k, v] of Object.entries(params)) {
|
||||
value = value.replace(new RegExp(`\\{${k}\\}`, "g"), v);
|
||||
value = value.replaceAll(`{${k}}`, v);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -181,7 +181,7 @@ export default function FileDetailScreen() {
|
||||
<MetaRow label="File Size" value={formatBytes(file.file_size)} />
|
||||
<MetaRow label="MIME Type" value={file.mime_type ?? "–"} />
|
||||
<MetaRow label="Uploaded" value={formatDateTime(file.created_at)} />
|
||||
<MetaRow label="File Hash" value={file.filehash ? `${file.filehash.slice(0, 16)}…` : "–"} />
|
||||
<MetaRow label="File Hash" value={file.filehash ? `${file.filehash.slice(0, 24)}…` : "–"} />
|
||||
<MetaRow label="Last Step" value={status.last_step ?? "–"} />
|
||||
<MetaRow label="Total Steps" value={String(status.total_steps)} />
|
||||
</View>
|
||||
|
||||
@@ -109,18 +109,25 @@ export default function FilesScreen() {
|
||||
searchTimeoutRef.current = setTimeout(async () => {
|
||||
setPage(1);
|
||||
setLoading(true);
|
||||
await fetchFiles(1, true, text);
|
||||
setLoading(false);
|
||||
try {
|
||||
await fetchFiles(1, true, text);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}, 400);
|
||||
},
|
||||
[fetchFiles]
|
||||
);
|
||||
|
||||
const handleClearSearch = useCallback(() => {
|
||||
const handleClearSearch = useCallback(async () => {
|
||||
setSearchQuery("");
|
||||
setPage(1);
|
||||
setLoading(true);
|
||||
fetchFiles(1, true).then(() => setLoading(false));
|
||||
try {
|
||||
await fetchFiles(1, true);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}, [fetchFiles]);
|
||||
|
||||
const handleFilePress = useCallback(
|
||||
|
||||
@@ -305,10 +305,11 @@ export default function UploadScreen() {
|
||||
});
|
||||
|
||||
if (!result.canceled && result.assets.length > 0) {
|
||||
for (const asset of result.assets) {
|
||||
for (let i = 0; i < result.assets.length; i++) {
|
||||
const asset = result.assets[i];
|
||||
// Derive extension from MIME type so the filename matches the actual format
|
||||
const ext = asset.mimeType?.split("/")[1]?.replace("jpeg", "jpg") ?? "jpg";
|
||||
const filename = asset.fileName ?? `photo_${Date.now()}_${Math.random().toString(36).slice(2, 6)}.${ext}`;
|
||||
const filename = asset.fileName ?? `photo_${Date.now()}_${i}.${ext}`;
|
||||
await uploadFile(asset.uri, filename, asset.mimeType ?? "image/jpeg");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user