From 08c51a82599eee32473b5eb0ccc1a377130e00a6 Mon Sep 17 00:00:00 2001 From: arkohut <39525455+arkohut@users.noreply.github.com> Date: Wed, 31 Jul 2024 00:42:07 +0800 Subject: [PATCH] feat(web): support time filter --- web/src/lib/Figure.svelte | 2 +- ...lipboard.svelte => CopyToClipboard.svelte} | 0 web/src/lib/components/TimeFilter.svelte | 114 ++++++++++++++++++ ...e-picker.svelte => DateRangePicker.svelte} | 42 +++++-- .../dropdown-menu-checkbox-item.svelte | 35 ++++++ .../dropdown-menu-content.svelte | 27 +++++ .../dropdown-menu/dropdown-menu-item.svelte | 31 +++++ .../dropdown-menu/dropdown-menu-label.svelte | 19 +++ .../dropdown-menu-radio-group.svelte | 11 ++ .../dropdown-menu-radio-item.svelte | 35 ++++++ .../dropdown-menu-separator.svelte | 14 +++ .../dropdown-menu-shortcut.svelte | 13 ++ .../dropdown-menu-sub-content.svelte | 30 +++++ .../dropdown-menu-sub-trigger.svelte | 32 +++++ .../lib/components/ui/dropdown-menu/index.ts | 48 ++++++++ web/src/lib/components/ui/select/index.ts | 34 ++++++ .../ui/select/select-content.svelte | 39 ++++++ .../components/ui/select/select-item.svelte | 40 ++++++ .../components/ui/select/select-label.svelte | 16 +++ .../ui/select/select-separator.svelte | 11 ++ .../ui/select/select-trigger.svelte | 27 +++++ web/src/routes/+page.svelte | 28 +++-- 22 files changed, 631 insertions(+), 17 deletions(-) rename web/src/lib/components/{copy-to-clipboard.svelte => CopyToClipboard.svelte} (100%) create mode 100644 web/src/lib/components/TimeFilter.svelte rename web/src/lib/components/ui/{date-range-picker.svelte => DateRangePicker.svelte} (56%) create mode 100644 web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte create mode 100644 web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte create mode 100644 web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte create mode 100644 web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte create mode 100644 web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte create mode 100644 web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte create mode 100644 web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte create mode 100644 web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte create mode 100644 web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte create mode 100644 web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte create mode 100644 web/src/lib/components/ui/dropdown-menu/index.ts create mode 100644 web/src/lib/components/ui/select/index.ts create mode 100644 web/src/lib/components/ui/select/select-content.svelte create mode 100644 web/src/lib/components/ui/select/select-item.svelte create mode 100644 web/src/lib/components/ui/select/select-label.svelte create mode 100644 web/src/lib/components/ui/select/select-separator.svelte create mode 100644 web/src/lib/components/ui/select/select-trigger.svelte diff --git a/web/src/lib/Figure.svelte b/web/src/lib/Figure.svelte index 3be3fb6..0388246 100644 --- a/web/src/lib/Figure.svelte +++ b/web/src/lib/Figure.svelte @@ -1,7 +1,7 @@ + +
+ + + + + + 时间筛选 + + + 时间不限 + 今天 + 最近一周 + 最近一个月 + 最近三个月 + + 自定义 + + + + + + + +
\ No newline at end of file diff --git a/web/src/lib/components/ui/date-range-picker.svelte b/web/src/lib/components/ui/DateRangePicker.svelte similarity index 56% rename from web/src/lib/components/ui/date-range-picker.svelte rename to web/src/lib/components/ui/DateRangePicker.svelte index 5297441..e698d25 100644 --- a/web/src/lib/components/ui/date-range-picker.svelte +++ b/web/src/lib/components/ui/DateRangePicker.svelte @@ -11,16 +11,38 @@ import { Button } from "$lib/components/ui/button/index.js"; import { RangeCalendar } from "$lib/components/ui/range-calendar/index.js"; import * as Popover from "$lib/components/ui/popover/index.js"; - + import { onMount } from "svelte"; + const df = new DateFormatter("en-US", { dateStyle: "medium" }); + + export let startTimestamp: number; + export let endTimestamp: number; - let value: DateRange | undefined = { - start: new CalendarDate(2022, 1, 20), - end: new CalendarDate(2022, 1, 20).add({ days: 20 }) - }; - + let value: DateRange | undefined; + let initialized = false; // Flag to control reactive updates + let userSelected = false; // New flag to track user selection + + onMount(() => { + const now = new Date(); + const year = now.getFullYear(); + const month = now.getMonth() + 1; // getMonth() returns 0-11 + const date = now.getDate(); + value = { + start: new CalendarDate(year, month, date).subtract({ days: 30 }), + end: new CalendarDate(year, month, date) + }; + console.log(initialized); + initialized = true; + }); + + $: if (initialized && value && value.start && value.end && !userSelected) { + userSelected = true; // Set flag when user selects a range + startTimestamp = value.start.toDate(getLocalTimeZone()).getTime() / 1000; + endTimestamp = value.end.toDate(getLocalTimeZone()).getTime() / 1000; + } + let startValue: DateValue | undefined = undefined; @@ -30,13 +52,15 @@