import { Component } from 'inferno'; import { Subscription } from 'rxjs'; import { CommunityForm } from './community-form'; import { HtmlTags } from './html-tags'; import { Community, UserOperation, WebSocketJsonResponse, Site, ListCategoriesResponse, Category, } from 'lemmy-js-client'; import { setIsoData, toast, wsJsonToRes, wsSubscribe, isBrowser, lemmyHttp, } from '../utils'; import { WebSocketService, UserService } from '../services'; import { i18n } from '../i18next'; interface CreateCommunityState { site: Site; categories: Category[]; loading: boolean; } export class CreateCommunity extends Component { private isoData = setIsoData(this.context); private subscription: Subscription; private emptyState: CreateCommunityState = { site: this.isoData.site.site, categories: [], loading: true, }; constructor(props: any, context: any) { super(props, context); this.handleCommunityCreate = this.handleCommunityCreate.bind(this); this.state = this.emptyState; this.parseMessage = this.parseMessage.bind(this); this.subscription = wsSubscribe(this.parseMessage); if (!UserService.Instance.user && isBrowser()) { toast(i18n.t('not_logged_in'), 'danger'); this.context.router.history.push(`/login`); } // Only fetch the data if coming from another route if (this.isoData.path == this.context.router.route.match.url) { this.state.categories = this.isoData.routeData[0].categories; this.state.loading = false; } else { WebSocketService.Instance.listCategories(); } } componentWillUnmount() { if (isBrowser()) { this.subscription.unsubscribe(); } } get documentTitle(): string { return `${i18n.t('create_community')} - ${this.state.site.name}`; } render() { return (
{this.state.loading ? (
) : (
{i18n.t('create_community')}
)}
); } handleCommunityCreate(community: Community) { this.props.history.push(`/c/${community.name}`); } static fetchInitialData(_auth: string, _path: string): Promise[] { return [lemmyHttp.listCategories()]; } parseMessage(msg: WebSocketJsonResponse) { console.log(msg); let res = wsJsonToRes(msg); if (msg.error) { // Toast errors are already handled by community-form return; } else if (res.op == UserOperation.ListCategories) { let data = res.data as ListCategoriesResponse; this.state.categories = data.categories; this.state.loading = false; this.setState(this.state); } } }