Skip to content

Commit e4b9c08

Browse files
committed
align viewTypes w/ question view spec...
`data` array as prop
1 parent a23b565 commit e4b9c08

File tree

3 files changed

+52
-28
lines changed

3 files changed

+52
-28
lines changed

packages/standalone-ui/src/questions/MultipleChoiceQuestionView.vue

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
</template>
1111

1212
<script setup lang="ts">
13-
import { ref, PropType, defineOptions } from 'vue';
13+
import { ref, computed, PropType, defineOptions } from 'vue';
1414
import { useViewable, useQuestionView } from '@vue-skuilder/courseware';
1515
import { MultipleChoiceQuestion } from './MultipleChoiceQuestion';
1616
import { ViewData } from '@vue-skuilder/common';
@@ -20,28 +20,38 @@ defineOptions({
2020
});
2121
2222
const props = defineProps({
23-
questionText: {
24-
type: String,
25-
required: true,
26-
},
27-
options: {
28-
type: Array as () => string[],
29-
required: true,
30-
},
3123
data: {
3224
type: Array as PropType<ViewData[]>,
3325
required: true,
3426
},
27+
modifyDifficulty: {
28+
type: Number,
29+
required: false,
30+
default: 0,
31+
},
3532
});
3633
34+
const emit = defineEmits(['emit-response']);
35+
3736
const selectedAnswer = ref('');
3837
39-
const viewableUtils = useViewable(props, () => {}, 'MultipleChoiceQuestionView');
38+
const viewableUtils = useViewable(props, emit, 'MultipleChoiceQuestionView');
4039
const questionUtils = useQuestionView<MultipleChoiceQuestion>(viewableUtils);
4140
4241
// Initialize question
4342
questionUtils.question.value = new MultipleChoiceQuestion(props.data);
4443
44+
// Extract question text and options from the question instance
45+
const questionText = computed(() => {
46+
const question = new MultipleChoiceQuestion(props.data);
47+
return (question as any)._questionText || '';
48+
});
49+
50+
const options = computed(() => {
51+
const question = new MultipleChoiceQuestion(props.data);
52+
return (question as any).options || [];
53+
});
54+
4555
const submitAnswer = () => {
4656
if (selectedAnswer.value) {
4757
questionUtils.submitAnswer({ response: selectedAnswer.value });

packages/standalone-ui/src/questions/NumberRangeQuestionView.vue

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</template>
88

99
<script setup lang="ts">
10-
import { ref, PropType, defineOptions } from 'vue';
10+
import { ref, computed, PropType, defineOptions } from 'vue';
1111
import { useViewable, useQuestionView } from '@vue-skuilder/courseware';
1212
import { NumberRangeQuestion } from './NumberRangeQuestion';
1313
import { ViewData } from '@vue-skuilder/common';
@@ -17,24 +17,33 @@ defineOptions({
1717
});
1818
1919
const props = defineProps({
20-
questionText: {
21-
type: String,
22-
required: true,
23-
},
2420
data: {
2521
type: Array as PropType<ViewData[]>,
2622
required: true,
2723
},
24+
modifyDifficulty: {
25+
type: Number,
26+
required: false,
27+
default: 0,
28+
},
2829
});
2930
31+
const emit = defineEmits(['emit-response']);
32+
3033
const userAnswer = ref<number | null>(null);
3134
32-
const viewableUtils = useViewable(props, () => {}, 'NumberRangeQuestionView');
35+
const viewableUtils = useViewable(props, emit, 'NumberRangeQuestionView');
3336
const questionUtils = useQuestionView<NumberRangeQuestion>(viewableUtils);
3437
3538
// Initialize question
3639
questionUtils.question.value = new NumberRangeQuestion(props.data);
3740
41+
// Extract question text from the question instance
42+
const questionText = computed(() => {
43+
const question = new NumberRangeQuestion(props.data);
44+
return (question as any).questionText || '';
45+
});
46+
3847
const submitAnswer = () => {
3948
if (userAnswer.value !== null) {
4049
questionUtils.submitAnswer({ response: userAnswer.value });

packages/standalone-ui/src/questions/SimpleTextQuestionView.vue

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,53 @@
11
<template>
22
<div>
3+
<p>HELLO WORLD</p>
34
<p>{{ questionText }}</p>
45
<input v-model="userAnswer" @keyup.enter="submitAnswer" placeholder="Your answer" />
56
<button @click="submitAnswer">Submit</button>
67
</div>
78
</template>
89

910
<script setup lang="ts">
10-
import { ref, onMounted, PropType, defineOptions } from 'vue';
11+
import { ref, computed, PropType, defineOptions } from 'vue';
1112
import { useViewable, useQuestionView } from '@vue-skuilder/courseware';
1213
import { SimpleTextQuestion } from './SimpleTextQuestion';
1314
import { ViewData } from '@vue-skuilder/common';
1415
1516
defineOptions({
16-
name: 'SimpleTextQuestionView'
17+
name: 'SimpleTextQuestionView',
1718
});
1819
1920
const props = defineProps({
20-
questionText: {
21-
type: String,
22-
required: true,
23-
},
2421
data: {
2522
type: Array as PropType<ViewData[]>,
2623
required: true,
2724
},
25+
modifyDifficulty: {
26+
type: Number,
27+
required: false,
28+
default: 0,
29+
},
2830
});
2931
32+
const emit = defineEmits(['emit-response']);
33+
3034
const userAnswer = ref('');
3135
32-
const viewableUtils = useViewable(props, () => {}, 'SimpleTextQuestionView');
36+
const viewableUtils = useViewable(props, emit, 'SimpleTextQuestionView');
3337
const questionUtils = useQuestionView<SimpleTextQuestion>(viewableUtils);
3438
3539
// Initialize question
3640
questionUtils.question.value = new SimpleTextQuestion(props.data);
3741
42+
// Extract question text from the question instance
43+
const questionText = computed(() => {
44+
const question = new SimpleTextQuestion(props.data);
45+
return (question as any).questionText || '';
46+
});
47+
3848
const submitAnswer = () => {
3949
questionUtils.submitAnswer({ response: userAnswer.value });
4050
};
41-
42-
onMounted(() => {
43-
// Optionally, you might want to focus the input field on mount
44-
// This requires a ref on the input element
45-
});
4651
</script>
4752

4853
<style scoped>

0 commit comments

Comments
 (0)