import { RequestApi, BaseEnumModel } from '../requests'; import { Store } from './store'; import { Keys, Entities } from './entities'; import { ApiKeys, BackendEnum } from '../types'; export class EnumModel { public _requestModel: BaseEnumModel; public _store: Store; public _storeKey: Keys; constructor(requestModel: BaseEnumModel, storeKey: Keys, store: Store) { this._requestModel = requestModel; this._storeKey = storeKey; this._store = store; } getLocalAll(): BackendEnum[] { return this._store.getAll(this._storeKey); } async getAll(filter?: any): Promise { const locals = this.getLocalAll(); if (locals && locals.length) { return locals.map((i) => i.id); } const data = await this._requestModel.getAll(filter); this._store.setBySchema([Entities[this._storeKey]], data); return data.map((i) => i.id); } } export class CountryModel extends EnumModel { constructor(requestApi: RequestApi, store: Store) { super(requestApi[ApiKeys.COUNTRIES], Keys.countries, store); } } export class CurrencyModel extends EnumModel { constructor(requestApi: RequestApi, store: Store) { super(requestApi[ApiKeys.CURRENCIES], Keys.currencies, store); } } export class MarketModel extends EnumModel { constructor(requestApi: RequestApi, store: Store) { super(requestApi[ApiKeys.MARKETS], Keys.markets, store); } } export class GenderModel extends EnumModel { constructor(requestApi: RequestApi, store: Store) { super(requestApi[ApiKeys.GENDERS], Keys.genders, store); } } export class EmploymentTypeModel extends EnumModel { constructor(requestApi: RequestApi, store: Store) { super(requestApi[ApiKeys.EMPLOYMENT_TYPES], Keys.employmentTypes, store); } } export class CreditTypeModel extends EnumModel { constructor(requestApi: RequestApi, store: Store) { super(requestApi[ApiKeys.CREDIT_TYPES], Keys.creditTypes, store); } } export class KycPurposeModel extends EnumModel { constructor(requestApi: RequestApi, store: Store) { super(requestApi[ApiKeys.KYC_PURPOSES], Keys.kycPurposes, store); } } export class KycSourceModel extends EnumModel { constructor(requestApi: RequestApi, store: Store) { super(requestApi[ApiKeys.KYC_SOURCES], Keys.kycSources, store); } }