This commit is contained in:
parent
54d814f9b2
commit
504f215c5a
3 changed files with 35 additions and 11 deletions
|
|
@ -17,10 +17,17 @@ const handleToggle = ({ id, merch_uuid, checked }) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleSelectAll = () => {
|
||||||
|
toDelete.value = zeroPrices.value.map(item => ({
|
||||||
|
id: item.id,
|
||||||
|
merch_uuid: item.merch_uuid
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
const fetchZeroPrices = async () => {
|
const fetchZeroPrices = async () => {
|
||||||
try {
|
try {
|
||||||
const response = await getZeroPrices()
|
const response = await getZeroPrices()
|
||||||
zeroPrices.value = response.data
|
zeroPrices.value = Array.isArray(response.data) ? response.data : []
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error)
|
console.error(error)
|
||||||
}
|
}
|
||||||
|
|
@ -43,10 +50,18 @@ onMounted(() => {
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<div class="sticky-search-container">
|
<div class="sticky-search-container">
|
||||||
<ZeroPricesToolbar :selected="toDelete" @deleted="handleDeleted" />
|
<ZeroPricesToolbar
|
||||||
|
:selected="toDelete"
|
||||||
|
@deleted="handleDeleted"
|
||||||
|
@selectAll="handleSelectAll"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div v-for="item in zeroPrices" :key="item.created_at">
|
<div v-for="item in zeroPrices" :key="item.created_at">
|
||||||
<ZeroPriceCard :zero-price="item" @toggle="handleToggle" />
|
<ZeroPriceCard
|
||||||
|
:zero-price="item"
|
||||||
|
@toggle="handleToggle"
|
||||||
|
:checked="toDelete.some(t => t.id === item.id)"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,22 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue'
|
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
zeroPrice: {
|
zeroPrice: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
checked: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const isChecked = ref(false)
|
|
||||||
const emit = defineEmits(['toggle'])
|
const emit = defineEmits(['toggle'])
|
||||||
const handleCheckboxChange = () => {
|
|
||||||
isChecked.value = !isChecked.value
|
const handleCheckboxChange = (newValue) => {
|
||||||
emit('toggle', {
|
emit('toggle', {
|
||||||
id: props.zeroPrice.id,
|
id: props.zeroPrice.id,
|
||||||
merch_uuid: props.zeroPrice.merch_uuid,
|
merch_uuid: props.zeroPrice.merch_uuid,
|
||||||
checked: isChecked.value,
|
checked: newValue,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -24,7 +25,7 @@ const handleCheckboxChange = () => {
|
||||||
<div class="zeroPriceCard mt-10">
|
<div class="zeroPriceCard mt-10">
|
||||||
<n-grid responsive="screen" item-responsive cols="4" :x-gap="16" :y-gap="16" class="shift">
|
<n-grid responsive="screen" item-responsive cols="4" :x-gap="16" :y-gap="16" class="shift">
|
||||||
<n-gi>
|
<n-gi>
|
||||||
<n-checkbox :checked="isChecked" @update:checked="handleCheckboxChange">
|
<n-checkbox :checked="checked" @update:checked="handleCheckboxChange">
|
||||||
<strong>Delete</strong>
|
<strong>Delete</strong>
|
||||||
</n-checkbox>
|
</n-checkbox>
|
||||||
</n-gi>
|
</n-gi>
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ const props = defineProps({
|
||||||
|
|
||||||
const messages = useMessage()
|
const messages = useMessage()
|
||||||
const { deleteZeroPrices } = useZeroPrices()
|
const { deleteZeroPrices } = useZeroPrices()
|
||||||
const emit = defineEmits(['deleted'])
|
const emit = defineEmits(['deleted', 'selectAll'])
|
||||||
|
|
||||||
const handleDelete = async () => {
|
const handleDelete = async () => {
|
||||||
try {
|
try {
|
||||||
|
|
@ -22,6 +22,11 @@ const handleDelete = async () => {
|
||||||
messages.error("Error deleting selected prices")
|
messages.error("Error deleting selected prices")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleSelectAll = async () => {
|
||||||
|
emit('selectAll')
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -32,6 +37,9 @@ const handleDelete = async () => {
|
||||||
<div v-else class="toolbar-item">
|
<div v-else class="toolbar-item">
|
||||||
{{ props.selected.length }} items selected
|
{{ props.selected.length }} items selected
|
||||||
</div>
|
</div>
|
||||||
|
<div class="toolbar-item">
|
||||||
|
<span @click="handleSelectAll">Click here to select all</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="toolbar-item">
|
<div class="toolbar-item">
|
||||||
<n-button
|
<n-button
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue