Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
ffa5058
Add allow learners to mark complete checkbox
sairina Apr 29, 2022
0a34f46
Initial implementation of validation for duration field
sairina May 10, 2022
1479694
Initial implementation for completion/duration for audio/video
sairina May 16, 2022
710d331
Initial implementation of audio/video completion and duration options
sairina May 20, 2022
df932ec
Refactor - move exact time into short/long activity and rename to act…
sairina May 23, 2022
a4e831b
Update defaults and validation for textfield
sairina May 23, 2022
72533ed
Update clearable dropdown options and logic for switching between all…
sairina May 24, 2022
8898b9f
Update validation and warning for exact time activity
sairina May 24, 2022
959e8c8
Make minutes persist most recent value in ActivityDuration and refact…
sairina May 24, 2022
d2187ca
Initial UI done for exercises
sairina Jun 22, 2022
32c108d
Update to show completion dropdown when practice quizzes enabled
sairina Jun 22, 2022
58fce33
Fix size of v-flex mastery criteria dropdown
sairina Jun 22, 2022
02bceef
Update getter for default audio/video in duration dropdown
sairina Jul 1, 2022
d5cb2cb
Rename goal and mastery dropdown components
sairina Jul 1, 2022
4affd34
Clean up removed code from DetailsTabView
sairina Jul 1, 2022
5389ba6
Update strings to constants maps
sairina Jul 1, 2022
011150a
Update optional/required label for minutes in activity duration
sairina Jul 5, 2022
a350481
Add clearable option for UI in duration dropdown
sairina Jul 5, 2022
22df3db
Fix completion dropdown default state for complete duration, documents
sairina Jul 7, 2022
fab6825
Add duration dropdown validation
sairina Jul 8, 2022
01112bb
Specify validation for all content viewed vs complete duration
sairina Jul 8, 2022
96a9193
Remove disabled prop
sairina Jul 11, 2022
fa55600
Move completion/duration dropdown constants into constants.js
sairina Jul 12, 2022
6b84848
Move validation for activity duration into shared validation files
sairina Jul 12, 2022
48c2d12
Fix durationRules array, formatting, and update strings
sairina Jul 12, 2022
7835f4a
Remove masteryDropdown tests file
sairina Jul 12, 2022
839c85f
Remove test file
sairina Jul 12, 2022
66e4166
Fix linting
sairina Jul 12, 2022
ffa5d5f
Fix location for setting the information in content node
sairina Jul 13, 2022
7041af0
Reinstate validation for completion criteria/remove console.logs
sairina Jul 13, 2022
c10cfab
Fix completion criteria validation error
sairina Jul 14, 2022
f8552dc
Fix display of m of n fields and save state
sairina Jul 14, 2022
c7604d2
Fix linting
sairina Jul 14, 2022
a57dbae
Fix state for m and n fields
sairina Jul 15, 2022
548095c
Update style on default upload time
sairina Jul 15, 2022
47ada5f
Remove number type for v-autocomplete to get rid of up/down arrows
sairina Jul 15, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
<template>

<VFlex>
<VLayout row wrap justify-space-between>
<VFlex
v-if="audioVideoUpload && selectedDuration === 'exactTime'"
class="defaultUpload md2 sm3"
>
{{ defaultUploadTime }}
</VFlex>
<VFlex
v-else-if="selectedDuration === 'shortActivity' || selectedDuration === 'longActivity'"
md3
sm3
>
<VAutocomplete
v-model.number="minutes"
:step="increments"
box
:label="$tr('minutesRequired')"
:items="availableNumbers"
/>
</VFlex>
<VFlex v-else md3 sm3>
<VTextField
v-model="minutes"
type="number"
box
:min="minRange"
:max="maxRange"
:label="$tr('minutesRequired')"
:rules="minutesRules"
/>
</VFlex>
</VLayout>
<VLayout row wrap>
<VFlex v-if="showRequiredLabel">
{{ $tr('notOptionalLabel') }}
</VFlex>
<VFlex v-else-if="showOptionalLabel">
{{ $tr('optionalLabel') }}
</VFlex>
</VLayout>
</VFlex>

