Refactor radar creation

This commit is contained in:
Tom Raithel
2017-02-10 23:38:10 +01:00
parent 10e6fd89eb
commit a2b04c088e
5 changed files with 107 additions and 67 deletions

View File

@@ -1,3 +1,5 @@
--- ---
isFeatured: false isFeatured: false
--- ---
Foo!

View File

@@ -10,14 +10,20 @@ block content
= ' ' = ' '
| March 2017 | March 2017
div div
//-
pre
= JSON.stringify(radar, 0, 2)
each quadrant, quadrantName in radar each quadrant, quadrantName in radar
.quadrant-section .quadrant-section
.quadrant-section__header .quadrant-section__header
h4= translate(quadrantName) h4= translate(quadrantName)
.quadrant-section__lists .quadrant-section__lists
each radarItem, itemName in quadrant each items, ringName in quadrant
.quadrant-section__list .quadrant-section__list
a(href='/' + quadrantName + '/' + itemName + '.html') .ring-list
= radarItem.attributes.title .ring-list__header
span(class=`badge badge--${radarItem.attributes.ring}`) span(class=`badge badge--${ringName}`)
= radarItem.attributes.ring = ringName
each item in items
a.ring-list__item(href='/' + quadrantName + '/' + item.name + '.html')
= item.attributes.title

View File

