UNPKG

consumerportal

Version:

mydna Custimised for you

67 lines (47 loc) 2.04 kB
/// <reference path="../includes.ts" /> /* "Translates " Usage: {{ details.ADH1B | alleles : separator : replacement }} details.ADH1B = '*1*2'; {{ details.ADH1B | alleles : '' : {'*1':'G', '*2': 'A'} }} => GA {{ details.ADH1B | alleles : '/' } }} => *1/*2 */ ((angular): void => { interface IAlleles{ allele1:string, allele2:string }; class AllelesFilter { constructor() { let getAlleles = (value:string): IAlleles=> { let alleleLength = value.length / 2; // assuming alleles will have same length return {allele1:value.substr(0, alleleLength), allele2:value.substr(alleleLength, alleleLength)}; }; let applyReplacement = (value:string, replacement:object) :string =>{ let replaceWith = replacement[value]; return angular.isDefined(replaceWith) ? replaceWith: value; } return (value: string, separator?: string, replacement?: object): string => { if (!value || !value.trim()) { return value; } let hasSeparator = separator && separator.trim(); let hasReplacement = !!replacement; if (!hasSeparator && !hasReplacement) { return value; } let {allele1, allele2} = getAlleles(value); if(hasReplacement){ allele1 = applyReplacement(allele1, replacement); allele2 = applyReplacement(allele2, replacement); } if(hasSeparator){ return `${allele1}${separator}${allele2}`; } return `${allele1}${allele2}`; } } } angular.module('app').filter('alleles', AllelesFilter); })(angular);