import {computed, ref, watch} from "vue"; import {confirmObject} from "src/composables/dialog"; import {useQuasar} from "quasar"; export const usePhotoBatchManagement = ({photos, emits}) => { const batchEdit = ref({}); const $q = useQuasar(); // console.log(photos); for (const photo of photos) { batchEdit.value[photo.id] = false; } const handleImageClick = (photo, idx) => { batchEdit.value[photo.id] = !batchEdit.value[photo.id]; } const selectedPhotos = computed(() => { const selected = []; for (const i in batchEdit.value) { const photo = photos.find(p => p.id === parseInt(i)); if (photo && batchEdit.value[i]) selected.push(photo); } return selected; }); const confirmBatchPhotoDelete = () => { $q.dialog(confirmObject("Opravdu chces smazat vybrané fotky?")) .onOk(() => { for (const id in batchEdit.value) { if (!batchEdit.value[id]) continue; emits("delete", parseInt(id)); batchEdit.value[id] = false; } }); } const openBatchEdit = () => { const photos = selectedPhotos.value; for (const i in batchEdit.value) { batchEdit.value[i] = false; } emits('batch-edit', photos); } const batchRotate = (direction) => { const photos = selectedPhotos.value; emits("batch-rotate", {photos, direction}); } const isBatchEditAllowed = computed(() => Object.values(batchEdit.value).filter(v => v).length > 0); const checkAll = ref(false); watch(() => checkAll.value, (newVal) => { if (newVal === null) return; for (const photo of photos) { batchEdit.value[photo.id] = newVal; } }); const batchOptionsProps = computed(() => ({ round: true, flat: true, class: "q-ml-lg", disable: !isBatchEditAllowed.value })); watch(() => batchEdit.value, () => { let checkedAll = true; let uncheckedAll = true; for (const i of Object.keys(batchEdit.value)) { if (typeof batchEdit.value[i] === 'undefined') continue; if (batchEdit.value[i]) uncheckedAll = false; if (!batchEdit.value[i]) checkedAll = false; } if (checkedAll) { checkAll.value = true; } else if (uncheckedAll) { checkAll.value = false; } else { checkAll.value = null; } }, {deep: true}); return { batchEdit, handleImageClick, selectedPhotos, confirmBatchPhotoDelete, openBatchEdit, batchRotate, checkAll, isBatchEditAllowed, batchOptionsProps } };