質問編集履歴

4

components/sideArea.jsの追加

2019/03/17 01:40

投稿

y_aka
y_aka

スコア11

test CHANGED
File without changes
test CHANGED
@@ -405,3 +405,229 @@
405
405
  }
406
406
 
407
407
  ```
408
+
409
+ components/sideArea.js
410
+
411
+
412
+
413
+ ```
414
+
415
+ import React from "react";
416
+
417
+ import ReactDOM from "react-dom";
418
+
419
+ import AddGroupDialog from "./addGroupDialog";
420
+
421
+ import EditGroupDialog from "./editGroupDialog"
422
+
423
+
424
+
425
+ export default class SideArea extends React.Component {
426
+
427
+ constructor(props) {
428
+
429
+ super(props);
430
+
431
+
432
+
433
+ this.state = {
434
+
435
+ showAddGroupDialog: false,
436
+
437
+ showEditGroupDialog: false,
438
+
439
+ selectedGroup: undefined
440
+
441
+ }
442
+
443
+ }
444
+
445
+
446
+
447
+ onClickGroup(event) {
448
+
449
+ let listItem = ReactDOM.findDOMNode(event.target);
450
+
451
+ let id = listItem.dataset.id;
452
+
453
+ this.props.onSelect(id);
454
+
455
+ }
456
+
457
+
458
+
459
+ onClickAddGroup(event) {
460
+
461
+ this.setState({ showAddGroupDialog: true });
462
+
463
+ }
464
+
465
+
466
+
467
+ onSaveAddGroupDialog(groupName) {
468
+
469
+ console.log("onSaveAddGroupDialog", groupName);
470
+
471
+ this.props.onAddGroup(groupName);
472
+
473
+ this.setState({ showAddGroupDialog: false });
474
+
475
+ }
476
+
477
+
478
+
479
+ onCancelAddGroupDialog() {
480
+
481
+ this.setState({ showAddGroupDialog: false });
482
+
483
+ }
484
+
485
+
486
+
487
+ onSaveEditGroupDialog(id, groupName) {
488
+
489
+ this.props.onEditGroup(id, groupName);
490
+
491
+ this.setState({ showEditGroupDialog: false });
492
+
493
+ }
494
+
495
+
496
+
497
+ onCancelEditGroupDialog() {
498
+
499
+ this.setState({ showEditGroupDialog: false });
500
+
501
+ }
502
+
503
+ onDeleteEditGroupDialog(id) {
504
+
505
+ this.props.onDeleteGroup(id);
506
+
507
+ this.setState({ showEditGroupDialog: false });
508
+
509
+ }
510
+
511
+
512
+
513
+ onClickGroupEdit(event) {
514
+
515
+ let editButton = ReactDOM.findDOMNode(event.target);
516
+
517
+ let id =editButton.dataset.id;
518
+
519
+ let selectedGroup;
520
+
521
+ for (let i = 0; i < this.props.groupList.length; i++) {
522
+
523
+ if (this.props.groupList[i].id === id) {
524
+
525
+ selectedGroup = this.props.groupList[i];
526
+
527
+ break;
528
+
529
+ }
530
+
531
+ }
532
+
533
+ this.setState({
534
+
535
+ showEditGroupDialog: true,
536
+
537
+ selectedGroup: selectedGroup
538
+
539
+ });
540
+
541
+ }
542
+
543
+
544
+
545
+ renderGroup() {
546
+
547
+ let groupListDom = [];
548
+
549
+ for (let i = 0; i < this.props.groupList.length; i++) {
550
+
551
+ let group = this.props.groupList[i];
552
+
553
+ let groupItem = (<li key={group.id}>
554
+
555
+ <span
556
+
557
+ data-id={group.id}
558
+
559
+ onClick={this.onClickGroup.bind(this)}>
560
+
561
+ {group.label}</span>
562
+
563
+ <button
564
+
565
+ data-id={group.id}
566
+
567
+ className="group-edit-button"
568
+
569
+ onClick={this.onClickGroupEdit.bind(this)}>編集</button>
570
+
571
+ </li>);
572
+
573
+ groupListDom.push(groupItem);
574
+
575
+ }
576
+
577
+ return groupListDom;
578
+
579
+ }
580
+
581
+
582
+
583
+ render() {
584
+
585
+ return (
586
+
587
+ <div className="side-area">
588
+
589
+ <ul className="group-list">
590
+
591
+ {this.renderGroup()}
592
+
593
+ </ul>
594
+
595
+ <div className="side-area-footer">
596
+
597
+ <button
598
+
599
+ className="add-group-button"
600
+
601
+ onClick={this.onClickAddGroup.bind(this)}>グループ新規作成</button>
602
+
603
+ </div>
604
+
605
+ <AddGroupDialog
606
+
607
+ show={this.state.showAddGroupDialog}
608
+
609
+ onSave={this.onSaveAddGroupDialog.bind(this)}
610
+
611
+ onCancel={this.onCancelAddGroupDialog.bind(this)} />
612
+
613
+ <EditGroupDialog
614
+
615
+ show={this.state.showEditGroupDialog}
616
+
617
+ group={this.state.selectedGroup}
618
+
619
+ onSave={this.onSaveEditGroupDialog.bind(this)}
620
+
621
+ onCancel={this.onCancelEditGroupDialog.bind(this)}
622
+
623
+ onDelete={this.onDeleteEditGroupDialog.bind(this)} />
624
+
625
+ </div>
626
+
627
+ )
628
+
629
+ }
630
+
631
+ }
632
+
633
+ ```

3

誤りがあったので修正しました。

2019/03/17 01:40

投稿

y_aka
y_aka

スコア11

test CHANGED
File without changes
test CHANGED
@@ -316,94 +316,56 @@
316
316
 
317
317
 
318
318
 
319
- components/addGroupDialog.js
319
+ containers\sideArea.js
320
-
320
+
321
- ```
321
+ ```
322
-
322
+
323
- import React from 'react';
323
+ import { connect } from "react-redux";
324
+
324
-
325
+ import { groupActions } from "../actions/groupActions";
325
-
326
-
326
+
327
- export default class AddGroupDialog extends React.Component {
327
+ import SideArea from "../components/sideArea";
328
-
329
- onCancel(event) {
328
+
330
-
331
- this.props.onCancel();
329
+
332
-
333
- }
330
+
334
-
335
-
336
-
337
- onSave(event) {
338
-
339
- let groupNameInput = this.refs.groupName;
340
-
341
- this.props.onSave(groupNameInput.value);
331
+ const mapStateToProps = (state) => {
342
-
343
- }
332
+
344
-
345
-
346
-
347
- render() {
348
-
349
- if (this.props.show) {
350
-
351
- return (
333
+ return {
352
-
353
- <div className="modal-layer">
334
+
354
-
355
- <div className="dialog">
356
-
357
- <div className="dialog-header">グループ新規作成</div>
358
-
359
- <div className="dialog-content">
360
-
361
- グループ名:
362
-
363
- <input
364
-
365
- ref="groupName"
366
-
367
- type="text"
335
+ groupList: state.groupList
368
-
369
- name="groupName"
370
-
371
- className="group-text-input" />
372
-
373
- </div>
374
-
375
- <div className="dialog-footer">
376
-
377
- <button
378
-
379
- className="cancel-button"
380
-
381
- onClick={this.onCancel.bind(this)}>キャンセル</button>
382
-
383
- <button
384
-
385
- className="save-button"
386
-
387
- onClick={this.onSave.bind(this)}>保存</button>
388
-
389
- </div>
390
-
391
- </div>
392
-
393
- </div>
394
-
395
- )
396
-
397
- } else {
398
-
399
- return (<div></div>);
400
-
401
- }
402
336
 
403
337
  }
404
338
 
405
339
  }
406
340
 
341
+
342
+
343
+
344
+
345
+ const mapDispatchToProps = (dispatch) => {
346
+
347
+ return {
348
+
349
+ onAddGroup: (data) => {
350
+
351
+ dispatch(groupActions.addGroup(data));
352
+
353
+ }
354
+
355
+ }
356
+
357
+ }
358
+
359
+
360
+
361
+ export default connect(
362
+
363
+ mapStateToProps,
364
+
365
+ mapDispatchToProps
366
+
367
+ )(SideArea)
368
+
407
369
  ```
