11030ae68d
* Refactor DateSeparator using MVVM and move to shared-components
* Add a few more stories, tests and screenshots
* Use the shared component and viewmodel in element-web
* Renaming custom content property an updating snapshots
* Fix lint errors and update snapshot after merge
* Change lifecycle handling for DateSeparatoreViewModel in components where manual handling is preferrable over wrapper component.
* Move context menu from viewmodel to shared components - step 1
* Create a jump to date picker component in shared components
* Add tests for coverage and fix layout issues and roving indexes
* Make element-web use the new component
* Simplify context menu and adjusting tests
* The HTMLExport now render shared components and need a I18nContext.Provider
* Updating unit tests for context menu
* Changed to {translate: _t} to let scripts pick up translations
* Fix lint issue and updating screenshots after merge
* Update snaps for element web components
* Renaming MVVM view components with suffix View.
* Fixing problem with input date calendar icon and system dark theme
* Changed the rendering of the menu and added a separate button component
* Handle input control with useRef in onKeyDown
* Updating DateSeparator snapshots on unit tests
* Updating layout after compound Menu got a className property
* Move files to new subfolder after merge
* Updated snapshot after merge
* Updating lock file
* Updates to styling from PR review
* Updates to focus/blur functionality
* Fixed tabbing and export documentation to stories
* Updated snapshots
---------
Co-authored-by: Zack <zazi21@student.bth.se>
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
/*
|
|
* Copyright 2025 New Vector 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.
|
|
*/
|
|
|
|
/**
|
|
* Formats a number of seconds into a human-readable string.
|
|
* @param inSeconds
|
|
*/
|
|
export function formatSeconds(inSeconds: number): string {
|
|
const isNegative = inSeconds < 0;
|
|
inSeconds = Math.abs(inSeconds);
|
|
|
|
const hours = Math.floor(inSeconds / (60 * 60))
|
|
.toFixed(0)
|
|
.padStart(2, "0");
|
|
const minutes = Math.floor((inSeconds % (60 * 60)) / 60)
|
|
.toFixed(0)
|
|
.padStart(2, "0");
|
|
const seconds = Math.floor((inSeconds % (60 * 60)) % 60)
|
|
.toFixed(0)
|
|
.padStart(2, "0");
|
|
|
|
let output = "";
|
|
if (hours !== "00") output += `${hours}:`;
|
|
output += `${minutes}:${seconds}`;
|
|
|
|
if (isNegative) {
|
|
output = "-" + output;
|
|
}
|
|
|
|
return output;
|
|
}
|
|
|
|
/**
|
|
* Formats dates to be compatible with attributes of a `<input type="date">`. Dates
|
|
* should be formatted like "2020-06-23" (formatted according to ISO8601).
|
|
*
|
|
* @param date The date to format.
|
|
* @returns The date string in ISO8601 format ready to be used with an `<input>`
|
|
*/
|
|
export function formatDateForInput(date: Date): string {
|
|
const year = `${date.getFullYear()}`.padStart(4, "0");
|
|
const month = `${date.getMonth() + 1}`.padStart(2, "0");
|
|
const day = `${date.getDate()}`.padStart(2, "0");
|
|
return `${year}-${month}-${day}`;
|
|
}
|