diff --git a/src/components/addons.js b/src/components/addons.js index 1c641cf..e065fae 100644 --- a/src/components/addons.js +++ b/src/components/addons.js @@ -1,10 +1,11 @@ -import React from "react" +import React, { useState, useEffect } from "react" import { withPrefix } from "gatsby" import { latestBlogs } from "../utils/workflows" import links from "../constants/page-links" -import { isMediumUsernameValid } from "../utils/validation" +import { isMediumUsernameValid, isGitHubUsernameValid } from "../utils/validation" +import { ToolsIcon, XCircleIcon } from "@primer/octicons-react"; -const AddonsItem = ({ inputId, inputChecked, onInputChange, ...props }) => { +const AddonsItem = ({inputId, inputChecked, onInputChange, Icon, onIconClick, ...props}) => { return (
+ { + Icon? + + :'' + } +
+ ) +} + +const CustomizeBadge = ({githubName, badgeOptions, onBadgeUpdate}) => { + return ( +
+
Customize Badge
+
+
+ + + + + + + + Preview:  + { + isGitHubUsernameValid(githubName)? + + : Invalid GitHub username + } + + +
) } const Addons = props => { + const [customizeBadgeOpen, setCustomizeOpen] = useState(false); + const [debounce, setDebounce] = useState(undefined); + const [badgeOptions, setBadgeOptions] = useState({ + badgeStyle: props.data.badgeStyle, + badgeColor: props.data.badgeColor, + badgeLabel: props.data.badgeLabel + }); + + useEffect(() => { + setBadgeOptions({ + badgeStyle: props.data.badgeStyle, + badgeColor: props.data.badgeColor, + badgeLabel: props.data.badgeLabel + }) + }, [props.data.badgeStyle, props.data.badgeColor, props.data.badgeLabel]) + const blogPostPorkflow = () => { let payload = { dev: { @@ -48,6 +132,20 @@ const Addons = props => { tempElement.click() document.body.removeChild(tempElement) } + + const onCustomizeClick = () => { + setCustomizeOpen(!customizeBadgeOpen); + } + + const onBadgeUpdate = (option, value) => { + const callback = () => { + let newVal = (option==='badgeLabel' && value==='')?'Profile views':value; + setBadgeOptions({...badgeOptions, [option]: newVal}); + props.handleDataChange(option, {target: {value: newVal}}) + } + clearTimeout(debounce); + setDebounce(setTimeout(callback, 300)); + } return (
@@ -57,9 +155,20 @@ const Addons = props => { inputId="visitors-count" inputChecked={props.data.visitorsBadge} onInputChange={() => props.handleCheckChange("visitorsBadge")} + Icon={ customizeBadgeOpen ? XCircleIcon : ToolsIcon } + onIconClick={onCustomizeClick} > display visitors count badge + { + customizeBadgeOpen? + + : '' + } { return "" } const VisitorsBadge = props => { - let link = "https://komarev.com/ghpvc/?username=" + props.github + let link = "https://komarev.com/ghpvc/?username=" + + props.github + + `&label=${props.badgeOptions.badgeLabel}` + + `&color=${props.badgeOptions.badgeColor}` + + `&style=${props.badgeOptions.badgeStyle}` if (props.show) { return ( <> @@ -223,6 +227,11 @@ const Markdown = props => { <> diff --git a/src/components/markdownPreview.js b/src/components/markdownPreview.js index 983b8bf..8f71fe8 100644 --- a/src/components/markdownPreview.js +++ b/src/components/markdownPreview.js @@ -222,7 +222,11 @@ const MarkdownPreview = props => { ) } const VisitorsBadgePreview = props => { - let link = "https://komarev.com/ghpvc/?username=" + props.github + let link = "https://komarev.com/ghpvc/?username=" + + props.github + + `&label=${props.badgeOptions.badgeLabel}` + + `&color=${props.badgeOptions.badgeColor}` + + `&style=${props.badgeOptions.badgeStyle}` if (props.show) { return (
@@ -308,6 +312,11 @@ const MarkdownPreview = props => { { return } - setPrefix(cache.prefix || DEFAULT_PREFIX) - setData(cache.data || DEFAULT_DATA) - setLink(cache.link || DEFAULT_LINK) - setSocial(cache.social || DEFAULT_SOCIAL) + setPrefix(cache.prefix ? {...DEFAULT_PREFIX, ...cache.prefix} : DEFAULT_PREFIX) + setData(cache.data ? {...DEFAULT_DATA, ...cache.data} : DEFAULT_DATA) + setLink(cache.link ? {...DEFAULT_LINK, ...cache.link} : DEFAULT_LINK) + setSocial(cache.social ? {...DEFAULT_SOCIAL, ...cache.social} : DEFAULT_SOCIAL) const cacheSkills = mergeDefaultWithNewDataSkills( DEFAULT_SKILLS, @@ -470,6 +473,7 @@ const IndexPage = () => { data={data} social={social} handleCheckChange={handleCheckChange} + handleDataChange={handleDataChange} />
{(data.visitorsBadge ||