When an activity's currency cannot be converted (no exchange rate for the
currency/date), the converted fee and unit price arrive as null/NaN. Passing
these to `new Big()` in the PortfolioCalculator constructor throws
"[big.js] Invalid number" and aborts the whole calculation, so a single
unconvertible activity fails the entire performance/details response with a 500.
Add a `parseToBig` guard that defaults a missing/non-finite value to 0 and logs
a warning, so the rest of the portfolio still renders. `quantity` is left as a
direct `new Big()` because it is never currency-converted.
Signed-off-by: martin <martin@0x01.local>
* feat(client): resolve errors
* feat(client): replace constructor based DI with inject function
* feat(client): enforce encapsulation and immutability
* feat(client): remove unused tap operator
* feat(client): implement generic type parameter
* feat(client): replace constructor based DI with inject functions
* feat(client): implement default date range
* feat(client): resolve errors
* feat(client): replace constructor based DI with inject function
* feat(client): enforce encapsulation
* fix(client): remove dead code
* feat(client): enforce immutability
* feat(client): replace deprecated getDeviceInfo
* feat(client): convert errors to signal
* feat(client): convert hasImpersonationId to signal
* feat(client): convert user to signal
* feat(client): convert to computed signals
* feat(client): convert historicalDataItems and isLoadingPerformance to signals
* feat(client): convert performance and precision to signals
* feat(client): implement OnPush change detection strategy
* fix(common): revert DateRange type change
* fix(client): format file
* fix(client): resolve errors
* feat(client): replace constructor based DI with inject function
* feat(client): enforce encapsulation
* fix(client): remove dead code
* feat(client): replace deprecated getDeviceInfo
* feat(client): convert isLoading to signal
* feat(client): convert hasImpersonationId to signal
* feat(client): convert summary to signal
* feat(client): convert user and hasPermissionToUpdateUserSettings to signals
* feat(client): implement OnPush change detection strategy
* fix(client): remove nested subscription
* feat(client): resolve error
* feat(client): enforce encapsulation
* feat(client): enforce immutability
* feat(client): replace constructor based DI with inject function
* feat(client): replace deprecated getDeviceInfo
* feat(client): convert benchmarks to signal
* feat(client): convert historicalDataItems to signal
* feat(client): convert fearAndGreedIndex to signal
* feat(client): resolve errors
* feat(client): migrate constructor based DI to inject function
* feat(client): implement view child signal
* feat(client): replace deprecated getDeviceInfo
* fix(client): enforce encapsulation and immutability