Me learning react like an absolute chungus
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.0KB

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