From 04be6543b664832e3faef16d682f14fac4bd114b Mon Sep 17 00:00:00 2001 From: Mitchell Gerber Date: Mon, 22 Jan 2018 19:56:24 -0600 Subject: [PATCH] client - search functionality working --- client/app/pages/forum/forum.tsx | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/client/app/pages/forum/forum.tsx b/client/app/pages/forum/forum.tsx index 42a1194..e035d7c 100644 --- a/client/app/pages/forum/forum.tsx +++ b/client/app/pages/forum/forum.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Link, RouteComponentProps } from 'react-router-dom'; import { inject, observer } from 'mobx-react'; -import { orderBy } from 'lodash'; +import { cloneDeep, filter, orderBy } from 'lodash'; import { ThreadService } from '../../services'; import { Editor, ForumNav, LoginButton, PaginationLinks, ScrollToTop } from '../../components'; import { ThreadModel } from '../../model'; @@ -20,8 +20,10 @@ interface Props extends RouteComponentProps { interface State { showEditor: boolean; threads: ThreadModel[]; + initialThreads: ThreadModel[]; pageThreads: ThreadModel[]; pageLinks: (number | string)[]; + searchText: string; } interface RouteParams { @@ -49,8 +51,10 @@ export class Forum extends React.Component { this.state = { showEditor: false, threads: [], + initialThreads: [], pageThreads: [], pageLinks: [], + searchText: '', }; } @@ -81,6 +85,7 @@ export class Forum extends React.Component { // fetch threads from server private async getThreads(categoryId: number) { const threads = await ThreadService.getCategoryThreads(categoryId); + this.setState({ initialThreads: threads }); this.processThreads(threads); } @@ -119,6 +124,15 @@ export class Forum extends React.Component { this.props.history.push(url); } + private onSearch(event: any) { + event.preventDefault(); + const threads = filter(cloneDeep(this.state.initialThreads), (t) => { + return t.title.toLowerCase().match(this.state.searchText.toLowerCase()); + }); + + this.processThreads(threads); + } + private onNewTopic() { if (this.props.userStore.user) { this.setState({ showEditor: true }); @@ -148,7 +162,7 @@ export class Forum extends React.Component { renderBody() { return (
-
+
this.onSearch(e)}> {
- + this.setState({ searchText: event.target.value })}/>
- +
-
+
{this.renderTable()}