11<script setup lang="ts">
2- import { ref } from ' vue'
2+ import { ref , computed } from ' vue'
33import { useBoardStore } from ' ../../store/boardStore'
4+ import { useToastStore } from ' ../../store/toastStore'
5+ import { getErrorDisplay } from ' ../../composables/useErrorMapper'
46import CardItem from ' ./CardItem.vue'
57import CardModal from ' ./CardModal.vue'
68import ColumnEditModal from ' ./ColumnEditModal.vue'
@@ -21,13 +23,20 @@ const emit = defineEmits<{
2123}>()
2224
2325const boardStore = useBoardStore ()
26+ const toast = useToastStore ()
2427const newCardTitle = ref (' ' )
2528const showCardForm = ref (false )
2629const selectedCard = ref <Card | null >(null )
2730const showCardModal = ref (false )
2831const showColumnEdit = ref (false )
2932const isDragOver = ref (false )
3033
34+ /** True when cards.length > wipLimit (already over limit) */
35+ const isWipLimitExceeded = computed (() => {
36+ // Treat null or <= 0 as "no limit" — mirrors backend's SetWipLimit guard (must be > 0)
37+ return props .column .wipLimit != null && props .column .wipLimit > 0 && props .cards .length > props .column .wipLimit
38+ })
39+
3140function handleCardClick(card : Card ) {
3241 selectedCard .value = card
3342 showCardModal .value = true
@@ -54,14 +63,12 @@ async function createCard() {
5463 newCardTitle .value = ' '
5564 showCardForm .value = false
5665 } catch (error ) {
66+ const { message } = getErrorDisplay (error , ' Failed to create card' )
67+ toast .error (message )
5768 console .error (' Failed to create card:' , error )
5869 }
5970}
6071
61- const isWipLimitExceeded = () => {
62- return props .column .wipLimit !== null && props .cards .length > props .column .wipLimit
63- }
64-
6572function handleCardDragStart(card : Card ) {
6673 emit (' card-drag-start' , card )
6774}
@@ -187,7 +194,7 @@ function handleCardDragOver(event: DragEvent) {
187194 </button >
188195 <span
189196 class =" td-column-lane__count"
190- :class =" isWipLimitExceeded() ? 'td-column-lane__count--exceeded' : ''"
197+ :class =" isWipLimitExceeded ? 'td-column-lane__count--exceeded' : ''"
191198 >
192199 {{ cards.length }}{{ column.wipLimit ? `/${column.wipLimit}` : '' }}
193200 </span >
@@ -204,13 +211,14 @@ function handleCardDragOver(event: DragEvent) {
204211 </div >
205212 </div >
206213
207- <div v-if =" isWipLimitExceeded() " class =" td-column-lane__wip-warning" >
214+ <div v-if =" isWipLimitExceeded" class =" td-column-lane__wip-warning" >
208215 WIP limit exceeded
209216 </div >
210217
211218 <button
212219 data-action =" toggle-add-card"
213220 @click =" openCardForm"
221+ title =" Add a card"
214222 class =" td-column-lane__add-card-btn"
215223 >
216224 <span >+</span >
0 commit comments