In my first week of Hacktoberfest I started off without any particular project in mind. I had a few ideas of what I wanted to work on, so I started by searching GitHub for a project. I was looking for something using JavaScript or C++.
After searching for a while I came across a application called NodeChat. In Issue #11 for the NodeChat project the owner asked for someone to move the public site over to React. Having used React, Node.js and Socket.IO I asked in the issue if I could do this. After, that I started my work on the React app to replace the JQuery version that was previously used in the project.
Making a chat app using React
I started off with some project designing. I needed to figure out how I wanted to organize the react app. Also, I had to go through the existing JQuery file to get a better understanding of what the project is doing.
I decided on the below structure for the app.
-
- App
- This component is the core of the app were the Login Page is called and is currently were all the css and assets are located.
- LoginPage
- This component handles new and previous user login’s. And handles displaying the login page or the chat page.
- ChatPage
- This compenent handles all the functionality of the chat.
- App
Currently the flow of the app is as follows the app page displays the Login page. The login page creates a new user or uses a previous user then the Login page decides when to display the Chat page.
A update I think I will do at some point would be to make it so the App page receives props back form the Login page. That would instruct the App page when to display the Chat page. I think this would be a bit cleaner code.
There is still a bunch of stuff that need’s to be finished but at the moment the app is working on a basic level. I am hoping to get most of the bugs fixed as soon as I can.
I think this will be a good project for me over Hacktoberfest and probably after.
Here’s the link to my first PR of Hacktoberfest .
Below is the 2 class definitions for Login Page and Chat Page and I added a small comment about each function. Full Code available here.
class LoginPage extends Component { constructor(props) {} // Checks if user pressed enter key to submit there message. enterKeyPress(e) {} // Used to manage the State of the input field on the Login Page. setUsernameInput(event) {} // Calls checkIfPreviousUser() componentDidMount() {} // Sets the username setUsername() {} // Checks current user is a previous user or calls setUsername() if not. checkIfPreviousUser() { } // Tell the server that we've had a user join userJoin() {} // Holds the content's of the Login Page displayLogin() {} // Render Login Page if not loged in or Chat page if Logged in render() {} }
class ChatPage extends Component { constructor(props) {} // Calls greetUser() and Lisen's for New Chat messages. componentDidMount() {} // Displays Greeting message. greetUser() {} // Checks if user pressed enter key to submit there message. enterKeyPress(e) {} // Used to manage the State of the input field on the chat app. setChatInput(event) {} // Send's the message to the server. sendMessage() {} // Recieve's the chat messages from the server. addChatMessage(data) {} // Used to handle images(not tested). parseMessageText(inputString) {} // Used to handle images(not tested). imageFile(filetype) {} // Used to handle images(not tested). getFileType(inputString) {} // Used to handle images(not tested).. imageLink(inputString) {} // Used automatically scroll the page. scrollToBottom() {} // Render page content. render() {} }