import React, { useState, useEffect } from "react" import { withPrefix } from "gatsby" import { latestBlogs } from "../utils/workflows" import links from "../constants/page-links" import { isMediumUsernameValid, isGitHubUsernameValid } from "../utils/validation" import { ToolsIcon, XCircleIcon } from "@primer/octicons-react"; const AddonsItem = ({ inputId, inputChecked, onInputChange, Options, onIconClick, ...props }) => { const [open, setOpen] = useState(false); const Icon = open ? XCircleIcon : ToolsIcon; return ( <>
{Options && ( )}
{Options && open && Options} ); }; const CustomizeOptions = ({ title, CustomizationOptions }) => (
{title}

{CustomizationOptions}
); const CustomizeBadge = ({githubName, badgeOptions, onBadgeUpdate}) => { return ( <> Preview:  { isGitHubUsernameValid(githubName)? : Invalid GitHub username } ) } const CustomizeGithubStatsBase = ({ prefix, options, onUpdate }) => <> const CustomizeStreakStats = ({ prefix, options, onUpdate }) => ( <> ) const Addons = props => { 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 [githubStatsOptions, setGithubStatsOptions] = useState({ ...props.data.githubStatsOptions, }); useEffect(() => { setGithubStatsOptions({ ...props.data.githubStatsOptions }) }, [props.data.githubStatsOptions]) const [topLanguagesOptions, setTopLanguagesOptions] = useState({ ...props.data.topLanguagesOptions, }); useEffect(() => { setTopLanguagesOptions({ ...props.data.topLanguagesOptions }) }, [props.data.topLanguagesOptions]) const [streakStatsOptions, setStreakStatsOptions] = useState({ ...props.data.streakStatsOptions, }); useEffect(() => { setStreakStatsOptions({ ...props.data.streakStatsOptions }) }, [props.data.streakStatsOptions]) const blogPostPorkflow = () => { let payload = { dev: { show: props.data.devDynamicBlogs, username: props.social.dev, }, medium: { show: props.data.mediumDynamicBlogs, username: props.social.medium, }, rssurl: { show: props.data.rssDynamicBlogs, username: props.social.rssurl, }, } var actionContent = latestBlogs(payload) var tempElement = document.createElement("a") tempElement.setAttribute( "href", "data:text/yaml;charset=utf-8," + encodeURIComponent(actionContent) ) tempElement.setAttribute("download", "blog-post-workflow.yml") tempElement.style.display = "none" document.body.appendChild(tempElement) tempElement.click() document.body.removeChild(tempElement) } 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)); } const onStatsUpdate = (option, value) => { const newStatsOptions = {...githubStatsOptions, [option]: value} setGithubStatsOptions(newStatsOptions) props.handleDataChange("githubStatsOptions", {target: {value: newStatsOptions}}) } const onTopLangUpdate = (option, value) => { const newLangOptions = {...topLanguagesOptions, [option]: value} setTopLanguagesOptions(newLangOptions) props.handleDataChange("topLanguagesOptions", {target: {value: newLangOptions}}) } const onStreakStatsUpdate = (option, value) => { const newStreakStatsOptions = {...streakStatsOptions, [option]: value} setStreakStatsOptions(newStreakStatsOptions) props.handleDataChange("streakStatsOptions", {target: {value: newStreakStatsOptions}}) } return (
Add-ons
props.handleCheckChange("visitorsBadge")} Options={ } /> } > display visitors count badge props.handleCheckChange("githubProfileTrophy")} > display github trophy props.handleCheckChange("githubStats")} Options={ } /> } > display github profile stats card props.handleCheckChange("topLanguages")} Options={ } /> } > display top skills props.handleCheckChange("streakStats")} Options={ } /> } > display github streak stats props.handleCheckChange("twitterBadge")} > display twitter badge props.handleCheckChange("devDynamicBlogs")} > display latest dev.to blogs dynamically (GitHub Action) props.handleCheckChange("mediumDynamicBlogs")} > display latest medium blogs dynamically (GitHub Action) props.handleCheckChange("rssDynamicBlogs")} > display latest blogs from your personal blog dynamically (GitHub Action) {(props.data.devDynamicBlogs && props.social.dev) || (props.data.rssDynamicBlogs && props.social.rssurl) || (props.data.mediumDynamicBlogs && props.social.medium && isMediumUsernameValid(props.social.medium)) ? (
download e.keyCode === 13 && blogPostPorkflow()} role="button" tabIndex="0" style={{ cursor: "pointer", color: "#002ead" }} > {" "} blog-post-workflow.yml {" "} file(learn {" "} how to setup )
) : ( "" )}
) } export default Addons