From e9475219c9fc46571c7dd791194e3ffc9db0b183 Mon Sep 17 00:00:00 2001 From: mgabdev <> Date: Tue, 14 Jul 2020 01:05:05 -0500 Subject: [PATCH] Added welcome page/introduction/onboarding flow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • Added: - welcome page/introduction/onboarding flow • Todo: - clean up code for showing new user the page - add code for saving profile, cover photos, display name from intro slides --- .../gabsocial/actions/onboarding.js | 13 +- .../gabsocial/features/introduction.js | 439 +++++++++++------- app/javascript/gabsocial/features/ui/ui.js | 39 +- .../features/ui/util/async_components.js | 1 + .../gabsocial/layouts/introduction_layout.js | 13 +- app/javascript/styles/global.css | 1 + 6 files changed, 334 insertions(+), 172 deletions(-) diff --git a/app/javascript/gabsocial/actions/onboarding.js b/app/javascript/gabsocial/actions/onboarding.js index a1dd3a73..cf8c2d9b 100644 --- a/app/javascript/gabsocial/actions/onboarding.js +++ b/app/javascript/gabsocial/actions/onboarding.js @@ -1,8 +1,9 @@ -import { changeSetting, saveSettings } from './settings'; +import moment from 'moment-mini' +import { changeSetting, saveSettings } from './settings' -export const INTRODUCTION_VERSION = 20181216044202; +export const MIN_ACCOUNT_CREATED_AT_ONBOARDING = moment('2020-07-14').valueOf() -export const closeOnboarding = () => dispatch => { - dispatch(changeSetting(['introductionVersion'], INTRODUCTION_VERSION)); - dispatch(saveSettings()); -}; +export const saveShownOnboarding = () => (dispatch) => { + dispatch(changeSetting(['shownOnboarding'], true)) + dispatch(saveSettings()) +} \ No newline at end of file diff --git a/app/javascript/gabsocial/features/introduction.js b/app/javascript/gabsocial/features/introduction.js index 314c3079..92671e24 100644 --- a/app/javascript/gabsocial/features/introduction.js +++ b/app/javascript/gabsocial/features/introduction.js @@ -1,234 +1,357 @@ -import ReactSwipeableViews from 'react-swipeable-views'; -import classNames from 'classnames'; -import { FormattedMessage } from 'react-intl'; -import { closeOnboarding } from '../actions/onboarding'; +import ReactSwipeableViews from 'react-swipeable-views' +import ImmutablePropTypes from 'react-immutable-proptypes' +import ImmutablePureComponent from 'react-immutable-pure-component' +import { CX } from '../constants' +import { me } from '../initial_state' +import { saveShownOnboarding } from '../actions/onboarding' +import { fetchGroups } from '../actions/groups' +import { + changeCompose, + clearCompose, +} from '../actions/compose' +import { makeGetAccount } from '../selectors' +import Button from '../components/button' +import DisplayName from '../components/display_name' +import Divider from '../components/divider' +import FileInput from '../components/file_input' +import GroupListItem from '../components/group_list_item' +import Heading from '../components/heading' +import Icon from '../components/icon' +import Image from '../components/image' +import Input from '../components/input' +import Text from '../components/text' +import ComposeFormContainer from './compose/containers/compose_form_container' -// : todo : - -class FrameWelcome extends React.Component { - static propTypes = { - domain: PropTypes.string.isRequired, - onNext: PropTypes.func.isRequired, - }; - - shouldComponentUpdate(nextProps) { - return nextProps.domain !== this.props.domain; - } +class SlideWelcome extends PureComponent { render() { - const { domain, onNext } = this.props; - return ( -
-
-
-
-
-