/* * Copyright 2026 Element Creations Ltd. * * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial * Please see LICENSE files in the repository root for full details. */ import React, { type JSX, type PropsWithChildren, useRef } from "react"; import { Menu, MenuItem, Separator } from "@vector-im/compound-web"; import { capitalize } from "lodash"; import { useI18n } from "../../utils/i18nContext"; import { humanizeRelativeTime } from "../../utils/humanize"; import { type DateSeparatorViewModel } from "./DateSeparatorView"; import { DateSeparatorDatePickerView } from "./DateSeparatorDatePickerView"; import styles from "./DateSeparatorContextMenuView.module.css"; /** * Props for DateSeparatorContextMenuView component. */ export interface DateSeparatorContextMenuViewProps { /** The date separator view model. */ vm: DateSeparatorViewModel; /** Whether the menu is open (controlled by the parent). */ open: boolean; /** The element used as the menu trigger. */ trigger: React.ReactNode; /** Called when the menu requests an open state change. */ onOpenChange?: (open: boolean) => void; } /** * Date separator jump-to menu. * Uses the wrapped child as the menu trigger. */ export const DateSeparatorContextMenuView: React.FC> = ({ vm, open, trigger, onOpenChange, }): JSX.Element => { const i18n = useI18n(); const { translate: _t } = useI18n(); const dateInputRef = useRef(null); const onKeyDown = (event: React.KeyboardEvent): void => { if (event.key !== "ArrowDown") return; event.preventDefault(); dateInputRef.current?.focus(); }; return ( { onOpenChange?.(newOpen); }} title={_t("room|jump_to_date")} showTitle={false} trigger={trigger} align="start" className={styles.picker_menu} > vm.onLastWeekPicked?.()} data-testid="jump-to-date-last-week" hideChevron={true} className={styles.picker_menu_item} /> vm.onLastMonthPicked?.()} data-testid="jump-to-date-last-month" hideChevron={true} className={styles.picker_menu_item} /> vm.onBeginningPicked?.()} data-testid="jump-to-date-beginning" hideChevron={true} className={styles.picker_menu_item} onKeyDown={onKeyDown} /> onOpenChange?.(false)} onDismissed={() => onOpenChange?.(false)} /> ); };