summaryrefslogtreecommitdiffstats
path: root/ui/src/components/site-form.tsx
diff options
context:
space:
mode:
authorDessalines <tyhou13@gmx.com>2020-01-24 13:59:50 -0500
committerDessalines <tyhou13@gmx.com>2020-01-24 13:59:50 -0500
commit608856b6cdd42b83f35eee8cb556ac626e75727f (patch)
treeccb74ba0a840d24a69f8ba3f3e95e06b5b5cce26 /ui/src/components/site-form.tsx
parent353891a3d1af878a8ce8d5562f3deaa9be380144 (diff)
Adding autocomplete to post, community, message, and site forms. Fixes #453
Diffstat (limited to 'ui/src/components/site-form.tsx')
-rw-r--r--ui/src/components/site-form.tsx18
1 files changed, 16 insertions, 2 deletions
diff --git a/ui/src/components/site-form.tsx b/ui/src/components/site-form.tsx
index 5d8ff0b5..936a9d53 100644
--- a/ui/src/components/site-form.tsx
+++ b/ui/src/components/site-form.tsx
@@ -1,8 +1,9 @@
import { Component, linkEvent } from 'inferno';
import { Site, SiteForm as SiteFormI } from '../interfaces';
import { WebSocketService } from '../services';
-import { capitalizeFirstLetter } from '../utils';
+import { capitalizeFirstLetter, randomStr, setupTribute } from '../utils';
import autosize from 'autosize';
+import Tribute from 'tributejs/src/Tribute.js';
import { i18n } from '../i18next';
import { T } from 'inferno-i18next';
@@ -17,6 +18,8 @@ interface SiteFormState {
}
export class SiteForm extends Component<SiteFormProps, SiteFormState> {
+ private id = `site-form-${randomStr()}`;
+ private tribute: Tribute;
private emptyState: SiteFormState = {
siteForm: {
enable_downvotes: true,
@@ -29,7 +32,10 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
constructor(props: any, context: any) {
super(props, context);
+
+ this.tribute = setupTribute();
this.state = this.emptyState;
+
if (this.props.site) {
this.state.siteForm = {
name: this.props.site.name,
@@ -42,7 +48,14 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
}
componentDidMount() {
- autosize(document.querySelectorAll('textarea'));
+ var textarea: any = document.getElementById(this.id);
+ autosize(textarea);
+ this.tribute.attach(textarea);
+ textarea.addEventListener('tribute-replaced', () => {
+ this.state.siteForm.description = textarea.value;
+ this.setState(this.state);
+ autosize.update(textarea);
+ });
}
render() {
@@ -75,6 +88,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
</label>
<div class="col-12">
<textarea
+ id={this.id}
value={this.state.siteForm.description}
onInput={linkEvent(this, this.handleSiteDescriptionChange)}
class="form-control"