fix: multiple badges

This commit is contained in:
Jannat Patel
2024-05-02 19:43:32 +05:30
parent 7355be2a8b
commit 8a2991c4fb
7 changed files with 63 additions and 24 deletions

View File

@@ -1,9 +0,0 @@
<template></template>
<script setup>
const props = defineProps({
badge: {
type: Object,
required: true,
},
})
</script>

View File

@@ -5,9 +5,23 @@
</h2>
<div class="grid grid-cols-5 gap-4">
<div v-if="badges.data" v-for="badge in badges.data">
<Popover trigger="hover" hoverDelay="0.0">
<Popover trigger="hover">
<template #target>
<img :src="badge.badge_image" :alt="badge.badge" class="h-[80px]" />
<div class="relative">
<img
:src="badge.badge_image"
:alt="badge.badge"
class="h-[80px]"
/>
<div
class="flex items-end bg-gray-100 p-2 text-xs font-semibold rounded-full absolute right-0 bottom-0"
>
<span>
<X class="w-3 h-3" />
</span>
{{ badge.count }}
</div>
</div>
</template>
<template #body-main>
<div class="w-[250px] text-base">
@@ -20,7 +34,7 @@
<div class="text-2xl font-semibold mb-2">
{{ badge.badge }}
</div>
<div class="mb-4">
<div class="leading-5 mb-4">
{{ badge.badge_description }}
</div>
<div class="flex flex-col">
@@ -39,8 +53,8 @@
</template>
<script setup>
import { createResource, Popover } from 'frappe-ui'
import BadgePopover from '@/components/BadgePopover.vue'
import { inject } from 'vue'
import { X } from 'lucide-vue-next'
const dayjs = inject('$dayjs')
@@ -61,5 +75,15 @@ const badges = createResource({
},
},
auto: true,
transform(data) {
let finalBadges = []
let groupedBadges = Object.groupBy(data, ({ badge }) => badge)
for (let badge in groupedBadges) {
let badgeData = groupedBadges[badge][0]
badgeData.count = groupedBadges[badge].length
finalBadges.push(badgeData)
}
return finalBadges
},
})
</script>

View File

@@ -1,8 +1,26 @@
// Copyright (c) 2024, Frappe and contributors
// For license information, please see license.txt
// frappe.ui.form.on("LMS Badge", {
// refresh(frm) {
frappe.ui.form.on("LMS Badge", {
reference_doctype: (frm) => {
frm.events.set_fields_to_check(frm);
},
// },
// });
set_fields_to_check: (frm) => {
const reference_doctype = frm.doc.reference_doctype;
if (!reference_doctype) return;
frappe.model.with_doctype(reference_doctype, () => {
const map_for_options = (df) => ({
label: df.label,
value: df.fieldname,
});
const fields = frappe.meta
.get_docfields(frm.doc.reference_doctype)
.filter(frappe.model.is_value_type);
const fields_to_check = fields.map(map_for_options);
frm.set_df_property("field_to_check", "options", fields_to_check);
});
},
});

View File

@@ -85,8 +85,13 @@
}
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2024-04-30 17:16:17.725459",
"links": [
{
"link_doctype": "LMS Badge Assignment",
"link_fieldname": "badge"
}
],
"modified": "2024-05-02 14:23:32.198858",
"modified_by": "Administrator",
"module": "LMS",
"name": "LMS Badge",

View File

@@ -36,7 +36,7 @@ class LMSBadge(Document):
if self.grant_only_once:
if frappe.db.exists(
"LMS Badge Assignment",
{"badge": self.name, "user": frappe.session.user},
{"badge": self.name, "member": frappe.session.user},
):
return
@@ -44,7 +44,7 @@ class LMSBadge(Document):
assignment.update(
{
"badge": self.name,
"user": frappe.session.user,
"member": frappe.session.user,
"issued_on": frappe.utils.now(),
}
)

View File

@@ -161,6 +161,7 @@ def get_lesson_details(chapter):
)
lesson_details.number = f"{chapter.idx}.{row.idx}"
lesson_details.icon = get_lesson_icon(lesson_details.body)
lesson_details.is_complete = get_progress(lesson_details.course, lesson_details.name)
lessons.append(lesson_details)
return lessons

View File

@@ -15,10 +15,10 @@
<meta name="twitter:title" content="{{ meta.title }}" />
<meta name="twitter:image" content="{{ meta.image }}" />
<meta name="twitter:description" content="{{ meta.description }}" />
<script type="module" crossorigin src="/assets/lms/frontend/assets/index-BIja_89l.js"></script>
<link rel="modulepreload" crossorigin href="/assets/lms/frontend/assets/frappe-ui-Ccuocnz7.js">
<script type="module" crossorigin src="/assets/lms/frontend/assets/index-CushEWOj.js"></script>
<link rel="modulepreload" crossorigin href="/assets/lms/frontend/assets/frappe-ui-BI4McHL7.js">
<link rel="stylesheet" crossorigin href="/assets/lms/frontend/assets/frappe-ui-DzKBfka9.css">
<link rel="stylesheet" crossorigin href="/assets/lms/frontend/assets/index-DCVPIR2L.css">
<link rel="stylesheet" crossorigin href="/assets/lms/frontend/assets/index-Dhpy-T0p.css">
</head>
<body>
<div id="app">