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) {
|
if (params) {
|
||||||
for (const [k, v] of Object.entries(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="File Size" value={formatBytes(file.file_size)} />
|
||||||
<MetaRow label="MIME Type" value={file.mime_type ?? "–"} />
|
<MetaRow label="MIME Type" value={file.mime_type ?? "–"} />
|
||||||
<MetaRow label="Uploaded" value={formatDateTime(file.created_at)} />
|
<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="Last Step" value={status.last_step ?? "–"} />
|
||||||
<MetaRow label="Total Steps" value={String(status.total_steps)} />
|
<MetaRow label="Total Steps" value={String(status.total_steps)} />
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -109,18 +109,25 @@ export default function FilesScreen() {
|
|||||||
searchTimeoutRef.current = setTimeout(async () => {
|
searchTimeoutRef.current = setTimeout(async () => {
|
||||||
setPage(1);
|
setPage(1);
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
await fetchFiles(1, true, text);
|
try {
|
||||||
setLoading(false);
|
await fetchFiles(1, true, text);
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
}, 400);
|
}, 400);
|
||||||
},
|
},
|
||||||
[fetchFiles]
|
[fetchFiles]
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleClearSearch = useCallback(() => {
|
const handleClearSearch = useCallback(async () => {
|
||||||
setSearchQuery("");
|
setSearchQuery("");
|
||||||
setPage(1);
|
setPage(1);
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
fetchFiles(1, true).then(() => setLoading(false));
|
try {
|
||||||
|
await fetchFiles(1, true);
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
}, [fetchFiles]);
|
}, [fetchFiles]);
|
||||||
|
|
||||||
const handleFilePress = useCallback(
|
const handleFilePress = useCallback(
|
||||||
|
|||||||
@@ -305,10 +305,11 @@ export default function UploadScreen() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!result.canceled && result.assets.length > 0) {
|
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
|
// Derive extension from MIME type so the filename matches the actual format
|
||||||
const ext = asset.mimeType?.split("/")[1]?.replace("jpeg", "jpg") ?? "jpg";
|
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");
|
await uploadFile(asset.uri, filename, asset.mimeType ?? "image/jpeg");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user