diff --git a/worklenz-frontend/src/lib/project/project-view-constants.ts b/worklenz-frontend/src/lib/project/project-view-constants.ts
index fc4b8e87..d0ade74d 100644
--- a/worklenz-frontend/src/lib/project/project-view-constants.ts
+++ b/worklenz-frontend/src/lib/project/project-view-constants.ts
@@ -5,6 +5,7 @@ import ProjectViewMembers from '@/pages/projects/projectView/members/project-vie
import ProjectViewUpdates from '@/pages/projects/project-view-1/updates/project-view-updates';
import ProjectViewTaskList from '@/pages/projects/projectView/taskList/project-view-task-list';
import ProjectViewBoard from '@/pages/projects/projectView/board/project-view-board';
+import ProjectViewEnhancedTasks from '@/pages/projects/projectView/enhancedTasks/project-view-enhanced-tasks';
// type of a tab items
type TabItems = {
@@ -26,43 +27,50 @@ export const tabItems: TabItems[] = [
},
{
index: 1,
+ key: 'enhanced-tasks',
+ label: 'Enhanced Tasks',
+ isPinned: true,
+ element: React.createElement(ProjectViewEnhancedTasks),
+ },
+ {
+ index: 2,
key: 'board',
label: 'Board',
isPinned: true,
element: React.createElement(ProjectViewBoard),
},
// {
- // index: 2,
+ // index: 3,
// key: 'workload',
// label: 'Workload',
// element: React.createElement(ProjectViewWorkload),
// },
// {
- // index: 3,
+ // index: 4,
// key: 'roadmap',
// label: 'Roadmap',
// element: React.createElement(ProjectViewRoadmap),
// },
{
- index: 4,
+ index: 5,
key: 'project-insights-member-overview',
label: 'Insights',
element: React.createElement(ProjectViewInsights),
},
{
- index: 5,
+ index: 6,
key: 'all-attachments',
label: 'Files',
element: React.createElement(ProjectViewFiles),
},
{
- index: 6,
+ index: 7,
key: 'members',
label: 'Members',
element: React.createElement(ProjectViewMembers),
},
{
- index: 7,
+ index: 8,
key: 'updates',
label: 'Updates',
element: React.createElement(ProjectViewUpdates),
diff --git a/worklenz-frontend/src/pages/projects/projectView/enhancedTasks/project-view-enhanced-tasks.tsx b/worklenz-frontend/src/pages/projects/projectView/enhancedTasks/project-view-enhanced-tasks.tsx
new file mode 100644
index 00000000..8639fc7d
--- /dev/null
+++ b/worklenz-frontend/src/pages/projects/projectView/enhancedTasks/project-view-enhanced-tasks.tsx
@@ -0,0 +1,23 @@
+import React from 'react';
+import { useParams } from 'react-router-dom';
+import TaskListBoard from '@/components/task-management/TaskListBoard';
+
+const ProjectViewEnhancedTasks: React.FC = () => {
+ const { id: projectId } = useParams<{ id: string }>();
+
+ if (!projectId) {
+ return (
+
+ Project ID not found
+
+ );
+ }
+
+ return (
+
+
+
+ );
+};
+
+export default ProjectViewEnhancedTasks;
\ No newline at end of file
diff --git a/worklenz-frontend/src/styles/task-management.css b/worklenz-frontend/src/styles/task-management.css
index d3589f82..e1f797c8 100644
--- a/worklenz-frontend/src/styles/task-management.css
+++ b/worklenz-frontend/src/styles/task-management.css
@@ -213,19 +213,389 @@
outline-offset: 2px;
}
-/* Dark mode support (if needed) */
+/* Dark mode support */
+[data-theme="dark"] .task-list-board {
+ background-color: #141414;
+ color: rgba(255, 255, 255, 0.85);
+}
+
@media (prefers-color-scheme: dark) {
- .task-row {
+ .task-list-board {
background-color: #141414;
- color: #ffffff;
+ 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;
}
-
- .task-group .group-header {
- background: #1f1f1f;
- border-bottom-color: #303030;
+
+ /* 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 {
+ background-color: #1f1f1f;
+ border-color: #303030;
+}
+
+[data-theme="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 {
+ background: #262626;
+ border-bottom-color: #303030;
+ color: rgba(255, 255, 255, 0.85);
+}
+
+[data-theme="dark"] .task-group .group-header:hover {
+ background: #2f2f2f;
+}
+
+[data-theme="dark"] .task-row {
+ background-color: #1f1f1f;
+ color: rgba(255, 255, 255, 0.85);
+ border-color: #303030;
+}
+
+[data-theme="dark"] .task-row:hover {
+ background-color: #262626 !important;
+ border-left-color: #595959;
+}
+
+[data-theme="dark"] .task-row.selected {
+ background-color: rgba(24, 144, 255, 0.15) !important;
+ border-left-color: #1890ff;
+}
+
+[data-theme="dark"] .task-row .drag-handle {
+ color: rgba(255, 255, 255, 0.45);
+}
+
+[data-theme="dark"] .task-row .drag-handle:hover {
+ color: rgba(255, 255, 255, 0.85);
+}
+
+[data-theme="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 {
+ color: rgba(255, 255, 255, 0.85);
+}
+
+[data-theme="dark"] .task-row .text-gray-500 {
+ color: rgba(255, 255, 255, 0.45) !important;
+}
+
+[data-theme="dark"] .task-row .text-gray-600 {
+ color: rgba(255, 255, 255, 0.65) !important;
+}
+
+[data-theme="dark"] .task-row .text-gray-400 {
+ color: rgba(255, 255, 255, 0.45) !important;
+}
+
+[data-theme="dark"] .task-row .line-through {
+ color: rgba(255, 255, 255, 0.45);
+}
+
+[data-theme="dark"] .task-subtasks {
+ border-left-color: #303030;
+}
+
+[data-theme="dark"] .task-subtasks .task-row {
+ background-color: #141414;
+}
+
+[data-theme="dark"] .task-subtasks .task-row:hover {
+ background-color: #1f1f1f !important;
+}
+
+[data-theme="dark"] .text-red-500 {
+ color: #ff7875 !important;
+}
+
+[data-theme="dark"] .text-orange-500 {
+ color: #ffa940 !important;
}
\ No newline at end of file