Untitled

 avatar
unknown
plain_text
2 years ago
7.6 kB
7
Indexable
import React, { Component } from "react";
class App extends Component {
    state = {
        newTitle: "",
        newDescription: "",
        newTopic: "",

        addedAgenda: [
            {
                title: "Angular",
                description: "Some description about the angular",
                topics: ["Introduction", "Typescript","Why Angular?","Understanding Versions", “Fundamentals”]
            },
            {
                title: "Vue",
                description:”Some description about the vue“,
                topics: [“Introduction”, "Javascript",”Why Vue?","Vue Bindings”,“Component Interaction“]
            }
        ],
        addedTopic : [],
        showAgendaBlock : false
    }
    handleChangeFn = e =>{
        const value = e.target.value;
        const name = e.target.name;
        this.setState({[name]:value})
    }
    
    addTopicFn = () => {
        this.state.addedTopic.push(this.state.newTopic)
        this.setState({newTopic : ""});

    addAgendaFn = () => {
        var agenda ={
            title : this.state.newTitle,
            description: this.state.newDescription,
            topics : this.state.addedTopic
        }
        this.setState({newTitle: ""})
        this.setState({ newDescription:""})
        this.setState({ newTopic: ""}) 
        this.setState({ addedTopic:[]})
        this.state.addedAgenda.push(agenda)
    }
    
    preventSubmit = (e) => {
        e.preventDefault()
    }
    
    showAgendaBlockFn = () => {
        this.state.showAgendaBlock === false ? this.setState({showAgendaBlock: false})
    }

    render() {
        return(
            <div>
                <h1 className="mx-5 mb-5">Agenda Manager</h1>
                {!this.state.showAgendaBlock && 
                    <div className=”container” role="addAgenda">
                        <button className="btn btn-info" role="goToView" onClick={this.showAgendaBlockFn} >Click To View Agenda</button>
                        <form onSubmit={this.preventSubmit}>
                            <div className="my-3">
                                <label className="form-label">Title</label>
                                    <input type="text" name="newTitle" placeholder="Enter the title" className="form-control" role="inputTitle" value={this.state.newTitle} onChange={this.handleChangeFn}/>
                                    <small className="text-danger" data-testid="invalidTitle"> 
                                    {this.state.newTitle.trim().length ===0  ? "Title is required":""}
                                    </small>
                            </div>
                            <div className="my-3">
                                <label className="form-label">Description</label>
                                    ‹input type="text" name=”newDescription" placeholder=”Enter the description"
                                    className="form-control" role="input Description" value={this.state.newDescription} onChange={this.handleChangeFn}/>
                                    ‹small className="text-danger" data-testid="invalidDescription"›
                                    {this.state.newDescription.trim().length === 0 ?"Description is required":""}
                                    </small>                                
                            </div>
                            <div className="my-3 w-50">
                                ‹label className="form-label"> Enter topic</label>
                                    <input type="text" name="newTopic"  placeholder="Enter the topic" className="form-control" role="input Topic" 
                                    value={this.state.newTopic} onChange={this.handleChangeFn}/> 
                                    ‹small className="text-danger” data--testid="invalidTopic"›
                                    {this.state.newToplc.trim().length === 0 & this.state.addedTopic.length === 0 ? "Topic is required":""}
                                    ‹/small›
                            </div>
                            <button className="btn btn-success addAlign" role="addTopicBtn" onClick={this.addTopicFn} disabled={this.state.newTopic.trim().length === 0}>+ Add Topic
                            </button>
                            <button className=”btn btn-success submitAlign" role="submitAgendaBtn" onClick={this.addAgendaFn} disabled={this.state.newTitle.trim().length === 0 || this.state.newDescription.trim().length === 0 || this.state.addedTopic.length === 0}>
                            Submit Agenda 
                            </button>
                        ‹/form>
                        {this.state.addedTopic.length === 0 && 
                            <div className="text-danger ml-2 mt-5" data-testid = "noTopicsMsg"> 
                                No TopicsAdded
                            </div>
                        }
                        {this.state/addedTopic.length ! == 0 && 
                            <div className="card my-3">
                                <div className="card-header">Added Topics </div> 
                                    <div classNmae ="card-body">
                                        <ul className = "list-group">
                                            {this.state.addedTopic.map(topic => {
                                                return (
                                                    <li className = "list-group-item" role = "topicList"> {topic} </li>
                                                )
                                            })}
                                        </ul>
                                    </div> 
                                    <div className="card-footer">Refer the topics you added</div>
                            </div>
                        }
                    </div>
                }

                {this.state.showAgendaBlock &&
                    <div className="container" role="viewAgenda">
                        <button className="btn btn-info" role="goToAdd" onClick={this.showAgentBlockFn}> Click to Add Agenda </button>
                        {this.state.addedAgenda.map(agenda => {
                            return (
                                <div className="card my-3" role="cards">
                            <div className="card-header">
                                {agenda.title}
                            </div>
                            <div className="card-body">
                                <ul className="list-group">
                                    {agenda.topics.map(topic=> {
                                        return(
                                            <li className="list-group-item">
                                                {topic}
                                            </li>
                                        )
                                    })}
                            <div className="card-footer">
                                {agenda.description}
                            </div>
                        </div>
                            )
                        })}
                                
                    </div>   
                }
                </div>
            );
        }
    }
export default App;
Editor is loading...
Leave a Comment