Merge branch 'main' into codex/update-dependencies-to-latest-versions

This commit is contained in:
beatz174-bit
2025-11-24 19:59:44 +10:00
committed by GitHub
4 changed files with 26 additions and 21 deletions
@@ -2,12 +2,16 @@ import { renderHook, waitFor } from '@testing-library/react';
import { describe, it, beforeEach, afterEach, expect, vi, type MockInstance } from 'vitest';
import { useBarcodeScanner } from '../useBarcodeScanner';
const decodeFromVideoDevice = vi.fn();
const { decodeFromVideoDevice, MockBrowserMultiFormatReader } = vi.hoisted(() => {
const decodeSpy = vi.fn();
const Reader = vi.fn(function MockBrowserMultiFormatReader(this: { decodeFromVideoDevice: typeof decodeSpy }) {
this.decodeFromVideoDevice = decodeSpy;
});
return { decodeFromVideoDevice: decodeSpy, MockBrowserMultiFormatReader: Reader };
});
vi.mock('@zxing/browser', () => ({
BrowserMultiFormatReader: vi.fn(function MockBrowserMultiFormatReader() {
return { decodeFromVideoDevice };
}),
BrowserMultiFormatReader: MockBrowserMultiFormatReader,
}));
declare global {
+7 -15
View File
@@ -91,25 +91,17 @@ export const ActivePickListScreen = () => {
const sortedItems = useMemo(() => {
return [...itemsVisibleByStatus].sort((a, b) => {
const productA = productMap.get(a.product_id);
const productB = productMap.get(b.product_id);
const timeA = a.created_at ?? a.updated_at ?? 0;
const timeB = b.created_at ?? b.updated_at ?? 0;
const nameA = productA ? normalizeName(productA.name) : '';
const nameB = productB ? normalizeName(productB.name) : '';
const nameComparison = nameA.localeCompare(nameB, undefined, { sensitivity: 'base' });
if (nameComparison !== 0) {
return nameComparison;
if (timeA !== timeB) {
return timeA - timeB;
}
if (a.is_carton !== b.is_carton) {
return a.is_carton ? 1 : -1;
}
const nameA = normalizeName(productMap.get(a.product_id)?.name ?? '');
const nameB = normalizeName(productMap.get(b.product_id)?.name ?? '');
const timeA = a.updated_at ?? a.created_at;
const timeB = b.updated_at ?? b.created_at;
return timeA - timeB;
return nameA.localeCompare(nameB, undefined, { sensitivity: 'base' });
});
}, [itemsVisibleByStatus, productMap]);
+9 -1
View File
@@ -8,6 +8,7 @@ import {
DialogTitle,
InputAdornment,
MenuItem,
Snackbar,
Stack,
TextField,
Typography,
@@ -301,7 +302,14 @@ export const ManageProductsScreen = () => {
Manage Products
</Typography>
<Stack spacing={2}>
{feedback ? <Alert severity={feedback.severity}>{feedback.text}</Alert> : null}
<Snackbar
open={Boolean(feedback)}
autoHideDuration={4000}
onClose={() => setFeedback(null)}
anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
>
{feedback ? <Alert severity={feedback.severity}>{feedback.text}</Alert> : null}
</Snackbar>
<Button component={RouterLink} to="/categories" variant="outlined" sx={{ alignSelf: 'flex-start' }}>
Edit Categories
</Button>