Add button to edit tools in course home

pull/4375/head
Angel Fernando Quiroz Campos 3 years ago
parent c79db7ad20
commit ad2b9ea0ae
  1. 12
      assets/css/scss/atoms/_buttons.scss
  2. 65
      assets/vue/components/course/CourseToolList.vue
  3. 7
      assets/vue/components/course/Layout.vue
  4. 44
      assets/vue/components/course/ShortCutList.vue
  5. 73
      assets/vue/views/course/Home.vue

@ -567,3 +567,15 @@ $border-color_12: #9333EA;
} }
} }
} }
// toggle button
.p-togglebutton{
&.p-button {
&.p-highlight {
&.p-button-plain {
@apply bg-support-1 text-primary;
}
}
}
}

@ -1,14 +1,14 @@
<template> <template>
<div class="course-tool"> <div class="course-tool">
<a <a
:aria-labelledby="`course-tool-${tool.ctool.iid}`"
:href="goToCourseTool(course, tool)" :href="goToCourseTool(course, tool)"
class="course-tool__link" class="course-tool__link"
:aria-labelledby="`course-tool-${tool.ctool.iid}`"
> >
<span <span
:class="tool.tool.icon" :class="tool.tool.icon"
class="course-tool__icon mdi"
aria-hidden="true" aria-hidden="true"
class="course-tool__icon mdi"
/> />
</a> </a>
@ -21,7 +21,7 @@
<div class="course-tool__options"> <div class="course-tool__options">
<button <button
v-if="isCurrentTeacher && changeVisibility" v-if="isCurrentTeacher && !isSorting && !isCustomizing"
@click="changeVisibility(course, tool)" @click="changeVisibility(course, tool)"
> >
<v-icon <v-icon
@ -37,6 +37,16 @@
</button> </button>
<a <a
v-if="isCurrentTeacher && isCustomizing"
href="#"
>
<v-icon
icon="mdi-pencil"
size="lg"
/>
</a>
<!-- a
v-if="isCurrentTeacher" v-if="isCurrentTeacher"
:href="goToSettingCourseTool(course, tool)" :href="goToSettingCourseTool(course, tool)"
> >
@ -44,39 +54,42 @@
icon="mdi-cog" icon="mdi-cog"
size="lg" size="lg"
/> />
</a> </a -->
</div> </div>
</div> </div>
</template> </template>
<script setup> <script setup>
import { useStore } from 'vuex' import { useStore } from 'vuex';
import { computed } from 'vue' import { computed, inject } from 'vue';
const store = useStore(); const store = useStore();
const isSorting = inject('isSorting');
const isCustomizing = inject('isCustomizing');
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef
defineProps({ defineProps({
course: { course: {
type: Object, type: Object,
required: true, required: true,
}, },
tool: { tool: {
type: Object, type: Object,
required: true, required: true,
}, },
goToCourseTool: { goToCourseTool: {
type: Function, type: Function,
required: true, required: true,
}, },
changeVisibility: { changeVisibility: {
type: Function, type: Function,
required: true, required: true,
}, },
goToSettingCourseTool: { goToSettingCourseTool: {
type: Function, type: Function,
required: true, required: true,
}, },
}); });
const isCurrentTeacher = computed(() => store.getters['security/isCurrentTeacher']); const isCurrentTeacher = computed(() => store.getters['security/isCurrentTeacher']);

@ -1,9 +1,6 @@
<template> <template>
<router-view></router-view> <router-view />
</template> </template>
<script> <script setup>
export default {
name: 'CourseLayout'
}
</script> </script>

