import { h, Component } from 'preact'; const algoliaId = document.querySelector("meta[name='algolia-public-id']") .content; const algoliaKey = document.querySelector("meta[name='algolia-public-key']") .content; const env = document.querySelector("meta[name='environment']").content; const client = algoliasearch(algoliaId, algoliaKey); const index = client.initIndex(`searchables_${ env}`); export default class ChannelDetails extends Component { constructor(props) { super(props); this.state = { searchedUsers: [], invitations: [], hasLeftChannel: false, }; } triggerUserSearch = e => { const component = this; const query = e.target.value; const filters = { hitsPerPage: 20, attributesToRetrieve: ['id', 'title', 'path'], attributesToHighlight: [], filters: 'class_name:User', }; if (query.length > 0) { index.search(query, filters).then((content) => { component.setState({ searchedUsers: content.hits }); }); } else { component.setState({ searchedUsers: [] }); } }; triggerInvite = e => { const component = this; const id = e.target.dataset.content; e.target.style.display = 'none'; fetch(`/chat_channel_memberships`, { method: 'POST', headers: { Accept: 'application/json', 'X-CSRF-Token': window.csrfToken, 'Content-Type': 'application/json', }, body: JSON.stringify({ chat_channel_membership: { user_id: id, chat_channel_id: component.props.channel.id, }, }), credentials: 'same-origin', }) .then(response => response) .then(this.handleInvitationSuccess) .catch(null); }; triggerLeaveChannel = e => { e.preventDefault(); const id = e.target.dataset.content; fetch(`/chat_channel_memberships/${id}`, { method: 'DELETE', headers: { Accept: 'application/json', 'X-CSRF-Token': window.csrfToken, 'Content-Type': 'application/json', }, body: JSON.stringify({}), credentials: 'same-origin', }) .then(response => response) .then(this.handleLeaveChannelSuccess) .catch(null); }; handleLeaveChannelSuccess = response => { this.setState({ hasLeftChannel: true }); }; handleInvitationSuccess = response => { console.log(response); }; render() { const channel = this.props.channel; const users = Object.values(channel.channel_users).map(user => (
{user.name}
)); let subHeader = ''; if (users.length === 80) { subHeader =

Recently Active Members

; } let modSection = ''; let searchedUsers = []; let pendingInvites = []; if (channel.channel_mod_ids.includes(window.currentUser.id)) { searchedUsers = this.state.searchedUsers.map(user => (
{user.title} {' '}
)); pendingInvites = channel.pending_users_select_fields.map(user => (
@{user.username} - {user.name}
)); modSection = (

Invite Members

{searchedUsers}

Pending Invites:

{pendingInvites}
All functionality is early beta. Contact us if you need help with anything.
); } else if (this.state.hasLeftChannel) { modSection = (

Danger Zone

You have left this channel 😢😢😢

It may not be immediately in the sidebar

Contact the admins at yo@dev.to if this was a mistake

); } else { modSection = (

Danger Zone

); } return (

{channel.channel_name}

{subHeader}
{channel.description || ''}
{users} {modSection}
); } }