Me learning react like an absolute chungus
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

117 lines
3.1KB

  1. import React from "react";
  2. import KBColumn from "./components/KBColumn";
  3. import "./App.css";
  4. import Header from "./components/Header";
  5. import Column from "./types/Column";
  6. import TaskPassback from "./types/TaskPassback";
  7. import ColumnPassback from "./types/ColumnPassback";
  8. import initState from "./state_examples/kbstate";
  9. type State = {
  10. columns: Column[];
  11. columnIterator: number;
  12. taskIterator: number;
  13. };
  14. class App extends React.Component<{}, State> {
  15. constructor(props: any) {
  16. super(props);
  17. this.deleteColumn = this.deleteColumn.bind(this);
  18. this.addColumn = this.addColumn.bind(this);
  19. this.addTask = this.addTask.bind(this);
  20. this.state = {
  21. taskIterator: initState.taskIterator,
  22. columnIterator: initState.columnIterator,
  23. columns: initState.columns as Column[],
  24. };
  25. }
  26. deleteColumn(id: number) {
  27. const { columns } = { ...this.state };
  28. const filteredColumns = columns.filter((column) => column.id !== id);
  29. this.setState({ columns: filteredColumns });
  30. console.log(this.state.columns);
  31. }
  32. addColumn(columnInstance?: ColumnPassback) {
  33. let columnId = this.state.columnIterator;
  34. this.setState({ columnIterator: columnId + 1 });
  35. if (columnInstance !== undefined) {
  36. this.state.columns.push({
  37. id: columnId,
  38. name: columnInstance?.title,
  39. color: columnInstance?.color,
  40. tasks: [],
  41. });
  42. }
  43. }
  44. addTask(taskInstance?: TaskPassback) {
  45. console.log(taskInstance);
  46. if (this.state.columns.length > 0) {
  47. let taskId = this.state.taskIterator;
  48. let index = -2;
  49. if (taskInstance !== undefined) {
  50. this.setState({ taskIterator: taskId + 1 });
  51. console.log(this.state.columns);
  52. console.log(taskInstance.column);
  53. let indexObj = this.state.columns.find(
  54. (o) => o.id === taskInstance.column
  55. );
  56. if (indexObj) {
  57. index = this.state.columns.indexOf(indexObj);
  58. } else {
  59. alert("Clifford");
  60. }
  61. if (index >= 0) {
  62. this.state.columns[index].tasks.push({
  63. id: taskId,
  64. title: taskInstance.title,
  65. description: taskInstance.description,
  66. priority: taskInstance.priority,
  67. });
  68. } else {
  69. alert(
  70. "Error finding that column. Check it hasn't already been deleted!" +
  71. index
  72. );
  73. }
  74. } else {
  75. alert("Oh god, oh heck");
  76. }
  77. } else {
  78. alert("You might want to consider adding a column!");
  79. }
  80. console.log(this.state);
  81. }
  82. render() {
  83. return (
  84. <div className="App">
  85. <Header
  86. addColumn={this.addColumn}
  87. addTask={this.addTask}
  88. columns={this.state.columns}
  89. />
  90. <div className="panel">
  91. {this.state.columns.map((column, index) => (
  92. <KBColumn
  93. color={column.color}
  94. title={column.name}
  95. key={index}
  96. onDelete={this.deleteColumn}
  97. id={column.id}
  98. tasks={column.tasks}
  99. />
  100. ))}
  101. </div>
  102. </div>
  103. );
  104. }
  105. }
  106. export default App;