import { h, Component } from 'preact'; import PropTypes from 'prop-types'; import he from 'he'; import { getContentOfToken } from '../utilities'; import { Navigation } from './Navigation'; export class FollowUsers extends Component { constructor(props) { super(props); this.handleClick = this.handleClick.bind(this); this.handleComplete = this.handleComplete.bind(this); this.state = { users: [], selectedUsers: [], }; } componentDidMount() { fetch('/users?state=follow_suggestions', { headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, credentials: 'same-origin', }) .then((response) => response.json()) .then((data) => { this.setState({ users: data }); }); const csrfToken = getContentOfToken('csrf-token'); fetch('/onboarding_update', { method: 'PATCH', headers: { 'X-CSRF-Token': csrfToken, 'Content-Type': 'application/json', }, body: JSON.stringify({ user: { last_onboarding_page: 'v2: follow users page' }, }), credentials: 'same-origin', }); } handleComplete() { const csrfToken = getContentOfToken('csrf-token'); const { selectedUsers } = this.state; const { next } = this.props; fetch('/api/follows', { method: 'POST', headers: { 'X-CSRF-Token': csrfToken, 'Content-Type': 'application/json', }, body: JSON.stringify({ users: selectedUsers }), credentials: 'same-origin', }); next(); } handleSelectAll() { const { selectedUsers, users } = this.state; if (selectedUsers.length === users.length) { this.setState({ selectedUsers: [], }); } else { this.setState({ selectedUsers: users, }); } } handleClick(user) { let { selectedUsers } = this.state; if (!selectedUsers.includes(user)) { this.setState((prevState) => ({ selectedUsers: [...prevState.selectedUsers, user], })); } else { selectedUsers = [...selectedUsers]; const indexToRemove = selectedUsers.indexOf(user); selectedUsers.splice(indexToRemove, 1); this.setState({ selectedUsers, }); } } renderFollowCount() { 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 -`; } const klassName = selectedUsers.length > 0 ? 'fw-bold color-base-60 inline-block fs-base' : 'color-base-60 inline-block fs-base'; return
{followingStatus}
; } renderFollowToggle() { const { users, selectedUsers } = this.state; let followText = ''; if (selectedUsers.length !== users.length) { if (users.length === 1) { followText = `Select ${users.length} person`; } else { followText = `Select all ${users.length} people`; } } else { followText = 'Deselect all'; } return ( ); } render() { const { users, selectedUsers } = this.state; const { prev, slidesCount, currentSlideIndex } = this.props; const canSkip = selectedUsers.length === 0; return (