Skip to content

Commit 930dd91

Browse files
committed
refactor
1 parent 3aa77c2 commit 930dd91

File tree

6 files changed

+25
-25
lines changed

6 files changed

+25
-25
lines changed

src/codemirror/CodeMirror.vue

+11-4
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,12 @@ onMounted(() => {
4747
})
4848
4949
watchEffect(() => {
50-
editor.setValue(props.value)
50+
const cur = editor.getValue()
51+
if (props.value !== cur) {
52+
editor.setValue(props.value)
53+
}
5154
})
55+
5256
watchEffect(() => {
5357
editor.setOption('mode', props.mode)
5458
})
@@ -58,9 +62,12 @@ onMounted(() => {
5862
}, 50)
5963
6064
if (needAutoResize) {
61-
window.addEventListener('resize', debounce(() => {
62-
editor.refresh()
63-
}))
65+
window.addEventListener(
66+
'resize',
67+
debounce(() => {
68+
editor.refresh()
69+
})
70+
)
6471
}
6572
})
6673
</script>

src/editor/Editor.vue

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ import { ReplStore } from '../store'
99
const store = inject('store') as ReplStore
1010
1111
const onChange = debounce((code: string) => {
12-
store.activeFile.code = code
12+
store.state.activeFile.code = code
1313
}, 250)
1414
1515
const activeMode = computed(() =>
16-
store.state.activeFilename.endsWith('.vue') ? 'htmlmixed' : 'javascript'
16+
store.state.activeFile.filename.endsWith('.vue') ? 'htmlmixed' : 'javascript'
1717
)
1818
</script>
1919

@@ -22,7 +22,7 @@ const activeMode = computed(() =>
2222
<div class="editor-container">
2323
<CodeMirror
2424
@change="onChange"
25-
:value="store.state.activeCode"
25+
:value="store.state.activeFile.code"
2626
:mode="activeMode"
2727
/>
2828
<Message :err="store.state.errors[0]" />

src/editor/FileSelector.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ function doneAddFile() {
4949
<div
5050
v-for="(file, i) in files"
5151
class="file"
52-
:class="{ active: store.state.activeFilename === file }"
52+
:class="{ active: store.state.activeFile.filename === file }"
5353
@click="store.setActive(file)"
5454
>
5555
<span class="label">{{ file }}</span>
@@ -73,7 +73,7 @@ function doneAddFile() {
7373
<div
7474
v-if="showImportMap"
7575
class="file import-map"
76-
:class="{ active: store.state.activeFilename === importMapFile }"
76+
:class="{ active: store.state.activeFile.filename === importMapFile }"
7777
@click="store.setActive(importMapFile)"
7878
>
7979
<span class="label">Import Map</span>

src/output/Output.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const mode = ref<Modes>('preview')
3434
v-else
3535
readonly
3636
:mode="mode === 'css' ? 'css' : 'javascript'"
37-
:value="store.activeFile.compiled[mode]"
37+
:value="store.state.activeFile.compiled[mode]"
3838
/>
3939
</div>
4040
</template>

src/store.ts

+6-13
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ export class File {
3333

3434
export interface StoreState {
3535
files: Record<string, File>
36-
activeFilename: string
37-
activeCode: string
36+
activeFile: File
3837
errors: (string | Error)[]
3938
vueRuntimeURL: string
4039
}
@@ -69,15 +68,14 @@ export class ReplStore {
6968

7069
this.state = reactive({
7170
files,
72-
activeFilename: MAIN_FILE,
73-
activeCode: files[MAIN_FILE].code,
71+
activeFile: files[MAIN_FILE],
7472
errors: [],
7573
vueRuntimeURL: this.defaultVueRuntimeURL
7674
})
7775

7876
this.initImportMap()
7977

80-
watchEffect(() => compileFile(this, this.activeFile))
78+
watchEffect(() => compileFile(this, this.state.activeFile))
8179

8280
for (const file in this.state.files) {
8381
if (file !== MAIN_FILE) {
@@ -86,13 +84,8 @@ export class ReplStore {
8684
}
8785
}
8886

89-
get activeFile() {
90-
return this.state.files[this.state.activeFilename]
91-
}
92-
9387
setActive(filename: string) {
94-
this.state.activeFilename = filename
95-
this.state.activeCode = this.activeFile.code
88+
this.state.activeFile = this.state.files[filename]
9689
}
9790

9891
addFile(filename: string) {
@@ -102,8 +95,8 @@ export class ReplStore {
10295

10396
deleteFile(filename: string) {
10497
if (confirm(`Are you sure you want to delete ${filename}?`)) {
105-
if (this.state.activeFilename === filename) {
106-
this.state.activeFilename = MAIN_FILE
98+
if (this.state.activeFile.filename === filename) {
99+
this.state.activeFile = this.state.files[MAIN_FILE]
107100
}
108101
delete this.state.files[filename]
109102
}

test/main.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ const App = {
1313

1414
watchEffect(() => history.replaceState({}, '', store.serialize()))
1515

16-
setTimeout(() => {
16+
setInterval(() => {
1717
store.setFiles({
1818
'App.vue': '<template>Force update files</template>'
1919
})
20-
}, 1000);
20+
}, 5000);
2121

2222
// store.setVueVersion('3.2.8')
2323

0 commit comments

Comments
 (0)