import * as React from "bloatless-react"; import BoardViewModel from "../../ViewModel/Pages/boardViewModel"; import { FilteredList } from "../Components/filteredList"; import { PropertyValueList } from "../Components/propertyValueList"; import { TaskCategoryBulkChangeViewModel } from "../../ViewModel/Utility/taskPropertyBulkChangeViewModel"; import TaskViewModel from "../../ViewModel/Pages/taskViewModel"; import { TaskViewModelToEntry } from "../Components/taskEntry"; import { allowDrop } from "../utility"; import { localeCompare } from "../../Model/Utility/utility"; import { translations } from "../translations"; export function BoardKanbanPage(boardViewModel: BoardViewModel) { return PropertyValueList( "category", (taskViewModel: TaskViewModel) => taskViewModel.task, boardViewModel.taskViewModels, (categories: React.ListState) => { const sortedCategories: React.State = React.createProxyState( [categories], () => [...categories.value.values()].sort(localeCompare) ); const categoryNameConverter: React.StateItemConverter = ( categoryName: string ) => { const index: React.State = React.createProxyState( [sortedCategories], () => sortedCategories.value.indexOf(categoryName) ); return KanbanBoard(categoryName, index, boardViewModel); }; return (
); } ); } function KanbanBoard( categoryName: string, index: React.State, boardViewModel: BoardViewModel ) { return FilteredList( { category: categoryName }, (taskViewModel: TaskViewModel) => taskViewModel.task, boardViewModel.filteredTaskViewModels, (taskViewModels: React.ListState) => { const viewModel: TaskCategoryBulkChangeViewModel = new TaskCategoryBulkChangeViewModel(taskViewModels, categoryName); function drop() { boardViewModel.handleDropWithinBoard(categoryName); } const view = (

); index.subscribe((newIndex) => { view.style.order = newIndex; }) return view; } ); }