diff --git a/api/top-langs.js b/api/top-langs.js index 6c6634c..026705c 100644 --- a/api/top-langs.js +++ b/api/top-langs.js @@ -11,6 +11,7 @@ const renderTopLanguages = require("../src/renderTopLanguages"); module.exports = async (req, res) => { const { username, + hide_langs_below, hide_title, card_width, title_color, @@ -42,6 +43,7 @@ module.exports = async (req, res) => { theme, hide_title: parseBoolean(hide_title), card_width: parseInt(card_width, 10), + hide_langs_below: parseFloat(hide_langs_below, 10), title_color, text_color, bg_color, diff --git a/src/renderTopLanguages.js b/src/renderTopLanguages.js index a8f5eb7..a233a09 100644 --- a/src/renderTopLanguages.js +++ b/src/renderTopLanguages.js @@ -30,15 +30,22 @@ const renderTopLanguages = (topLangs, options = {}) => { title_color, text_color, bg_color, + hide_langs_below, theme, } = options; - const langs = Object.values(topLangs); + let langs = Object.values(topLangs); const totalSize = langs.reduce((acc, curr) => { return acc + curr.size; }, 0); + // hide langs + langs = langs.filter((lang) => { + if (!hide_langs_below) return true; + return (lang.size / totalSize) * 100 > hide_langs_below; + }); + // returns theme based colors with proper overrides and defaults const { titleColor, textColor, bgColor } = getCardColors({ title_color, diff --git a/tests/renderTopLanguages.test.js b/tests/renderTopLanguages.test.js index b934dac..17e07c5 100644 --- a/tests/renderTopLanguages.test.js +++ b/tests/renderTopLanguages.test.js @@ -58,6 +58,20 @@ describe("Test renderTopLanguages", () => { ); }); + it("should hide_langs_below", () => { + document.body.innerHTML = renderTopLanguages(langs, { + hide_langs_below: 34, + }); + + expect(queryAllByTestId(document.body, "lang-name")[0]).toBeInTheDocument( + "HTML" + ); + expect(queryAllByTestId(document.body, "lang-name")[1]).toBeInTheDocument( + "javascript" + ); + expect(queryAllByTestId(document.body, "lang-name")[2]).not.toBeDefined(); + }); + it("should resize the height correctly depending on langs", () => { document.body.innerHTML = renderTopLanguages(langs, {}); expect(document.querySelector("svg")).toHaveAttribute("height", "205");