mirror of
https://github.com/yangshun/tech-interview-handbook.git
synced 2025-07-28 04:33:42 +08:00
[offers][feat] Allowing showing income based on selected salary
This commit is contained in:
@ -15,6 +15,7 @@ import { trpc } from '~/utils/trpc';
|
||||
import OffersRow from './OffersRow';
|
||||
|
||||
import type { DashboardOffer, GetOffersResponse, Paging } from '~/types/offers';
|
||||
import { Currency } from '~/utils/offers/currency/CurrencyEnum';
|
||||
|
||||
const NUMBER_OF_OFFERS_IN_PAGE = 10;
|
||||
export type OffersTableProps = Readonly<{
|
||||
@ -25,7 +26,7 @@ export default function OffersTable({
|
||||
companyFilter,
|
||||
jobTitleFilter,
|
||||
}: OffersTableProps) {
|
||||
const [currency, setCurrency] = useState('SGD'); // TODO: Detect location
|
||||
const [currency, setCurrency] = useState(Currency.SGD.toString()); // TODO: Detect location
|
||||
const [selectedTab, setSelectedTab] = useState(YOE_CATEGORY.ENTRY);
|
||||
const [pagination, setPagination] = useState<Paging>({
|
||||
currentPage: 0,
|
||||
@ -44,12 +45,13 @@ export default function OffersTable({
|
||||
numOfPages: 0,
|
||||
totalItems: 0,
|
||||
});
|
||||
}, [selectedTab]);
|
||||
}, [selectedTab, currency]);
|
||||
const offersQuery = trpc.useQuery(
|
||||
[
|
||||
'offers.list',
|
||||
{
|
||||
companyId: companyFilter,
|
||||
currency,
|
||||
limit: NUMBER_OF_OFFERS_IN_PAGE,
|
||||
location: 'Singapore, Singapore', // TODO: Geolocation
|
||||
offset: pagination.currentPage,
|
||||
|
@ -6,11 +6,12 @@ function Test() {
|
||||
const data = trpc.useQuery([
|
||||
'offers.list',
|
||||
{
|
||||
currency: "aed",
|
||||
limit: 100,
|
||||
location: 'Singapore, Singapore',
|
||||
offset: 0,
|
||||
sortBy: '+totalCompensation',
|
||||
yoeCategory: 1,
|
||||
yoeCategory: 2,
|
||||
},
|
||||
]);
|
||||
|
||||
|
@ -26,26 +26,27 @@ export const offersCommentsRouter = createRouter()
|
||||
user: true,
|
||||
},
|
||||
orderBy: {
|
||||
createdAt: 'desc'
|
||||
}
|
||||
createdAt: 'desc',
|
||||
},
|
||||
},
|
||||
replyingTo: true,
|
||||
user: true,
|
||||
},
|
||||
orderBy: {
|
||||
createdAt: 'desc'
|
||||
}
|
||||
createdAt: 'desc',
|
||||
},
|
||||
},
|
||||
},
|
||||
where: {
|
||||
id: input.profileId,
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
const discussions: OffersDiscussion = {
|
||||
data: result?.discussion
|
||||
data:
|
||||
result?.discussion
|
||||
.filter((x) => {
|
||||
return x.replyingToId === null
|
||||
return x.replyingToId === null;
|
||||
})
|
||||
.map((x) => {
|
||||
if (x.user == null) {
|
||||
@ -81,18 +82,18 @@ export const offersCommentsRouter = createRouter()
|
||||
message: reply.message,
|
||||
replies: [],
|
||||
replyingToId: reply.replyingToId,
|
||||
user: reply.user
|
||||
}
|
||||
user: reply.user,
|
||||
};
|
||||
}),
|
||||
replyingToId: x.replyingToId,
|
||||
user: x.user
|
||||
}
|
||||
user: x.user,
|
||||
};
|
||||
|
||||
return replyType
|
||||
}) ?? []
|
||||
}
|
||||
return replyType;
|
||||
}) ?? [],
|
||||
};
|
||||
|
||||
return discussions
|
||||
return discussions;
|
||||
},
|
||||
})
|
||||
.mutation('create', {
|
||||
@ -101,7 +102,7 @@ export const offersCommentsRouter = createRouter()
|
||||
profileId: z.string(),
|
||||
replyingToId: z.string().optional(),
|
||||
token: z.string().optional(),
|
||||
userId: z.string().optional()
|
||||
userId: z.string().optional(),
|
||||
}),
|
||||
async resolve({ ctx, input }) {
|
||||
const profile = await ctx.prisma.offersProfile.findFirst({
|
||||
@ -156,7 +157,7 @@ export const offersCommentsRouter = createRouter()
|
||||
|
||||
const created = await ctx.prisma.offersReply.findFirst({
|
||||
include: {
|
||||
user: true
|
||||
user: true,
|
||||
},
|
||||
where: {
|
||||
id: createdReply.id,
|
||||
@ -175,10 +176,10 @@ export const offersCommentsRouter = createRouter()
|
||||
id: '',
|
||||
image: '',
|
||||
name: profile?.profileName ?? '<missing name>',
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
return result
|
||||
return result;
|
||||
}
|
||||
|
||||
throw new trpc.TRPCError({
|
||||
@ -223,10 +224,10 @@ export const offersCommentsRouter = createRouter()
|
||||
include: {
|
||||
replies: {
|
||||
include: {
|
||||
user: true
|
||||
}
|
||||
user: true,
|
||||
},
|
||||
},
|
||||
user: true
|
||||
user: true,
|
||||
},
|
||||
where: {
|
||||
id: input.id,
|
||||
@ -250,8 +251,8 @@ export const offersCommentsRouter = createRouter()
|
||||
id: '',
|
||||
image: '',
|
||||
name: profile?.profileName ?? '<missing name>',
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
}),
|
||||
replyingToId: updated!.replyingToId,
|
||||
user: updated!.user ?? {
|
||||
@ -260,10 +261,10 @@ export const offersCommentsRouter = createRouter()
|
||||
id: '',
|
||||
image: '',
|
||||
name: profile?.profileName ?? '<missing name>',
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
return result
|
||||
return result;
|
||||
}
|
||||
|
||||
throw new trpc.TRPCError({
|
||||
|
@ -1,12 +1,9 @@
|
||||
import { z } from 'zod';
|
||||
import { TRPCError } from '@trpc/server';
|
||||
|
||||
import {
|
||||
dashboardOfferDtoMapper,
|
||||
getOffersResponseMapper,
|
||||
} from '~/mappers/offers-mappers';
|
||||
|
||||
import { createRouter } from '../context';
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { z } from "zod";
|
||||
import { dashboardOfferDtoMapper, getOffersResponseMapper } from "~/mappers/offers-mappers";
|
||||
import { convert } from "~/utils/offers/currency/currency-exchange";
|
||||
import { Currency } from "~/utils/offers/currency/CurrencyEnum";
|
||||
import { createRouter } from "../context";
|
||||
|
||||
const yoeCategoryMap: Record<number, string> = {
|
||||
0: 'Internship',
|
||||
@ -38,6 +35,7 @@ const createSortByValidationRegex = () => {
|
||||
export const offersRouter = createRouter().query('list', {
|
||||
input: z.object({
|
||||
companyId: z.string().nullish(),
|
||||
currency: z.string().nullish(),
|
||||
dateEnd: z.date().nullish(),
|
||||
dateStart: z.date().nullish(),
|
||||
limit: z.number().positive(),
|
||||
@ -80,6 +78,9 @@ export const offersRouter = createRouter().query('list', {
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: {
|
||||
monthYearReceived: 'desc',
|
||||
},
|
||||
where: {
|
||||
AND: [
|
||||
{
|
||||
@ -121,6 +122,9 @@ export const offersRouter = createRouter().query('list', {
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: {
|
||||
monthYearReceived: 'desc',
|
||||
},
|
||||
where: {
|
||||
AND: [
|
||||
{
|
||||
@ -150,6 +154,36 @@ export const offersRouter = createRouter().query('list', {
|
||||
},
|
||||
});
|
||||
|
||||
// CONVERTING
|
||||
const currency = input.currency?.toUpperCase()
|
||||
if (currency != null && currency in Currency) {
|
||||
data = await Promise.all(
|
||||
data.map(async (offer) => {
|
||||
|
||||
if (offer.offersFullTime?.totalCompensation) {
|
||||
offer.offersFullTime.totalCompensation.value = await convert(offer.offersFullTime.totalCompensation.value, offer.offersFullTime.totalCompensation.currency, currency);
|
||||
offer.offersFullTime.totalCompensation.currency = currency;
|
||||
offer.offersFullTime.baseSalary.value = await convert(offer.offersFullTime.totalCompensation.value, offer.offersFullTime.totalCompensation.currency, currency);
|
||||
offer.offersFullTime.baseSalary.currency = currency;
|
||||
offer.offersFullTime.stocks.value = await convert(offer.offersFullTime.totalCompensation.value, offer.offersFullTime.totalCompensation.currency, currency);
|
||||
offer.offersFullTime.stocks.currency = currency;
|
||||
offer.offersFullTime.bonus.value = await convert(offer.offersFullTime.totalCompensation.value, offer.offersFullTime.totalCompensation.currency, currency);
|
||||
offer.offersFullTime.bonus.currency = currency;
|
||||
} else if (offer.offersIntern?.monthlySalary) {
|
||||
offer.offersIntern.monthlySalary.value = await convert(offer.offersIntern.monthlySalary.value, offer.offersIntern.monthlySalary.currency, currency);
|
||||
offer.offersIntern.monthlySalary.currency = currency;
|
||||
} else {
|
||||
throw new TRPCError({
|
||||
code: 'NOT_FOUND',
|
||||
message: 'Total Compensation or Salary not found',
|
||||
});
|
||||
}
|
||||
|
||||
return offer;
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
// FILTERING
|
||||
data = data.filter((offer) => {
|
||||
let validRecord = true;
|
||||
|
@ -1,167 +1,170 @@
|
||||
// eslint-disable-next-line no-shadow
|
||||
export enum Currency {
|
||||
AED = 'AED', // United Arab Emirates Dirham
|
||||
AFN = 'AFN', // Afghanistan Afghani
|
||||
ALL = 'ALL', // Albania Lek
|
||||
AMD = 'AMD', // Armenia Dram
|
||||
ANG = 'ANG', // Netherlands Antilles Guilder
|
||||
AOA = 'AOA', // Angola Kwanza
|
||||
ARS = 'ARS', // Argentina Peso
|
||||
AUD = 'AUD', // Australia Dollar
|
||||
AWG = 'AWG', // Aruba Guilder
|
||||
AZN = 'AZN', // Azerbaijan New Manat
|
||||
BAM = 'BAM', // Bosnia and Herzegovina Convertible Marka
|
||||
BBD = 'BBD', // Barbados Dollar
|
||||
BDT = 'BDT', // Bangladesh Taka
|
||||
BGN = 'BGN', // Bulgaria Lev
|
||||
BHD = 'BHD', // Bahrain Dinar
|
||||
BIF = 'BIF', // Burundi Franc
|
||||
BMD = 'BMD', // Bermuda Dollar
|
||||
BND = 'BND', // Brunei Darussalam Dollar
|
||||
BOB = 'BOB', // Bolivia Bolíviano
|
||||
BRL = 'BRL', // Brazil Real
|
||||
BSD = 'BSD', // Bahamas Dollar
|
||||
BTN = 'BTN', // Bhutan Ngultrum
|
||||
BWP = 'BWP', // Botswana Pula
|
||||
BYR = 'BYR', // Belarus Ruble
|
||||
BZD = 'BZD', // Belize Dollar
|
||||
CAD = 'CAD', // Canada Dollar
|
||||
CDF = 'CDF', // Congo/Kinshasa Franc
|
||||
CHF = 'CHF', // Switzerland Franc
|
||||
CLP = 'CLP', // Chile Peso
|
||||
CNY = 'CNY', // China Yuan Renminbi
|
||||
COP = 'COP', // Colombia Peso
|
||||
CRC = 'CRC', // Costa Rica Colon
|
||||
CUC = 'CUC', // Cuba Convertible Peso
|
||||
CUP = 'CUP', // Cuba Peso
|
||||
CVE = 'CVE', // Cape Verde Escudo
|
||||
CZK = 'CZK', // Czech Republic Koruna
|
||||
DJF = 'DJF', // Djibouti Franc
|
||||
DKK = 'DKK', // Denmark Krone
|
||||
DOP = 'DOP', // Dominican Republic Peso
|
||||
DZD = 'DZD', // Algeria Dinar
|
||||
EGP = 'EGP', // Egypt Pound
|
||||
ERN = 'ERN', // Eritrea Nakfa
|
||||
ETB = 'ETB', // Ethiopia Birr
|
||||
EUR = 'EUR', // Euro Member Countries
|
||||
FJD = 'FJD', // Fiji Dollar
|
||||
FKP = 'FKP', // Falkland Islands (Malvinas) Pound
|
||||
GBP = 'GBP', // United Kingdom Pound
|
||||
GEL = 'GEL', // Georgia Lari
|
||||
GGP = 'GGP', // Guernsey Pound
|
||||
GHS = 'GHS', // Ghana Cedi
|
||||
GIP = 'GIP', // Gibraltar Pound
|
||||
GMD = 'GMD', // Gambia Dalasi
|
||||
GNF = 'GNF', // Guinea Franc
|
||||
GTQ = 'GTQ', // Guatemala Quetzal
|
||||
GYD = 'GYD', // Guyana Dollar
|
||||
HKD = 'HKD', // Hong Kong Dollar
|
||||
HNL = 'HNL', // Honduras Lempira
|
||||
HRK = 'HRK', // Croatia Kuna
|
||||
HTG = 'HTG', // Haiti Gourde
|
||||
HUF = 'HUF', // Hungary Forint
|
||||
IDR = 'IDR', // Indonesia Rupiah
|
||||
ILS = 'ILS', // Israel Shekel
|
||||
IMP = 'IMP', // Isle of Man Pound
|
||||
INR = 'INR', // India Rupee
|
||||
IQD = 'IQD', // Iraq Dinar
|
||||
IRR = 'IRR', // Iran Rial
|
||||
ISK = 'ISK', // Iceland Krona
|
||||
JEP = 'JEP', // Jersey Pound
|
||||
JMD = 'JMD', // Jamaica Dollar
|
||||
JOD = 'JOD', // Jordan Dinar
|
||||
JPY = 'JPY', // Japan Yen
|
||||
KES = 'KES', // Kenya Shilling
|
||||
KGS = 'KGS', // Kyrgyzstan Som
|
||||
KHR = 'KHR', // Cambodia Riel
|
||||
KMF = 'KMF', // Comoros Franc
|
||||
KPW = 'KPW', // Korea (North) Won
|
||||
KRW = 'KRW', // Korea (South) Won
|
||||
KWD = 'KWD', // Kuwait Dinar
|
||||
KYD = 'KYD', // Cayman Islands Dollar
|
||||
KZT = 'KZT', // Kazakhstan Tenge
|
||||
LAK = 'LAK', // Laos Kip
|
||||
LBP = 'LBP', // Lebanon Pound
|
||||
LKR = 'LKR', // Sri Lanka Rupee
|
||||
LRD = 'LRD', // Liberia Dollar
|
||||
LSL = 'LSL', // Lesotho Loti
|
||||
LYD = 'LYD', // Libya Dinar
|
||||
MAD = 'MAD', // Morocco Dirham
|
||||
MDL = 'MDL', // Moldova Leu
|
||||
MGA = 'MGA', // Madagascar Ariary
|
||||
MKD = 'MKD', // Macedonia Denar
|
||||
MMK = 'MMK', // Myanmar (Burma) Kyat
|
||||
MNT = 'MNT', // Mongolia Tughrik
|
||||
MOP = 'MOP', // Macau Pataca
|
||||
MRO = 'MRO', // Mauritania Ouguiya
|
||||
MUR = 'MUR', // Mauritius Rupee
|
||||
MVR = 'MVR', // Maldives (Maldive Islands) Rufiyaa
|
||||
MWK = 'MWK', // Malawi Kwacha
|
||||
MXN = 'MXN', // Mexico Peso
|
||||
MYR = 'MYR', // Malaysia Ringgit
|
||||
MZN = 'MZN', // Mozambique Metical
|
||||
NAD = 'NAD', // Namibia Dollar
|
||||
NGN = 'NGN', // Nigeria Naira
|
||||
NIO = 'NIO', // Nicaragua Cordoba
|
||||
NOK = 'NOK', // Norway Krone
|
||||
NPR = 'NPR', // Nepal Rupee
|
||||
NZD = 'NZD', // New Zealand Dollar
|
||||
OMR = 'OMR', // Oman Rial
|
||||
PAB = 'PAB', // Panama Balboa
|
||||
PEN = 'PEN', // Peru Sol
|
||||
PGK = 'PGK', // Papua New Guinea Kina
|
||||
PHP = 'PHP', // Philippines Peso
|
||||
PKR = 'PKR', // Pakistan Rupee
|
||||
PLN = 'PLN', // Poland Zloty
|
||||
PYG = 'PYG', // Paraguay Guarani
|
||||
QAR = 'QAR', // Qatar Riyal
|
||||
RON = 'RON', // Romania New Leu
|
||||
RSD = 'RSD', // Serbia Dinar
|
||||
RUB = 'RUB', // Russia Ruble
|
||||
RWF = 'RWF', // Rwanda Franc
|
||||
SAR = 'SAR', // Saudi Arabia Riyal
|
||||
SBD = 'SBD', // Solomon Islands Dollar
|
||||
SCR = 'SCR', // Seychelles Rupee
|
||||
SDG = 'SDG', // Sudan Pound
|
||||
SEK = 'SEK', // Sweden Krona
|
||||
SGD = 'SGD', // Singapore Dollar
|
||||
SHP = 'SHP', // Saint Helena Pound
|
||||
SLL = 'SLL', // Sierra Leone Leone
|
||||
SOS = 'SOS', // Somalia Shilling
|
||||
SPL = 'SPL', // Seborga Luigino
|
||||
SRD = 'SRD', // Suriname Dollar
|
||||
STD = 'STD', // São Tomé and Príncipe Dobra
|
||||
SVC = 'SVC', // El Salvador Colon
|
||||
SYP = 'SYP', // Syria Pound
|
||||
SZL = 'SZL', // Swaziland Lilangeni
|
||||
THB = 'THB', // Thailand Baht
|
||||
TJS = 'TJS', // Tajikistan Somoni
|
||||
TMT = 'TMT', // Turkmenistan Manat
|
||||
TND = 'TND', // Tunisia Dinar
|
||||
TOP = 'TOP', // Tonga Pa'anga
|
||||
TRY = 'TRY', // Turkey Lira
|
||||
TTD = 'TTD', // Trinidad and Tobago Dollar
|
||||
TVD = 'TVD', // Tuvalu Dollar
|
||||
TWD = 'TWD', // Taiwan New Dollar
|
||||
TZS = 'TZS', // Tanzania Shilling
|
||||
UAH = 'UAH', // Ukraine Hryvnia
|
||||
UGX = 'UGX', // Uganda Shilling
|
||||
USD = 'USD', // United States Dollar
|
||||
UYU = 'UYU', // Uruguay Peso
|
||||
UZS = 'UZS', // Uzbekistan Som
|
||||
VEF = 'VEF', // Venezuela Bolivar
|
||||
VND = 'VND', // Viet Nam Dong
|
||||
VUV = 'VUV', // Vanuatu Vatu
|
||||
WST = 'WST', // Samoa Tala
|
||||
XAF = 'XAF', // Communauté Financière Africaine (BEAC) CFA Franc BEAC
|
||||
XCD = 'XCD', // East Caribbean Dollar
|
||||
XDR = 'XDR', // International Monetary Fund (IMF) Special Drawing Rights
|
||||
XOF = 'XOF', // Communauté Financière Africaine (BCEAO) Franc
|
||||
XPF = 'XPF', // Comptoirs Français du Pacifique (CFP) Franc
|
||||
YER = 'YER', // Yemen Rial
|
||||
ZAR = 'ZAR', // South Africa Rand
|
||||
ZMW = 'ZMW', // Zambia Kwacha
|
||||
ZWD = 'ZWD', // Zimbabwe Dollar
|
||||
export enum Currency {
|
||||
AED = "AED", // 'UNITED ARAB EMIRATES DIRHAM'
|
||||
AFN = "AFN", // 'AFGHAN AFGHANI'
|
||||
ALL = "ALL", // 'ALBANIAN LEK'
|
||||
AMD = "AMD", // 'ARMENIAN DRAM'
|
||||
ANG = "ANG", // 'NETHERLANDS ANTILLEAN GUILDER'
|
||||
AOA = "AOA", // 'ANGOLAN KWANZA'
|
||||
ARS = "ARS", // 'ARGENTINE PESO'
|
||||
AUD = "AUD", // 'AUSTRALIAN DOLLAR'
|
||||
AWG = "AWG", // 'ARUBAN FLORIN'
|
||||
AZN = "AZN", // 'AZERBAIJANI MANAT'
|
||||
BAM = "BAM", // 'BOSNIA-HERZEGOVINA CONVERTIBLE MARK'
|
||||
BBD = "BBD", // 'BAJAN DOLLAR'
|
||||
BDT = "BDT", // 'BANGLADESHI TAKA'
|
||||
BGN = "BGN", // 'BULGARIAN LEV'
|
||||
BHD = "BHD", // 'BAHRAINI DINAR'
|
||||
BIF = "BIF", // 'BURUNDIAN FRANC'
|
||||
BMD = "BMD", // 'BERMUDAN DOLLAR'
|
||||
BND = "BND", // 'BRUNEI DOLLAR'
|
||||
BOB = "BOB", // 'BOLIVIAN BOLIVIANO'
|
||||
BRL = "BRL", // 'BRAZILIAN REAL'
|
||||
BSD = "BSD", // 'BAHAMIAN DOLLAR'
|
||||
BTN = "BTN", // 'BHUTAN CURRENCY'
|
||||
BWP = "BWP", // 'BOTSWANAN PULA'
|
||||
BYN = "BYN", // 'NEW BELARUSIAN RUBLE'
|
||||
BYR = "BYR", // 'BELARUSIAN RUBLE'
|
||||
BZD = "BZD", // 'BELIZE DOLLAR'
|
||||
CAD = "CAD", // 'CANADIAN DOLLAR'
|
||||
CDF = "CDF", // 'CONGOLESE FRANC'
|
||||
CHF = "CHF", // 'SWISS FRANC'
|
||||
CLF = "CLF", // 'CHILEAN UNIT OF ACCOUNT (UF)'
|
||||
CLP = "CLP", // 'CHILEAN PESO'
|
||||
CNY = "CNY", // 'CHINESE YUAN'
|
||||
COP = "COP", // 'COLOMBIAN PESO'
|
||||
CRC = "CRC", // 'COSTA RICAN COLÓN'
|
||||
CUC = "CUC", // 'CUBAN CONVERTIBLE PESO'
|
||||
CUP = "CUP", // 'CUBAN PESO'
|
||||
CVE = "CVE", // 'CAPE VERDEAN ESCUDO'
|
||||
CVX = "CVX", // 'CONVEX FINANCE'
|
||||
CZK = "CZK", // 'CZECH KORUNA'
|
||||
DJF = "DJF", // 'DJIBOUTIAN FRANC'
|
||||
DKK = "DKK", // 'DANISH KRONE'
|
||||
DOP = "DOP", // 'DOMINICAN PESO'
|
||||
DZD = "DZD", // 'ALGERIAN DINAR'
|
||||
EGP = "EGP", // 'EGYPTIAN POUND'
|
||||
ERN = "ERN", // 'ERITREAN NAKFA'
|
||||
ETB = "ETB", // 'ETHIOPIAN BIRR'
|
||||
ETC = "ETC", // 'ETHEREUM CLASSIC'
|
||||
EUR = "EUR", // 'EURO'
|
||||
FEI = "FEI", // 'FEI USD'
|
||||
FJD = "FJD", // 'FIJIAN DOLLAR'
|
||||
FKP = "FKP", // 'FALKLAND ISLANDS POUND'
|
||||
GBP = "GBP", // 'POUND STERLING'
|
||||
GEL = "GEL", // 'GEORGIAN LARI'
|
||||
GHS = "GHS", // 'GHANAIAN CEDI'
|
||||
GIP = "GIP", // 'GIBRALTAR POUND'
|
||||
GMD = "GMD", // 'GAMBIAN DALASI'
|
||||
GNF = "GNF", // 'GUINEAN FRANC'
|
||||
GTQ = "GTQ", // 'GUATEMALAN QUETZAL'
|
||||
GYD = "GYD", // 'GUYANAESE DOLLAR'
|
||||
HKD = "HKD", // 'HONG KONG DOLLAR'
|
||||
HNL = "HNL", // 'HONDURAN LEMPIRA'
|
||||
HRK = "HRK", // 'CROATIAN KUNA'
|
||||
HTG = "HTG", // 'HAITIAN GOURDE'
|
||||
HUF = "HUF", // 'HUNGARIAN FORINT'
|
||||
ICP = "ICP", // 'INTERNET COMPUTER'
|
||||
IDR = "IDR", // 'INDONESIAN RUPIAH'
|
||||
ILS = "ILS", // 'ISRAELI NEW SHEKEL'
|
||||
INR = "INR", // 'INDIAN RUPEE'
|
||||
IQD = "IQD", // 'IRAQI DINAR'
|
||||
IRR = "IRR", // 'IRANIAN RIAL'
|
||||
ISK = "ISK", // 'ICELANDIC KRÓNA'
|
||||
JEP = "JEP", // 'JERSEY POUND'
|
||||
JMD = "JMD", // 'JAMAICAN DOLLAR'
|
||||
JOD = "JOD", // 'JORDANIAN DINAR'
|
||||
JPY = "JPY", // 'JAPANESE YEN'
|
||||
KES = "KES", // 'KENYAN SHILLING'
|
||||
KGS = "KGS", // 'KYRGYSTANI SOM'
|
||||
KHR = "KHR", // 'CAMBODIAN RIEL'
|
||||
KMF = "KMF", // 'COMORIAN FRANC'
|
||||
KPW = "KPW", // 'NORTH KOREAN WON'
|
||||
KRW = "KRW", // 'SOUTH KOREAN WON'
|
||||
KWD = "KWD", // 'KUWAITI DINAR'
|
||||
KYD = "KYD", // 'CAYMAN ISLANDS DOLLAR'
|
||||
KZT = "KZT", // 'KAZAKHSTANI TENGE'
|
||||
LAK = "LAK", // 'LAOTIAN KIP'
|
||||
LBP = "LPB", // 'LEBANESE POUND'
|
||||
LKR = "LKR", // 'SRI LANKAN RUPEE'
|
||||
LRD = "LRD", // 'LIBERIAN DOLLAR'
|
||||
LSL = "LSL", // 'LESOTHO LOTI'
|
||||
LTL = "LTL", // 'LITHUANIAN LITAS'
|
||||
LVL = "LVL", // 'LATVIAN LATS'
|
||||
LYD = "LYD", // 'LIBYAN DINAR'
|
||||
MAD = "MAD", // 'MOROCCAN DIRHAM'
|
||||
MDL = "MDL", // 'MOLDOVAN LEU'
|
||||
MGA = "MGA", // 'MALAGASY ARIARY'
|
||||
MKD = "MKD", // 'MACEDONIAN DENAR'
|
||||
MMK = "MMK", // 'MYANMAR KYAT'
|
||||
MNT = "MNT", // 'MONGOLIAN TUGRIK'
|
||||
MOP = "MOP", // 'MACANESE PATACA'
|
||||
MRO = "MRO", // 'MAURITANIAN OUGUIYA'
|
||||
MUR = "MUR", // 'MAURITIAN RUPEE'
|
||||
MVR = "MVR", // 'MALDIVIAN RUFIYAA'
|
||||
MWK = "MWK", // 'MALAWIAN KWACHA'
|
||||
MXN = "MXN", // 'MEXICAN PESO'
|
||||
MYR = "MYR", // 'MALAYSIAN RINGGIT'
|
||||
MZN = "MZN", // 'MOZAMBICAN METICAL'
|
||||
NAD = "NAD", // 'NAMIBIAN DOLLAR'
|
||||
NGN = "NGN", // 'NIGERIAN NAIRA'
|
||||
NIO = "NIO", // 'NICARAGUAN CÓRDOBA'
|
||||
NOK = "NOK", // 'NORWEGIAN KRONE'
|
||||
NPR = "NPR", // 'NEPALESE RUPEE'
|
||||
NZD = "NZD", // 'NEW ZEALAND DOLLAR'
|
||||
OMR = "OMR", // 'OMANI RIAL'
|
||||
ONE = "ONE", // 'MENLO ONE'
|
||||
PAB = "PAB", // 'PANAMANIAN BALBOA'
|
||||
PGK = "PGK", // 'PAPUA NEW GUINEAN KINA'
|
||||
PHP = "PHP", // 'PHILIPPINE PESO'
|
||||
PKR = "PKR", // 'PAKISTANI RUPEE'
|
||||
PLN = "PLN", // 'POLAND ZŁOTY'
|
||||
PYG = "PYG", // 'PARAGUAYAN GUARANI'
|
||||
QAR = "QAR", // 'QATARI RIAL'
|
||||
RON = "RON", // 'ROMANIAN LEU'
|
||||
RSD = "RSD", // 'SERBIAN DINAR'
|
||||
RUB = "RUB", // 'RUSSIAN RUBLE'
|
||||
RWF = "RWF", // 'RWANDAN FRANC'
|
||||
SAR = "SAR", // 'SAUDI RIYAL'
|
||||
SBD = "SBD", // 'SOLOMON ISLANDS DOLLAR'
|
||||
SCR = "SCR", // 'SEYCHELLOIS RUPEE'
|
||||
SDG = "SDG", // 'SUDANESE POUND'
|
||||
SEK = "SEK", // 'SWEDISH KRONA'
|
||||
SGD = "SGD", // 'SINGAPORE DOLLAR'
|
||||
SHIB = "SHIB", // 'SHIBA INU'
|
||||
SHP = "SHP", // 'SAINT HELENA POUND'
|
||||
SLL = "SLL", // 'SIERRA LEONEAN LEONE'
|
||||
SOS = "SOS", // 'SOMALI SHILLING'
|
||||
SRD = "SRD", // 'SURINAMESE DOLLAR'
|
||||
STD = "STD", // 'SÃO TOMÉ AND PRÍNCIPE DOBRA (PRE-2018)'
|
||||
SVC = "SVC", // 'SALVADORAN COLÓN'
|
||||
SYP = "SYP", // 'SYRIAN POUND'
|
||||
SZL = "SZL", // 'SWAZI LILANGENI'
|
||||
THB = "THB", // 'THAI BAHT'
|
||||
TJS = "TJS", // 'TAJIKISTANI SOMONI'
|
||||
TMT = "TMT", // 'TURKMENISTANI MANAT'
|
||||
TND = "TND", // 'TUNISIAN DINAR'
|
||||
TOP = "TOP", // "TONGAN PA'ANGA"
|
||||
TRY = "TRY", // 'TURKISH LIRA'
|
||||
TTD = "TTD", // 'TRINIDAD & TOBAGO DOLLAR'
|
||||
TWD = "TWD", // 'NEW TAIWAN DOLLAR'
|
||||
TZS = "TZS", // 'TANZANIAN SHILLING'
|
||||
UAH = "UAH", // 'UKRAINIAN HRYVNIA'
|
||||
UGX = "UGX", // 'UGANDAN SHILLING'
|
||||
USD = "USD", // 'UNITED STATES DOLLAR'
|
||||
UYU = "UYU", // 'URUGUAYAN PESO'
|
||||
UZS = "UZS", // 'UZBEKISTANI SOM'
|
||||
VND = "VND", // 'VIETNAMESE DONG'
|
||||
VUV = "VUV", // 'VANUATU VATU'
|
||||
WST = "WST", // 'SAMOAN TALA'
|
||||
XAF = "XAF", // 'CENTRAL AFRICAN CFA FRANC'
|
||||
XCD = "XCD", // 'EAST CARIBBEAN DOLLAR'
|
||||
XOF = "XOF", // 'WEST AFRICAN CFA FRANC'
|
||||
XPF = "XPF", // 'CFP FRANC'
|
||||
YER = "YER", // 'YEMENI RIAL'
|
||||
ZAR = "ZAR", // 'SOUTH AFRICAN RAND'
|
||||
ZMW = "ZMW", // 'ZAMBIAN KWACHA'
|
||||
ZWL = "ZWL", // 'ZIMBABWEAN DOLLAR'
|
||||
}
|
||||
|
||||
export const CURRENCY_OPTIONS = Object.entries(Currency).map(
|
||||
|
14
apps/portal/src/utils/offers/currency/currency-exchange.ts
Normal file
14
apps/portal/src/utils/offers/currency/currency-exchange.ts
Normal file
@ -0,0 +1,14 @@
|
||||
// API from https://github.com/fawazahmed0/currency-api#readme
|
||||
export const convert = async (
|
||||
value: number,
|
||||
fromCurrency: string,
|
||||
toCurrency: string,
|
||||
) => {
|
||||
fromCurrency = fromCurrency.trim().toLowerCase();
|
||||
toCurrency = toCurrency.trim().toLowerCase();
|
||||
const url = ['https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies', fromCurrency, toCurrency].join('/');
|
||||
|
||||
return await fetch(url + '.json')
|
||||
.then((res) => res.json())
|
||||
.then((data) => value * data[toCurrency]);
|
||||
};
|
Reference in New Issue
Block a user