Add Category and CategoryType to module

This commit is contained in:
Lorenz Padberg 2023-07-27 14:16:04 +02:00
parent f88a85a54f
commit e99c703f55
6 changed files with 42 additions and 18 deletions

View File

@ -15,20 +15,19 @@
</div> </div>
<div class="dropdown-container"> <div class="dropdown-container">
<select id="lernfeld-select" v-model="selectedLernfeld" @change="filterModules"> <select id="lernfeld-select" v-model="selectedLernfeld" @change="filterModules">
<option v-for="(lernfeld, index) in lernfeldOptions" :key="index" :value="lernfeld" <option v-for="(lernfeld, index) in lernfeldOptions" :value="lernfeld" :key="index">
>
{{ lernfeld }} {{ lernfeld }}
</option> </option>
</select> </select>
</div> </div>
</div> </div>
<div class="topic__modules"> <div class="topic__modules">
<module-teaser <module-teaser
v-for="module in filteredModules" v-for="module in filteredModules"
v-bind="module" v-bind="module"
:key="module.slug" :key="module.slug"
/> />
</div> </div>
</div> </div>
@ -44,14 +43,15 @@
}>(); }>();
const selectedCategory = ref(null); const selectedCategory = ref(null);
console.log(props.modules) console.log("modules", props.modules)
const lernfeldOptions = ['Alle Lernfelder', 'Lernfeld 1', 'Lernfeld 2', 'Lernfeld 3', 'Lernfeld 4', 'Lernfeld 5']; const lernfeldOptions = ['Alle Lernfelder', 'Lernfeld 1', 'Lernfeld 2', 'Lernfeld 3', 'Lernfeld 4', 'Lernfeld 5'];
const selectedLernfeld = ref('Alle Lernfelder'); const selectedLernfeld = ref('Alle Lernfelder');
const firstLevelCategories = computed(() => { const firstLevelCategories = computed(() => {
return ["1. Lehrjahr", "2. Lehrjahr", "3. Lehrjahr",]; return ["Alle Lehrjahre", "1. Lehrjahr", "2. Lehrjahr", "3. Lehrjahr",];
}); });
let filteredModules = computed(() => { let filteredModules = computed(() => {
@ -60,21 +60,22 @@
function filterModules() { function filterModules() {
let filteredModules = props.modules; let filteredModules = props.modules;
if (selectedCategory.value === null) { if (selectedCategory.value === null) {
return props.modules; return props.modules;
} }
// filter by Lehrjahr // filter by Lehrjahr
filteredModules = props.modules.filter((module) => { if (selectedCategory.value !== 'Alle Lehrjahre') {
return module.metaTitle.includes(selectedCategory.value); filteredModules = filteredModules.filter((module) => {
}); return module.categoryName.includes(selectedCategory.value);
});
}
//filter by Lernfeld //filter by Lernfeld
if (selectedLernfeld.value !== 'Alle Lernfelder') { if (selectedLernfeld.value !== 'Alle Lernfelder') {
filteredModules = filteredModules.filter((module) => { filteredModules = filteredModules.filter((module) => {
return module.metaTitle.includes(selectedLernfeld.value); return module.categoryTypeName.includes(selectedLernfeld.value);
}); });
} }
@ -115,6 +116,7 @@
display: flex; display: flex;
align-items: center; align-items: center;
} }
.topic { .topic {
display: grid; display: grid;
padding: $large-spacing $small-spacing; padding: $large-spacing $small-spacing;

View File

@ -17,13 +17,16 @@
<p class="module-teaser__description"> <p class="module-teaser__description">
{{ teaser }} {{ teaser }}
</p> </p>
<span :value="attribute" v-for="attribute in [categoryName, categoryTypeName]">
<div class="module-teaser__module-category" v-if="attribute">{{attribute}}</div>
</span>
</div> </div>
</router-link> </router-link>
</template> </template>
<script> <script>
export default { export default {
props: ['metaTitle', 'title', 'teaser', 'id', 'slug', 'heroImage'], props: ['metaTitle', 'title', 'teaser', 'id', 'slug', 'heroImage', 'categoryName', 'categoryTypeName'],
computed: { computed: {
moduleLink() { moduleLink() {
@ -48,7 +51,7 @@ export default {
.module-teaser { .module-teaser {
box-shadow: 0 3px 9px 0 rgba(0, 0, 0, 0.12); box-shadow: 0 3px 9px 0 rgba(0, 0, 0, 0.12);
border: 1px solid #e2e2e2; border: 1px solid #e2e2e2;
height: 330px; height: 390px;
max-width: 380px; max-width: 380px;
width: 100%; width: 100%;
border-radius: 12px; border-radius: 12px;
@ -88,5 +91,15 @@ export default {
line-height: $default-line-height; line-height: $default-line-height;
font-size: 1.2rem; font-size: 1.2rem;
} }
&__module-category {
background-color: rgba(129, 129, 129, 0.99); /* Replace with your desired background color */
color: #fff; /* Replace with your desired text color */
padding: 10px 20px;
border-radius: 40px; /* A high value to make it look like a pill */
display: inline-block; /* Ensures the pill takes only the necessary width */
margin-right: 10px;
margin-top: 20px;
}
} }
</style> </style>

View File

@ -9,6 +9,8 @@ fragment ModuleParts on ModuleNode {
heroSource heroSource
solutionsEnabled solutionsEnabled
inEditMode @client inEditMode @client
categoryName
categoryTypeName
topic { topic {
slug slug
title title

View File

@ -168,6 +168,13 @@ class Module(StrictHierarchyPage):
def get_admin_display_title(self): def get_admin_display_title(self):
return f"{self.meta_title} - {self.title}" return f"{self.meta_title} - {self.title}"
@property
def category_name(self) -> str:
return self.category.name if self.category else ""
@property
def category_type_name(self) -> str:
return self.category_type.name if self.category_type else ""
class RecentModule(models.Model): class RecentModule(models.Model):
module = models.ForeignKey( module = models.ForeignKey(

View File