</template>

<script>

import debounce from 'lodash/debounce';
import { CompletionDropdownMap, DurationDropdownMap } from 'shared/constants';
import {
getShortActivityDurationValidators,
getLongActivityDurationValidators,
getActivityDurationValidators,
translateValidator,
} from 'shared/utils/validation';

const SHORT_MIN = 1;
const SHORT_MAX = 30;
const LONG_MIN = 31;
const LONG_MAX = 120;
const EXACT_MIN = 1;
const EXACT_MAX = 1200;
const SHORT_ACTIVITY_RANGE = [5, 10, 15, 20, 25, 30];
const LONG_ACTIVITY_RANGE = [40, 50, 60, 70, 80, 90, 100, 110, 120];

export default {
name: 'ActivityDuration',
props: {
selectedDuration: {
type: String,
default: '',
},
selectedCompletion: {
type: String,
default: '',
},
value: {
type: Number,
default: 0,
},
audioVideoUpload: {
type: Boolean,
default: false,
},
duration: {
type: Number,
default: null,
},
},
data() {
return {
defaultUploadTime: this.duration || `17:12`,
};
},
computed: {
showRequiredLabel() {
return (
this.selectedDuration !== DurationDropdownMap.EXACT_TIME &&
this.selectedCompletion === CompletionDropdownMap.completeDuration
);
},
showOptionalLabel() {
return this.selectedDuration !== DurationDropdownMap.EXACT_TIME;
},
increments() {
return this.selectedDuration === DurationDropdownMap.SHORT_ACTIVITY ? 5 : 10;
},
availableNumbers() {
return this.selectedDuration === DurationDropdownMap.SHORT_ACTIVITY
? SHORT_ACTIVITY_RANGE
: LONG_ACTIVITY_RANGE;
},

minutes: {
get() {
if (!this.value) {
return '';
}
return this.convertToMinutes(this.value);
},
set(value) {
this.handleValidateMinutes(value);
},
},
maxRange() {
if (this.selectedDuration === DurationDropdownMap.SHORT_ACTIVITY) {
return SHORT_MAX;
} else if (this.selectedDuration === 'longActivity') {
return LONG_MAX;
} else {
return EXACT_MAX;
}
},
minRange() {
if (this.selectedDuration === 'shortActvity') {
return SHORT_MIN;
} else if (this.selectedDuration === DurationDropdownMap.LONG_ACTIVITY) {
return LONG_MIN;
} else {
return EXACT_MIN;
}
},
minutesRules() {
if (this.selectedDuration === DurationDropdownMap.SHORT_ACTIVITY) {
return getShortActivityDurationValidators().map(translateValidator);
} else if (this.selectedDuration === DurationDropdownMap.LONG_ACTIVITY) {
return getLongActivityDurationValidators().map(translateValidator);
}
return getActivityDurationValidators().map(translateValidator);
},
},
created() {
this.handleValidateMinutes = debounce(this.validateMinutes, 500);
},
methods: {
convertToMinutes(seconds) {
return Math.floor(seconds / 60);
},
validateMinutes(value) {
if (this.selectedDuration === DurationDropdownMap.EXACT_TIME) {
this.$emit('input', value * 60);
} else {
if (value >= this.minRange && value <= this.maxRange) {
this.$emit('input', value * 60);
}
}
},
},
$trs: {
minutesRequired: 'Minutes',
optionalLabel:
'(Optional) Duration until resource is marked as complete. This value will not be shown to learners.',
notOptionalLabel:
'Duration until resource is marked as complete. This value will not be shown to learners.',
},
};

</script>
<style lang="scss" scoped>

.defaultUpload {
margin: 0.8em;
font-size: 1.2em;
}

</style>
Loading