Added settings, enabled calendar

This commit is contained in:
dohsimpson
2024-12-31 13:58:14 -05:00
parent c4f0db329b
commit 7195f0d1f2
18 changed files with 493 additions and 137 deletions

View File

@@ -33,3 +33,50 @@ export interface CoinsData {
balance: number;
transactions: CoinTransaction[];
}
// Default value functions
// Data container types
export interface WishlistData {
items: WishlistItemType[];
}
// Default value functions
export const getDefaultHabitsData = (): HabitsData => ({
habits: []
});
export const getDefaultCoinsData = (): CoinsData => ({
balance: 0,
transactions: []
});
export const getDefaultWishlistData = (): WishlistData => ({
items: []
});
export const getDefaultSettings = (): Settings => ({
ui: {
useNumberFormatting: true,
useGrouping: true,
}
});
// Map of data types to their default values
export const DATA_DEFAULTS = {
wishlist: getDefaultWishlistData,
habits: getDefaultHabitsData,
coins: getDefaultCoinsData,
settings: getDefaultSettings,
} as const;
// Type for all possible data types
export type DataType = keyof typeof DATA_DEFAULTS;
export interface UISettings {
useNumberFormatting: boolean;
useGrouping: boolean;
}
export interface Settings {
ui: UISettings;
}

37
lib/utils/formatNumber.ts Normal file
View File

@@ -0,0 +1,37 @@
import { Settings } from "../types";
function formatWithLocale(amount: number, useGrouping: boolean, maximumFractionDigits?: number): string {
return amount.toLocaleString(undefined, {
maximumFractionDigits,
useGrouping,
});
}
export function formatNumber({ amount, settings }: { amount: number, settings: Settings }): string {
const useFormatting = settings?.ui.useNumberFormatting ?? true;
const useGrouping = settings?.ui.useGrouping ?? true;
if (!useFormatting) {
return useGrouping ? formatWithLocale(amount, true) : amount.toString();
}
const absNum = Math.abs(amount);
if (absNum >= 1e12) {
return amount.toExponential(2);
}
if (absNum >= 1e9) {
return formatWithLocale(amount / 1e9, useGrouping, 1) + 'B';
}
if (absNum >= 1e6) {
return formatWithLocale(amount / 1e6, useGrouping, 1) + 'M';
}
if (absNum >= 1e3) {
return formatWithLocale(amount / 1e3, useGrouping, 1) + 'K';
}
return formatWithLocale(amount, useGrouping);
}