97 lines
2.4 KiB
JavaScript
97 lines
2.4 KiB
JavaScript
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
|
|
}
|
|
};
|