You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

81 lines
2.0 KiB

export class LabelItemList {
constructor(public labelItems: LabelItem[]) {}
static valueOf(items: LabelItem[]): LabelItemList {
return new LabelItemList(items)
}
add(item: LabelItem) {
this.labelItems.push(item)
}
update(item: LabelItem) {
const index = this.labelItems.findIndex(label => label.id === item.id)
this.labelItems.splice(index, 1, item)
}
delete(item: LabelItem) {
this.labelItems = this.labelItems.filter(label => label.id !== item.id)
}
bulkDelete(items: LabelItemList) {
const ids = items.ids()
this.labelItems = this.labelItems.filter(label => !ids.includes(label.id))
}
count(): Number {
return this.labelItems.length
}
ids(): Number[]{
return this.labelItems.map(item => item.id)
}
get nameList(): string[] {
return this.labelItems.map(item => item.name)
}
get usedKeys(): string[] {
const items = this.labelItems
.filter(item => item.suffixKey !== null)
.map(item => item.suffixKey) as string[]
return items
}
toArray(): Object[] {
return this.labelItems.map(item => item.toObject())
}
}
export class LabelItem {
constructor(
public id: number,
public text: string,
public prefixKey: string | null,
public suffixKey: string | null,
public backgroundColor: string,
public textColor: string = '#ffffff'
) {}
static valueOf(
{ id, text, prefix_key, suffix_key, background_color, text_color }:
{ id: number, text: string, prefix_key: string, suffix_key: string, background_color: string, text_color: string }
): LabelItem {
return new LabelItem(id, text, prefix_key, suffix_key, background_color, text_color)
}
get name(): string {
return this.text
}
toObject(): Object {
return {
id: this.id,
text: this.text,
prefix_key: this.prefixKey,
suffix_key: this.suffixKey,
background_color: this.backgroundColor,
text_color: this.textColor
}
}
}