import { Component, linkEvent } from 'inferno'; import { Subscription } from "rxjs"; import { retryWhen, delay, take } from 'rxjs/operators'; import { CommunityForm as CommunityFormI, UserOperation, Category, ListCategoriesResponse, CommunityResponse } from '../interfaces'; import { WebSocketService } from '../services'; import { msgOp } from '../utils'; import * as autosize from 'autosize'; import { Community } from '../interfaces'; interface CommunityFormProps { community?: Community; // If a community is given, that means this is an edit onCancel?(): any; onCreate?(id: number): any; onEdit?(community: Community): any; } interface CommunityFormState { communityForm: CommunityFormI; categories: Array; loading: boolean; } export class CommunityForm extends Component { private subscription: Subscription; private emptyState: CommunityFormState = { communityForm: { name: null, title: null, category_id: null }, categories: [], loading: false } constructor(props: any, context: any) { super(props, context); this.state = this.emptyState; if (this.props.community) { this.state.communityForm = { name: this.props.community.name, title: this.props.community.title, category_id: this.props.community.category_id, description: this.props.community.description, edit_id: this.props.community.id, auth: null } } this.subscription = WebSocketService.Instance.subject .pipe(retryWhen(errors => errors.pipe(delay(3000), take(10)))) .subscribe( (msg) => this.parseMessage(msg), (err) => console.error(err), () => console.log("complete") ); WebSocketService.Instance.listCategories(); } componentDidMount() { autosize(document.querySelectorAll('textarea')); } componentWillUnmount() { this.subscription.unsubscribe(); } render() { return (