Package Exports
- @cranberry-money/shared-utils
Readme
@myportfolio/shared-utils
Shared utility functions for the Blueberry platform, supporting both web (Blueberry) and mobile (Blackberry) applications.
Installation
npm install @myportfolio/shared-utilsUsage
import { formatCurrency, formatDate, hasActiveFilters, truncateText } from '@myportfolio/shared-utils';
// Currency formatting
const amount = formatCurrency(1234.56); // "1,234.56"
// Date formatting
const date = formatDate('2024-01-15T10:30:00Z'); // "1/15/2024"
// Filter utilities
const hasFilters = hasActiveFilters({ name: 'Apple', category: '', page: 1 }); // true
// Text utilities
const short = truncateText('This is a very long text', 10); // "This is a..."Available Utilities
Formatters
Currency (formatters/currency.ts)
formatCurrency(value)- Format number with commas and 2 decimalsparseCurrencyInput(value)- Parse currency string to numberformatCurrencyWithCode(value, code, locale, minDigits, maxDigits)- Format with currency codeformatDefaultCurrency(value, minDigits, maxDigits)- Format with default currency (AUD)
Dates (formatters/dates.ts)
formatDate(dateString, fallback)- Format ISO date to localized dateformatShortDate(dateString, locale)- Format to short date (e.g., "Jan 15")formatTime(dateString, locale)- Format to 24-hour timeformatDateTime(dateString, locale)- Format to "Jan 15 14:30"
Numbers (formatters/numbers.ts)
formatShares(shares, locale)- Format share quantities (no decimals)
Helpers
Filters (helpers/filters.ts)
hasActiveFilters<T>(filters, excludeFields)- Check if any filters are activecountActiveFilters<T>(filters, excludeFields)- Count active filtersclearAllFilters<T>(filters, preserveFields)- Clear all filter valuesupdateFilters<T>(currentFilters, updates)- Type-safe filter updates
Text (helpers/text.ts)
truncateText(text, maxLength)- Truncate text with ellipsis
Platform Compatibility
This package is designed to work across:
- Web applications (React) - Direct use of utility functions
- Mobile applications (React Native) - Platform-agnostic implementations
- Node.js environments - For server-side utility needs
Platform-Specific Considerations
Date Formatting
The date formatters use Intl.DateTimeFormat and toLocaleDateString which work consistently across web and React Native platforms.
Currency Formatting
Currency formatters use Intl.NumberFormat which provides consistent formatting across platforms with proper locale support.
Filter Utilities
Filter utilities are completely platform-agnostic and work with any TypeScript object structure.
Examples
Currency Formatting
import { formatCurrency, formatCurrencyWithCode } from '@myportfolio/shared-utils';
// Basic formatting
formatCurrency(1234.56); // "1,234.56"
formatCurrency('1234.56'); // "1,234.56"
// With currency code
formatCurrencyWithCode(1234.56, 'USD', 'en-US', 2, 2); // "$1,234.56"
formatCurrencyWithCode(1234.56, 'AUD', 'en-AU', 0, 0); // "A$1,235"Filter Management
import { hasActiveFilters, countActiveFilters, clearAllFilters } from '@myportfolio/shared-utils';
const filters = {
searchQuery: 'apple',
category: 'technology',
minPrice: 100,
maxPrice: null,
tags: [],
};
// Check for active filters (excluding searchQuery by default)
hasActiveFilters(filters); // true (category and minPrice are active)
// Count active filters
countActiveFilters(filters); // 2 (category and minPrice)
// Clear all filters while preserving searchQuery
const cleared = clearAllFilters(filters, ['searchQuery']);
// Result: { searchQuery: 'apple' }Date Formatting
import { formatDate, formatDateTime, formatShortDate } from '@myportfolio/shared-utils';
const isoDate = '2024-01-15T14:30:00Z';
formatDate(isoDate); // "1/15/2024"
formatShortDate(isoDate); // "Jan 15"
formatDateTime(isoDate); // "Jan 15 14:30"Development
# Build the package
npm run build
# Watch for changes
npm run dev
# Type check
npm run typecheckDependencies
@myportfolio/shared-constants- For currency and formatting constants
License
MIT