Skip to content

Commit 24c60c2

Browse files
author
=
committed
todoliste
1 parent 418e5d3 commit 24c60c2

22 files changed

+12527
-0
lines changed

prototypes/app1/src/App.js

+2
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@ function App() {
1515
}
1616

1717
export default App;
18+
19+

prototypes/todolist/.gitignore

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# dependencies
4+
/node_modules
5+
/.pnp
6+
.pnp.js
7+
8+
# testing
9+
/coverage
10+
11+
# production
12+
/build
13+
14+
# misc
15+
.DS_Store
16+
.env.local
17+
.env.development.local
18+
.env.test.local
19+
.env.production.local
20+
21+
npm-debug.log*
22+
yarn-debug.log*
23+
yarn-error.log*
+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"name": "Chrome",
6+
"type": "chrome",
7+
"request": "launch",
8+
"url": "http://localhost:3000",
9+
"webRoot": "${workspaceFolder}/src",
10+
"sourceMapPathOverrides": {
11+
"webpack:///src/*": "${webRoot}/*"
12+
}
13+
}
14+
]
15+
}

prototypes/todolist/README.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Bonjour Create React App
2+
3+
## Questions
4+
5+
- React.StrictMode
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Create React App
2+
3+
````shell
4+
npx create-react-app my-app
5+
cd my-app
6+
npm start
7+
````
8+
9+
## Référence
10+
11+
- https://create-react-app.dev/

prototypes/todolist/package-lock.json

+12,163
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

prototypes/todolist/package.json

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"name": "app1",
3+
"version": "0.1.0",
4+
"private": true,
5+
"dependencies": {
6+
"@testing-library/jest-dom": "^5.16.5",
7+
"@testing-library/react": "^13.4.0",
8+
"@testing-library/user-event": "^13.5.0",
9+
"react": "^18.2.0",
10+
"react-dom": "^18.2.0",
11+
"react-scripts": "5.0.1",
12+
"web-vitals": "^2.1.4"
13+
},
14+
"scripts": {
15+
"start": "react-scripts start",
16+
"build": "react-scripts build",
17+
"test": "react-scripts test",
18+
"eject": "react-scripts eject"
19+
},
20+
"eslintConfig": {
21+
"extends": [
22+
"react-app",
23+
"react-app/jest"
24+
]
25+
},
26+
"browserslist": {
27+
"production": [
28+
">0.2%",
29+
"not dead",
30+
"not op_mini all"
31+
],
32+
"development": [
33+
"last 1 chrome version",
34+
"last 1 firefox version",
35+
"last 1 safari version"
36+
]
37+
}
38+
}
3.78 KB
Binary file not shown.

prototypes/todolist/public/index.html

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
6+
<meta name="viewport" content="width=device-width, initial-scale=1" />
7+
<title>Bonjour - React</title>
8+
</head>
9+
<body>
10+
<div id="root"></div>
11+
</body>
12+
</html>
5.22 KB
Loading
9.44 KB
Loading
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"short_name": "React App",
3+
"name": "Create React App Sample",
4+
"icons": [
5+
{
6+
"src": "favicon.ico",
7+
"sizes": "64x64 32x32 24x24 16x16",
8+
"type": "image/x-icon"
9+
},
10+
{
11+
"src": "logo192.png",
12+
"type": "image/png",
13+
"sizes": "192x192"
14+
},
15+
{
16+
"src": "logo512.png",
17+
"type": "image/png",
18+
"sizes": "512x512"
19+
}
20+
],
21+
"start_url": ".",
22+
"display": "standalone",
23+
"theme_color": "#000000",
24+
"background_color": "#ffffff"
25+
}

prototypes/todolist/public/robots.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# https://www.robotstxt.org/robotstxt.html
2+
User-agent: *
3+
Disallow:

prototypes/todolist/src/App.css

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
.App {
2+
text-align: center;
3+
}
4+
5+
.App-logo {
6+
height: 40vmin;
7+
pointer-events: none;
8+
}
9+
10+
@media (prefers-reduced-motion: no-preference) {
11+
.App-logo {
12+
animation: App-logo-spin infinite 20s linear;
13+
}
14+
}
15+
16+
.App-header {
17+
background-color: #282c34;
18+
min-height: 100vh;
19+
display: flex;
20+
flex-direction: column;
21+
align-items: center;
22+
justify-content: center;
23+
font-size: calc(10px + 2vmin);
24+
color: white;
25+
}
26+
27+
.App-link {
28+
color: #61dafb;
29+
}
30+
31+
@keyframes App-logo-spin {
32+
from {
33+
transform: rotate(0deg);
34+
}
35+
to {
36+
transform: rotate(360deg);
37+
}
38+
}

