{ "version": 3, "sources": ["apps/partner-center-client/src/app/saas-metrics/currency.service.ts"], "sourcesContent": ["import { Inject, Injectable } from '@angular/core';\nimport {\n MeasureAggregateOperator,\n MultiLocationAnalyticsService,\n Order,\n QueryMetricsRequest,\n} from '@vendasta/multi-location-analytics';\nimport { Observable } from 'rxjs';\nimport { map, publishReplay, refCount, switchMap } from 'rxjs/operators';\nimport { extractMetricsFromResponse } from '../core/multi-location-analytics';\n\nexport interface FormatSignOptions {\n fixed?: boolean;\n}\n\nexport class Currency {\n constructor(\n public readonly code: string,\n public readonly sign: string,\n public readonly penniesToDollars: (value: number) => number, //we can't actually use this because we store the values corrupted elsewhere, but it's still good info to have\n public readonly dollarsToFixed: (value: number) => string,\n ) {}\n\n displayValue(pennies: number): number {\n // return Number(this.dollarsToFixed(this.penniesToDollars(pennies)));\n return Number(this.dollarsToFixed(pennies / 100));\n }\n\n public formatSign(dollars: number | string, options: FormatSignOptions = {}): string {\n options = { fixed: true, ...options }; //last value wins\n let numberSign = '';\n if (Number(dollars) < 0) {\n numberSign = '-';\n if (typeof dollars === 'number') {\n dollars = Math.abs(dollars);\n } else {\n dollars.replace('-', '');\n }\n }\n if (!options.fixed) {\n return `${numberSign}${this.sign}${dollars}`;\n }\n return `${numberSign}${this.sign}${this.dollarsToFixed(Number(dollars))}`;\n }\n\n public formatUnit(dollars: number): string {\n return `${this.code}${this.dollarsToFixed(dollars)}`;\n }\n\n public kFormat(dollars: number, options: FormatSignOptions = {}): string {\n if (Math.abs(dollars) < 1000) {\n return this.formatSign(dollars, { fixed: false, ...options });\n }\n dollars = (Math.sign(dollars) * Math.round(Math.abs(dollars) / 100)) / 10; //js Math.round does round-up, not away-from-zero\n return this.formatSign(dollars, { fixed: false }) + 'K';\n }\n}\n\n// extracted from unicode.org/cldr version 36, for all currencies that existed in vendor-set MSRP's as of 2019-11-28\nexport const CURRENCIES: { [key: string]: Currency } = {\n ISK: new Currency(\n 'ISK',\n 'kr',\n (pennies) => pennies,\n (dollars) => dollars.toFixed(0),\n ),\n JPY: new Currency(\n 'JPY',\n '¥',\n (pennies) => pennies,\n (dollars) => dollars.toFixed(0),\n ),\n AUD: new Currency(\n 'AUD',\n '$',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n AWG: new Currency(\n 'AWG',\n 'KM',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n BRL: new Currency(\n 'BRL',\n 'R$',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n CHF: new Currency(\n 'CHF',\n '$',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n CZK: new Currency(\n 'CZK',\n 'Kč',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n GBP: new Currency(\n 'GBP',\n '£',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n NZD: new Currency(\n 'NZD',\n '$',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n SGD: new Currency(\n 'SGD',\n '$',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n USD: new Currency(\n 'USD',\n '$',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n CAD: new Currency(\n 'CAD',\n '$',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n EUR: new Currency(\n 'EUR',\n '€',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n ZAR: new Currency(\n 'ZAR',\n 'R',\n (pennies) => pennies / 100,\n (dollars) => dollars.toFixed(2),\n ),\n IQD: new Currency(\n 'IQD',\n 'kr',\n (pennies) => pennies / 1000,\n (dollars) => dollars.toFixed(3),\n ),\n TND: new Currency(\n 'TND',\n 'T$',\n (pennies) => pennies / 1000,\n (dollars) => dollars.toFixed(3),\n ),\n KWD: new Currency(\n 'KWD',\n '$',\n (pennies) => pennies / 1000,\n (dollars) => dollars.toFixed(3),\n ),\n JOD: new Currency(\n 'JOD',\n '¥',\n (pennies) => pennies / 1000,\n (dollars) => dollars.toFixed(3),\n ),\n BHD: new Currency(\n 'BHD',\n '$',\n (pennies) => pennies / 1000,\n (dollars) => dollars.toFixed(3),\n ),\n CLF: new Currency(\n 'CLF',\n '$',\n (pennies) => pennies / 10000,\n (dollars) => dollars.toFixed(4),\n ),\n};\n\nexport const PARTNER_CURRENCY_MAP: { [key: string]: Currency } = {\n TRUD: CURRENCIES.ZAR,\n SORD: CURRENCIES.USD,\n};\n\nexport const DEFAULT_CURRENCY = CURRENCIES.USD;\n\nexport type CurrencyFormatter = (value: number) => string;\n@Injectable({ providedIn: 'root' })\nexport class CurrencyService {\n currency$: Observable;\n kFormat$: Observable;\n\n constructor(\n @Inject('PARTNER_ID') private partner$: Observable,\n private multiLocationAnalyticsService: MultiLocationAnalyticsService,\n ) {\n this.currency$ = this.partner$.pipe(\n switchMap((pid) => {\n const request = {\n partnerId: pid,\n metricName: 'saas_display_currency',\n resourceIds: [\n {\n marketId: {\n marketIds: ['__ALL__'],\n },\n },\n ],\n measures: [\n {\n aggregate: {\n measure: 'currency',\n aggOp: MeasureAggregateOperator.COUNT,\n alias: 'count',\n },\n },\n ],\n groupBy: {\n dimension: [\n {\n dimension: 'currency',\n },\n ],\n },\n limit: 1,\n orderBy: {\n orderBy: [\n {\n column: 'count',\n order: Order.ORDER_DESC,\n },\n ],\n },\n };\n return this.multiLocationAnalyticsService.queryMetrics(request as QueryMetricsRequest).pipe(\n map((resp) => {\n const metrics = extractMetricsFromResponse(resp);\n if (!metrics.length || !metrics[0] || !metrics[0].dimension || PARTNER_CURRENCY_MAP[pid]) {\n return PARTNER_CURRENCY_MAP[pid] || DEFAULT_CURRENCY;\n }\n const currency = metrics[0].dimension;\n return CURRENCIES[currency] || DEFAULT_CURRENCY;\n }),\n );\n }),\n publishReplay(1),\n refCount(),\n );\n this.kFormat$ = this.currency$.pipe(map((currency) => (value) => currency.kFormat(value)));\n }\n}\n"], "mappings": "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", "names": ["Currency", "constructor", "code", "sign", "penniesToDollars", "dollarsToFixed", "displayValue", "pennies", "Number", "formatSign", "dollars", "options", "__spreadValues", "fixed", "numberSign", "Math", "abs", "replace", "formatUnit", "kFormat", "round", "CURRENCIES", "ISK", "toFixed", "JPY", "AUD", "AWG", "BRL", "CHF", "CZK", "GBP", "NZD", "SGD", "USD", "CAD", "EUR", "ZAR", "IQD", "TND", "KWD", "JOD", "BHD", "CLF", "PARTNER_CURRENCY_MAP", "TRUD", "SORD", "DEFAULT_CURRENCY", "CurrencyService", "partner$", "multiLocationAnalyticsService", "currency$", "pipe", "switchMap", "pid", "request", "partnerId", "metricName", "resourceIds", "marketId", "marketIds", "measures", "aggregate", "measure", "aggOp", "MeasureAggregateOperator", "COUNT", "alias", "groupBy", "dimension", "limit", "orderBy", "column", "order", "Order", "ORDER_DESC", "queryMetrics", "map", "resp", "metrics", "extractMetricsFromResponse", "length", "currency", "publishReplay", "refCount", "kFormat$", "value", "\u0275\u0275inject", "MultiLocationAnalyticsService", "factory", "\u0275fac", "providedIn", "_CurrencyService"] }