import * as _ from 'lodash'; import { FrameType } from '../model/frame-type'; const lineBreak = '--------\n'; const parseItem = (item: any): string => { let name = ''; name += `Rarity: ${FrameType[item.frameType]}\n`; name += item.name ? filterName(item.name) + '\n' : ''; name += filterName(item.typeLine) + '\n'; name += getProperties(item.properties); name += getProperties(item.requirements, 'Requirements:\n'); // sockets name += getSockets(item.sockets); name += item.ilvl ? `${lineBreak}Item Level: ${item.ilvl}\n` : ''; name += getMods(item.implicitMods); name += getMods(item.explicitMods); if (!item.identified) { name += lineBreak; name += 'Unidentified\n'; } if (item.corrupted) { name += lineBreak; name += 'Corrupted\n'; } if (item.elder) { name += lineBreak; name += 'Elder Item\n'; } if (item.shaper) { name += lineBreak; name += 'Shaper Item\n'; } if (item.descrText) { name += lineBreak; name += `${item.descrText}\n`; } return name; }; const getSockets = (sockets: any[]): string => { if (!sockets) { return ''; } let content = lineBreak; content += 'Sockets: '; const grp = _.groupBy(sockets, 'group'); _.each(_.keys(grp), key => { content += grp[key].map(g => g.sColour).join('-'); content += ' '; }); return content.trim() + '\n'; }; /** filter unwanted characters from item name */ const filterName = (name: string): string => { const newString = name.replace(/>/g, '>'); const index = newString.lastIndexOf('>'); if (index < 0) { return name; } return name .slice(index + 1, name.length) .replace('{', '') .replace('}', ''); }; const getMods = (mods: string[]): string => { if (!mods || mods.length === 0) { return ''; } let content = lineBreak; content += _.map(mods, filterName).join('\n') + '\n'; return content; }; const getProperties = (p?: any[], precedingText?: string): string => { if (!p) { return ''; } let content = lineBreak; content += precedingText || ''; p.forEach(item => { content += item.name; if (item.values && item.values.length > 0) { content += `: ${item.values[0][0]}`; } content += '\n'; }); return content; }; export const ItemTextService = { filterName, parseItem, };