Polish upload UI for dual queue status and batch confirm flow.
Metadata error confirm, success styling, upload-confirmed hiding of configure, and remove stale PR plan doc.
This commit is contained in:
@@ -11,8 +11,11 @@
|
||||
<span class="shrink-0 text-xs text-muted-foreground">
|
||||
{{ prettyBytes(row.file.size, { maximumFractionDigits: 1 }) }}
|
||||
</span>
|
||||
<span class="shrink-0 text-xs" :class="statusTextClass(row.preview)">
|
||||
{{ row.preview.message }}
|
||||
<span class="shrink-0 max-w-32 truncate text-xs sm:max-w-40" :class="metadataStatusClass(row.metadata)">
|
||||
{{ row.metadata.message }}
|
||||
</span>
|
||||
<span class="shrink-0 max-w-32 truncate text-xs sm:max-w-40" :class="uploadStatusClass(row.upload)">
|
||||
{{ row.upload.message }}
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
@@ -21,15 +24,12 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { type PropType } from 'vue';
|
||||
import { useMetadataStore } from '@/stores/metadata';
|
||||
import type { MetadataPreviewEntry } from '@/types/metadata/MetadataPreview';
|
||||
import { makeKeyFromFile } from '@/utils/file/makeKeyFromFile';
|
||||
import type { UploadQueueEntry } from '@/types/upload/UploadQueueEntry';
|
||||
import type { UploadQueueRow } from '@/types/upload/UploadQueueRow';
|
||||
import prettyBytes from 'pretty-bytes';
|
||||
|
||||
const metadataStore = useMetadataStore();
|
||||
|
||||
const { makeKeyFromFile } = metadataStore;
|
||||
|
||||
const props = defineProps({
|
||||
rows: {
|
||||
type: Array as PropType<UploadQueueRow[]>,
|
||||
@@ -48,6 +48,27 @@ const emit = defineEmits<{
|
||||
const isRowSelected = (row: UploadQueueRow): boolean =>
|
||||
props.selectedFile !== null && makeKeyFromFile(props.selectedFile) === row.key;
|
||||
|
||||
const statusTextClass = (entry: MetadataPreviewEntry): string =>
|
||||
entry.status === 'error' ? 'text-destructive' : 'text-muted-foreground';
|
||||
const metadataStatusClass = (entry: MetadataPreviewEntry): string => {
|
||||
if (entry.status === 'error') {
|
||||
return 'text-destructive';
|
||||
}
|
||||
|
||||
if (entry.status === 'ready') {
|
||||
return 'text-success';
|
||||
}
|
||||
|
||||
return 'text-muted-foreground';
|
||||
};
|
||||
|
||||
const uploadStatusClass = (entry: UploadQueueEntry): string => {
|
||||
if (entry.status === 'failed') {
|
||||
return 'text-destructive';
|
||||
}
|
||||
|
||||
if (entry.status === 'uploaded') {
|
||||
return 'text-success';
|
||||
}
|
||||
|
||||
return 'text-muted-foreground';
|
||||
};
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user