@bigfishtv/cockpit
Version:
108 lines (95 loc) • 2.26 kB
JavaScript
/**
* @module Core/iconRegistry
*/
import * as iconLibrary from './iconLibrary'
const icons = {}
const categories = {}
/**
* Adds icon to registry
* @param {String} key
* @param {JSX} pathTag - JSX svg path tag
*/
export function add(key, pathTag) {
icons[key] = pathTag
}
/**
* Adds multiple icons to registry
* @param {JSX[]} icons - Array of JSX svg path tags
*/
export function addAll(_icons) {
Object.keys(_icons).map(key => add(key, _icons[key]))
}
/**
* Adds icon to registry and stores its category
* @param {String} key
* @param {JSX} pathTag - JSX svg path tag
* @param {String} category
*/
export function addWithCategory(key, pathTag, category) {
if (!(category in categories)) categories[category] = []
categories[category].push(key)
icons[key] = pathTag
}
/**
* [addAllWithCategory description]
* @param {JSX[]} icons - Array of JSX svg path tags
* @param {String} category
*/
export function addAllWithCategory(category, _icons) {
if (!(category in categories)) categories[category] = []
Object.keys(_icons).forEach(key => {
categories[category].push(key)
add(key, _icons[key])
})
}
/**
* Gets icon from registry
* @param {String} key
* @return {JSX}
*/
export function get(key) {
return icons[key]
}
/**
* Gets all icons in registry
* @return {Object}
*/
export function getAll() {
return icons
}
/**
* Gets all icons in category
* @param {String} category
* @return {Object} icons
*/
export function getByCategory(category) {
const filteredIcons = {}
if (category in categories) {
const keys = categories[category]
keys.forEach(key => (filteredIcons[key] = icons[key]))
}
return filteredIcons
}
/**
* Gets any icons that weren't added with a category
* @return {String[]} icons
*/
export function getUncategorizedKeys() {
let categorizedKeys = []
for (let category of Object.keys(categories)) {
categorizedKeys = [...categorizedKeys, ...categories[category]]
}
const uncategorizedKeys = []
for (let key of Object.keys(icons)) {
if (categorizedKeys.indexOf(key) < 0) uncategorizedKeys.push(key)
}
return uncategorizedKeys
}
/**
* Gets categories
* @return {Object} object of categories
*/
export function getCategories() {
return categories
}
iconLibrary.init()