feat(tasks): implement V3 API for task management and enhance UI components

- Introduced `getTasksV3` and `refreshTaskProgress` methods in `TasksControllerV2` to optimize task retrieval and progress refreshing.
- Updated API routes to include new endpoints for V3 task management.
- Enhanced frontend components to utilize the new V3 API, improving performance by reducing frontend processing.
- Added `VirtualizedTaskList` and `VirtualizedTaskGroup` components for efficient rendering of task lists.
- Updated task management slice to support new V3 data structure and improved state management.
- Refactored styles for better dark mode support and overall UI consistency.
This commit is contained in:
chamikaJ
2025-06-23 16:34:57 +05:30
parent 687fff9c74
commit 2dd756bbb8
15 changed files with 1473 additions and 384 deletions

View File

@@ -213,389 +213,283 @@
outline-offset: 2px;
}
/* Dark mode support */
[data-theme="dark"] .task-list-board {
/* Dark mode support using class-based selectors */
.dark .task-list-board {
background-color: #141414;
color: rgba(255, 255, 255, 0.85);
}
@media (prefers-color-scheme: dark) {
.task-list-board {
background-color: #141414;
color: rgba(255, 255, 255, 0.85);
}
/* Task Groups */
.task-group {
background-color: #1f1f1f;
border-color: #303030;
}
.task-group.drag-over {
border-color: #1890ff !important;
box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.3);
background-color: rgba(24, 144, 255, 0.1);
}
.task-group .group-header {
background: #262626;
border-bottom-color: #303030;
color: rgba(255, 255, 255, 0.85);
}
.task-group .group-header:hover {
background: #2f2f2f;
}
/* Task Rows */
.task-row {
background-color: #1f1f1f;
color: rgba(255, 255, 255, 0.85);
border-color: #303030;
}
.task-row:hover {
background-color: #262626 !important;
border-left-color: #595959;
}
.task-row.selected {
background-color: rgba(24, 144, 255, 0.15) !important;
border-left-color: #1890ff;
}
.task-row .drag-handle {
color: rgba(255, 255, 255, 0.45);
}
.task-row .drag-handle:hover {
color: rgba(255, 255, 255, 0.85);
}
/* Progress bars */
.ant-progress-bg {
background-color: #303030;
}
/* Text colors */
.task-row .ant-typography {
color: rgba(255, 255, 255, 0.85);
}
.task-row .text-gray-500 {
color: rgba(255, 255, 255, 0.45) !important;
}
.task-row .text-gray-600 {
color: rgba(255, 255, 255, 0.65) !important;
}
.task-row .text-gray-400 {
color: rgba(255, 255, 255, 0.45) !important;
}
/* Completed task styling */
.task-row .line-through {
color: rgba(255, 255, 255, 0.45);
}
/* Bulk Action Bar */
.bulk-action-bar {
background: rgba(24, 144, 255, 0.15);
border-color: rgba(24, 144, 255, 0.3);
color: rgba(255, 255, 255, 0.85);
}
/* Cards and containers */
.ant-card {
background-color: #1f1f1f;
border-color: #303030;
color: rgba(255, 255, 255, 0.85);
}
.ant-card-head {
background-color: #262626;
border-bottom-color: #303030;
color: rgba(255, 255, 255, 0.85);
}
.ant-card-body {
background-color: #1f1f1f;
color: rgba(255, 255, 255, 0.85);
}
/* Buttons */
.ant-btn {
border-color: #303030;
color: rgba(255, 255, 255, 0.85);
}
.ant-btn:hover {
border-color: #595959;
color: rgba(255, 255, 255, 0.85);
}
.ant-btn-primary {
background-color: #1890ff;
border-color: #1890ff;
}
.ant-btn-primary:hover {
background-color: #40a9ff;
border-color: #40a9ff;
}
/* Dropdowns and menus */
.ant-dropdown-menu {
background-color: #1f1f1f;
border-color: #303030;
}
.ant-dropdown-menu-item {
color: rgba(255, 255, 255, 0.85);
}
.ant-dropdown-menu-item:hover {
background-color: #262626;
}
/* Select components */
.ant-select-selector {
background-color: #1f1f1f !important;
border-color: #303030 !important;
color: rgba(255, 255, 255, 0.85) !important;
}
.ant-select-arrow {
color: rgba(255, 255, 255, 0.45);
}
/* Checkboxes */
.ant-checkbox-wrapper {
color: rgba(255, 255, 255, 0.85);
}
.ant-checkbox-inner {
background-color: #1f1f1f;
border-color: #303030;
}
.ant-checkbox-checked .ant-checkbox-inner {
background-color: #1890ff;
border-color: #1890ff;
}
/* Tags and labels */
.ant-tag {
background-color: #262626;
border-color: #303030;
color: rgba(255, 255, 255, 0.85);
}
/* Avatars */
.ant-avatar {
background-color: #595959;
color: rgba(255, 255, 255, 0.85);
}
/* Tooltips */
.ant-tooltip-inner {
background-color: #262626;
color: rgba(255, 255, 255, 0.85);
}
.ant-tooltip-arrow-content {
background-color: #262626;
}
/* Popconfirm */
.ant-popover-inner {
background-color: #1f1f1f;
color: rgba(255, 255, 255, 0.85);
}
.ant-popover-arrow-content {
background-color: #1f1f1f;
}
/* Subtasks */
.task-subtasks {
border-left-color: #303030;
}
.task-subtasks .task-row {
background-color: #141414;
}
.task-subtasks .task-row:hover {
background-color: #1f1f1f !important;
}
/* Scrollbars */
.task-groups-container::-webkit-scrollbar-track {
background: #141414;
}
.task-groups-container::-webkit-scrollbar-thumb {
background: #595959;
}
.task-groups-container::-webkit-scrollbar-thumb:hover {
background: #777777;
}
/* Loading states */
.ant-spin-dot-item {
background-color: #1890ff;
}
/* Empty states */
.ant-empty {
color: rgba(255, 255, 255, 0.45);
}
.ant-empty-description {
color: rgba(255, 255, 255, 0.45);
}
/* Focus styles for dark mode */
.task-row:focus-within {
outline-color: #40a9ff;
}
.drag-handle:focus {
outline-color: #40a9ff;
}
/* Border colors */
.border-gray-100 {
border-color: #303030 !important;
}
.border-gray-200 {
border-color: #404040 !important;
}
.border-gray-300 {
border-color: #595959 !important;
}
/* Background utilities */
.bg-gray-50 {
background-color: #141414 !important;
}
.bg-gray-100 {
background-color: #1f1f1f !important;
}
.bg-white {
background-color: #1f1f1f !important;
}
/* Due date colors in dark mode */
.text-red-500 {
color: #ff7875 !important;
}
.text-orange-500 {
color: #ffa940 !important;
}
/* Group progress bar in dark mode */
.task-group .group-header .bg-gray-200 {
background-color: #303030 !important;
}
}
/* Specific dark mode styles using data-theme attribute */
[data-theme="dark"] .task-group {
.dark .task-group {
background-color: #1f1f1f;
border-color: #303030;
}
[data-theme="dark"] .task-group.drag-over {
.dark .task-group.drag-over {
border-color: #1890ff !important;
box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.3);
background-color: rgba(24, 144, 255, 0.1);
}
[data-theme="dark"] .task-group .group-header {
.dark .task-group .group-header {
background: #262626;
border-bottom-color: #303030;
color: rgba(255, 255, 255, 0.85);
}
[data-theme="dark"] .task-group .group-header:hover {
.dark .task-group .group-header:hover {
background: #2f2f2f;
}
[data-theme="dark"] .task-row {
.dark .task-row {
background-color: #1f1f1f;
color: rgba(255, 255, 255, 0.85);
border-color: #303030;
}
[data-theme="dark"] .task-row:hover {
.dark .task-row:hover {
background-color: #262626 !important;
border-left-color: #595959;
}
[data-theme="dark"] .task-row.selected {
.dark .task-row.selected {
background-color: rgba(24, 144, 255, 0.15) !important;
border-left-color: #1890ff;
}
[data-theme="dark"] .task-row .drag-handle {
.dark .task-row .drag-handle {
color: rgba(255, 255, 255, 0.45);
}
[data-theme="dark"] .task-row .drag-handle:hover {
.dark .task-row .drag-handle:hover {
color: rgba(255, 255, 255, 0.85);
}
[data-theme="dark"] .bulk-action-bar {
.dark .bulk-action-bar {
background: rgba(24, 144, 255, 0.15);
border-color: rgba(24, 144, 255, 0.3);
color: rgba(255, 255, 255, 0.85);
}
[data-theme="dark"] .task-row .ant-typography {
.dark .task-row .ant-typography {
color: rgba(255, 255, 255, 0.85);
}
[data-theme="dark"] .task-row .text-gray-500 {
.dark .task-row .text-gray-500 {
color: rgba(255, 255, 255, 0.45) !important;
}
[data-theme="dark"] .task-row .text-gray-600 {
.dark .task-row .text-gray-600 {
color: rgba(255, 255, 255, 0.65) !important;
}
[data-theme="dark"] .task-row .text-gray-400 {
.dark .task-row .text-gray-400 {
color: rgba(255, 255, 255, 0.45) !important;
}
[data-theme="dark"] .task-row .line-through {
.dark .task-row .line-through {
color: rgba(255, 255, 255, 0.45);
}
[data-theme="dark"] .task-subtasks {
.dark .ant-card {
background-color: #1f1f1f;
border-color: #303030;
}
.dark .ant-card-head {
background-color: #262626;
border-bottom-color: #303030;
}
.dark .ant-card-body {
background-color: #1f1f1f;
color: rgba(255, 255, 255, 0.85);
}
.dark .ant-btn {
background-color: #262626;
border-color: #404040;
color: rgba(255, 255, 255, 0.85);
}
.dark .ant-btn:hover {
background-color: #2f2f2f;
border-color: #505050;
}
.dark .ant-btn-primary {
background-color: #1890ff;
border-color: #1890ff;
}
.dark .ant-btn-primary:hover {
background-color: #40a9ff;
border-color: #40a9ff;
}
.dark .ant-dropdown-menu {
background-color: #1f1f1f;
border-color: #303030;
}
.dark .ant-dropdown-menu-item {
color: rgba(255, 255, 255, 0.85);
}
.dark .ant-dropdown-menu-item:hover {
background-color: #262626;
}
.dark .ant-select-selector {
background-color: #262626 !important;
border-color: #404040 !important;
color: rgba(255, 255, 255, 0.85) !important;
}
.dark .ant-select-arrow {
color: rgba(255, 255, 255, 0.45);
}
.dark .ant-checkbox-wrapper {
color: rgba(255, 255, 255, 0.85);
}
.dark .ant-checkbox-inner {
background-color: #262626;
border-color: #404040;
}
.dark .ant-checkbox-checked .ant-checkbox-inner {
background-color: #1890ff;
border-color: #1890ff;
}
.dark .ant-tag {
background-color: #262626;
border-color: #404040;
color: rgba(255, 255, 255, 0.85);
}
.dark .ant-avatar {
background-color: #404040;
color: rgba(255, 255, 255, 0.85);
}
.dark .ant-tooltip-inner {
background-color: #1f1f1f;
color: rgba(255, 255, 255, 0.85);
}
.dark .ant-tooltip-arrow-content {
background-color: #1f1f1f;
}
.dark .ant-popover-inner {
background-color: #1f1f1f;
color: rgba(255, 255, 255, 0.85);
}
.dark .ant-popover-arrow-content {
background-color: #1f1f1f;
}
.dark .task-subtasks {
border-left-color: #303030;
}
[data-theme="dark"] .task-subtasks .task-row {
.dark .task-subtasks .task-row {
background-color: #141414;
}
[data-theme="dark"] .task-subtasks .task-row:hover {
.dark .task-subtasks .task-row:hover {
background-color: #1a1a1a;
}
.dark .task-groups-container::-webkit-scrollbar-track {
background-color: #262626;
}
.dark .task-groups-container::-webkit-scrollbar-thumb {
background-color: #404040;
}
.dark .task-groups-container::-webkit-scrollbar-thumb:hover {
background-color: #505050;
}
.dark .ant-spin-dot-item {
background-color: #1890ff;
}
.dark .ant-empty {
color: rgba(255, 255, 255, 0.45);
}
.dark .ant-empty-description {
color: rgba(255, 255, 255, 0.45);
}
.dark .task-row:focus-within {
outline-color: #1890ff;
}
.dark .drag-handle:focus {
outline-color: #1890ff;
}
.dark .border-gray-100 {
border-color: #262626 !important;
}
.dark .border-gray-200 {
border-color: #303030 !important;
}
.dark .border-gray-300 {
border-color: #404040 !important;
}
.dark .bg-gray-50 {
background-color: #141414 !important;
}
.dark .bg-gray-100 {
background-color: #1a1a1a !important;
}
.dark .bg-white {
background-color: #1f1f1f !important;
}
[data-theme="dark"] .text-red-500 {
.dark .text-red-500 {
color: #ff7875 !important;
}
[data-theme="dark"] .text-orange-500 {
.dark .text-orange-500 {
color: #ffa940 !important;
}
.dark .task-group .group-header .bg-gray-200 {
background-color: #262626 !important;
}
/* System preference fallback */
@media (prefers-color-scheme: dark) {
.task-list-board:not(.light) {
color: rgba(255, 255, 255, 0.85);
}
.task-group:not(.light) {
background-color: #1f1f1f;
}
.task-row:not(.light) {
background-color: #1f1f1f;
color: rgba(255, 255, 255, 0.85);
border-color: #303030;
}
.task-row:not(.light):hover {
background-color: #262626 !important;
border-left-color: #595959;
}
}