Files
Homarr/src/modules/date/DateModule.tsx

44 lines
1.3 KiB
TypeScript
Raw Normal View History

2022-08-02 00:21:11 +02:00
import { Group, Text, Title } from '@mantine/core';
2022-05-10 18:56:29 +02:00
import dayjs from 'dayjs';
import { useEffect, useState } from 'react';
import { IconClock as Clock } from '@tabler/icons';
import { useConfig } from '../../tools/state';
import { IModule } from '../ModuleTypes';
import { useSetSafeInterval } from '../../tools/hooks/useSetSafeInterval';
2022-05-10 18:56:29 +02:00
export const DateModule: IModule = {
2022-08-24 19:51:54 +02:00
title: 'descriptor.name',
description: 'descriptor.description',
2022-05-10 18:56:29 +02:00
icon: Clock,
component: DateComponent,
options: {
full: {
2022-08-24 19:51:54 +02:00
name: 'descriptor.settings.display24HourFormat.label',
value: true,
},
},
2022-08-24 19:51:54 +02:00
translationNamespace: 'modules/date-module',
2022-05-10 18:56:29 +02:00
};
export default function DateComponent(props: any) {
const [date, setDate] = useState(new Date());
const setSafeInterval = useSetSafeInterval();
const { config } = useConfig();
const isFullTime = config?.modules?.[DateModule.title]?.options?.full?.value ?? true;
2022-05-22 20:40:10 +02:00
const formatString = isFullTime ? 'HH:mm' : 'h:mm A';
2022-05-10 18:56:29 +02:00
// Change date on minute change
// Note: Using 10 000ms instead of 1000ms to chill a little :)
useEffect(() => {
setSafeInterval(() => {
2022-05-10 18:56:29 +02:00
setDate(new Date());
}, 1000 * 60);
2022-05-10 18:56:29 +02:00
}, []);
return (
<Group p="sm" spacing="xs">
2022-05-18 22:50:53 +02:00
<Title>{dayjs(date).format(formatString)}</Title>
2022-08-02 00:21:11 +02:00
<Text size="lg">{dayjs(date).format('dddd, MMMM D')}</Text>
2022-05-10 18:56:29 +02:00
</Group>
);
}