import React, { useEffect, useState } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { IconProp } from '@fortawesome/fontawesome-svg-core'; import { faSlack } from '@fortawesome/free-brands-svg-icons'; import { faCheckCircle, faHandPeace, faNetworkWired, faPlug, faPlus, faStar, faUserPlus } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import onboardingCheck from '~/components/utilities/checks/OnboardingCheck'; import registerUserAction from '../api/userActions/registerUserAction'; type ItemProps = { text: string; subText: string; complete: boolean; icon: IconProp; time: string; userAction?: string; link?: string; }; const learningItem = ({ text, subText, complete, icon, time, userAction, link }: ItemProps): JSX.Element => { if (link) { return (
{ if (userAction && userAction != 'first_time_secrets_pushed') { await registerUserAction({ action: userAction }); } }} className="relative bg-bunker-700 hover:bg-bunker-500 shadow-xl duration-200 rounded-md border border-dashed border-bunker-400 pl-2 pr-6 py-2 h-[5.5rem] w-full flex items-center justify-between overflow-hidden my-1.5 cursor-pointer" >
{complete && (
)}
{text}
{subText}
{complete ? 'Complete!' : 'About ' + time}
{complete && (
)}
); } else { return (
{ if (userAction) { await registerUserAction({ action: userAction }); } }} className="relative bg-bunker-700 hover:bg-bunker-500 shadow-xl duration-200 rounded-md border border-dashed border-bunker-400 pl-2 pr-6 py-2 h-[5.5rem] w-full flex items-center justify-between overflow-hidden my-1.5 cursor-pointer" >
{complete && (
)}
{text}
{subText}
{complete ? 'Complete!' : 'About ' + time}
{complete && (
)}
); } }; /** * This tab is called Home because in the future it will include some company news, * updates, roadmap, relavant blogs, etc. Currently it only has the setup instruction * for the new users */ export default function Home() { const router = useRouter(); const [hasUserClickedSlack, setHasUserClickedSlack] = useState(false); const [hasUserClickedIntro, setHasUserClickedIntro] = useState(false); const [hasUserStarred, setHasUserStarred] = useState(false); const [hasUserPushedSecrets, setHasUserPushedSecrets] = useState(false); const [usersInOrg, setUsersInOrg] = useState(false); useEffect(() => { onboardingCheck({ setHasUserClickedIntro, setHasUserClickedSlack, setHasUserPushedSecrets, setHasUserStarred, setUsersInOrg }); }, []); return (
Your quick start guide
Click on the items below and follow the instructions.
{learningItem({ text: 'Get to know Infisical', subText: '', complete: hasUserClickedIntro, icon: faHandPeace, time: '3 min', userAction: 'intro_cta_clicked', link: 'https://www.youtube.com/watch?v=JS3OKYU2078' })} {learningItem({ text: 'Add your secrets', subText: 'Click to see example secrets, and add your own.', complete: hasUserPushedSecrets, icon: faPlus, time: '2 min', userAction: 'first_time_secrets_pushed', link: '/dashboard/' + router.query.id })} {learningItem({ text: 'Inject secrets locally', subText: 'Replace .env files with a more secure an efficient alternative.', complete: false, icon: faNetworkWired, time: '8 min', link: 'https://infisical.com/docs/getting-started/quickstart' })} {learningItem({ text: 'Integrate Infisical with your infrastructure', subText: 'Only a few integrations are currently available. Many more coming soon!', complete: false, icon: faPlug, time: '15 min', link: 'https://infisical.com/docs/integrations/overview' })} {learningItem({ text: 'Invite your teammates', subText: '', complete: usersInOrg, icon: faUserPlus, time: '2 min', link: '/settings/org/' + router.query.id + '?invite' })} {learningItem({ text: 'Join Infisical Slack', subText: 'Have any questions? Ask us!', complete: hasUserClickedSlack, icon: faSlack, time: '1 min', userAction: 'slack_cta_clicked', link: 'https://join.slack.com/t/infisical-users/shared_invite/zt-1kdbk07ro-RtoyEt_9E~fyzGo_xQYP6g' })} {learningItem({ text: 'Star Infisical on GitHub', subText: "Like what we're doing? You know what to do! :)", complete: hasUserStarred, icon: faStar, time: '1 min', userAction: 'star_cta_clicked', link: 'https://github.com/Infisical/infisical' })}
); } Home.requireAuth = true;