mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
implemented task more
This commit is contained in:
@@ -28,7 +28,7 @@ import {
|
||||
Search, RefreshCw, ChevronsLeft, ChevronLeft, ChevronRight, ChevronsRight,
|
||||
ArrowRight, Check, AlertTriangle, Circle,
|
||||
} from 'lucide-react';
|
||||
import { formatDate } from '@/utils/table.util';
|
||||
import { formatDateTime } from '@/utils/table.util';
|
||||
|
||||
const PAGE_SIZES = [50, 100, 1000];
|
||||
|
||||
@@ -168,7 +168,7 @@ export default function ClientTaskListTable({
|
||||
{tl.description || '—'}
|
||||
</TableCell>
|
||||
<TableCell className="text-sm whitespace-nowrap">
|
||||
{task?.deadline ? formatDate(task.deadline) : '—'}
|
||||
{task?.deadline ? formatDateTime(task.deadline) : '—'}
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<StatusBadge status={statusLabel} />
|
||||
|
||||
@@ -35,7 +35,7 @@ import { useTask } from '@/contexts/ClientTaskContext';
|
||||
import { PageMeta } from '@/contexts/MetadataContext';
|
||||
import { useTaskProgress } from '@/contexts/ClientTaskProgressContext';
|
||||
import { useGroup } from '@/contexts/ClientGroupContext';
|
||||
import { formatDate } from '@/utils/table.util';
|
||||
import { formatDate, formatDateTime } from '@/utils/table.util';
|
||||
import api from '@/utils/api.util';
|
||||
|
||||
// ─── Status badge ─────────────────────────────────────────────────────────────
|
||||
@@ -215,7 +215,7 @@ const FileRow = ({ file, onClick }) => {
|
||||
};
|
||||
|
||||
// ─── Submission panel (Your Work) — upload_file and/or submit_text ────────────
|
||||
const SubmissionPanel = ({ latestCompletion, onAddAttachment, submitting, onFileClick, requiresReview, hasTextRequirement }) => {
|
||||
const SubmissionPanel = ({ latestCompletion, onAddAttachment, submitting, onFileClick, requiresReview, hasTextRequirement, acceptsSubmissions }) => {
|
||||
const files = latestCompletion?.files ?? [];
|
||||
|
||||
return (
|
||||
@@ -264,9 +264,15 @@ const SubmissionPanel = ({ latestCompletion, onAddAttachment, submitting, onFile
|
||||
) : null}
|
||||
|
||||
<div className="flex flex-col gap-3">
|
||||
<Button className="w-full" onClick={onAddAttachment} disabled={submitting}>
|
||||
<Plus /> {latestCompletion ? 'Resubmit' : 'Turn In'}
|
||||
</Button>
|
||||
{acceptsSubmissions ? (
|
||||
<Button className="w-full" onClick={onAddAttachment} disabled={submitting}>
|
||||
<Plus /> {latestCompletion ? 'Resubmit' : 'Turn In'}
|
||||
</Button>
|
||||
) : (
|
||||
<p className="text-sm text-center text-muted-foreground py-2">
|
||||
This task no longer accepts submissions
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
@@ -498,7 +504,7 @@ const ViewTask = () => {
|
||||
<div className="flex items-center gap-4 text-sm [&_svg]:size-4">
|
||||
{task?.deadline && (
|
||||
<span className="flex items-center gap-1.5">
|
||||
<Clock /> Due {formatDate(task.deadline)}
|
||||
<Clock /> Due {formatDateTime(task.deadline)}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
@@ -623,6 +629,7 @@ const ViewTask = () => {
|
||||
onFileClick={(file) => setPreviewFile(file)}
|
||||
requiresReview={requiresReview}
|
||||
hasTextRequirement={hasTextReq}
|
||||
acceptsSubmissions={task?.accepts_submissions !== false}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
@@ -638,6 +645,7 @@ const ViewTask = () => {
|
||||
onFileClick={(file) => setPreviewFile(file)}
|
||||
requiresReview={requiresReview}
|
||||
hasTextRequirement={hasTextReq}
|
||||
acceptsSubmissions={task?.accepts_submissions !== false}
|
||||
/>
|
||||
)}
|
||||
<RequirementsStatusPanel
|
||||
|
||||
@@ -26,7 +26,7 @@ import {
|
||||
LaptopMinimal, Table, Lock,
|
||||
} from 'lucide-react';
|
||||
import { Tabs, TabsList, TabsPanel, TabsTab } from '@/components/coss/tabs';
|
||||
import { formatDate } from '@/utils/table.util';
|
||||
import { formatDateTime } from '@/utils/table.util';
|
||||
import { cn } from '@/lib/utils';
|
||||
import ClientTaskListTable from '../components/TaskListTable';
|
||||
|
||||
@@ -109,7 +109,7 @@ const TaskCard = ({ task, onClick, locked, lockedBy, onLockedClick }) => {
|
||||
</p>
|
||||
<div className="flex items-center gap-1.5 text-xs text-muted-foreground mt-auto pt-1 [&_svg]:size-3.5">
|
||||
<Calendar />
|
||||
{task.deadline ? `Due ${formatDate(task.deadline)}` : 'No due date'}
|
||||
{task.deadline ? `Due ${formatDateTime(task.deadline)}` : 'No due date'}
|
||||
</div>
|
||||
{locked && (
|
||||
<p className="text-xs text-muted-foreground">Tap to see what's required to unlock this task.</p>
|
||||
|
||||
Reference in New Issue
Block a user