diff --git a/tools/generate-svg.ts b/tools/generate-svg.ts index 004ed520425..2b3d3ae745a 100755 --- a/tools/generate-svg.ts +++ b/tools/generate-svg.ts @@ -47,8 +47,8 @@ function processAssetsSvgFiles(pattern: string, opts: Opts = {}) { return glob(pattern).map((path) => processAssetsSvgFile(path, opts)); } -function lowercaseKeys(obj: Record) { - return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key.toLowerCase(), value])); +function lowercaseKeys>(obj: T): T { + return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key.toLowerCase(), value])) as T; } async function processMaterialFileIcons() { diff --git a/web_src/js/components/ActionRunJobView.vue b/web_src/js/components/ActionRunJobView.vue index ac06e6ab88a..6217db219e5 100644 --- a/web_src/js/components/ActionRunJobView.vue +++ b/web_src/js/components/ActionRunJobView.vue @@ -25,6 +25,17 @@ function isLogElementInViewport(el: Element, {extraViewPortHeight}={extraViewPor return 0 <= rect.bottom && rect.bottom <= window.innerHeight + extraViewPortHeight; } +export type ActionRunJobViewLocale = { + status: Record, + showTimeStamps: string, + showLogSeconds: string, + showFullScreen: string, + logsAlwaysAutoScroll: string, + logsAlwaysExpandRunning: string, + downloadLogs: string, + copyOutput: string, +}; + type Step = { summary: string, duration: string, @@ -84,7 +95,7 @@ const props = defineProps<{ store: ActionRunViewStore, jobId: number; actionsViewUrl: string; - locale: Record; + locale: ActionRunJobViewLocale; }>(); const store = props.store; const {currentRun: run} = toRefs(store.viewData); diff --git a/web_src/js/components/ActionRunSummaryView.vue b/web_src/js/components/ActionRunSummaryView.vue index efd2c79e9be..eb488502494 100644 --- a/web_src/js/components/ActionRunSummaryView.vue +++ b/web_src/js/components/ActionRunSummaryView.vue @@ -1,16 +1,26 @@