import React, { Component } from "react";
import classes from "./App.css";
import Persons from "../components/Persons/Persons";
import Cockpit from "../components/Cockpit/Cockpit";
class App extends Component {
state = {
persons: [
{ id: "rew1", name: "Max", age: 28 },
{ id: "ewe", name: "Manu", age: 29 },
{ id: "qe", name: "Raq", age: 26 },
{ id: "123", name: "Raq", age: 26 }
],
otherState: "some other",
username: "suDima",
showPersons: false,
home_string: "init",
length_string: "Text too short"
};
deletePersonalHandler = personIndex => {
//const persons = this.state.persons.slice();
const persons = [...this.state.persons];
persons.splice(personIndex, 1);
this.setState({ persons: persons });
};
nameChangedHandler = (event, id) => {
const personIndex = this.state.persons.findIndex(p => {
return p.id === id;
});
const person = {
...this.state.persons[personIndex]
};
person.name = event.target.value;
const persons = [...this.state.persons];
persons[personIndex] = person;
this.setState({
persons: persons
});
};
togglePersonsHandler = () => {
const doesShow = this.state.showPersons;
this.setState({
showPersons: !doesShow
});
};
render() {
let persons = null;
if (this.state.showPersons) {
persons = (
<Persons
persons={this.state.persons}
clicked={this.deletePersonalHandler}
changed={this.nameChangedHandler}
/>
);
}
return (
<div className={classes.App}>
<Cockpit
showPersons={this.state.showPersons}
persons={this.state.persons}
clicked={this.togglePersonsHandler}
/>
{persons}
</div>
);
}
}
export default App;
import React from "react";
import Person from "./Person/Person";
const persons = props =>
props.persons.map((person, index) => {
return (
<Person
name={person.name}
age={person.age}
click={() => props.clicked(index)}
key={person.id}
changed={event => props.changed(event, person.id)}
>
{index}
</Person>
);
});
export default persons;
import React from "react";
import classes from "./Person.css";
const person = props => {
return (
<div className={classes.Person}>
<p onClick={props.click}>
I'm a <b>{props.name}</b> and am {props.age} years old !
</p>
<p>{props.children}</p>
<input type="text" onChange={props.changed} value={props.name} />
</div>
);
};
export default person;
import React from "react";
import classes from "./Cockpit.css";
const cockpit = props => {
const assigned_classes = [];
let btnClass = [classes.Button];
if (props.showPersons) {
btnClass.push(classes.Red);
}
if (props.persons.length <= 2) {
assigned_classes.push(classes.red);
}
if (props.persons.length <= 1) {
assigned_classes.push(classes.bold);
}
return (
<div className={classes.Cockpit}>
<h1>Hi, I'm a React App</h1>
<p className={assigned_classes.join(" ")}>This is working</p>
<button
className={btnClass.join(" ")}
alt={props.showPersons.toString()}
onClick={props.clicked}
>
Toggle Persons
</button>
</div>
);
};
export default cockpit;