diff --git a/app/assets/stylesheets/preact/onboarding-modal.scss b/app/assets/stylesheets/preact/onboarding-modal.scss index 6c34e4cbe..c3761fec2 100644 --- a/app/assets/stylesheets/preact/onboarding-modal.scss +++ b/app/assets/stylesheets/preact/onboarding-modal.scss @@ -45,6 +45,10 @@ } } +.toggle-bottom { + padding-bottom: 0px; +} + // terms and conditions view .terms-and-conditions-wrapper { $content-height: 358px; @@ -149,12 +153,29 @@ align-self: flex-end; flex-shrink: 0; width: 100%; - border-top: 2px solid var(--box-darker); + line-height: 100%; + height: 80px; + display: flex; + flex-direction: column; + justify-content: center; .selection-status-content { display: block; - padding: $su-4; text-align: center; + + p { + font-size: $su-4; + font-weight: $fw-bold; + line-height: $lh-base; + } + + button { + background: none; + border: none; + padding: 0px; + color: var(--accent-brand); + font-size: $fs-s; + } } } @@ -169,6 +190,7 @@ .onboarding-modal-scroll-container { height: auto; min-height: 436px; + border-bottom: 1px solid var(--base-20); @media screen and (min-width: $breakpoint-s) { max-height: 500px; overflow-y: scroll; diff --git a/app/javascript/onboarding/__tests__/Onboarding.test.jsx b/app/javascript/onboarding/__tests__/Onboarding.test.jsx index 381cccdb2..83e243493 100644 --- a/app/javascript/onboarding/__tests__/Onboarding.test.jsx +++ b/app/javascript/onboarding/__tests__/Onboarding.test.jsx @@ -299,12 +299,33 @@ describe('', () => { const followUsers = onboardingSlides.find(); onboardingSlides.find('.user').first().simulate('click'); + expect(onboardingSlides.find('p').last().text()).toBe( + "You're following 1 person", + ); + onboardingSlides.find('.user').last().simulate('click'); + expect(onboardingSlides.find('p').last().text()).toBe( + "You're following 2 people", + ); expect(followUsers.state('selectedUsers').length).toBe(2); onboardingSlides.find('.next-button').simulate('click'); await flushPromises(); expect(onboardingSlides.state().currentSlide).toBe(5); }); + test('should have a functioning select-all toggle', async () => { + fetch.once({}); + const followUsers = onboardingSlides.find(); + + expect(onboardingSlides.find('button').last().text()).toBe( + 'Select all 3 people', + ); + onboardingSlides.find('button').last().simulate('click'); + expect(onboardingSlides.find('button').last().text()).toBe( + 'Deselect all', + ); + expect(followUsers.state('selectedUsers').length).toBe(3); + }); + it('should step backward', async () => { fetch.once(fakeTagsResponse); onboardingSlides.find('.back-button').simulate('click'); diff --git a/app/javascript/onboarding/__tests__/__snapshots__/Onboarding.test.jsx.snap b/app/javascript/onboarding/__tests__/__snapshots__/Onboarding.test.jsx.snap index 4e1f11db7..0c6213a37 100644 --- a/app/javascript/onboarding/__tests__/__snapshots__/Onboarding.test.jsx.snap +++ b/app/javascript/onboarding/__tests__/__snapshots__/Onboarding.test.jsx.snap @@ -294,7 +294,7 @@ preact-render-spy (1 nodes) -
+

Suggested people to follow

Let's review a few things first

@@ -304,7 +304,7 @@ preact-render-spy (1 nodes) type="button" onClick={[Function onClick]} onKeyDown={[Function onKeyDown]} - class="user content-row selected" + class="user content-row unselected" >
- Following + Follow
+

You're not following anyone

diff --git a/app/javascript/onboarding/components/FollowUsers.jsx b/app/javascript/onboarding/components/FollowUsers.jsx index af0e7121f..4abe27a99 100644 --- a/app/javascript/onboarding/components/FollowUsers.jsx +++ b/app/javascript/onboarding/components/FollowUsers.jsx @@ -25,9 +25,9 @@ class FollowUsers extends Component { }, credentials: 'same-origin', }) - .then(response => response.json()) - .then(data => { - this.setState({ users: data, selectedUsers: data }); + .then((response) => response.json()) + .then((data) => { + this.setState({ users: data }); }); const csrfToken = getContentOfToken('csrf-token'); @@ -79,7 +79,7 @@ class FollowUsers extends Component { let { selectedUsers } = this.state; if (!selectedUsers.includes(user)) { - this.setState(prevState => ({ + this.setState((prevState) => ({ selectedUsers: [...prevState.selectedUsers, user], })); } else { @@ -92,20 +92,52 @@ class FollowUsers extends Component { } } + userFollowCountMessage() { + const { users, selectedUsers } = this.state; + let followingStatus; + if (selectedUsers.length === 0) { + followingStatus = "You're not following anyone"; + } else if (selectedUsers.length === 1) { + followingStatus = "You're following 1 person"; + } else if (selectedUsers.length === users.length) { + followingStatus = `You're following ${selectedUsers.length} people (everyone)`; + } else { + followingStatus = `You're following ${selectedUsers.length} people`; + } + + return followingStatus; + } + + renderFollowToggle() { + const { users, selectedUsers } = this.state; + if (users.length === 0) { + return ''; + } + + return ( + + ); + } + render() { const { users, selectedUsers } = this.state; const { prev } = this.props; + return (
-
+

Suggested people to follow

Let's review a few things first

- {users.map(user => ( + {users.map((user) => (
- +

{this.userFollowCountMessage()}

+ {this.renderFollowToggle()}