I have a table in my database contain templates, that template consist of some fields like Carrier, Category
I need to group them by Carrier and under each Carrier I would like to group them by Category
here is my code where formatted is the code that comes from the database
here is a sample of formatted
[{carrier:'carier1',category:'category1',name:'Value1' , ....}, {carrier:'carier1',category:'category1',name:'Value2'}, {carrier:'carier1',category:'category1',name:'Value3'}, {carrier:'carier1',category:'category2',name:'Value4'}, {carrier:'carier2',category:'category1',name:'Value5'}, {carrier:'carier2',category:'category1',name:'Value6'}];
here is my code
export interface TemplateList {
carrier?: string;
categories?: templateCategory[];
}
export interface templateCategory {
category?: string;
templates?: {};
}
import R from "ramda";
var templateList: TemplateList[] = [];
const byCarrier = R.groupBy((element: any) => {
return element.carrier;
});
const byCategory = R.groupBy((element: any) => {
return element.category;
});
var carriers = byCarrier(formatted);
Object.keys(carriers).forEach((element) => {
var item: TemplateList = {};
item.carrier = element;
var categories = byCategory(carriers[element]);
var templatelist: templateCategory[] = [];
Object.keys(categories).forEach((cat) => {
var templateCat: templateCategory = {};
templateCat.category = cat;
templateCat.templates = categories[cat];
templatelist.push(templateCat);
});
item.categories = templatelist;
templateList.push(item);
});
return { carriers: templateList };
expected data format
{"carriers": [
{
"carrier": "carrier1",
"categories": [
{
"category": "Misc",
"templates": [
{
"name": "name1",
"category": "Misc",
"carrier": "carrier1",
"body": "body1",
"subject": "subject",
"ticketResponseTemplateId": 235
}
]
}
]
},
{
"carrier": "carrier2",
"categories": [
{
"category": "Misc",
"templates": [
{
"name": "Aetna MS - Add State",
"category": "Misc",
"carrier": "carrier2",
"body": "<p>new body</p>",
"subject": "Aetna MS - Adding a State",
"ticketResponseTemplateId": 234
}
]
}
]
}
]
}
