refactor(receipt-import): update CategoryLookup initialization and improve imports

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Nils-Johan Gynther
2026-05-03 15:29:58 +02:00
parent c26d5a4e1d
commit 046dad870f
3 changed files with 7 additions and 6 deletions
@@ -58,14 +58,14 @@ class AdminRepository {
Future<T> _patch<T>( Future<T> _patch<T>(
String path, { String path, {
required Map<String, dynamic> body, required Map<String, dynamic> body,
required T Function(dynamic) parse, required T Function(Map<String, dynamic>) parse,
}) async { }) async {
final token = await _token(); final token = await _token();
final data = await guardedApiCall( final data = await guardedApiCall(
_ref, _ref,
() => _apiClient.patchJson(path, body: body, token: token), () => _apiClient.patchJson(path, body: body, token: token),
); );
return parse(data); return parse(Map<String, dynamic>.from(data as Map));
} }
/// Fire-and-forget PATCH. /// Fire-and-forget PATCH.
@@ -15,6 +15,7 @@ import '../../pantry/domain/pantry_item.dart';
import '../data/import_providers.dart'; import '../data/import_providers.dart';
import '../data/receipt_import_session.dart'; import '../data/receipt_import_session.dart';
import '../domain/parsed_receipt_item.dart'; import '../domain/parsed_receipt_item.dart';
import '../../../core/ui/product_picker_field.dart';
import '../utils/receipt_import_utils.dart'; import '../utils/receipt_import_utils.dart';
import 'edit_dialog.dart'; import 'edit_dialog.dart';
@@ -49,7 +50,7 @@ class _ReceiptImportTabState extends ConsumerState<ReceiptImportTab> {
// Kategoriträdet för tvåstegs-picker // Kategoriträdet för tvåstegs-picker
List<AdminCategoryNode> _categoryTree = []; List<AdminCategoryNode> _categoryTree = [];
CategoryLookup _lookup = CategoryLookup([]); CategoryLookup _lookup = CategoryLookup.fromTree([]);
// Befintligt inventarie: productId → InventoryItem (för sammanslagning) // Befintligt inventarie: productId → InventoryItem (för sammanslagning)
Map<int, InventoryItem> _inventoryByProduct = {}; Map<int, InventoryItem> _inventoryByProduct = {};
@@ -113,7 +114,7 @@ class _ReceiptImportTabState extends ConsumerState<ReceiptImportTab> {
setState(() { setState(() {
_products = dedupedById.values.toList(); _products = dedupedById.values.toList();
_categoryTree = categoryTree; _categoryTree = categoryTree;
_lookup = CategoryLookup(categoryTree); _lookup = CategoryLookup.fromTree(categoryTree);
}); });
} }
} catch (e, st) { } catch (e, st) {
@@ -3,6 +3,8 @@
/// Separerade från UI-lagret för att möjliggöra testning och återanvändning. /// Separerade från UI-lagret för att möjliggöra testning och återanvändning.
library; library;
import '../../admin/domain/admin_category_node.dart';
// ── Enhetskonvertering ──────────────────────────────────────────────────────── // ── Enhetskonvertering ────────────────────────────────────────────────────────
// Alla massvärden normaliseras till gram (g). // Alla massvärden normaliseras till gram (g).
@@ -165,8 +167,6 @@ String normalizeProductName(String raw) {
// ── Kategoriträd-lookup ─────────────────────────────────────────────────────── // ── Kategoriträd-lookup ───────────────────────────────────────────────────────
import '../../../features/admin/domain/admin_category_node.dart';
/// Hjälpklass för snabb lookup av kategori-sökväg via index. /// Hjälpklass för snabb lookup av kategori-sökväg via index.
/// ///
/// Bygg en gång från trädet och återanvänd för alla rader. /// Bygg en gång från trädet och återanvänd för alla rader.