111 lines
2.3 KiB
TypeScript
111 lines
2.3 KiB
TypeScript
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,
|
|
};
|