Skip to content

Commit 8661714

Browse files
authored
refactor(stage-ui): settings store simplified (#965)
1 parent 372f356 commit 8661714

File tree

9 files changed

+406
-280
lines changed

9 files changed

+406
-280
lines changed

packages/stage-ui/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"./stores/providers/aliyun": "./src/stores/providers/aliyun/index.ts",
3030
"./stores/analytics": "./src/stores/analytics/index.ts",
3131
"./stores/character": "./src/stores/character/index.ts",
32+
"./stores/settings": "./src/stores/settings/index.ts",
3233
"./stores/*": "./src/stores/*.ts",
3334
"./stores": "./src/stores/index.ts",
3435
"./workers/vad": "./src/workers/vad/index.ts",

packages/stage-ui/src/stores/settings.ts

Lines changed: 0 additions & 280 deletions
This file was deleted.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { useLocalStorageManualReset } from '@proj-airi/stage-shared/composables'
2+
import { defineStore } from 'pinia'
3+
import { onMounted, watch } from 'vue'
4+
5+
import { useAudioDevice } from '../audio'
6+
7+
export const useSettingsAudioDevice = defineStore('settings-audio-devices', () => {
8+
const { audioInputs, deviceConstraints, selectedAudioInput: selectedAudioInputNonPersist, startStream, stopStream, stream, askPermission } = useAudioDevice()
9+
10+
const selectedAudioInputPersist = useLocalStorageManualReset<string>('settings/audio/input', selectedAudioInputNonPersist.value)
11+
const selectedAudioInputEnabledPersist = useLocalStorageManualReset<boolean>('settings/audio/input/enabled', false)
12+
13+
watch(selectedAudioInputPersist, (newValue) => {
14+
selectedAudioInputNonPersist.value = newValue
15+
})
16+
17+
watch(selectedAudioInputEnabledPersist, (val) => {
18+
if (val) {
19+
startStream()
20+
}
21+
else {
22+
stopStream()
23+
}
24+
})
25+
26+
onMounted(() => {
27+
const hasSelectedInput = selectedAudioInputPersist.value
28+
&& audioInputs.value.some(device => device.deviceId === selectedAudioInputPersist.value)
29+
30+
if (selectedAudioInputEnabledPersist.value && hasSelectedInput) {
31+
startStream()
32+
}
33+
if (selectedAudioInputNonPersist.value && !selectedAudioInputEnabledPersist.value) {
34+
selectedAudioInputPersist.value = selectedAudioInputNonPersist.value
35+
}
36+
})
37+
38+
function resetState() {
39+
selectedAudioInputPersist.reset()
40+
selectedAudioInputNonPersist.value = ''
41+
selectedAudioInputEnabledPersist.reset()
42+
stopStream()
43+
}
44+
45+
return {
46+
audioInputs,
47+
deviceConstraints,
48+
selectedAudioInput: selectedAudioInputPersist,
49+
enabled: selectedAudioInputEnabledPersist,
50+
51+
stream,
52+
53+
askPermission,
54+
startStream,
55+
stopStream,
56+
resetState,
57+
}
58+
})
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { useLocalStorageManualReset } from '@proj-airi/stage-shared/composables'
2+
import { defineStore } from 'pinia'
3+
4+
export const useSettingsControlsIsland = defineStore('settings-controls-island', () => {
5+
const allowVisibleOnAllWorkspaces = useLocalStorageManualReset<boolean>('settings/allow-visible-on-all-workspaces', true)
6+
const controlsIslandIconSize = useLocalStorageManualReset<'auto' | 'large' | 'small'>('settings/controls-island/icon-size', 'auto')
7+
8+
function resetState() {
9+
allowVisibleOnAllWorkspaces.reset()
10+
controlsIslandIconSize.reset()
11+
}
12+
13+
return {
14+
allowVisibleOnAllWorkspaces,
15+
controlsIslandIconSize,
16+
resetState,
17+
}
18+
})

0 commit comments

Comments
 (0)