import { useQuasar } from 'quasar'; import { useI18n } from 'vue-i18n'; import { useRouter } from 'vue-router'; import axios from 'axios'; import VnConfirm from 'components/ui/VnConfirm.vue'; export async function checkEntryLock(entryFk, userFk) { const { t } = useI18n(); const quasar = useQuasar(); const { push } = useRouter(); const { data } = await axios.get(`Entries/${entryFk}`, { params: { filter: JSON.stringify({ fields: ['id', 'locked', 'lockerUserFk'], include: { relation: 'user', scope: { fields: ['id', 'nickname'] } }, }), }, }); const entryConfig = await axios.get('EntryConfigs/findOne'); if (data?.lockerUserFk && data?.locked) { const now = new Date(Date.vnNow()).getTime(); const lockedTime = new Date(data.locked).getTime(); const timeDiff = (now - lockedTime) / 1000; const isMaxTimeLockExceeded = entryConfig.data.maxLockTime > timeDiff; if (data?.lockerUserFk !== userFk && isMaxTimeLockExceeded) { quasar .dialog({ component: VnConfirm, componentProps: { title: t('entry.lock.title'), message: t('entry.lock.message', { userName: data?.user?.nickname, time: timeDiff / 60, }), }, }) .onOk( async () => await axios.patch(`Entries/${entryFk}`, { locked: Date.vnNow(), lockerUserFk: userFk, }), ) .onCancel(() => { push({ path: `summary` }); }); } } else { await axios .patch(`Entries/${entryFk}`, { locked: Date.vnNow(), lockerUserFk: userFk, }) .then( quasar.notify({ message: t('entry.lock.success'), color: 'positive', group: false, }), ); } }