mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-25 03:45:46 -06:00
perf(ui): format sidebar timestamps on demand (#121819)
Amp-Thread-ID: https://ampcode.com/threads/T-019fe957-0e49-707f-859f-9600ef536125 Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
committed by
GitHub
parent
c87f77185d
commit
4e22cee056
@@ -14,7 +14,7 @@ function runningRow(key: string): SidebarRecentSession {
|
||||
return {
|
||||
key,
|
||||
label: "Run",
|
||||
meta: "now",
|
||||
updatedAt: Date.now(),
|
||||
href: "#",
|
||||
active: false,
|
||||
visuallyActive: false,
|
||||
|
||||
@@ -36,7 +36,6 @@ import {
|
||||
} from "../lib/sessions/session-key.ts";
|
||||
import { reconcileSidebarZone } from "../lib/sidebar-zone.ts";
|
||||
import { normalizeOptionalString } from "../lib/string-coerce.ts";
|
||||
import { formatSidebarTimestamp } from "./app-sidebar-session-catalogs.ts";
|
||||
import {
|
||||
limitSidebarSessionRows,
|
||||
SIDEBAR_SESSION_NO_ATTENTION,
|
||||
@@ -161,7 +160,6 @@ export function buildSidebarSessionNavigationState(input: {
|
||||
// The sidebar's zone structure already says what forked from what;
|
||||
// a "Subagent:" prefix on named threads is noise (other surfaces keep it).
|
||||
label: resolveSessionDisplayName(row.key, row, { includeSubagentPrefix: false }),
|
||||
meta: formatSidebarTimestamp(row.updatedAt),
|
||||
subtitle: resolveSessionWorkSubtitle(row),
|
||||
href: sessionNavigationTarget({
|
||||
face: resolveSessionPreferredFace(row),
|
||||
|
||||
@@ -18,6 +18,7 @@ import type {
|
||||
CatalogBackingSessionDisplay,
|
||||
CatalogSessionMenuRequest,
|
||||
} from "./app-sidebar-session-catalogs.ts";
|
||||
import { formatSidebarTimestamp } from "./app-sidebar-session-catalogs.ts";
|
||||
import {
|
||||
rowDemandsVisibility,
|
||||
sidebarSessionMetaId,
|
||||
@@ -106,11 +107,7 @@ export interface SessionListHost {
|
||||
handleSessionRowClick(event: MouseEvent, session: SidebarRecentSession): void;
|
||||
toggleSessionChildren(session: SidebarRecentSession): void;
|
||||
toggleSessionPin(session: SidebarRecentSession): void;
|
||||
toggleSessionMenu(
|
||||
session: SidebarRecentSession,
|
||||
menuSession: SidebarRecentSession,
|
||||
trigger: HTMLElement,
|
||||
): void;
|
||||
toggleSessionMenu(session: SidebarRecentSession, trigger: HTMLElement): void;
|
||||
showMoreChildren(sessionKey: string): void;
|
||||
sectionDragOver(event: DragEvent, sectionId: string, group?: string): void;
|
||||
sectionDragLeave(event: DragEvent, sectionId: string, group?: string): void;
|
||||
@@ -192,19 +189,18 @@ export function renderRecentSession(params: {
|
||||
const trailingDescription = session.isChild
|
||||
? ""
|
||||
: describeSessionTrailingState(session, pullRequestState);
|
||||
const meta = display?.meta ?? session.meta;
|
||||
const meta = display?.meta ?? formatSidebarTimestamp(session.updatedAt);
|
||||
const rowMeta = session.pinned ? "" : meta;
|
||||
const hasTrail = session.isChild && (session.runtimeMs != null || session.startedAt != null);
|
||||
const metaId = hasTrail ? sidebarSessionMetaId(session.key) : undefined;
|
||||
const stateId = trailingIndicator === nothing ? undefined : sidebarSessionStateId(session.key);
|
||||
const menuSession = display ? { ...session, meta } : session;
|
||||
const openMenuFromEvent = session.isChild
|
||||
? undefined
|
||||
: (event: MouseEvent | KeyboardEvent) =>
|
||||
handleContextMenuEvent(
|
||||
event,
|
||||
(event.currentTarget as HTMLElement).querySelector("[data-session-menu]"),
|
||||
(trigger, x, y) => host.sidebarMenus.openSessionMenu(menuSession, x, y, trigger),
|
||||
(trigger, x, y) => host.sidebarMenus.openSessionMenu(session, x, y, trigger),
|
||||
);
|
||||
const title = [
|
||||
display?.title ?? [label, narration, rowMeta].filter(Boolean).join(" · "),
|
||||
@@ -405,7 +401,7 @@ export function renderRecentSession(params: {
|
||||
@click=${(event: MouseEvent) => {
|
||||
event.stopPropagation();
|
||||
const trigger = event.currentTarget as HTMLElement;
|
||||
host.toggleSessionMenu(session, menuSession, trigger);
|
||||
host.toggleSessionMenu(session, trigger);
|
||||
}}
|
||||
>
|
||||
${icons.moreHorizontal}
|
||||
|
||||
@@ -59,7 +59,6 @@ export type SidebarRecentSession = {
|
||||
createdActor?: SessionCreatedActor;
|
||||
archivedBy?: SessionCreatedActor;
|
||||
label: string;
|
||||
meta: string;
|
||||
/** Compact repo/branch/node line for work sessions. */
|
||||
subtitle?: string;
|
||||
href: string;
|
||||
|
||||
@@ -300,17 +300,13 @@ class AppSidebar extends AppSidebarSessionNavigationElement implements SessionLi
|
||||
void this.sessionOrganizer.patchSession(session, { pinned: !session.pinned });
|
||||
}
|
||||
|
||||
toggleSessionMenu(
|
||||
session: SidebarRecentSession,
|
||||
menuSession: SidebarRecentSession,
|
||||
trigger: HTMLElement,
|
||||
): void {
|
||||
toggleSessionMenu(session: SidebarRecentSession, trigger: HTMLElement): void {
|
||||
if (this.sidebarMenus.sessionMenu?.session.key === session.key) {
|
||||
this.sidebarMenus.closeSessionMenu();
|
||||
return;
|
||||
}
|
||||
const rect = trigger.getBoundingClientRect();
|
||||
this.sidebarMenus.openSessionMenu(menuSession, rect.right, rect.bottom + 4, trigger);
|
||||
this.sidebarMenus.openSessionMenu(session, rect.right, rect.bottom + 4, trigger);
|
||||
}
|
||||
|
||||
startSidebarSectionDrag(sectionId: string): void {
|
||||
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
} from "../lib/sessions/session-key.ts";
|
||||
import { renderSidebarAgentMenu, renderSidebarIdentityMenu } from "./app-sidebar-agent-menu.ts";
|
||||
import { renderSidebarCustomizeMenu, renderSidebarMoreMenu } from "./app-sidebar-nav-menus.ts";
|
||||
import { formatSidebarTimestamp } from "./app-sidebar-session-catalogs.ts";
|
||||
import {
|
||||
renderSidebarCatalogViewMenu,
|
||||
renderSidebarSessionGroupMenu,
|
||||
@@ -180,7 +181,7 @@ export function renderSidebarSessionMenuForController(controller: SidebarMenusCo
|
||||
category: batchRows ? sharedCategory : (session.category ?? null),
|
||||
}}
|
||||
.selectionCount=${rows.length}
|
||||
.lastActive=${batchRows ? "" : session.meta}
|
||||
.lastActive=${batchRows ? "" : formatSidebarTimestamp(session.updatedAt)}
|
||||
.anchor=${menu}
|
||||
.trigger=${controller.sessionMenuTrigger}
|
||||
.disabled=${!host.connected}
|
||||
|
||||
Reference in New Issue
Block a user