408
370
 
409
371
 

2

components/addGroupDialog.js components/addGroupDialog.js を追加しました。

2019/03/17 01:13

投稿

y_aka
y_aka

スコア11

test CHANGED
File without changes
test CHANGED
@@ -307,3 +307,139 @@
307
307
  export default reducer;
308
308
 
309
309
  ```
310
+
311
+
312
+
313
+ 追記
314
+
315
+ -------------------------------
316
+
317
+
318
+
319
+ components/addGroupDialog.js
320
+
321
+ ```
322
+
323
+ import React from 'react';
324
+
325
+
326
+
327
+ export default class AddGroupDialog extends React.Component {
328
+
329
+ onCancel(event) {
330
+
331
+ this.props.onCancel();
332
+
333
+ }
334
+
335
+
336
+
337
+ onSave(event) {
338
+
339
+ let groupNameInput = this.refs.groupName;
340
+
341
+ this.props.onSave(groupNameInput.value);
342
+
343
+ }
344
+
345
+
346
+
347
+ render() {
348
+
349
+ if (this.props.show) {
350
+
351
+ return (
352
+
353
+ <div className="modal-layer">
354
+
355
+ <div className="dialog">
356
+
357
+ <div className="dialog-header">グループ新規作成</div>
358
+
359
+ <div className="dialog-content">
360
+
361
+ グループ名:
362
+
363
+ <input
364
+
365
+ ref="groupName"
366
+
367
+ type="text"
368
+
369
+ name="groupName"
370
+
371
+ className="group-text-input" />
372
+
373
+ </div>
374
+
375
+ <div className="dialog-footer">
376
+
377
+ <button
378
+
379
+ className="cancel-button"
380
+
381
+ onClick={this.onCancel.bind(this)}>キャンセル</button>
382
+
383
+ <button
384
+
385
+ className="save-button"
386
+
387
+ onClick={this.onSave.bind(this)}>保存</button>
388
+
389
+ </div>
390
+
391
+ </div>
392
+
393
+ </div>
394
+
395
+ )
396
+
397
+ } else {
398
+
399
+ return (<div></div>);
400
+
401
+ }
402
+
403
+ }
404
+
405
+ }
406
+
407
+ ```
408
+
409
+
410
+
411
+ actions/groupAction.js
412
+
413
+
414
+
415
+ ```
416
+
417
+ export const groupActionNames = {
418
+
419
+ ADD_GROUP: "ADD_GROUP"
420
+
421
+ }
422
+
423
+
424
+
425
+ export const groupActions = {
426
+
427
+ addGroup: (data) => {
428
+
429
+ return {
430
+
431
+ type: groupActionNames.ADD_GROUP,
432
+
433
+ payload: {
434
+
435
+ data: data
436
+
437
+ }
438
+
439
+ }
440
+
441
+ }
442
+
443
+ }
444
+
445
+ ```

1

誤字の修正

2019/03/17 01:05

投稿

y_aka
y_aka

スコア11

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  表題の通りTodoのグループを追加したいのですが
4
4
 
5
- 下記エラーが発生します。reduxdevToolsでstateにはgroupListには
5
+ 下記エラーが発生します。reduxdevToolsでstategroupListには
6
6
 
7
7
  `{id: "group-2", label: "グループ2"}`
8
8