add date.ts for global formatting, remove redundant pill completed : in progress from viewAssignmentDetails.tsx
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import { formatDateTime } from '@/lib/date';
|
||||||
import { CheckAssignmentCompletion, CheckSubjectCompletion } from '@/lib/progress';
|
import { CheckAssignmentCompletion, CheckSubjectCompletion } from '@/lib/progress';
|
||||||
import { getSubjectColorSet, type SubjectColor } from '@/lib/subjectColors';
|
import { getSubjectColorSet, type SubjectColor } from '@/lib/subjectColors';
|
||||||
import { supabase } from '@/lib/supabase';
|
import { supabase } from '@/lib/supabase';
|
||||||
@@ -287,19 +288,7 @@ export default function ViewDetailsAssignment() {
|
|||||||
|
|
||||||
<View className="mr-2 mb-2 rounded-full bg-app-subtle px-3 py-1">
|
<View className="mr-2 mb-2 rounded-full bg-app-subtle px-3 py-1">
|
||||||
<Text className="text-xs font-semibold text-text-secondary">
|
<Text className="text-xs font-semibold text-text-secondary">
|
||||||
Deadline: {assignment.deadline || 'No deadline'}
|
Deadline: {formatDateTime(assignment.deadline) || 'No deadline'}
|
||||||
</Text>
|
|
||||||
</View>
|
|
||||||
|
|
||||||
<View
|
|
||||||
className="mr-2 mb-2 rounded-full px-3 py-1"
|
|
||||||
style={{ backgroundColor: colorSet.soft }}
|
|
||||||
>
|
|
||||||
<Text
|
|
||||||
className="text-xs font-semibold"
|
|
||||||
style={{ color: colorSet.strong }}
|
|
||||||
>
|
|
||||||
{assignment.isCompleted ? 'Completed' : 'In progress'}
|
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
@@ -332,9 +321,9 @@ export default function ViewDetailsAssignment() {
|
|||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<Text className="mt-4 text-sm text-text-muted">
|
<Text className="mt-4 text-sm text-text-muted">
|
||||||
Last changed: {assignment.lastChanged}
|
Last changed: {formatDateTime(assignment.lastChanged)}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { formatDate, formatDateTime } from '@/lib/date';
|
||||||
import { CheckSubjectCompletion } from '@/lib/progress';
|
import { CheckSubjectCompletion } from '@/lib/progress';
|
||||||
import { SUBJECT_COLORS, type SubjectColor } from '@/lib/subjectColors';
|
import { SUBJECT_COLORS, type SubjectColor } from '@/lib/subjectColors';
|
||||||
import { supabase } from '@/lib/supabase';
|
import { supabase } from '@/lib/supabase';
|
||||||
@@ -17,37 +18,6 @@ export type Subject = {
|
|||||||
color: SubjectColor;
|
color: SubjectColor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const formatDate = (value?: string | null) => {
|
|
||||||
if (!value) return 'No date';
|
|
||||||
|
|
||||||
const date = new Date(value);
|
|
||||||
|
|
||||||
if (Number.isNaN(date.getTime())) return value;
|
|
||||||
|
|
||||||
return date.toLocaleDateString(undefined, {
|
|
||||||
year: 'numeric',
|
|
||||||
month: 'short',
|
|
||||||
day: 'numeric',
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const formatDateTime = (value?: string | null) => {
|
|
||||||
if (!value) return 'Unknown';
|
|
||||||
|
|
||||||
const date = new Date(value);
|
|
||||||
|
|
||||||
if (Number.isNaN(date.getTime())) return value;
|
|
||||||
|
|
||||||
return date.toLocaleString(undefined, {
|
|
||||||
year: 'numeric',
|
|
||||||
month: 'short',
|
|
||||||
day: 'numeric',
|
|
||||||
hour: 'numeric',
|
|
||||||
minute: '2-digit',
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default function ViewDetailsSubject() {
|
export default function ViewDetailsSubject() {
|
||||||
const { sId } = useLocalSearchParams<{ sId: string }>();
|
const { sId } = useLocalSearchParams<{ sId: string }>();
|
||||||
const [subject, SetSubject] = useState<Subject | null>(null);
|
const [subject, SetSubject] = useState<Subject | null>(null);
|
||||||
|
|||||||
29
lib/date.ts
Normal file
29
lib/date.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
export const formatDate = (value?: string | null) => {
|
||||||
|
if (!value) return 'No date';
|
||||||
|
|
||||||
|
const date = new Date(value);
|
||||||
|
|
||||||
|
if (Number.isNaN(date.getTime())) return value;
|
||||||
|
|
||||||
|
return date.toLocaleDateString(undefined, {
|
||||||
|
year: 'numeric',
|
||||||
|
month: 'short',
|
||||||
|
day: 'numeric',
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const formatDateTime = (value?: string | null) => {
|
||||||
|
if (!value) return 'Unknown';
|
||||||
|
|
||||||
|
const date = new Date(value);
|
||||||
|
|
||||||
|
if (Number.isNaN(date.getTime())) return value;
|
||||||
|
|
||||||
|
return date.toLocaleString(undefined, {
|
||||||
|
year: 'numeric',
|
||||||
|
month: 'short',
|
||||||
|
day: 'numeric',
|
||||||
|
hour: 'numeric',
|
||||||
|
minute: '2-digit',
|
||||||
|
});
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user