forked from vikunja/frontend
kolaente
befa6f27bb
fix: project table view fix: e2e tests fix: typo in readme fix: list view route fix: don't wait until background is loaded for list to show fix: rename component imports fix: lint fix: parse task text fix: use list card grid fix: use correct class names fix: i18n keys fix: load project fix: task overview fix: list view spacing fix: find project fix: setLoading when updating a project fix: loading saved filter fix: project store loading fix: color picker import fix: cypress tests feat: migrate old list settings chore: add const for project settings fix: wrong projecten rename from lists chore: rename unused variable fix: editor list fix: shortcut list class name fix: pagination list class name fix: notifications list class name fix: list view variable name chore: clarify comment fix: i18n keys fix: router imports fix: comment chore: remove debugging leftover fix: remove duplicate variables fix: change comment fix: list view variable name fix: list view css class name fix: list item property name fix: name update tasks function correctly fix: update comment fix: project create route fix: list view class names fix: list view component name fix: result list class name fix: animation class list name fix: change debug log fix: revert a few navigation changes fix: use @ for imports of all views fix: rename link share list class fix: remove unused css class fix: dynamically import project components again
77 lines
1.5 KiB
Vue
77 lines
1.5 KiB
Vue
<template>
|
|
<ul class="project-grid">
|
|
<li
|
|
v-for="(item, index) in filteredProjects"
|
|
:key="`project_${item.id}_${index}`"
|
|
class="project-grid-item"
|
|
>
|
|
<ProjectCard :project="item" />
|
|
</li>
|
|
</ul>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import {computed, type PropType} from 'vue'
|
|
import type {IProject} from '@/modelTypes/IProject'
|
|
|
|
import ProjectCard from './ProjectCard.vue'
|
|
|
|
const props = defineProps({
|
|
projects: {
|
|
type: Array as PropType<IProject[]>,
|
|
default: () => [],
|
|
},
|
|
showArchived: {
|
|
default: false,
|
|
type: Boolean,
|
|
},
|
|
itemLimit: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
})
|
|
|
|
const filteredProjects = computed(() => {
|
|
return props.showArchived
|
|
? props.projects
|
|
: props.projects.filter(l => !l.isArchived)
|
|
})
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
$project-height: 150px;
|
|
$project-spacing: 1rem;
|
|
|
|
.project-grid {
|
|
margin: 0; // reset li
|
|
project-style-type: none;
|
|
display: grid;
|
|
grid-template-columns: repeat(var(--project-columns), 1fr);
|
|
grid-auto-rows: $project-height;
|
|
gap: $project-spacing;
|
|
|
|
@media screen and (min-width: $mobile) {
|
|
--project-rows: 4;
|
|
--project-columns: 1;
|
|
}
|
|
|
|
@media screen and (min-width: $mobile) and (max-width: $tablet) {
|
|
--project-columns: 2;
|
|
}
|
|
|
|
@media screen and (min-width: $tablet) and (max-width: $widescreen) {
|
|
--project-columns: 3;
|
|
--project-rows: 3;
|
|
}
|
|
|
|
@media screen and (min-width: $widescreen) {
|
|
--project-columns: 5;
|
|
--project-rows: 2;
|
|
}
|
|
}
|
|
|
|
.project-grid-item {
|
|
display: grid;
|
|
margin-top: 0; // remove padding coming form .content li + li
|
|
}
|
|
</style> |