diff --git a/package.json b/package.json index 1657ed6336..d3f6481caa 100644 --- a/package.json +++ b/package.json @@ -224,6 +224,7 @@ "mobx-react": "^6.2.2", "mock-fs": "^4.12.0", "moment": "^2.26.0", + "moment-timezone": "^0.5.33", "node-pty": "^0.9.0", "npm": "^6.14.8", "openid-client": "^3.15.2", diff --git a/src/common/user-store.ts b/src/common/user-store.ts index ee5ece17d5..510427a88e 100644 --- a/src/common/user-store.ts +++ b/src/common/user-store.ts @@ -3,6 +3,7 @@ import { app, remote } from "electron"; import semver from "semver"; import { readFile } from "fs-extra"; import { action, computed, observable, reaction, toJS } from "mobx"; +import moment from "moment-timezone"; import { BaseStore } from "./base-store"; import migrations from "../migrations/user-store"; import { getAppVersion } from "./utils/app-version"; @@ -23,6 +24,7 @@ export interface UserPreferences { httpsProxy?: string; shell?: string; colorTheme?: string; + localeTimezone?: string; allowUntrustedCAs?: boolean; allowTelemetry?: boolean; downloadMirror?: string | "default"; @@ -54,6 +56,7 @@ export class UserStore extends BaseStore { allowTelemetry: true, allowUntrustedCAs: false, colorTheme: UserStore.defaultTheme, + localeTimezone: moment.tz.guess(true) || "UTC", downloadMirror: "default", downloadKubectlBinaries: true, // Download kubectl binaries matching cluster version openAtLogin: false, @@ -75,7 +78,7 @@ export class UserStore extends BaseStore { // open at system start-up reaction(() => this.preferences.openAtLogin, openAtLogin => { - app.setLoginItemSettings({ + app.setLoginItemSettings({ openAtLogin, openAsHidden: true, args: ["--hidden"] @@ -130,6 +133,11 @@ export class UserStore extends BaseStore { this.lastSeenAppVersion = getAppVersion(); } + @action + setLocaleTimezone(tz: string) { + this.preferences.localeTimezone = tz; + } + protected refreshNewContexts = async () => { try { const kubeConfig = await readFile(this.kubeConfigPath, "utf8"); diff --git a/src/renderer/components/+events/event-details.tsx b/src/renderer/components/+events/event-details.tsx index ded848e8c7..4c64d711e5 100644 --- a/src/renderer/components/+events/event-details.tsx +++ b/src/renderer/components/+events/event-details.tsx @@ -11,6 +11,7 @@ import { KubeObjectMeta } from "../kube-object/kube-object-meta"; import { Table, TableCell, TableHead, TableRow } from "../table"; import { lookupApiLink } from "../../api/kube-api"; import { kubeObjectDetailRegistry } from "../../api/kube-object-detail-registry"; +import { LocaleDate } from "../locale-date"; interface Props extends KubeObjectDetailsProps { } @@ -38,10 +39,10 @@ export class EventDetails extends React.Component { {event.getSource()} - {event.getFirstSeenTime()} ago {event.firstTimestamp} + {event.getFirstSeenTime()} ago () - {event.getLastSeenTime()} ago {event.lastTimestamp} + {event.getLastSeenTime()} ago () {count} diff --git a/src/renderer/components/+preferences/preferences.tsx b/src/renderer/components/+preferences/preferences.tsx index bf376adbed..06590fbe90 100644 --- a/src/renderer/components/+preferences/preferences.tsx +++ b/src/renderer/components/+preferences/preferences.tsx @@ -1,6 +1,7 @@ import "./preferences.scss"; import React from "react"; +import moment from "moment-timezone"; import { computed, observable, reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; @@ -40,6 +41,11 @@ export class Preferences extends React.Component { })); } + timezoneOptions: SelectOption[] = moment.tz.names().map(zone => ({ + label: zone, + value: zone, + })); + componentDidMount() { disposeOnUnmount(this, [ reaction(() => navigation.location.hash, hash => { @@ -95,7 +101,7 @@ export class Preferences extends React.Component { const { preferences } = userStore; const extensions = appPreferenceRegistry.getItems(); const telemetryExtensions = extensions.filter(e => e.showInPreferencesTab == Pages.Telemetry); - let defaultShell = process.env.SHELL || process.env.PTYSHELL; + let defaultShell = process.env.SHELL || process.env.PTYSHELL; if (!defaultShell) { if (isWindows) { @@ -153,6 +159,18 @@ export class Preferences extends React.Component { label="Automatically start Lens on login" /> + +
+ +
+ +