Files
sendico/frontend/pshared/lib/controllers/balance_mask/ledger_accounts.dart
2026-01-23 02:48:10 +01:00

47 lines
1.3 KiB
Dart

import 'package:flutter/foundation.dart';
import 'package:pshared/provider/ledger.dart';
class LedgerBalanceMaskController with ChangeNotifier {
String? _orgRef;
final Set<String> _maskedBalanceRefs = <String>{};
Set<String> _knownAccountRefs = <String>{};
void update(LedgerAccountsProvider accountsProvider) {
final nextOrgRef = accountsProvider.organizationRef;
final orgChanged = nextOrgRef != _orgRef;
if (orgChanged) {
_orgRef = nextOrgRef;
_maskedBalanceRefs.clear();
_knownAccountRefs = <String>{};
}
final refs = accountsProvider.accounts.map((a) => a.ledgerAccountRef).toSet();
_maskedBalanceRefs.removeWhere((id) => !refs.contains(id));
final newRefs = refs.difference(_knownAccountRefs);
if (newRefs.isNotEmpty) {
_maskedBalanceRefs.addAll(newRefs);
}
_knownAccountRefs = refs;
notifyListeners();
}
bool isBalanceMasked(String ledgerAccountRef) => _maskedBalanceRefs.contains(ledgerAccountRef);
bool isBalanceVisible(String ledgerAccountRef) => !isBalanceMasked(ledgerAccountRef);
void toggleBalanceMask(String ledgerAccountRef) {
final existed = _maskedBalanceRefs.remove(ledgerAccountRef);
if (!existed) _maskedBalanceRefs.add(ledgerAccountRef);
notifyListeners();
}
void unmaskAllBalances() {
_maskedBalanceRefs.clear();
notifyListeners();
}
}