prototypes/todolist/src/App.js

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom/client';
3+
4+
import logo from './logo.svg';
5+
import './Styles.css';
6+
7+
8+
class Task extends React.Component {
9+
constructor(props) {
10+
super(props)
11+
}
12+
13+
render() {
14+
let class_name = 'task'
15+
class_name += this.props.done ? ' task-success' : ' task-info';
16+
17+
return (
18+
<div className={class_name} onClick={this.props.onClickTask}>
19+
<span>{this.props.value}</span>
20+
<i className="close" onClick={this.props.onClickClose}>&times;</i>
21+
</div>
22+
)
23+
}
24+
}
25+
26+
27+
28+
class App extends React.Component {
29+
constructor(props) {
30+
super(props)
31+
32+
this.state = {
33+
tasksArray: [
34+
{value: 'Tâche 1', done: true},
35+
{value: 'Tâche 2', done: false},
36+
{value: 'Tâche 3', done: false}
37+
],
38+
value: ''
39+
}
40+
}
41+
42+
addTask(e) {
43+
44+
45+
if ( document.getElementById("addInput").value.length != 0) {
46+
this.state.tasksArray.push({
47+
value: document.getElementById("addInput").value,
48+
done: false
49+
})
50+
51+
52+
this.setState(state => ({
53+
tasksArray: state.tasksArray
54+
}));
55+
56+
}
57+
58+
e.preventDefault()
59+
}
60+
61+
removeTask(i) {
62+
this.state.tasksArray.splice(i, 1)
63+
this.setState({
64+
tasksArray: this.state.tasksArray
65+
})
66+
}
67+
68+
markDone(i) {
69+
let tasksArray = this.state.tasksArray
70+
let task = this.state.tasksArray[i]
71+
tasksArray.splice(i, 1)
72+
task.done = !task.done
73+
74+
task.done ? tasksArray.push(task) : tasksArray.unshift(task)
75+
76+
77+
this.setState({
78+
tasksArray: tasksArray
79+
})
80+
81+
82+
}
83+
84+
onChangeInput(e) {
85+
// this.setState({value: e.target.value})
86+
}
87+
88+
render() {
89+
let tasksArray = this.state.tasksArray.map((task, i) => {
90+
return (
91+
<Task
92+
key={i}
93+
value={task.value}
94+
done={task.done}
95+
onClickClose={this.removeTask.bind(this, i)}
96+
onClickTask={this.markDone.bind(this, i)}
97+
/>
98+
)
99+
})
100+
101+
return (
102+
<div className="container">
103+
<div className="row">
104+
<div className="col-sm-6 col-sm-offset-3">
105+
<h1> Tâches à faire</h1>
106+
<form
107+
id="form-add"
108+
className="form-horizontal"
109+
onSubmit={this.addTask.bind(this)}>
110+
<div className="input-group">
111+
<input type="text" id="addInput" className="form-control" onChange={this.onChangeInput.bind(this)} placeholder="Description de la tâche..." />
112+
<div className="input-group-btn">
113+
<button type="submit" className="btn btn-default">
114+
<span className="glyphicon glyphicon-plus-sign"></span>
115+
</button>
116+
</div>
117+
</div>
118+
</form>
119+
120+
{tasksArray}
121+
122+
</div>
123+
</div>
124+
</div>
125+
)
126+
}
127+
}
128+
129+
130+
export default App;
131+
132+

prototypes/todolist/src/App.test.js

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { render, screen } from '@testing-library/react';
2+
import App from './App';
3+
4+
test('renders learn react link', () => {
5+
render(<App />);
6+
const linkElement = screen.getByText(/learn react/i);
7+
expect(linkElement).toBeInTheDocument();
8+
});

prototypes/todolist/src/Styles.css

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
h1{
2+
color: brown;
3+
}

prototypes/todolist/src/index.css

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
body {
2+
margin: 0;
3+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4+
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5+
sans-serif;
6+
-webkit-font-smoothing: antialiased;
7+
-moz-osx-font-smoothing: grayscale;
8+
}
9+
10+
code {
11+
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12+
monospace;
13+
}

prototypes/todolist/src/index.js

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom/client';
3+
import './index.css';
4+
import App from './App';
5+
import reportWebVitals from './reportWebVitals';
6+
7+
const root = ReactDOM.createRoot(document.getElementById('root'));
8+
root.render(
9+
<React.StrictMode>
10+
<App />
11+
</React.StrictMode>
12+
);
13+
14+
// If you want to start measuring performance in your app, pass a function
15+
// to log results (for example: reportWebVitals(console.log))
16+
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17+
reportWebVitals();

prototypes/todolist/src/logo.svg

+1
Loading
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const reportWebVitals = onPerfEntry => {
2+
if (onPerfEntry && onPerfEntry instanceof Function) {
3+
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4+
getCLS(onPerfEntry);
5+
getFID(onPerfEntry);
6+
getFCP(onPerfEntry);
7+
getLCP(onPerfEntry);
8+
getTTFB(onPerfEntry);
9+
});
10+
}
11+
};
12+
13+
export default reportWebVitals;

prototypes/todolist/src/setupTests.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// jest-dom adds custom jest matchers for asserting on DOM nodes.
2+
// allows you to do things like:
3+
// expect(element).toHaveTextContent(/react/i)
4+
// learn more: https://github.com/testing-library/jest-dom
5+
import '@testing-library/jest-dom';

0 commit comments

Comments
 (0)