Files
poe-auto-pricer/app/services/item-text.service.ts

112 lines
2.3 KiB
TypeScript

import * as _ from 'lodash';
import { FrameType } from '../model/frame-type';
import { IItem } from '../model/item';
const lineBreak = '--------\n';
const parseItem = (item: IItem): 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,
};