diff --git a/src/views/shared/friendly-time/FriendlyTimeView.tsx b/src/views/shared/friendly-time/FriendlyTimeView.tsx new file mode 100644 index 00000000..4df913e6 --- /dev/null +++ b/src/views/shared/friendly-time/FriendlyTimeView.tsx @@ -0,0 +1,34 @@ +import { FriendlyTime } from '@nitrots/nitro-renderer'; +import { FC, useCallback, useEffect, useMemo, useState } from 'react'; +import { FriendlyTimeViewProps } from './FriendlyTimeView.types'; + +export const FriendlyTimeView: FC = props => +{ + const { seconds = 0, isShort = false, ...rest } = props; + const [ updateId, setUpdateId ] = useState(-1); + + const getStartSeconds = useMemo(() => + { + return (Math.round(new Date().getSeconds()) - seconds); + }, [ seconds ]); + + const getFriendlyTime = useCallback(() => + { + const value = (Math.round(new Date().getSeconds()) - getStartSeconds); + + if(isShort) return FriendlyTime.format(value); + + return FriendlyTime.format(value); + }, [ getStartSeconds, isShort ]); + + useEffect(() => + { + const interval = setInterval(() => setUpdateId(prevValue => (prevValue + 1)), 10000); + + return () => clearInterval(interval); + }, []); + + return ( +
{ getFriendlyTime() }
+ ); +} diff --git a/src/views/shared/friendly-time/FriendlyTimeView.types.ts b/src/views/shared/friendly-time/FriendlyTimeView.types.ts new file mode 100644 index 00000000..7ce31f31 --- /dev/null +++ b/src/views/shared/friendly-time/FriendlyTimeView.types.ts @@ -0,0 +1,7 @@ +import { DetailsHTMLAttributes } from 'react'; + +export interface FriendlyTimeViewProps extends DetailsHTMLAttributes +{ + seconds: number; + isShort?: boolean; +}