UNPKG

ng-custom-pipe

Version:

An Angular Library, that gives you a hussle free experience on data operation using pipes

96 lines 15.9 kB
import { Pipe } from '@angular/core'; import * as i0 from "@angular/core"; export class ConvertToWordPipe { constructor() { this._unitMap = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen']; this._unit = ['']; this._tens = ['', '', 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety']; this._others = ['', 'Thousand', 'Million', 'Billion', 'Trillion', 'Quadrillion', 'Quintillion']; this._othersIndian = ['Hundred', 'Thousand', 'Lakh', 'Crore', 'Arab', 'Kharab', 'Neel', 'Padma', 'Shankh', 'Mahashankh']; } transform(value, system = 'USA') { this._unitMap.forEach(data => { if (data !== 'Zero') this._unit.push(data); }); if (value % 1 === 0) { return system === 'USA' ? this.convertToWords(value) : this.convertToWordsIndianSystem(value); } else { let result = ''; let splitNum = value.toString().split('.'); result += system === 'USA' ? this.convertToWords(+splitNum[0]) : this.convertToWordsIndianSystem(+splitNum[0]); result += ' point'; for (let i = 0; i < splitNum[1].length; i++) { result += ' '; result += this._unitMap[+splitNum[1].charAt(i)]; } return result; } } convertToWords(num) { let _counter = 0; let _threshold = num.toString().length; let _result = ''; while (!(3 * _counter >= _threshold)) { _counter += 1; let str = num.toString().slice(_threshold - (3 * _counter) > 0 ? _threshold - (3 * _counter) : 0, _threshold - (3 * (_counter - 1))); if ((str.length === 1 && str == '0') || (str.length === 2 && str == '00') || (str.length === 3 && str == '000')) continue; if (_threshold > (3 * _counter)) { _result = ' ' + this._others[_counter] + ' ' + this.groupIt(str) + _result; } else { _result = this.groupIt(str) + ' ' + _result; } } return _result; } ; convertToWordsIndianSystem(num) { let _counter = 0; let _threshold = num.toString().length; let _result = ''; while (!(2 * _counter + 3 >= _threshold)) { _counter += 1; let str = num.toString().slice(_threshold - (2 * _counter + 3) > 0 ? _threshold - (2 * _counter + 3) : 0, _threshold - (2 * (_counter - 1) + 3)); if ((str.length === 1 && str == '0') || (str.length === 2 && str == '00')) continue; _result = this.groupItIndianWay(str) + ' ' + this._othersIndian[_counter] + ' ' + _result; } _result += _result !== '' ? ' ' : ''; _result = _result + this.groupIt(num.toString().slice(_threshold - 3 >= 0 ? _threshold - 3 : 0, _threshold)); return _result; } ; groupIt(range) { if (range.length === 1 || (range.length === 2 && +range < 20)) return this._unit[+range]; if (range.length === 2 && +range >= 20) return this._tens[+range[0]] + ' ' + this._unit[+range[1]]; let res = ''; if (range[0] !== '0') res = this._unit[+range[0]] + ' Hundred '; res += this._tens[+range[1]]; res += ' '; res += this._unit[+range[2]]; return res; } groupItIndianWay(range) { if (range.length === 1 || (range.length === 2 && +range < 20)) return this._unit[+range]; return this._tens[+range[0]] + ' ' + this._unit[+range[1]]; } } ConvertToWordPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConvertToWordPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); ConvertToWordPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ConvertToWordPipe, name: "convertToWord" }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConvertToWordPipe, decorators: [{ type: Pipe, args: [{ name: 'convertToWord' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC10by13b3JkLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jdXN0b20tcGlwZS9zcmMvbGliL251bWJlci9jb252ZXJ0LXRvLXdvcmQucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFLcEQsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUlVLGFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLO1lBQ3hHLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakcsVUFBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDYixVQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvRixZQUFPLEdBQUcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMzRixrQkFBYSxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FxRjdIO0lBbEZDLFNBQVMsQ0FBQyxLQUFhLEVBQUUsU0FBd0IsS0FB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TyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFekcsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUFBLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBYTtRQUMzQixJQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUMsRUFBRSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEYsSUFBRyxLQUFLLENBQUMsTUFBTSxLQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBRyxHQUFHO1lBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDN0QsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixHQUFHLElBQUksR0FBRyxDQUFDO1FBQ1gsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ3BDLElBQUcsS0FBSyxDQUFDLE1BQU0sS0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxFQUFFLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7OzhHQTFGVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUg3QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxlQUFlO2lCQUN0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICBuYW1lOiAnY29udmVydFRvV29yZCdcbn0pXG5leHBvcnQgY2xhc3MgQ29udmVydFRvV29yZFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSBfdW5pdE1hcCA9IFsnWmVybycsICdPbmUnLCAnVHdvJywgJ1RocmVlJywgJ0ZvdXInLCAgJ0ZpdmUnLCAnU2l4JywgJ1NldmVuJywgJ0VpZ2h0JywgJ05pbmUnLCAnVGVuJyxcbiAgICAnRWxldmVuJywgJ1R3ZWx2ZScsICdUaGlydGVlbicsICdGb3VydGVlbicsICdGaWZ0ZWVuJywgJ1NpeHRlZW4nLCAnU2V2ZW50ZWVuJywgJ0VpZ2h0ZWVuJywgJ05pbmV0ZWVuJ107XG4gIHByaXZhdGUgX3VuaXQgPSBbJyddO1xuICBwcml2YXRlIF90ZW5zID0gWycnLCAnJywgJ1R3ZW50eScsICdUaGlydHknLCAnRm9ydHknLCAnRmlmdHknLCAnU2l4dHknLCAnU2V2ZW50eScsICdFaWdodHknLCAnTmluZXR5J107XG4gIHByaXZhdGUgX290aGVycyA9IFsnJywgJ1Rob3VzYW5kJywgJ01pbGxpb24nLCAnQmlsbGlvbicsICdUcmlsbGlvbicsICdRdWFkcmlsbGlvbicsICdRdWludGlsbGlvbiddO1xuICBwcml2YXRlIF9vdGhlcnNJbmRpYW4gPSBbJ0h1bmRyZWQnLCAnVGhvdXNhbmQnLCAnTGFraCcsICdDcm9yZScsICdBcmFiJywgJ0toYXJhYicsICdOZWVsJywgJ1BhZG1hJywgJ1NoYW5raCcsICdNYWhhc2hhbmtoJ107XG5cblxuICB0cmFuc2Zvcm0odmFsdWU6IG51bWJlciwgc3lzdGVtOiAnSU5EJyB8ICdVU0EnID0gJ1VTQScpOiBzdHJpbmcge1xuICAgIHRoaXMuX3VuaXRNYXAuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgIGlmIChkYXRhIT09J1plcm8nKSB0aGlzLl91bml0LnB1c2goZGF0YSk7XG4gICAgfSk7XG4gICAgXG4gICAgaWYgKHZhbHVlJTE9PT0wKSB7XG4gICAgICByZXR1cm4gc3lzdGVtPT09J1VTQScgPyB0aGlzLmNvbnZlcnRUb1dvcmRzKHZhbHVlKSA6IHRoaXMuY29udmVydFRvV29yZHNJbmRpYW5TeXN0ZW0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICBsZXQgc3BsaXROdW06IHN0cmluZ1tdID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gICAgICByZXN1bHQgKz0gc3lzdGVtPT09J1VTQScgPyB0aGlzLmNvbnZlcnRUb1dvcmRzKCtzcGxpdE51bVswXSkgOiB0aGlzLmNvbnZlcnRUb1dvcmRzSW5kaWFuU3lzdGVtKCtzcGxpdE51bVswXSk7XG4gICAgICByZXN1bHQgKz0gJyBwb2ludCc7XG4gICAgICBmb3IgKGxldCBpPTA7IGk8c3BsaXROdW1bMV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ICs9ICcgJztcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMuX3VuaXRNYXBbK3NwbGl0TnVtWzFdLmNoYXJBdChpKV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9Xb3JkcyhudW06IG51bWJlcikge1xuICAgIGxldCBfY291bnRlciA9IDA7XG4gICAgbGV0IF90aHJlc2hvbGQgPSBudW0udG9TdHJpbmcoKS5sZW5ndGg7XG4gICAgbGV0IF9yZXN1bHQgPSAnJztcblxuICAgIHdoaWxlKCEoMypfY291bnRlciA+PSBfdGhyZXNob2xkKSkge1xuICAgICAgX2NvdW50ZXIrPTE7XG4gICAgICBsZXQgc3RyID0gbnVtLnRvU3RyaW5nKCkuc2xpY2UoX3RocmVzaG9sZC0oMypfY291bnRlcikgPiAwID8gX3RocmVzaG9sZC0oMypfY291bnRlcikgOiAwLCBfdGhyZXNob2xkLSgzKihfY291bnRlci0xKSkpO1xuXG4gICAgICBpZiAoKHN0ci5sZW5ndGg9PT0xICYmIHN0cj09JzAnKVxuICAgICAgICB8fCAoc3RyLmxlbmd0aD09PTIgJiYgc3RyPT0nMDAnKVxuICAgICAgICB8fCAoc3RyLmxlbmd0aD09PTMgJiYgc3RyPT0nMDAwJykpIGNvbnRpbnVlO1xuICAgICAgaWYoX3RocmVzaG9sZD4oMypfY291bnRlcikpIHtcbiAgICAgICAgX3Jlc3VsdCA9ICcgJyArIHRoaXMuX290aGVyc1tfY291bnRlcl0gKyAnICcgKyB0aGlzLmdyb3VwSXQoc3RyKSArIF9yZXN1bHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcmVzdWx0ID0gdGhpcy5ncm91cEl0KHN0cikgKyAnICcgKyBfcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gX3Jlc3VsdDtcbiAgfTtcblxuICBwcml2YXRlIGNvbnZlcnRUb1dvcmRzSW5kaWFuU3lzdGVtKG51bTogbnVtYmVyKSB7XG4gICAgbGV0IF9jb3VudGVyID0gMDtcbiAgICBsZXQgX3RocmVzaG9sZCA9IG51bS50b1N0cmluZygpLmxlbmd0aDtcbiAgICBsZXQgX3Jlc3VsdCA9ICcnO1xuXG4gICAgd2hpbGUoISgyKl9jb3VudGVyICsgMyA+PSBfdGhyZXNob2xkKSkge1xuICAgICAgX2NvdW50ZXIgKz0gMTtcbiAgICAgIGxldCBzdHIgPSBudW0udG9TdHJpbmcoKS5zbGljZShfdGhyZXNob2xkLSgyKl9jb3VudGVyKzMpID4gMCA/IF90aHJlc2hvbGQtKDIqX2NvdW50ZXIrMykgOiAwLCBfdGhyZXNob2xkLSgyKihfY291bnRlci0xKSszKSk7XG5cbiAgICAgIGlmICgoc3RyLmxlbmd0aD09PTEgJiYgc3RyPT0nMCcpIHx8IChzdHIubGVuZ3RoPT09MiAmJiBzdHI9PScwMCcpKSBjb250aW51ZTtcblxuICAgICAgX3Jlc3VsdCA9IHRoaXMuZ3JvdXBJdEluZGlhbldheShzdHIpICsgJyAnICsgdGhpcy5fb3RoZXJzSW5kaWFuW19jb3VudGVyXSArICcgJyArIF9yZXN1bHQ7XG4gICAgfVxuICAgIF9yZXN1bHQgKz0gX3Jlc3VsdCAhPT0gJycgPyAnICcgOiAnJztcbiAgICBfcmVzdWx0ID0gX3Jlc3VsdCArIHRoaXMuZ3JvdXBJdChudW0udG9TdHJpbmcoKS5zbGljZShfdGhyZXNob2xkLTMgPj0gMCA/IF90aHJlc2hvbGQtMyA6IDAsIF90aHJlc2hvbGQpKTtcbiAgICBcbiAgICByZXR1cm4gX3Jlc3VsdDtcbiAgfTtcblxuICBwcml2YXRlIGdyb3VwSXQocmFuZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYocmFuZ2UubGVuZ3RoPT09MSB8fCAocmFuZ2UubGVuZ3RoPT09MiAmJiArcmFuZ2U8MjApKSByZXR1cm4gdGhpcy5fdW5pdFsrcmFuZ2VdO1xuXG4gICAgaWYocmFuZ2UubGVuZ3RoPT09MiAmJiArcmFuZ2U+PTIwKSByZXR1cm4gdGhpcy5fdGVuc1srcmFuZ2VbMF1dICsgJyAnICsgdGhpcy5fdW5pdFsrcmFuZ2VbMV1dO1xuXG4gICAgbGV0IHJlcyA9ICcnO1xuICAgIGlmKHJhbmdlWzBdIT09JzAnKSByZXMgPSB0aGlzLl91bml0WytyYW5nZVswXV0gKyAnIEh1bmRyZWQgJztcbiAgICByZXMgKz0gdGhpcy5fdGVuc1srcmFuZ2VbMV1dO1xuICAgIHJlcyArPSAnICc7XG4gICAgcmVzICs9IHRoaXMuX3VuaXRbK3JhbmdlWzJdXTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGdyb3VwSXRJbmRpYW5XYXkocmFuZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYocmFuZ2UubGVuZ3RoPT09MSB8fCAocmFuZ2UubGVuZ3RoPT09MiAmJiArcmFuZ2U8MjApKSByZXR1cm4gdGhpcy5fdW5pdFsrcmFuZ2VdO1xuXG4gICAgcmV0dXJuIHRoaXMuX3RlbnNbK3JhbmdlWzBdXSArICcgJyArIHRoaXMuX3VuaXRbK3JhbmdlWzFdXTtcbiAgfVxufVxuIl19