Skip to content

Commit

Permalink
made it closer match the designs
Browse files Browse the repository at this point in the history
  • Loading branch information
hoorayimhelping committed Jan 6, 2025
1 parent c741b56 commit f4fc6fd
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 42 deletions.
7 changes: 7 additions & 0 deletions src/components/DateTime/DateTime.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ export default {
type: "select",
},
},
side: {
control: {
type: "select",
},
options: ["top", "right", "left", "bottom"],
},
systemTimeZone: {
options: [
"America/Denver",
Expand All @@ -34,6 +40,7 @@ export const Playground = {
args: {
date: new Date(),
locale: "en-US",
side: "top",
systemTimeZone: "America/Los_Angeles",
title: "DateTime",
},
Expand Down
99 changes: 57 additions & 42 deletions src/components/DateTime/DateTime.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
import dayjs from "dayjs";
import advancedFormat from "dayjs/plugin/advancedFormat";
import duration from "dayjs/plugin/duration";
import localizedFormat from "dayjs/plugin/localizedFormat";
import relativeTime from "dayjs/plugin/relativeTime";
import timezone from "dayjs/plugin/timezone";
import updateLocale from "dayjs/plugin/updateLocale";
import utc from "dayjs/plugin/utc";
import { styled } from "styled-components";

import { Container } from "@/components/Container/Container";
import { Panel } from "@/components/Panel/Panel";
import { Popover } from "@/components/Popover/Popover";
import { Text } from "@/components/Typography/Text/Text";
import { styled } from "styled-components";
import { linkStyles, StyledLinkProps } from "@/components/Link/common";
import { GridContainer } from "@/components/GridContainer/GridContainer";
import { Container } from "@/components/Container/Container";

dayjs.extend(advancedFormat);
dayjs.extend(duration);
dayjs.extend(localizedFormat);
dayjs.extend(updateLocale);
Expand Down Expand Up @@ -55,8 +58,8 @@ dayjs.updateLocale("en", {
},
});

const UnderlinedTrigger = styled(Popover.Trigger)`
text-decoration: wavy underline;
const UnderlinedTrigger = styled(Popover.Trigger)<StyledLinkProps>`
${linkStyles}
`;

const dateStyle = "medium";
Expand Down Expand Up @@ -105,13 +108,21 @@ const formatDateTime = (date: Date, locale?: Intl.Locale, timeZone?: string) =>
return dateTimeFormatter.format(date);
};

export type ArrowPosition = "top" | "right" | "left" | "bottom";

export interface DateTimeProps {
date: Date;
locale?: Intl.Locale;
side?: ArrowPosition;
systemTimeZone?: string;
}

export const DateTime = ({ date, locale, systemTimeZone }: DateTimeProps) => {
export const DateTime = ({
date,
locale,
side = "top",
systemTimeZone,
}: DateTimeProps) => {
const dayjsDate = dayjs(date);

let systemTime;
Expand All @@ -126,49 +137,53 @@ export const DateTime = ({ date, locale, systemTimeZone }: DateTimeProps) => {

return (
<Popover>
<UnderlinedTrigger>
<UnderlinedTrigger
$size="md"
$weight="medium"
>
<Text size="sm">{dayjs.utc(date).fromNow()}</Text>
</UnderlinedTrigger>
<Popover.Content showArrow>
<Container
orientation="vertical"
padding="none"
<Popover.Content
side={side}
showArrow
>
<GridContainer
columnGap="xl"
gridTemplateColumns="repeat(2, auto)"
gap="sm"
>
<Container orientation="vertical">
<Text size="sm">{Math.round(date.getTime() / 1000)}</Text>
<Text size="sm">{date.toISOString()}</Text>
<Text size="md">Local</Text>
<Container justifyContent="end">
<Text size="md">
{formatDateTime(dayjsDate.toDate(), locale)} ({dayjsDate.format("z")})
</Text>
</Container>
<Panel orientation="vertical">
<Container
orientation="horizontal"
justifyContent="space-between"
>
<Text size="md">UTC:</Text>
<Text size="md">
{formatDateTime(dayjsDate.utc().toDate(), locale, "UTC")}
</Text>
</Container>
<Container
orientation="horizontal"
justifyContent="space-between"
>
<Text size="md">Local ({dayjs.tz.guess()}):</Text>
<Text size="md">{formatDateTime(dayjsDate.toDate(), locale)}</Text>
</Container>
{systemTime && (
<Container
orientation="horizontal"
justifyContent="space-between"
minWidth="260px"
>
<Text size="md">System ({systemTimeZone}):</Text>

{systemTime && (
<>
<Text size="md">System</Text>

<Container justifyContent="end">
<Text size="md">
{formatDateTime(systemTime.toDate(), locale, systemTimeZone)}
{formatDateTime(systemTime.toDate(), locale, systemTimeZone)} (
{systemTime.format("z")})
</Text>
</Container>
)}
</Panel>
</Container>
</>
)}

<Text size="md">UTC</Text>
<Container justifyContent="end">
<Text size="md">
{formatDateTime(dayjsDate.utc().toDate(), locale, "UTC")}
</Text>
</Container>

<Text size="md">Unix</Text>
<Container justifyContent="end">
<Text size="md">{Math.round(date.getTime() / 1000)}</Text>
</Container>
</GridContainer>
</Popover.Content>
</Popover>
);
Expand Down

0 comments on commit f4fc6fd

Please sign in to comment.