diff --git a/dist/index.js b/dist/index.js index 638300ea..b032f262 100644 --- a/dist/index.js +++ b/dist/index.js @@ -677,7 +677,11 @@ }; // boards createBoard = (name) => { - const boardInfoFileContent = _BoardsAndTasksModel.createBoardInfoFileContent(v4_default(), name, "standard" /* Standard */); + const boardInfoFileContent = _BoardsAndTasksModel.createBoardInfoFileContent( + v4_default(), + name, + "standard" /* Standard */ + ); return boardInfoFileContent; }; updateBoard = (boardInfoFileContent) => { @@ -715,11 +719,7 @@ }; //tasks createTask = (boardId) => { - const taskFileContent = _BoardsAndTasksModel.createTaskFileContent( - v4_default(), - "", - boardId - ); + const taskFileContent = _BoardsAndTasksModel.createTaskFileContent(v4_default(), "", boardId); return taskFileContent; }; updateTask = (taskFileContent) => { @@ -731,6 +731,7 @@ this.chatModel.sendMessage("", taskFileContent); }; storeTask = (taskFileContent) => { + console.log(taskFileContent); this.fileModel.storeFileContent(taskFileContent); const taskReferencePath = this.getTaskReferencePath( taskFileContent.boardId, @@ -761,11 +762,14 @@ }; deleteTask = (boardId, taskId) => { const taskFilePath = this.getTaskFilePath(taskId); + this.storageModel.removeRecursively(taskFilePath); + this.deleteTaskReference(boardId, taskId); + }; + deleteTaskReference = (boardId, taskId) => { const taskReferencePath = this.getTaskReferencePath( boardId, taskId ); - this.storageModel.removeRecursively(taskFilePath); this.storageModel.removeRecursively(taskReferencePath); }; // init @@ -1515,7 +1519,7 @@ // init constructor(coreViewModel, boardModel, boardViewModel, taskFileContent) { this.coreViewModel = coreViewModel; - this.boardModel = boardModel; + this.boardsAndTasksModel = boardModel; this.boardViewModel = boardViewModel; this.task = taskFileContent; this.loadAllData(); @@ -1523,7 +1527,7 @@ this.switchVersion(selectedVersionId); }); } - boardModel; + boardsAndTasksModel; boardViewModel; // data task; @@ -1541,10 +1545,11 @@ } // paths getFilePath = () => { - return this.boardModel.getTaskFilePath(this.task.fileId); + return this.boardsAndTasksModel.getTaskFilePath(this.task.fileId); }; // state index = new State(0); + boardId = new State(""); name = new State(""); description = new State(""); category = new State(""); @@ -1563,6 +1568,10 @@ if (status != void 0) this.status.value = status; this.save(); }; + setBoardId = (boardId) => { + this.boardId.value = boardId; + this.save(); + }; // view open = () => { this.boardViewModel.selectTask(this); @@ -1585,24 +1594,25 @@ this.name.value, this.task.boardId ); + newTaskFileContent.boardId = this.boardId.value; newTaskFileContent.description = this.description.value; newTaskFileContent.status = this.status.value; newTaskFileContent.category = this.category.value; newTaskFileContent.priority = this.priority.value; newTaskFileContent.date = this.date.value; newTaskFileContent.time = this.time.value; - this.boardModel.updateTaskAndSend(newTaskFileContent); + this.boardsAndTasksModel.updateTaskAndSend(newTaskFileContent); this.boardViewModel.showTaskInList(newTaskFileContent); this.boardViewModel.updateTaskIndices(); }; deleteTask = () => { this.close(); - this.boardModel.deleteTask(this.task.boardId, this.task.fileId); + this.boardsAndTasksModel.deleteTask(this.task.boardId, this.task.fileId); this.boardViewModel.removeTaskFromList(this.task.fileId); }; // load loadVersionIds = () => { - const versionIds = this.boardModel.listTaskVersionIds( + const versionIds = this.boardsAndTasksModel.listTaskVersionIds( this.task.fileId ); const sortedVersionIds = versionIds.sort(localeCompare).reverse(); @@ -1610,7 +1620,7 @@ this.versionIds.add(...sortedVersionIds); }; switchVersion = (versionId) => { - const taskFileContent = this.boardModel.getSpecificTaskFileContent(this.task.fileId, versionId); + const taskFileContent = this.boardsAndTasksModel.getSpecificTaskFileContent(this.task.fileId, versionId); if (taskFileContent == null) return; this.task = taskFileContent; this.loadTaskData(); @@ -1620,6 +1630,7 @@ this.loadVersionIds(); }; loadTaskData = () => { + this.boardId.value = this.task.boardId; this.name.value = this.task.name; this.description.value = this.task.description ?? ""; this.category.value = this.task.category ?? ""; @@ -1637,7 +1648,7 @@ constructor(coreViewModel, storageModel2, boardModel, taskPageViewModel, boardInfo) { this.coreViewModel = coreViewModel; this.storageModel = storageModel2; - this.boardModel = boardModel; + this.boardsAndTasksModel = boardModel; this.taskPageViewModel = taskPageViewModel; this.boardInfo = boardInfo; this.loadListRelevantData(); @@ -1661,7 +1672,7 @@ ); } storageModel; - boardModel; + boardsAndTasksModel; taskPageViewModel; // data boardInfo; @@ -1706,12 +1717,10 @@ }; // methods createTask = () => { - const taskFileContent = this.boardModel.createTask( - this.boardInfo.fileId - ); + const taskFileContent = this.boardsAndTasksModel.createTask(this.boardInfo.fileId); const taskViewModel = new TaskViewModel( this.coreViewModel, - this.boardModel, + this.boardsAndTasksModel, this, taskFileContent ); @@ -1722,11 +1731,16 @@ this.taskViewModels.remove(taskId); this.updateIndex(); }; - handleDrop = (category, status) => { + handleDropWithinBoard = (category, status) => { const draggedObject = this.coreViewModel.draggedObject.value; if (draggedObject instanceof TaskViewModel == false) return; draggedObject.setCategoryAndStatus(category, status); }; + handleDropBetweenBoards = () => { + const draggedObject = this.coreViewModel.draggedObject.value; + if (draggedObject instanceof TaskViewModel == false) return; + draggedObject.setBoardId(this.boardInfo.fileId); + }; // storage storeLastUsedView = () => { const path = this.getLastUsedBoardPath(); @@ -1741,9 +1755,17 @@ }; // view showTaskInList = (taskFileContent) => { + if (taskFileContent.boardId != this.boardInfo.fileId) { + this.boardsAndTasksModel.deleteTaskReference( + this.boardInfo.fileId, + taskFileContent.fileId + ); + this.removeTaskFromList(taskFileContent.fileId); + return; + } const taskViewModel = new TaskViewModel( this.coreViewModel, - this.boardModel, + this.boardsAndTasksModel, this, taskFileContent ); @@ -1803,16 +1825,16 @@ this.color.value = this.boardInfo.color; }; loadTasks = () => { - const taskIds = this.boardModel.listTaskIds( + const taskIds = this.boardsAndTasksModel.listTaskIds( this.boardInfo.fileId ); for (const taskId of taskIds) { if (this.taskViewModels.value.has(taskId)) return; - const taskFileContent = this.boardModel.getLatestTaskFileContent(taskId); + const taskFileContent = this.boardsAndTasksModel.getLatestTaskFileContent(taskId); if (taskFileContent == null) continue; const taskViewModel = new TaskViewModel( this.coreViewModel, - this.boardModel, + this.boardsAndTasksModel, this, taskFileContent ); @@ -2686,7 +2708,7 @@ (taskViewModels) => { const viewModel = new TaskCategoryBulkChangeViewModel(taskViewModels, categoryName); function drop() { - boardViewModel.handleDrop(categoryName); + boardViewModel.handleDropWithinBoard(categoryName); } return /* @__PURE__ */ createElement("div", { class: "flex-column flex-no", "on:dragover": allowDrop, "on:drop": drop }, /* @__PURE__ */ createElement("div", { class: "flex-row width-input" }, /* @__PURE__ */ createElement( "input", @@ -2852,7 +2874,7 @@ }); }); function drop() { - boardViewModel.handleDrop(categoryName, statusName); + boardViewModel.handleDropWithinBoard(categoryName, statusName); } return /* @__PURE__ */ createElement( "div", @@ -3103,7 +3125,9 @@ "set:color": boardViewModel.color, class: "tile colored-tile", "toggle:selected": boardViewModel.isSelected, - "on:click": boardViewModel.select + "on:click": boardViewModel.select, + "on:dragover": allowDrop, + "on:drop": boardViewModel.handleDropBetweenBoards }, /* @__PURE__ */ createElement("span", { class: "shadow", "subscribe:innerText": boardViewModel.name }), /* @__PURE__ */ createElement("b", { "subscribe:innerText": boardViewModel.name }) diff --git a/src/Model/Files/boardsAndTasksModel.ts b/src/Model/Files/boardsAndTasksModel.ts index 0f4f783d..f92db82d 100644 --- a/src/Model/Files/boardsAndTasksModel.ts +++ b/src/Model/Files/boardsAndTasksModel.ts @@ -83,7 +83,11 @@ export default class BoardsAndTasksModel { // boards createBoard = (name: string): BoardInfoFileContent => { const boardInfoFileContent: BoardInfoFileContent = - BoardsAndTasksModel.createBoardInfoFileContent(v4(), name, Color.Standard); + BoardsAndTasksModel.createBoardInfoFileContent( + v4(), + name, + Color.Standard + ); return boardInfoFileContent; }; @@ -133,11 +137,8 @@ export default class BoardsAndTasksModel { //tasks createTask = (boardId: string): TaskFileContent => { - const taskFileContent: TaskFileContent = BoardsAndTasksModel.createTaskFileContent( - v4(), - "", - boardId - ); + const taskFileContent: TaskFileContent = + BoardsAndTasksModel.createTaskFileContent(v4(), "", boardId); return taskFileContent; }; @@ -152,6 +153,8 @@ export default class BoardsAndTasksModel { }; storeTask = (taskFileContent: TaskFileContent): void => { + console.log(taskFileContent); + // store info this.fileModel.storeFileContent(taskFileContent); @@ -195,12 +198,16 @@ export default class BoardsAndTasksModel { deleteTask = (boardId: string, taskId: string): void => { const taskFilePath: string[] = this.getTaskFilePath(taskId); + this.storageModel.removeRecursively(taskFilePath); + + this.deleteTaskReference(boardId, taskId); + }; + + deleteTaskReference = (boardId: string, taskId: string): void => { const taskReferencePath: string[] = this.getTaskReferencePath( boardId, taskId ); - - this.storageModel.removeRecursively(taskFilePath); this.storageModel.removeRecursively(taskReferencePath); }; diff --git a/src/View/ChatPages/boardKanbanPage.tsx b/src/View/ChatPages/boardKanbanPage.tsx index e7ab9d5b..dde7dcf1 100644 --- a/src/View/ChatPages/boardKanbanPage.tsx +++ b/src/View/ChatPages/boardKanbanPage.tsx @@ -41,7 +41,7 @@ function KanbanBoard(categoryName: string, boardViewModel: BoardViewModel) { new TaskCategoryBulkChangeViewModel(taskViewModels, categoryName); function drop() { - boardViewModel.handleDrop(categoryName); + boardViewModel.handleDropWithinBoard(categoryName); } return ( diff --git a/src/View/ChatPages/boardStatusGridPage.tsx b/src/View/ChatPages/boardStatusGridPage.tsx index 515d087e..e547f30e 100644 --- a/src/View/ChatPages/boardStatusGridPage.tsx +++ b/src/View/ChatPages/boardStatusGridPage.tsx @@ -177,7 +177,7 @@ function CategoryStatusColumn( }); function drop() { - boardViewModel.handleDrop(categoryName, statusName); + boardViewModel.handleDropWithinBoard(categoryName, statusName); } return ( diff --git a/src/View/Components/boardEntry.tsx b/src/View/Components/boardEntry.tsx index 7e87f0f6..6cc03387 100644 --- a/src/View/Components/boardEntry.tsx +++ b/src/View/Components/boardEntry.tsx @@ -1,15 +1,17 @@ import * as React from "bloatless-react"; import BoardViewModel from "../../ViewModel/Pages/boardViewModel"; +import { allowDrop } from "../utility"; export function BoardEntry(boardViewModel: BoardViewModel) { const view = (