feat: config.json option to show empty rings

The `showEmptyRings` option in `config.ts` can now be set via
`config.json`. This enables display of headers for rings that contain no
items.
This commit is contained in:
Tom Clift
2021-11-26 16:39:26 +11:00
committed by Bastian
parent 5c37fdf26e
commit cba3767195
5 changed files with 20 additions and 10 deletions

View File

@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## Unreleased ## Unreleased
### Features
- Added `showEmptyRings` option to `config.json`, which enables display of headers for rings containing no items.
## 3.1.1
## 3.1.0
### Bug Fixes ### Bug Fixes
- Fixed dependent projects failing to build without dependency `@types/sanitize-html`. - Fixed dependent projects failing to build without dependency `@types/sanitize-html`.

View File

@@ -112,6 +112,8 @@ For reference have a look at [public/logo.svg](./public/logo.svg).
### Change the rings and quadrants config ### Change the rings and quadrants config
To change the default rings and quadrants of the radar, you can place a custom `config.json` file within the `public` folder. To change the default rings and quadrants of the radar, you can place a custom `config.json` file within the `public` folder.
The `showEmptyRings` option can be enabled to display the header for a ring even when it contains no items (helpful to
reinforce the order of the rings).
The content should look as follows: The content should look as follows:
```json ```json
@@ -119,10 +121,11 @@ The content should look as follows:
"quadrants": { "quadrants": {
"languages-and-frameworks": "Languages & Frameworks", "languages-and-frameworks": "Languages & Frameworks",
"methods-and-patterns": "Methods & Patterns", "methods-and-patterns": "Methods & Patterns",
"platforms-and-aoe-services": "Platforms & Operations", "platforms-and-operations": "Platforms & Operations",
"tools": "Tools" "tools": "Tools"
}, },
"rings":["all", "adopt", "trial", "assess", "hold"] "rings":["all", "adopt", "trial", "assess", "hold"],
"showEmptyRings": true
} }
``` ```

View File

@@ -5,5 +5,6 @@
"platforms-and-aoe-services": "Platforms & Operations", "platforms-and-aoe-services": "Platforms & Operations",
"tools": "Tools" "tools": "Tools"
}, },
"rings":["all", "adopt", "trial", "assess", "hold"] "rings":["all", "adopt", "trial", "assess", "hold"],
"showEmptyRings": false
} }

View File

@@ -1,4 +1,4 @@
import { translate, showEmptyRings, ConfigData } from "../../config"; import { translate, ConfigData } from "../../config";
import Badge from "../Badge/Badge"; import Badge from "../Badge/Badge";
import Link from "../Link/Link"; import Link from "../Link/Link";
import ItemList from "../ItemList/ItemList"; import ItemList from "../ItemList/ItemList";
@@ -44,10 +44,11 @@ const renderRing = (
ringName: string, ringName: string,
quadrantName: string, quadrantName: string,
groups: Group, groups: Group,
renderIfEmpty: boolean,
big: boolean big: boolean
) => { ) => {
if ( if (
!showEmptyRings && !renderIfEmpty &&
(!groups[quadrantName] || (!groups[quadrantName] ||
!groups[quadrantName][ringName] || !groups[quadrantName][ringName] ||
groups[quadrantName][ringName].length === 0) groups[quadrantName][ringName].length === 0)
@@ -91,7 +92,7 @@ export default function QuadrantSection({
</div> </div>
<div className="quadrant-section__rings"> <div className="quadrant-section__rings">
{config.rings.map((ringName: string) => {config.rings.map((ringName: string) =>
renderRing(ringName, quadrantName, groups, big) renderRing(ringName, quadrantName, groups, config.showEmptyRings, big)
)} )}
</div> </div>
</div> </div>

View File

@@ -3,6 +3,7 @@ import { Item } from "./model";
export interface ConfigData { export interface ConfigData {
quadrants: { [key: string]: string }; quadrants: { [key: string]: string };
rings: string[]; rings: string[];
showEmptyRings: boolean;
} }
export const radarName = export const radarName =
@@ -12,8 +13,6 @@ export const radarNameShort = radarName;
export const getItemPageNames = (items: Item[]) => export const getItemPageNames = (items: Item[]) =>
items.map((item) => `${item.quadrant}/${item.name}`); items.map((item) => `${item.quadrant}/${item.name}`);
export const showEmptyRings = false;
export function isMobileViewport() { export function isMobileViewport() {
// return false for server side rendering // return false for server side rendering
if (typeof window == "undefined") return false; if (typeof window == "undefined") return false;