From 269c8a2f50677b47e3e07e243ae0d120c5c54c9f Mon Sep 17 00:00:00 2001 From: Mitchell Gerber Date: Sat, 13 Jan 2018 19:44:23 -0600 Subject: [PATCH] client - forum nav should be working --- client/app/assets/forum-nav-header-bg.gif | Bin 0 -> 5757 bytes client/app/assets/header-rogue.gif | Bin 0 -> 4805 bytes client/app/assets/wow-base-guild.gif | Bin 0 -> 4190 bytes client/app/assets/wow-base-roleplaying.gif | Bin 0 -> 4123 bytes .../app/components/forum-nav/forum-nav.scss | 15 ++- client/app/components/forum-nav/forum-nav.tsx | 115 +++++++++++++++++- .../components/login-button/login-button.tsx | 1 + client/app/pages/forum/forum.tsx | 20 ++- client/app/pages/home/home.tsx | 105 ++++++++++------ client/app/pages/thread/thread.tsx | 5 +- .../app/pages/user-account/user-account.tsx | 1 - client/app/routes.tsx | 2 +- priv/repo/seeds.exs | 8 +- 13 files changed, 213 insertions(+), 59 deletions(-) create mode 100644 client/app/assets/forum-nav-header-bg.gif create mode 100644 client/app/assets/header-rogue.gif create mode 100644 client/app/assets/wow-base-guild.gif create mode 100644 client/app/assets/wow-base-roleplaying.gif diff --git a/client/app/assets/forum-nav-header-bg.gif b/client/app/assets/forum-nav-header-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..4d12c335cada2d872778d96bf31079ab635a125a GIT binary patch literal 5757 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 literal 0 HcmV?d00001 diff --git a/client/app/assets/header-rogue.gif b/client/app/assets/header-rogue.gif new file mode 100644 index 0000000000000000000000000000000000000000..af1c1ef95403ad2b928e63173cf105460ca8bf1b GIT binary patch literal 4805 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 Lkwq>b2rT;_*k36A literal 0 HcmV?d00001 diff --git a/client/app/assets/wow-base-roleplaying.gif b/client/app/assets/wow-base-roleplaying.gif new file mode 100644 index 0000000000000000000000000000000000000000..0fd4e5126fc23bd8bb04060633c85fdc7c177851 GIT binary patch literal 4123 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 literal 0 HcmV?d00001 diff --git a/client/app/components/forum-nav/forum-nav.scss b/client/app/components/forum-nav/forum-nav.scss index 1f158e2..ab01a6c 100644 --- a/client/app/components/forum-nav/forum-nav.scss +++ b/client/app/components/forum-nav/forum-nav.scss @@ -1,6 +1,15 @@ .forum-nav { - display: inline-block; + display: flex; + flex-direction: column; padding-left: 5px; - position: relative; - bottom: 10; + background-image: url('../../assets/forum-nav-header-bg.gif'); + background-repeat: no-repeat; + height: 51px; + width: 300px; + overflow: hidden; + + &__title { + height: 27px; + line-height: 27px; + } } diff --git a/client/app/components/forum-nav/forum-nav.tsx b/client/app/components/forum-nav/forum-nav.tsx index e048e26..72768d5 100644 --- a/client/app/components/forum-nav/forum-nav.tsx +++ b/client/app/components/forum-nav/forum-nav.tsx @@ -1,20 +1,125 @@ import React from 'react'; +import { get, find, reject } from 'lodash'; +import { RouteComponentProps } from 'react-router-dom'; +import { CategoryService } from '../../services'; +import { CategoryModel } from '../../model'; import './forum-nav.scss'; -interface Props {} +interface Props extends RouteComponentProps { + categoryId: number; +} -interface State {} +interface State { + categoryList: CategoryModel[]; + selectedCategory?: CategoryModel; +} export class ForumNav extends React.Component { + constructor(props: Props) { + super(props); + this.state = { + categoryList: [], + }; + } + + async componentDidMount() { + const categoryList = await CategoryService.getCategories(); + this.setState({ categoryList }); + this.setSelectedCategory(categoryList, this.props.categoryId!); + } + + componentWillReceiveProps(nextProps: Props) { + if (this.props.categoryId !== nextProps.categoryId) { + this.setSelectedCategory(this.state.categoryList, nextProps.categoryId!); + } + } + + setSelectedCategory(categoryList: CategoryModel[], categoryId: number) { + const selectedCategory = find(categoryList, { id: categoryId }); + this.setState({ selectedCategory }); + } + + getImageSrc(): string { + if (this.state.selectedCategory!.category === 'realm') { + return topicIcons['Realm Forums']; + } + + return topicIcons[this.state.selectedCategory!.title]; + } + + renderDropDown() { + let categories: any = reject(this.state.categoryList, { category: 'realm' }); + categories = [{ id: -1, title: 'Realm Forums' }, ...categories]; + return categories.map((val: any, index: number) => { + return ; + }); + } + + getSelectedCategoryId(): number { + const { selectedCategory } = this.state; + if (!selectedCategory) { + return 0; + } + + if (selectedCategory.category === 'realm') { + return -1; + } + + return selectedCategory.id; + } + + onSelect(event: any) { + const route = event.target.value === '-1' ? '/realms' : `/f/${event.target.value}`; + this.props.history.push(route); + } + render() { + const { selectedCategory } = this.state; + const imageSrc = selectedCategory ? this.getImageSrc() : undefined; + return ( -
- +
+
- Forum Nav: +
+ {get(selectedCategory, 'title')} +
+
+ Forum Nav: + +
); } } + +const topicIcons: {[key: string]: string} = { + ['Bug Report Forum']: require('../../assets/wow-base-bugs.gif'), + ['Druid']: require('../../assets/wow-base-druid.gif'), + ['Raid and Dungeon Discussion']: require('../../assets/wow-base-dungeons.gif'), + ['General Discussion']: require('../../assets/wow-base-general.gif'), + ['Hunter']: require('../../assets/wow-base-hunter.gif'), + ['Mage']: require('../../assets/wow-base-mage.gif'), + ['Off-topic']: require('../../assets/wow-base-offtopic.gif'), + ['Paladin']: require('../../assets/wow-base-paladin.gif'), + ['Priest']: require('../../assets/wow-base-priest.gif'), + ['Professions']: require('../../assets/wow-base-professions.gif'), + ['PvP Discussion']: require('../../assets/wow-base-pvp.gif'), + ['Quest Discussion']: require('../../assets/wow-base-quests.gif'), + ['Realm Forums']: require('../../assets/wow-base-realms.gif'), + ['Rogue']: require('../../assets/wow-base-rogue.gif'), + ['Shaman']: require('../../assets/wow-base-shaman.gif'), + ['Suggestions']: require('../../assets/wow-base-suggestions.gif'), + ['Site Suggestions']: require('../../assets/wow-base-support.gif'), + ['UI & Macros Forum']: require('../../assets/wow-base-uicustomizations.gif'), + ['Warlock']: require('../../assets/wow-base-warlock.gif'), + ['Warrior']: require('../../assets/wow-base-warrior.gif'), + ['Guild Recruitment']: require('../../assets/wow-base-guild.gif'), + ['Role-Playing']: require('../../assets/wow-base-roleplaying.gif'), +}; diff --git a/client/app/components/login-button/login-button.tsx b/client/app/components/login-button/login-button.tsx index 71147a8..40dfaaf 100644 --- a/client/app/components/login-button/login-button.tsx +++ b/client/app/components/login-button/login-button.tsx @@ -35,6 +35,7 @@ export class LoginButton extends React.Component {
{!avatarSrc &&

this.props.onNavigate('/user-account')}>Account

} +
{this.props.userStore!.user!.battletag}
{this.props.userStore!.user!.character_name}
diff --git a/client/app/pages/forum/forum.tsx b/client/app/pages/forum/forum.tsx index 700171f..01ec8f5 100644 --- a/client/app/pages/forum/forum.tsx +++ b/client/app/pages/forum/forum.tsx @@ -21,18 +21,25 @@ export class Forum extends React.Component { } componentDidMount() { - this.getThreads(); + this.getThreads(this.props.match.params['id']); } - private async getThreads() { - const threads = await ThreadService.getCategoryThreads(this.props.match.params['id']); + // update the page if the route params change + componentWillReceiveProps(nextProps: Props) { + if (this.props.match.params !== nextProps.match.params) { + this.getThreads(nextProps.match.params['id']); + } + } + + private async getThreads(categoryId: string) { + const threads = await ThreadService.getCategoryThreads(categoryId); this.setState({ threads }); } renderHeader() { return (
- +
this.props.history.push(dest)}/>
@@ -68,11 +75,12 @@ export class Forum extends React.Component { } renderThreadRows() { + const categoryId = this.props.match.params['id']; return this.state.threads.map((thread, index) => { return (
{this.renderCell('flag', { maxWidth: '50px' })} - {this.renderCell({thread.title}, { minWidth: '200px' })} + {this.renderCell({thread.title}, { minWidth: '200px' })} {this.renderCell({thread.user.battletag}, { maxWidth: '150px' })} {this.renderCell({thread.reply_count}, { maxWidth: '150px' }, true)} {this.renderCell({thread.view_count}, { maxWidth: '150px' }, true)} @@ -88,7 +96,7 @@ export class Forum extends React.Component {
-
Test
+
TODO:
diff --git a/client/app/pages/home/home.tsx b/client/app/pages/home/home.tsx index c9e937c..b3936cc 100644 --- a/client/app/pages/home/home.tsx +++ b/client/app/pages/home/home.tsx @@ -6,7 +6,7 @@ import './home.scss'; import header_forms from '../../assets/header-forums.gif'; import support from '../../assets/support.gif'; -import serverstatus from '../../assets/serverstatus.gif'; +// import serverstatus from '../../assets/serverstatus.gif'; import uicustomizations from '../../assets/uicustomizations.gif'; import bugs from '../../assets/bugs.gif'; import realms from '../../assets/realms.gif'; @@ -42,23 +42,23 @@ export class Home extends React.Component { super(props); } - private renderTopic(link: string, title: string, icon: any, text: string): any { + private renderTopic(topicId: number | string, title: string, icon: any, text: string): any { return (
- +
- {title} + {title}
{text}
); } - private renderClass(title: string, url: string, icon: any): any { + private renderClass(title: string, topicId: number, icon: any): any { return (
- - {title} + + {title}
); } @@ -67,19 +67,19 @@ export class Home extends React.Component { return (
- {this.renderClass('Druid', '#', druid)} - {this.renderClass('Rogue', '#', rogue)} - {this.renderClass('Priest', '#', priest)} + {this.renderClass('Druid', 0, druid)} + {this.renderClass('Rogue', 1, rogue)} + {this.renderClass('Priest', 2, priest)}
- {this.renderClass('Hunter', '#', hunter)} - {this.renderClass('Shaman', '#', shaman)} - {this.renderClass('Warrior', '#', warrior)} + {this.renderClass('Hunter', 3, hunter)} + {this.renderClass('Shaman', 4, shaman)} + {this.renderClass('Warrior', 5, warrior)}
- {this.renderClass('Mage', '#', mage)} - {this.renderClass('Paladin', '#', paladin)} - {this.renderClass('Warlock', '#', warlock)} + {this.renderClass('Mage', 6, mage)} + {this.renderClass('Paladin', 7, paladin)} + {this.renderClass('Warlock', 8, warlock)}
); @@ -98,23 +98,36 @@ export class Home extends React.Component { the World of Warcraft community forums requires a World of Warcraft account. Only customers are allowed to post on these forums, but anyone can read them. Please note that you must adhere to the Forum Guidelines if you wish to post on the forums.

- +
- {this.renderTopic('#', 'Technical Support', support, `If you're experiencing technical problems playing World of Warcraft, post here for assistance.`)} - {this.renderTopic('#', 'Realm Status', serverstatus, `Collection of important messages regarding the status of the Realms.`)} + {this.renderTopic( + 137, + 'Site Suggestions', + support, + `Have a suggestion for this site? Please post it here.`, + )} + { /* maybe add realm status in the future */ + /* {this.renderTopic( + '#', 'Realm Status', serverstatus, + `Collection of important messages regarding the status of the Realms.`)} */}
- {this.renderTopic('#', 'UI & Macros Forum', uicustomizations, `Work with other players to create your own special custom interfaces and macros.`)} - {this.renderTopic('#', 'Bug Report Forum', bugs, `Found a bug in the game? Help us squash it by reporting it here!`)} + {this.renderTopic( + 138, + 'UI & Macros Forum', + uicustomizations, + `Work with other players to create your own special custom interfaces and macros.`, + )} + {this.renderTopic(139, 'Bug Report Forum', bugs, `Found a bug on this site? Help us squash it by reporting it here!`)}
-
+
- +
Classes
Discuss your favorite class:
@@ -125,50 +138,62 @@ export class Home extends React.Component {
- +
- Professions + Professions
Discuss professions in detail.
- +
- PvP Discussion + PvP Discussion
Discuss player versus player combat.
- +
- Quest Discussion + Quest Discussion
Talk about and get help with the countless quests in World of Warcraft.
-
- {this.renderTopic('/realms', 'Realm Forums', realms, `Discuss topics related to World of Warcraft with players on your specific Realm.`)} - {this.renderTopic('#', 'Off-topic', offtopic, `Off-topic posts of interest to the World of Warcraft community.`)} + {this.renderTopic( + '/realms', + 'Realm Forums', + realms, + `Discuss topics related to World of Warcraft with players on your specific Realm.`, + )} + {this.renderTopic(131, 'Off-topic', offtopic, `Off-topic posts of interest to the World of Warcraft community.`)}
- {this.renderTopic('#', 'Suggestions', suggestions, `Have a suggestion for World of Warcraft? Please post it here.`)} - {this.renderTopic('#', 'Guild Recruitment', guilds, `Searching for a guild, or do you want to advertise your guild?`)} + {this.renderTopic(134, 'Suggestions', suggestions, `Have a suggestion for World of Warcraft? Please post it here.`)} + {this.renderTopic(132, 'Guild Recruitment', guilds, `Searching for a guild, or do you want to advertise your guild?`)}
- {this.renderTopic('#', 'Role-Playing', roleplaying, `Pull up a chair, drink a mug of ale, meet new friends, tell stories, and role-play in this forum.`)} - {this.renderTopic('#', 'General Discussion.', general, `Discuss World of Warcraft.`)} + {this.renderTopic( + 135, + 'Role-Playing', + roleplaying, + `Pull up a chair, drink a mug of ale, meet new friends, tell stories, and role-play in this forum.`, + )} + {this.renderTopic(133, 'General Discussion.', general, `Discuss World of Warcraft.`)}
- {this.renderTopic('#', 'Raid and Dungeon Discussion', dungeons, `Discuss the instance dungeons and end-game raid encounters in World of Warcraft.`)} + {this.renderTopic( + 136, + 'Raid and Dungeon Discussion', + dungeons, + `Discuss the instance dungeons and end-game raid encounters in World of Warcraft.`, + )}
-
-
- +
); diff --git a/client/app/pages/thread/thread.tsx b/client/app/pages/thread/thread.tsx index d0cf5e1..2872cc2 100644 --- a/client/app/pages/thread/thread.tsx +++ b/client/app/pages/thread/thread.tsx @@ -24,7 +24,7 @@ export class Thread extends React.Component { } private async getThreads() { - const thread = await ThreadService.getThread(this.props.match.params['id']); + const thread = await ThreadService.getThread(this.props.match.params['threadId']); thread.replies = [thread as any, ...thread.replies]; // add the thread topic to the front of the list this.setState({ thread }); } @@ -71,7 +71,8 @@ export class Thread extends React.Component {
- + {/* todo: */} +
diff --git a/client/app/pages/user-account/user-account.tsx b/client/app/pages/user-account/user-account.tsx index 0aa0b21..305bd7e 100644 --- a/client/app/pages/user-account/user-account.tsx +++ b/client/app/pages/user-account/user-account.tsx @@ -52,7 +52,6 @@ export class UserAccount extends React.Component { this.setState({ noCharacters: true }); return; } - // remove classes that weren't in vanilla const characters = groupBy(res.characters, 'realm'); this.setState({ characters, diff --git a/client/app/routes.tsx b/client/app/routes.tsx index ce96cfc..530b81e 100644 --- a/client/app/routes.tsx +++ b/client/app/routes.tsx @@ -45,9 +45,9 @@ export class Routes extends React.Component { + -