Skip to content

Commit c093b8f

Browse files
committed
fix: clef selector
1 parent 2462a4f commit c093b8f

File tree

4 files changed

+38
-23
lines changed

4 files changed

+38
-23
lines changed

src/games/training/TrainingSettings.vue

+4-6
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<input
1111
type="checkbox"
1212
id="treble"
13-
:value="allClefs[0]"
13+
value="treble"
1414
v-model="settings.clefs"
1515
/>
1616
<label for="treble">Treble</label>
@@ -20,7 +20,7 @@
2020
<input
2121
type="checkbox"
2222
id="bass"
23-
:value="allClefs[1]"
23+
value="bass"
2424
v-model="settings.clefs"
2525
/>
2626
<label for="bass">Bass</label>
@@ -30,7 +30,7 @@
3030
<input
3131
type="checkbox"
3232
id="treble8"
33-
:value="allClefs[2]"
33+
value="treble8vb"
3434
v-model="settings.clefs"
3535
/>
3636
<label for="treble8">Treble (one octave lower)</label>
@@ -93,7 +93,6 @@
9393
<script lang="ts">
9494
import Vue from 'vue';
9595
import Clef from '@/utils/Clef';
96-
import { clefs } from '../../utils/noteConstants';
9796
9897
export default Vue.extend({
9998
data() {
@@ -102,8 +101,7 @@ export default Vue.extend({
102101
clefs: [],
103102
tasks: [],
104103
keyLabels: true
105-
},
106-
allClefs: clefs
104+
}
107105
};
108106
},
109107
props: {

src/games/training/index.vue

+28-16
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,26 @@ import TaskSingleNote from '@/tasks/TaskSingleNote';
5252
import TaskChord from '@/tasks/TaskChord';
5353
import { randomPattern } from '@/tasks/PatternTasks';
5454
import Clef from '@/utils/Clef';
55+
import { clefs } from '@/utils/noteConstants';
56+
57+
type TaskNames = ('singleNotes' | 'patterns' | 'chords')[];
58+
59+
interface Settings {
60+
clefs: string[];
61+
tasks: TaskNames;
62+
keyLabels: boolean;
63+
}
64+
65+
const defaultSettings: Settings = {
66+
clefs: [],
67+
tasks: ['singleNotes'],
68+
keyLabels: true
69+
};
5570
5671
function randomTask(
5772
target: HTMLElement,
58-
{ tasks: viableTasks, clefs } = defaultSettings
73+
clefs: Clef[],
74+
viableTasks: TaskNames
5975
): Task {
6076
const tasks = {
6177
singleNotes: () => TaskSingleNote,
@@ -68,18 +84,6 @@ function randomTask(
6884
return new Task(target, clefs);
6985
}
7086
71-
interface Settings {
72-
clefs: Clef[];
73-
tasks: ('singleNotes' | 'patterns' | 'chords')[];
74-
keyLabels: boolean;
75-
}
76-
77-
const defaultSettings: Settings = {
78-
clefs: [],
79-
tasks: ['singleNotes'],
80-
keyLabels: true
81-
};
82-
8387
export default Vue.extend({
8488
data() {
8589
return {
@@ -122,13 +126,21 @@ export default Vue.extend({
122126
newTask() {
123127
this.task = randomTask(
124128
this.$refs.noteRenderer as HTMLElement,
125-
this.settings
129+
this.clefs,
130+
this.settings.tasks
126131
);
127132
this.task.render();
128133
}
129134
},
135+
computed: {
136+
clefs() {
137+
return clefs.filter(c => this.settings.clefs.includes(c.id));
138+
}
139+
},
130140
created() {
131-
this.settings.clefs = this.$store.state.instrument.clefs;
141+
this.settings.clefs = this.$store.state.instrument.clefs.map(
142+
(c: Clef) => c.id
143+
);
132144
},
133145
mounted() {
134146
this.newTask();
@@ -154,7 +166,7 @@ export default Vue.extend({
154166
return;
155167
}
156168
157-
if (!this.settings.clefs.map(c => c.name).includes(this.task.clef.name)) {
169+
if (!this.clefs.map(c => c.id).includes(this.task.clef.id)) {
158170
this.newTask();
159171
}
160172
},

src/utils/Clef.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export type ClefName = 'treble' | 'bass' | 'treble-8vb';
1+
export type ClefName = 'treble' | 'bass';
22
export type ClefAnnotation = '8va' | '8vb';
33

44
const annotations = {
@@ -17,4 +17,8 @@ export default class Clef {
1717
get octaveShift() {
1818
return this.annotation ? annotations[this.annotation] : 0;
1919
}
20+
21+
get id() {
22+
return this.name + (this.annotation || '');
23+
}
2024
}

src/utils/noteConstants.ts

+1
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export const bass = new Clef('bass', 36, 65); // C2 - F4
88
export const treblevb8 = new Clef('treble', 43, 71, '8vb');
99

1010
export const clefs: Clef[] = [treble, bass, treblevb8];
11+
export const clefIds = clefs.map(c => c.id);

0 commit comments

Comments
 (0)