From b26426e5cd58dd32bf4f20eb9a7a4ed4feed8b81 Mon Sep 17 00:00:00 2001 From: Mostafa Elgaafary <3999755+melgaafary@users.noreply.github.com> Date: Fri, 28 Feb 2020 17:21:19 +0100 Subject: [PATCH 1/5] [ui] refactor: create a shared onboarding components for userflow and admin --- .../components/onboarding/dashboard-steps.js | 73 +++++++++++ packages/ui/components/onboarding/index.js | 40 +++++++ .../ui/components/onboarding/last-step-btn.js | 27 +++++ .../components/onboarding/no-account-steps.js | 113 ++++++++++++++++++ .../components/onboarding/tooltip-content.js | 16 +++ .../ui/components/onboarding/tour-ended.js | 0 6 files changed, 269 insertions(+) create mode 100644 packages/ui/components/onboarding/dashboard-steps.js create mode 100644 packages/ui/components/onboarding/index.js create mode 100644 packages/ui/components/onboarding/last-step-btn.js create mode 100644 packages/ui/components/onboarding/no-account-steps.js create mode 100644 packages/ui/components/onboarding/tooltip-content.js create mode 100644 packages/ui/components/onboarding/tour-ended.js diff --git a/packages/ui/components/onboarding/dashboard-steps.js b/packages/ui/components/onboarding/dashboard-steps.js new file mode 100644 index 000000000..9bba43ac0 --- /dev/null +++ b/packages/ui/components/onboarding/dashboard-steps.js @@ -0,0 +1,73 @@ +import React from 'react'; +import ContentBox from './tooltip-content'; + +export const ONBOARDING_SETTINGS_STEP = { + selector: '.settings-menu', + content: , + className: 'settings-menu', +}; +export const ONBOARDING_SETTINGS_FORM_STEP = { + selector: '.settings-form', + content: ( + + ), + className: 'settings-form', + redirect: '/settings/company', + action: () => {}, // for some reason this is needed for inputs to work +}; +export const ONBOARDING_SETTINGS_SAVE_STEP = { + selector: '.settings-save-btn', + content: ( + + ), + className: 'settings-save-btn', + redirect: '/settings/company', +}; +export const ONBOARDING_INTEGRATIONS_STEP = { + selector: '.integrations', + content: ( + + ), + className: 'integrations', +}; +export const ONBOARDING_DATA_REQUESTS_STEP = { + selector: '.data-requests', + content: ( + + ), + className: 'data-requests', + redirect: '/integrations', +}; +export const ONBOARDING_CONNECT_TRELLO_STEP = { + selector: '.trello-connect', + content: ( + + ), + className: 'trello-connect', + redirect: '/integrations/requests/trello/connect', +}; +export const ONBOARDING_TRELLO_CREATE_BOARDS_STEP = { + selector: '.trello-create-boards', + content: ( + + ), + className: 'trello-create-boards', + redirect: '/integrations/requests/trello', +}; +export const ONBOARDING_VIEW_DEPLOY = { + selector: '.deploy-view', + content: ( + + ), + className: 'deploy-view', + redirect: '/deploy/new', +}; + +export const ONBOARDING_DEPLOY = { + selector: '.deploy', + content: ( + + ), + className: 'deploy', + redirect: '/deploy/new', +}; diff --git a/packages/ui/components/onboarding/index.js b/packages/ui/components/onboarding/index.js new file mode 100644 index 000000000..907b34c17 --- /dev/null +++ b/packages/ui/components/onboarding/index.js @@ -0,0 +1,40 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import {Box} from 'grommet'; +import Tour from 'reactour'; +import styled from 'styled-components'; +import ChevronRight from '../../svg/chevron-right.svg'; +import ChevronLeft from '../../svg/chevron-left.svg'; +import LastStep from './last-step-btn'; + +const StyledTour = styled(Tour)` + nav { + flex-wrap: nowrap; + } +`; + +export default function Onboarding({endTour, ...props}) { + return ( + } + nextButton={ + + + + } + prevButton={ + + + + } + {...props} + /> + ); +} + +Onboarding.propTypes = { + endTour: PropTypes.func.isRequired, +}; diff --git a/packages/ui/components/onboarding/last-step-btn.js b/packages/ui/components/onboarding/last-step-btn.js new file mode 100644 index 000000000..5618cdfe8 --- /dev/null +++ b/packages/ui/components/onboarding/last-step-btn.js @@ -0,0 +1,27 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import {Box} from 'grommet'; +import Button from '../button'; +import FormattedText from '../formatted-text'; + +const LastStep = ({onClick}) => ( + +