Skip to content

Commit be7ffbd

Browse files
committed
feat: add useStatusBarItem
1 parent d2cf9c5 commit be7ffbd

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

packages/core/src/composables/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export * from './useNotebookEditorSelections'
2828
export * from './useNotebookEditorVisibleRanges'
2929
export * from './useOpenedTerminals'
3030
export * from './useOutputChannel'
31+
export * from './useStatusBarItem'
3132
export * from './useTaskExecutions'
3233
export * from './useTerminalState'
3334
export * from './useTextEditorCommand'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import type { MaybeRefOrGetter } from '@vue/runtime-core'
2+
import { toValue, watchEffect } from '@vue/runtime-core'
3+
import type { StatusBarAlignment, StatusBarItem } from 'vscode'
4+
import { window } from 'vscode'
5+
import { useDisposable } from './useDisposable'
6+
7+
export interface UseStatusBarItemOptions {
8+
id?: string
9+
alignment?: StatusBarAlignment
10+
priority?: number
11+
name?: MaybeRefOrGetter<StatusBarItem['name']>
12+
text?: MaybeRefOrGetter<StatusBarItem['text']>
13+
tooltip?: MaybeRefOrGetter<StatusBarItem['tooltip']>
14+
color?: MaybeRefOrGetter<StatusBarItem['color']>
15+
backgroundColor?: MaybeRefOrGetter<StatusBarItem['backgroundColor']>
16+
command?: MaybeRefOrGetter<StatusBarItem['command']>
17+
accessibilityInformation?: MaybeRefOrGetter<StatusBarItem['accessibilityInformation']>
18+
}
19+
20+
/**
21+
* @reactive `window.createStatusBarItem`
22+
*/
23+
export function useStatusBarItem(options: UseStatusBarItemOptions): StatusBarItem {
24+
const item = useDisposable(options.id
25+
? window.createStatusBarItem(options.id, options.alignment, options.priority)
26+
: window.createStatusBarItem(options.alignment, options.priority))
27+
28+
function reactivelySet(key: string) {
29+
const value = (options as any)[key]
30+
if (value != null)
31+
watchEffect(() => (item as any)[key] = toValue(value))
32+
}
33+
34+
[
35+
'name',
36+
'text',
37+
'tooltip',
38+
'color',
39+
'backgroundColor',
40+
'command',
41+
'accessibilityInformation',
42+
].forEach(reactivelySet)
43+
44+
return item
45+
}

0 commit comments

Comments
 (0)