Skip to content

Commit 2ce8a64

Browse files
committed
add some feautures
1 parent df2c056 commit 2ce8a64

File tree

8 files changed

+75
-40
lines changed

8 files changed

+75
-40
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-tracker",
3-
"version": "1.0.19",
3+
"version": "1.0.20",
44
"private": true,
55
"dependencies": {
66
"@fortawesome/fontawesome-svg-core": "^1.2.18",

src/App.js

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,17 @@ export default class App extends React.Component {
2323
try {
2424
taskList = JSON.parse(localStorage.getItem('TASKS'));
2525
} catch {
26-
console.log('Error localstorage upload data');
26+
console.error('Error localstorage upload data');
2727
}
2828
this.setState({ taskList: taskList !== null ? taskList : [] });
2929
}
3030

3131
handleSaveFormData = data => {
32-
let { taskList } = this.state;
33-
if (this.state.formSate === FORM_ADD) {
34-
taskList.push(data);
32+
let { taskList, formSate, taskForEdit } = this.state;
33+
if (formSate === FORM_ADD) {
34+
taskList = taskList.concat(data);
3535
} else {
36-
taskList = taskList.map(item => {
37-
if (item.id === this.state.taskForEdit.id) {
38-
return data;
39-
}
40-
return item;
41-
});
36+
taskList = taskList.map(item => (item.id === taskForEdit.id ? data : item));
4237
}
4338
this.setState({
4439
taskList,
@@ -54,15 +49,21 @@ export default class App extends React.Component {
5449
taskForEdit: null,
5550
formSate: FORM_ADD
5651
});
57-
}
52+
};
5853

5954
handleEditTask = (e, taskId) => {
6055
const { taskList } = this.state;
6156
const taskForEdit = taskList.find(item => item.id === taskId);
62-
this.setState({
63-
taskForEdit,
64-
formSate: FORM_EDIT
65-
});
57+
if (taskForEdit === this.state.taskForEdit || this.state.formSate === FORM_EDIT) {
58+
this.handleResetData();
59+
return false;
60+
}
61+
if (this.state.formSate === FORM_ADD) {
62+
this.setState({
63+
taskForEdit,
64+
formSate: FORM_EDIT
65+
});
66+
}
6667
};
6768

6869
handleClearList = () => {

src/components/form/date.jsx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import React from 'react';
2+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3+
import { faCalendar } from '@fortawesome/free-solid-svg-icons';
4+
import PropTypes from 'prop-types';
5+
6+
const DateInput = (props) => {
7+
const { label, placeholder, mandatory = false, helper, err } = props;
8+
const handleView = () => console.log('x')
9+
const mandatoryStr = mandatory && <span className="text-muted">*</span>;
10+
return (
11+
<div className="form-group">
12+
<label>
13+
{label}
14+
{mandatoryStr}
15+
</label>
16+
<div className="input-group">
17+
<div className="input-group-prepend" onClick={handleView}>
18+
<span className="input-group-text">
19+
<FontAwesomeIcon icon={faCalendar} />
20+
</span>
21+
</div>
22+
<input
23+
readOnly
24+
type="text"
25+
className={'form-control'}
26+
placeholder={placeholder || label}
27+
/>
28+
</div>
29+
<small className={`${err && 'text-danger'} form-text text-muted`}>
30+
{helper || 'Это поле обязательное для заполнения'}
31+
</small>
32+
</div>
33+
)
34+
}
35+
36+
export default DateInput;
37+
38+
DateInput.propTypes = {
39+
label: PropTypes.string.isRequired,
40+
placeholder: PropTypes.string,
41+
manadatory: PropTypes.bool,
42+
helper: PropTypes.string,
43+
err: PropTypes.bool,
44+
}

src/components/form/index.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ import TextInput from './input_text';
22
import TextArea from './textarea';
33
import SelectInput from './input_select';
44
import CheckboxInput from './input_checkbox';
5+
import DateInput from './date';
56

67
export {
78
TextInput,
89
TextArea,
910
SelectInput,
10-
CheckboxInput
11+
CheckboxInput,
12+
DateInput
1113
}

src/components/main_form/index.jsx

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import React from 'react';
2-
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3-
import { faCalendar } from '@fortawesome/free-solid-svg-icons';
42
import PropTypes from 'prop-types';
53

64
import { Card } from '../card';
7-
import { TextInput, TextArea, SelectInput, CheckboxInput } from '../form';
5+
import { TextInput, TextArea, SelectInput, CheckboxInput, DateInput } from '../form';
86
import { TASK_OPTIONS, FORM_ADD, TODO } from '../../lib/const';
97

108
export default class MainForm extends React.Component {
@@ -93,24 +91,11 @@ export default class MainForm extends React.Component {
9391
rows={4}
9492
/>
9593

96-
<div className="form-group">
97-
<label>Task date<span className="text-muted">*</span></label>
98-
<div className="input-group">
99-
<div className="input-group-prepend">
100-
<span className="input-group-text">
101-
<FontAwesomeIcon icon={faCalendar} />
102-
</span>
103-
</div>
104-
<input
105-
type="text"
106-
className={'form-control'}
107-
placeholder="Date"
108-
/>
109-
</div>
110-
<small className="form-text text-muted">
111-
Это поле обязательное для заполнения
112-
</small>
113-
</div>
94+
<DateInput
95+
label='Task date'
96+
placeholder='Date'
97+
mandatory
98+
/>
11499

115100
<SelectInput
116101
value={this.state.data.taskStatus || TODO}

src/components/main_list/index.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,17 @@ export default class MainList extends React.Component {
6161
}
6262

6363
renderOneTask = (item) => {
64+
const isActive = (this.props.taskForEdit && this.props.taskForEdit.id === item.id) ? 'active' : '';
6465
return (
65-
<li key={item.id} className="list-group-item" style={{ position: "relative" }}>
66+
<li key={item.id} className={`list-group-item ${isActive}`} style={{ position: "relative" }}>
6667
{
6768
item.taskUrgent && (<FontAwesomeIcon icon={faExclamationTriangle} />)
6869
}
6970
<a
7071
href={item.id}
7172
onClick={this.handleViewTask}
7273
data-id={item.id}
74+
style={{ color: 'black' }}
7375
>
7476
{item.taskName}
7577
</a>

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import 'bootstrap/dist/css/bootstrap.min.css';
21
import React from 'react';
32
import ReactDOM from 'react-dom';
3+
import 'bootstrap/dist/css/bootstrap.min.css';
44

55
import './micalendar.css';
66
import App from './App';

src/screens/main.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const MainTab = (props) => {
2020
onTaskEdit={props.onTaskEdit}
2121
onTaskDelete={props.onTaskDelete}
2222
onListClear={props.onListClear}
23+
taskForEdit={props.taskForEdit}
2324
data={props.taskList}
2425
/>
2526
</div>

0 commit comments

Comments
 (0)