Add searchbar in catalogue and update custom fuild bug

This commit is contained in:
Matthieu
2025-10-17 10:10:52 +02:00
parent 42c788103a
commit 553600c34b
5 changed files with 485 additions and 97 deletions

View File

@@ -26,14 +26,33 @@
</p>
</header>
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3">
<label class="w-full sm:w-64">
<span class="text-xs font-semibold uppercase tracking-wide text-base-content/70">Recherche</span>
<input
v-model="searchTerm"
type="text"
class="input input-bordered input-sm w-full mt-1"
placeholder="Nom, référence ou catégorie…"
/>
</label>
<p class="text-xs text-base-content/50 sm:text-right">
{{ filteredComposants.length }} / {{ composantsTotal }} résultat{{ filteredComposants.length > 1 ? 's' : '' }}
</p>
</div>
<div v-if="loadingComposants" class="flex justify-center py-8">
<span class="loading loading-spinner" aria-hidden="true" />
</div>
<p v-else-if="!composantsList.length" class="text-sm text-base-content/70">
<p v-else-if="!composantsTotal" class="text-sm text-base-content/70">
Aucun composant n'a encore été créé.
</p>
<p v-else-if="!filteredComposants.length" class="text-sm text-base-content/70">
Aucun composant ne correspond à votre recherche.
</p>
<div v-else class="overflow-x-auto">
<table class="table table-sm md:table-md">
<thead>
@@ -45,7 +64,7 @@
</tr>
</thead>
<tbody>
<tr v-for="component in composantsList" :key="component.id">
<tr v-for="component in filteredComposants" :key="component.id">
<td>{{ component.name || 'Composant sans nom' }}</td>
<td>{{ component.typeComposant?.name || '—' }}</td>
<td>{{ component.reference || '—' }}</td>
@@ -78,7 +97,7 @@
</template>
<script setup lang="ts">
import { computed, onMounted } from 'vue'
import { computed, onMounted, ref } from 'vue'
import { useComposants } from '~/composables/useComposants'
import { useToast } from '~/composables/useToast'
@@ -86,6 +105,25 @@ const { showError } = useToast()
const { composants, loadComposants, loading: loadingComposantsRef, deleteComposant } = useComposants()
const loadingComposants = computed(() => loadingComposantsRef.value)
const composantsList = computed(() => composants.value || [])
const composantsTotal = computed(() => composantsList.value.length)
const searchTerm = ref('')
const filteredComposants = computed(() => {
const term = searchTerm.value.trim().toLowerCase()
if (!term) {
return composantsList.value
}
return composantsList.value.filter((component) => {
const name = (component?.name || '').toLowerCase()
const reference = (component?.reference || '').toLowerCase()
const category = (component?.typeComposant?.name || '').toLowerCase()
return (
name.includes(term) ||
reference.includes(term) ||
category.includes(term)
)
})
})
const handleDeleteComponent = async (component: Record<string, any>) => {
const hasLinkedElements =