@@ -16,11 +16,12 @@ import {
export const createRadar = async (tree) => { export const createRadar = async (tree) => {
const fileNames = (await getAllMarkdownFiles(radarPath())); const fileNames = (await getAllMarkdownFiles(radarPath()));
const revisions = await createRevisionsFromFiles(fileNames); const revisions = await createRevisionsFromFiles(fileNames);
const allVersions = getAllVersions(revisions); const allReleases = getAllReleases(revisions);
const quadrants = createQuadrants(revisions); const items = createItems(revisions);
const quadrantsWithIsNewFlag = flagWithIsNew(quadrants, allVersions); const itemsWithIsNewFlag = flagWithIsNew(items, allReleases);
const quadrants = groupByQuadrants(itemsWithIsNewFlag);
return quadrantsWithIsNewFlag; return quadrants;
}; };
const createRevisionsFromFiles = (fileNames) => ( const createRevisionsFromFiles = (fileNames) => (
@@ -45,40 +46,58 @@ const createRevisionsFromFiles = (fileNames) => (
const itemInfoFromFilename = (fileName) => { const itemInfoFromFilename = (fileName) => {
const [ const [
version, release,
quadrant, quadrant,
nameWithSuffix, nameWithSuffix,
] = fileName.split('/').slice(-3); ] = fileName.split('/').slice(-3);
return { return {
name: nameWithSuffix.substr(0, nameWithSuffix.length - 3), name: nameWithSuffix.substr(0, nameWithSuffix.length - 3),
version, release,
quadrant, quadrant,
} }
}; };
const getAllVersions = (revisions) => ( const getAllReleases = (revisions) => (
revisions.reduce((allVersions, { version }) => { revisions.reduce((allReleases, { release }) => {
if(!allVersions.includes(version)) { if(!allReleases.includes(release)) {
return [...allVersions, version]; return [...allReleases, release];
} }
return allVersions; return allReleases;
}, []).sort() }, []).sort()
) )
const createQuadrants = (revisions) => ( // const createQuadrants = (revisions) => (
revisions.reduce((quadrants, revision) => { // revisions.reduce((quadrants, revision) => {
return { // return {
...quadrants, // ...quadrants,
[revision.quadrant]: addRevisionToQuadrant(quadrants[revision.quadrant], revision), // [revision.quadrant]: addRevisionToQuadrant(quadrants[revision.quadrant], revision),
}; // };
}, {}) // }, {})
); // );
// const addRevisionToQuadrant = (quadrant = {}, revision) => ({
// ...quadrant,
// [revision.name]: addRevisionToItem(quadrant[revision.name], revision),
// });
const addRevisionToQuadrant = (quadrant = {}, revision) => ({ const addRevisionToQuadrant = (quadrant = {}, revision) => ({
...quadrant, ...quadrant,
[revision.name]: addRevisionToItem(quadrant[revision.name], revision), [revision.attributes.ring]: addRevisionToRing(quadrant[revision.attributes.ring], revision),
}); });
const createItems = (revisions) => {
const itemMap = revisions.reduce((items, revision) => {
return {
...items,
[revision.name]: addRevisionToItem(items[revision.name], revision),
};
}, {});
return Object
.values(itemMap)
.sort((x, y) => (x.name > y.name ? 1 : -1));
}
const addRevisionToItem = (item = { const addRevisionToItem = (item = {
attributes: { attributes: {
isFeatured: true, isFeatured: true,
@@ -86,13 +105,12 @@ const addRevisionToItem = (item = {
revisions: [], revisions: [],
}, revision) => { }, revision) => {
const { const {
name,
quadrant,
fileName, fileName,
...rest, ...rest,
} = revision; } = revision;
let newItem = { let newItem = {
...item, ...item,
...rest,
attributes: { attributes: {
...item.attributes, ...item.attributes,
...revision.attributes, ...revision.attributes,
@@ -154,19 +172,30 @@ const outputQuadrantPage = (quadrantName, quadrant) => (
}) })
) )
const flagWithIsNew = (radar, allVersions) => ( const flagWithIsNew = (items, allReleases) => (
Object.entries(radar).reduce((newRadar, [quadrantName, quadrant]) => ({ items.map((item) => ({
...newRadar, ...item,
[quadrantName]: Object.entries(quadrant).reduce((newItem, [itemName, item]) => ({ isNew: isNewItem(item, allReleases),
...newItem, }), [])
[itemName]: { );
...item,
isNew: isNewItem(item, allVersions), const isNewItem = (item, allReleases) => {
}, return item.revisions[0].release === allReleases[allReleases.length-1]
}), {}), }
const groupByQuadrants = (items) => (
items.reduce((quadrants, item) => ({
...quadrants,
[item.quadrant]: addItemToQuadrant(quadrants[item.quadrant], item),
}), {}) }), {})
); );
const isNewItem = (item, allVersions) => { const addItemToQuadrant = (quadrant = {}, item) => ({
return item.revisions[0].version === allVersions[allVersions.length-1] ...quadrant,
} [item.attributes.ring]: addItemToRing(quadrant[item.attributes.ring], item),
});
const addItemToRing = (ring = [], item) => ({
...ring,
item,
});

View File

@@ -1,31 +1,33 @@
extends layout.pug extends layout.pug
block vars block vars
- var title=item.attributes.title //-
- var title=item.attributes.title
block content block content
a(href='/' + quadrantName + '.html')= translate(quadrantName) //-
h1 #{item.attributes.title} a(href='/' + quadrantName + '.html')= translate(quadrantName)
= ' ' h1 #{item.attributes.title}
small #{item.attributes.ring} = ' '
small #{item.attributes.ring}
hr hr
h4= item.revisions[0].version h4= item.revisions[0].version
h5 New: #{item.isNew ? 'YES' : 'NO'} h5 New: #{item.isNew ? 'YES' : 'NO'}
h5 Feature: #{item.attributes.isFeatured ? 'YES' : 'NO'} h5 Feature: #{item.attributes.isFeatured ? 'YES' : 'NO'}
section section
!= item.revisions[0].body != item.revisions[0].body
hr hr
ul ul
each revision, index in item.revisions each revision, index in item.revisions
if index > 0 if index > 0
li li
h3 h3
= revision.version = revision.version
= ' ' = ' '
= revision.attributes.ring = revision.attributes.ring
!= revision.body != revision.body

View File

@@ -4,9 +4,10 @@ block vars
- var title='Quadrant' - var title='Quadrant'
block content block content
h1 //
= translate(quadrantName) h1
ul = translate(quadrantName)
each radarItem, itemName in quadrant ul
li each radarItem, itemName in quadrant
a(href='/' + quadrantName + '/' + itemName + '.html')= radarItem.attributes.title li
a(href='/' + quadrantName + '/' + itemName + '.html')= radarItem.attributes.title