mirror of
https://github.com/ManInDark/HabitTrove.git
synced 2026-01-21 06:34:30 +01:00
Added settings, enabled calendar
This commit is contained in:
47
lib/types.ts
47
lib/types.ts
@@ -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
37
lib/utils/formatNumber.ts
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user