@ -1,22 +1,20 @@
<template> <template>
<div <div
class="bg-gray-100 rounded-xl p-2 shadow-md" class="bg-gray-100 rounded-xl p-2 shadow-md"
> >
<div class="flex flex-col flex-center"> <div class="flex flex-col flex-center">
<div class="mx-auto"> <div class="mx-auto">
<a :href="goToShortCut(shortcut)"> <a :href="goToShortCut(shortcut)">
<img <img
:alt="shortcut.name" :alt="shortcut.name"
:src="'/img/tools/' + shortcut.type + '.png'" :src="'/img/tools/' + shortcut.type + '.png'"
class="w-32 h-32 object-contain" class="w-32 h-32 object-contain"
/> >
</a> </a>
</div> </div>
<div class="flex flex-row gap-2 text-gray-500 pt-3"> <div class="flex flex-row gap-2 text-gray-500 pt-3">
<a <a>
>
{{ shortcut.name }} {{ shortcut.name }}
</a> </a>
</div> </div>
@ -24,27 +22,17 @@
</div> </div>
</template> </template>
<script> <script setup>
import {mapGetters} from "vuex";
export default { // eslint-disable-next-line no-undef
name: 'ShortCutList', defineProps({
props: { shortcut: {
shortcut: Object, type: Object,
goToShortCut: { required: true,
type: Function,
required: true
},
changeVisibility: {
type: Function,
required: false
},
}, },
computed: { goToShortCut: {
...mapGetters({ type: Function,
'isCurrentTeacher': 'security/isCurrentTeacher', required: true
}),
}, },
}; });
</script> </script>

@ -94,7 +94,69 @@
v-html="intro.introText" v-html="intro.introText"
/> />
<h6 v-t="'Tools'" /> <div class="flex items-center gap-6">
<h6 v-t="'Tools'" />
<Skeleton
v-if="!course"
height="2rem"
width="6rem"
class="ml-auto aspect-square"
/>
<Skeleton
v-if="!course"
height="2rem"
width="6rem"
class="aspect-square"
/>
<Skeleton
v-if="!course"
height="2rem"
width="6rem"
class="aspect-square"
/>
<Skeleton
v-if="!course"
height="2rem"
width="6rem"
class="aspect-square"
/>
<Button
v-if="course && isCurrentTeacher"
icon="mdi mdi-eye"
:label="t('Show all')"
class="p-button-text p-button-plain p-button-sm ml-auto"
:disabled="isSorting || isCustomizing"
/>
<Button
v-if="course && isCurrentTeacher"
icon="mdi mdi-eye-off"
:label="t('Hide all')"
class="p-button-text p-button-plain p-button-sm"
:disabled="isSorting || isCustomizing"
/>
<ToggleButton
v-if="course && isCurrentTeacher"
v-model="isSorting"
on-icon="mdi mdi-swap-vertical"
off-icon="mdi mdi-swap-vertical"
:on-label="t('Sort')"
:off-label="t('Sort')"
class="p-button-text p-button-plain p-button-sm"
:disabled="isCustomizing"
/>
<ToggleButton
v-if="course && isCurrentTeacher"
v-model="isCustomizing"
on-icon="mdi mdi-format-paint"
off-icon="mdi mdi-format-paint"
:on-label="t('Customize')"
:off-label="t('Customize')"
class="p-button-text p-button-plain p-button-sm"
:disabled="isSorting"
/>
</div>
<hr class="mt-0 mb-4"> <hr class="mt-0 mb-4">
<div <div
@ -155,13 +217,14 @@
</template> </template>
<script setup> <script setup>
import { computed, ref } from 'vue'; import { computed, provide, ref } from 'vue';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import axios from 'axios'; import axios from 'axios';
import { ENTRYPOINT } from '../../config/entrypoint'; import { ENTRYPOINT } from '../../config/entrypoint';
import Button from 'primevue/button'; import Button from 'primevue/button';
import ToggleButton from 'primevue/togglebutton';
import TieredMenu from 'primevue/tieredmenu'; import TieredMenu from 'primevue/tieredmenu';
import CourseToolList from '../../components/course/CourseToolList.vue'; import CourseToolList from '../../components/course/CourseToolList.vue';
import ShortCutList from '../../components/course/ShortCutList.vue'; import ShortCutList from '../../components/course/ShortCutList.vue';
@ -187,6 +250,12 @@ let sessionId = route.query.sid ?? 0;
const isCurrentTeacher = computed(() => store.getters['security/isCurrentTeacher']); const isCurrentTeacher = computed(() => store.getters['security/isCurrentTeacher']);
const isSorting = ref(false);
const isCustomizing = ref(false);
provide('isSorting', isSorting);
provide('isCustomizing', isCustomizing);
// Remove the course session state. // Remove the course session state.
store.dispatch('session/cleanSession'); store.dispatch('session/cleanSession');

Loading…
Cancel
Save