From 48ebf329e256a5efa3c195a7ea00fb029097c85f Mon Sep 17 00:00:00 2001 From: christianbeeznst Date: Fri, 8 Mar 2024 18:12:01 -0500 Subject: [PATCH] Course: Implement course creation process for trainers --- assets/css/scss/atoms/_checkbox.scss | 2 +- assets/css/scss/atoms/_dropdown.scss | 9 +- .../basecomponents/BaseAutocomplete.vue | 10 +- .../basecomponents/BaseDropdown.vue | 8 +- .../basecomponents/BaseInputTags.vue | 58 ++ .../basecomponents/BaseInputText.vue | 34 +- .../basecomponents/BaseMultiSelect.vue | 67 ++ .../components/basecomponents/BaseToolbar.vue | 19 +- assets/vue/components/course/Form.vue | 340 +++++----- assets/vue/layouts/MyCourses.vue | 7 + assets/vue/services/courseService.js | 38 +- assets/vue/views/course/Create.vue | 87 +-- public/main/forum/forumfunction.inc.php | 10 +- public/main/inc/global.inc.php | 32 +- public/main/inc/lib/add_course.lib.inc.php | 601 ++++++++++-------- public/main/inc/lib/course.lib.php | 43 +- public/main/inc/lib/plugin.class.php | 43 +- .../Controller/CourseController.php | 105 +++ .../Repository/CourseCategoryRepository.php | 2 +- .../Repository/Node/CourseRepository.php | 18 +- 20 files changed, 933 insertions(+), 600 deletions(-) create mode 100644 assets/vue/components/basecomponents/BaseInputTags.vue create mode 100644 assets/vue/components/basecomponents/BaseMultiSelect.vue diff --git a/assets/css/scss/atoms/_checkbox.scss b/assets/css/scss/atoms/_checkbox.scss index 75e8557a91..e340cf6e2e 100644 --- a/assets/css/scss/atoms/_checkbox.scss +++ b/assets/css/scss/atoms/_checkbox.scss @@ -2,7 +2,7 @@ @apply h-4 w-4; .p-checkbox-box { - @apply border border-solid border-gray-50 bg-white h-4 rounded w-4 transition-none; + @apply border border-solid border-gray-50 bg-white h-4 rounded w-4 transition-none invisible; .p-checkbox-icon { @apply text-caption font-semibold text-white; diff --git a/assets/css/scss/atoms/_dropdown.scss b/assets/css/scss/atoms/_dropdown.scss index 08dcca0093..19aa3b17ce 100644 --- a/assets/css/scss/atoms/_dropdown.scss +++ b/assets/css/scss/atoms/_dropdown.scss @@ -1,4 +1,4 @@ -.p-dropdown { +.p-dropdown, .p-multiselect { @apply border border-support-3 bg-white rounded-lg transition w-full duration-200 hover:border-primary hover:text-gray-90 hover:outline-0 hover:outline-none; @@ -8,7 +8,7 @@ } } - .p-dropdown-label { + .p-dropdown-label, .p-multiselect-label { @apply bg-transparent border-none focus:outline-0 focus:outline-none; @@ -29,7 +29,7 @@ } } -.p-dropdown-panel { +.p-dropdown-panel, .p-autocomplete-panel, .p-multiselect-panel { @apply bg-white rounded-lg text-gray-90 shadow-lg; .p-dropdown-header { @@ -88,4 +88,7 @@ } } } +.p-multiselect-label-container { + @apply p-2; +} diff --git a/assets/vue/components/basecomponents/BaseAutocomplete.vue b/assets/vue/components/basecomponents/BaseAutocomplete.vue index 4a2de10ea1..06bd4bb145 100644 --- a/assets/vue/components/basecomponents/BaseAutocomplete.vue +++ b/assets/vue/components/basecomponents/BaseAutocomplete.vue @@ -86,8 +86,12 @@ const baseModel = ref([]) const suggestions = ref([]) const onComplete = async (event) => { - const members = await props.search(event.query) - - suggestions.value = members.length > 0 ? members : [] + try { + const members = await props.search(event.query) + suggestions.value = members && members.length ? members : [] + } catch (error) { + console.error('Error during onComplete:', error) + suggestions.value = [] + } } diff --git a/assets/vue/components/basecomponents/BaseDropdown.vue b/assets/vue/components/basecomponents/BaseDropdown.vue index 6c07108563..3a5a8a6c53 100644 --- a/assets/vue/components/basecomponents/BaseDropdown.vue +++ b/assets/vue/components/basecomponents/BaseDropdown.vue @@ -15,11 +15,12 @@