Refactoring

This commit is contained in:
Lorenz Padberg 2023-08-22 14:04:47 +02:00
parent 5cd1876f31
commit 52bc017ba5
2 changed files with 52 additions and 76 deletions

View File

@ -3,14 +3,14 @@
<div class="module-filter__filterselection">
<Dropdown class="module-filter__dropdown"
:selected-item="selectedLevel"
:items="levelOptions"
@update:selectedItem="newItem => selectedLevel = newItem"
:items="moduleLevels"
@update:selectedItem="updateLevel"
></Dropdown>
<Dropdown
class="module-filter__dropdown"
:selected-item="selectedCategory"
:items="categoryOptions"
:items="moduleCategories"
@update:selectedItem="newItem => selectedCategory = newItem"
></Dropdown>
<pill-radio-buttons :selectableItems="languageOptions"
@ -42,9 +42,8 @@
// TODO: Fix console warnings... onBeforeUnmount is called when there is no active component instance to be associated with.
// TODO: Improve Typing
const props = defineProps<{
modules: Array<Object>;
modules: Object[];
me: any;
}>();
@ -54,104 +53,79 @@
{id: 3, label: 'En'}
])
const initialLanguage = languageOptions.value[0]
const selectedLanguage = ref(initialLanguage)
const initialCategory = {
name: 'Alle Lernfelder',
id: null,
filterAttributeType: 'ALL'
};
const {result: moduleLevelsResult} = useQuery(gql`
query ModuleLevelsQuery {
const initialLevel = {
name: 'Alle Lehrjahre',
id: null,
filterAttributeType: 'ALL'
};
const {result: moduleFilterResult} = useQuery(gql`
query ModuleFilterQuery{
moduleLevels {
name
id
filterAttributeType
}
}
`);
const nullLevel = {
name: '---',
id: null,
filterAttributeType: 'ALL'
};
const nullCategory = {
name: '---',
id: null,
filterAttributeType: 'ALL'
};
let defaultLevel = loadDefaultLevel(props.me);
let selectedLevel = ref(defaultLevel);
const levelOptions = computed(() => {
return [...moduleLevelsResult.value?.moduleLevels || []];
});
const selectedCategory = ref(nullCategory);
const {result: moduleCategoryResult} = useQuery(gql`
query ModuleCategoriesQuery {
moduleCategories {
moduleCategories {
name
id
filterAttributeType
}
}
`);
const categoryOptions = computed(() => {
if (moduleCategoryResult.value){
const moduleCategories = moduleCategoryResult.value?.moduleCategories;
const selectedLevel = ref(initialLevel);
const selectedCategory = ref(initialCategory);
// TODO: Fix this, computed must not have a sideeffect
selectedCategory.value = moduleCategories.find((category) => category.filterAttributeType === 'ALL');
return moduleCategories
}
return [...moduleCategoryResult.value?.moduleCategories || []];
});
selectedLevel.value = loadDefaultLevel(props.me);
const moduleLevels = computed(() => moduleFilterResult.value?.moduleLevels || []);
const moduleCategories = computed(() => moduleFilterResult.value?.moduleCategories || []);
const filteredModules = computed(() => props.modules?.filter(module => filterModule(module,
selectedLevel.value, selectedCategory.value, selectedLanguage.value)) || []);
let filteredModules = computed(() => {
return filterModules();
});
function loadDefaultLevel(me) {
return me?.lastModuleLevel || nullCategory;
console.log("me", me);
return me?.lastModuleLevel || initialLevel;
}
function filterModule(module: Object, selectedLevel, selectedCategory, selectedLanguage) {
let filterExpression = true;
function filterModules() {
let filteredModules = props.modules;
filterExpression = filterByLevel(module, selectedLevel) &&
filterByCategory(module, selectedCategory) &&
filterByLanguage(module, selectedLanguage);
//updateLastModuleLevel(selectedLevel.value);
if (selectedLevel.value === null) {
return props.modules;
}
// filter by Lehrjahr (moduleLevel)
if (selectedLevel.value.filterAttributeType !== 'ALL') {
filteredModules = filteredModules.filter((module) => {
return module.level?.id == selectedLevel.value.id;
});
}
//filter by Lernfeld (Category)
if (selectedCategory.value.filterAttributeType !== 'ALL') {
filteredModules = filteredModules.filter((module) => {
return module.category?.id == selectedCategory.value.id;
});
}
updateLastModuleLevel(selectedLevel.value);
filteredModules = filterByLanguage(selectedLanguage.value, filteredModules);
return filteredModules;
return filterExpression;
}
function filterByLanguage(language: Object, modules: Object) {
const updateLevel = (level) => {
selectedLevel.value = level;
updateLastModuleLevel(level);
}
const filterByLevel = (module, level) => {
return level.filterAttributeType === 'ALL' || module.level?.id === level.id
}
const filterByCategory = (module, category) => {
return category.filterAttributeType === 'ALL' || module.category?.id === category.id
}
const filterByLanguage = (module: Object, language: Object) => {
console.log("selectedLanguage", selectedLanguage.value);
return modules
return true
}
@ -183,6 +157,7 @@
.module-filter {
// TODO: how do I correcty set the with of the whole thig including the grid for the modules?
// TODO: Farbe des Arrows für Dropdowns muss platfrom habhängig sein
width: 75%;
&__filterselection {

View File

@ -13,6 +13,7 @@ fragment UserParts on PrivateUserNode {
lastModuleLevel {
id
name
filterAttributeType
}
lastModule {
id