Files
myprojplanet_vite/src/components/MyHeader/MyHeader.ts

660 lines
17 KiB
TypeScript
Raw Normal View History

import { useQuasar } from 'quasar';
2021-08-31 18:09:59 +02:00
import {
defineComponent,
onBeforeMount,
onBeforeUnmount,
onMounted,
ref,
toRefs,
watch,
inject,
computed,
nextTick,
} from 'vue';
import { tools } from '@tools';
import { shared_consts } from '@src/common/shared_vuejs';
import { useI18n } from 'vue-i18n';
import { boot } from 'quasar/wrappers';
import { useRouter } from 'vue-router';
import { static_data } from '@src/db/static_data';
import messagePopover from '../../layouts/toolbar/messagePopover/messagePopover.vue';
import notifPopover from '../../layouts/toolbar/notifPopover/notifPopover.vue';
import coinsPopover from '../../layouts/toolbar/coinsPopover/coinsPopover.vue';
import drawer from '../../layouts/drawer/drawer.vue';
import { CMyAvatar } from '@src/components/CMyAvatar';
import { CMyFieldDb } from '@src/components/CMyFieldDb';
import { CSelectUserActive } from '@src/components/CSelectUserActive';
import { toolsext } from '@store/Modules/toolsext';
import { useGlobalStore } from '@store/globalStore';
import { useUserStore } from '@store/UserStore';
import { useProducts } from '@store/Products';
import MixinUsers from '../../mixins/mixin-users';
import { CMyCart, CSigninNoreg } from '@src/components';
import { costanti } from '@costanti';
import { useNotifStore } from '@src/store/NotifStore';
2023-11-30 15:43:32 +01:00
import { Platform } from 'quasar';
2021-08-31 18:09:59 +02:00
export default defineComponent({
2022-07-10 01:24:54 +02:00
name: 'MyHeader',
2021-08-31 18:09:59 +02:00
components: {
drawer,
messagePopover,
CMyFieldDb,
CMyAvatar,
CSigninNoreg,
CMyCart,
notifPopover,
coinsPopover,
CSelectUserActive,
2021-08-31 18:09:59 +02:00
},
props: {
extraContent: {
required: false,
default: '',
},
clBase: {
required: false,
default: '',
},
},
setup() {
const $q = useQuasar();
const { t } = useI18n();
const $router = useRouter();
2021-08-31 18:09:59 +02:00
const isUserNotAuth = ref(false);
const iconConn = ref('wifi');
const clIconConn = ref('clIconOnline');
const strConn = ref('');
const langshort = ref('');
const clCloudUpload = ref('');
const clCloudDownload = ref('');
const clCloudUp_Indexeddb = ref('');
const tabcmd = ref('');
const clCloudDown_Indexeddb = ref('clIndexeddbsend');
const photo = ref('');
const visuimg = ref(true);
2021-08-31 18:09:59 +02:00
const userStore = useUserStore();
const globalStore = useGlobalStore();
const products = useProducts();
const notifStore = useNotifStore();
2021-08-31 18:09:59 +02:00
const { getnumItemsCart } = MixinUsers();
2023-11-30 15:43:32 +01:00
const site = computed(() => globalStore.site);
const isfinishLoading = computed(() => globalStore.finishLoading);
2022-11-23 10:27:36 +01:00
const dark = ref(false);
const leftDrawerOpen = ref(globalStore.leftDrawerOpen);
2025-03-01 14:14:43 +01:00
const editOn = computed({
get: () => globalStore.editOn,
set: (val) => {
tools.updateEditOn(val);
2025-03-01 14:14:43 +01:00
},
});
2025-03-01 14:14:43 +01:00
2022-11-23 10:27:36 +01:00
const getClassColorHeader = computed(() => {
// if (tools.isTest()) return 'bg-light-blue'
// if (tools.isDebug()) return 'bg-info'
if (globalStore.site && globalStore.site.confpages?.col_toolbar)
return 'bg-' + globalStore.site.confpages?.col_toolbar;
else {
if (globalStore.homescreen) {
return 'bg-blue';
} else {
return 'bg-light-blue';
}
}
});
2022-11-23 10:27:36 +01:00
const getColorText = computed(() => {
if (globalStore.site && globalStore.site.confpages?.col_toolbar === 'white') return 'black';
else return 'white';
});
2022-11-23 10:27:36 +01:00
watch(
() => dark.value,
(value: any, oldval: any) => {
if (isfinishLoading.value) {
$q.dark.set(value);
tools.setCookie('darkmode', value ? '-1' : '0');
}
2022-11-29 15:25:06 +01:00
}
);
2022-11-29 15:25:06 +01:00
function setDarkMode() {
dark.value = tools.getCookie('darkmode', false, false, false) === '-1';
$q.dark.set(dark.value);
2022-11-29 15:25:06 +01:00
}
function uploadStart() {
BeforeMount();
}
watch(
() => globalStore.finishLoading,
(value: any, oldval: any) => {
if (value) {
uploadStart();
}
}
);
const data = ref({
registration: null,
updateExists: false,
} as any);
const refreshing = ref(false);
const stateconn = ref(globalStore.stateConnection);
2021-08-31 18:09:59 +02:00
function updateAvailable(event: any) {
console.log(event);
data.value.registration = event.detail;
data.value.updateExists = true;
RefreshApp(); // update automatically
}
function created() {
if (isfinishLoading.value) {
uploadStart();
}
try {
if (window) {
// Ascolta evento custom 'swUpdated' per notifica aggiornamento
window.addEventListener(
'swUpdated',
async (event) => {
// Chiedi conferma allutente (qui con confirm, sostituisci con dialog Quasar se vuoi)
const doUpdate = confirm('È disponibile una nuova versione. Vuoi aggiornare ora?');
if (doUpdate) {
// Invia messaggio al service worker per skipWaiting
if (event.detail?.swWaiting) {
event.detail.swWaiting.postMessage({ action: 'skipWaiting' });
}
}
},
{ once: true }
);
if ('serviceWorker' in navigator) {
navigator.serviceWorker.addEventListener('controllerchange', () => {
if (refreshing.value) return;
refreshing.value = true;
window.location.reload();
});
}
}
} catch (e) {
console.error('Err', e.message);
}
}
2021-09-02 03:22:13 +02:00
const {
getUsernameChatByMsg,
getMyUsername,
Username,
myName,
mySurname,
myCell,
MadeGift,
Email,
getMyImg,
getMyImgforIcon,
getImgByMsg,
getUserByUsername,
getImgByUsername,
isValidUsername,
getNumMsg,
getNumMsgUnread,
getMsgText,
paotest,
} = MixinUsers();
2021-09-02 03:22:13 +02:00
2021-08-31 18:09:59 +02:00
function isonline() {
return globalStore.stateConnection === 'online';
2021-08-31 18:09:59 +02:00
}
function isAdmin() {
return userStore.isAdmin;
2021-08-31 18:09:59 +02:00
}
function isManager() {
return userStore.isManager;
2021-08-31 18:09:59 +02:00
}
function isEditor() {
return userStore.isEditor;
}
2021-08-31 18:09:59 +02:00
const isSocio = computed(() => userStore.my.profile.socio);
2021-08-31 18:09:59 +02:00
function isSocioResidente() {
return userStore.my.profile.socioresidente;
2021-08-31 18:09:59 +02:00
}
function isConsiglio() {
return userStore.my.profile.consiglio;
2021-08-31 18:09:59 +02:00
}
function getcolormenu() {
return isSocio.value ? 'green-7' : 'white';
2021-08-31 18:09:59 +02:00
}
function isFacilitatore() {
return userStore.isFacilitatore;
2021-08-31 18:09:59 +02:00
}
function isZoomeri() {
return userStore.isZoomeri;
2021-08-31 18:09:59 +02:00
}
function isTratuttrici() {
return userStore.isTratuttrici;
2021-08-31 18:09:59 +02:00
}
function conndata_changed() {
return globalStore.connData;
2021-08-31 18:09:59 +02:00
}
function snakeToCamel(str: string) {
return str.replace(/(-\w)/g, (m) => m[1].toUpperCase());
2021-08-31 18:09:59 +02:00
}
function setshortlang(mylang: string) {
static_data.lang_available.forEach((langavail: any) => {
if (langavail.value === mylang) {
langshort.value = langavail.short;
return langshort.value;
2021-08-31 18:09:59 +02:00
}
});
2021-08-31 18:09:59 +02:00
}
function isNewVersionAvailable() {
return globalStore.isNewVersionAvailable;
2021-08-31 18:09:59 +02:00
}
function closeAll() {
globalStore.rightNotifOpen = false;
globalStore.rightCartOpen = false;
globalStore.rightDrawerOpen = false;
globalStore.rightCoinsOpen = false;
}
/*const leftDrawerOpen = computed({
2021-08-31 18:09:59 +02:00
get: () => globalStore.leftDrawerOpen,
set: val => {
globalStore.leftDrawerOpen = val
2021-08-31 18:09:59 +02:00
},
})*/
2021-08-31 18:09:59 +02:00
const rightDrawerOpen = computed({
get: () => globalStore.rightDrawerOpen,
set: (val) => {
closeAll();
globalStore.rightDrawerOpen = val;
2021-08-31 18:09:59 +02:00
},
});
2021-08-31 18:09:59 +02:00
const rightCartOpen = computed({
get: () => globalStore.rightCartOpen,
set: (val) => {
closeAll();
globalStore.rightCartOpen = val;
},
});
const rightNotifOpen = computed({
get: () => globalStore.rightNotifOpen,
set: (val) => {
closeAll();
globalStore.rightNotifOpen = val;
},
});
const rightCoinsOpen = computed({
get: () => globalStore.rightCoinsOpen,
set: (val) => {
closeAll();
globalStore.rightCoinsOpen = val;
},
});
2021-08-31 18:09:59 +02:00
const lang = computed({
get: () => $q.lang.isoName,
set: (mylang) => {
// console.log('set lang', $q.lang.getLocale(), 'passato', mylang)
$q.lang.set(snakeToCamel(mylang));
2021-08-31 18:09:59 +02:00
// tools.showNotif($q, 'IMPOSTA LANG= ' + $i18n.locale)
// console.log('IMPOSTA LANG= ' + $i18n.locale)
let mylangtopass = mylang;
2021-08-31 18:09:59 +02:00
mylangtopass = toolsext.checkLangPassed($q, $router, mylangtopass);
userStore.setlang($q, $router, mylangtopass);
2021-08-31 18:09:59 +02:00
setshortlang(mylangtopass);
2021-08-31 18:09:59 +02:00
tools.setLangAtt($q, $router, mylangtopass);
2021-08-31 18:09:59 +02:00
userStore.setLangServer();
2021-08-31 18:09:59 +02:00
},
});
2021-08-31 18:09:59 +02:00
watch(
() => stateconn,
2021-08-31 18:09:59 +02:00
// @ts-ignore
(value: string, oldValue: string) => {
globalStore.stateConnection = value;
}
);
2021-08-31 18:09:59 +02:00
watch(conndata_changed, (value, oldValue) => {
clCloudUpload.value = value.uploading_server === 1 ? 'clCloudUpload send' : 'clCloudUpload';
clCloudUpload.value = value.downloading_server === 1 ? 'clCloudUpload receive' : 'clCloudUpload';
clCloudUp_Indexeddb.value = value.uploading_indexeddb === 1 ? 'clIndexeddb send' : 'clIndexeddb';
clCloudUp_Indexeddb.value = value.downloading_indexeddb === 1 ? 'clIndexeddb receive' : 'clIndexeddb';
/* clCloudUpload.value = (value.uploading_server === -1) ? 'clCloudUpload error' : clCloudUpload
2021-08-31 18:09:59 +02:00
clCloudUpload.value = (value.downloading_server === -1) ? 'clCloudUpload error' : clCloudDownload
clCloudUp_Indexeddb.value = (value.uploading_indexeddb === -1) ? 'clIndexeddb error' : clCloudUp_Indexeddb
clCloudUp_Indexeddb.value = (value.downloading_indexeddb === -1) ? 'clIndexeddb error' : clCloudDown_Indexeddb
*/
});
2021-08-31 18:09:59 +02:00
/*
@Watch('conn_changed', { immediate: true, deep: true })
function changeconn_changed(value: string, oldValue: string) {
if (value !== oldValue) {
// console.log('SSSSSSSS: ', value, oldValue)
const color = (value === 'online') ? 'positive' : 'warning'
const statoconn = t('connection.conn') + ' ' + ((value === 'online') ? t('connection.online') : t('connection.offline'))
if (site.confpages.showConnected) {
2021-08-31 18:09:59 +02:00
if (!!oldValue) {
tools.showNotif($q, statoconn, {
color,
icon: 'wifi'
})
}
changeIconConn()
}
}
}
*/
function RefreshApp() {
if (Platform.is.ios) {
// Unregister Service Worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.getRegistrations().then((registrations) => {
for (const registration of registrations) {
registration.unregister();
}
});
}
// window.location.reload()
} else {
data.value.updateExists = false;
// Make sure we only send a 'skip waiting' message if the SW is waiting
if (!data.value.registration || !data.value.registration.waiting) return;
// Send message to SW to skip the waiting and activate the new SW
data.value.registration.waiting.postMessage({ type: 'SKIP_WAITING' });
}
2021-08-31 18:09:59 +02:00
}
function changeIconConn() {
iconConn.value = globalStore.stateConnection === 'online' ? 'wifi' : 'wifi_off';
clIconConn.value = globalStore.stateConnection === 'online' ? 'clIconOnline' : 'clIconOffline';
2021-08-31 18:09:59 +02:00
}
function getAppVersion() {
// return "AA"
let strv = '';
2025-03-01 14:14:43 +01:00
if (import.meta.env.DEV) {
strv = 'DEV ';
} else if (tools.isTest()) {
strv = 'TEST ';
2021-08-31 18:09:59 +02:00
}
return `${strv}v. ${import.meta.env.VITE_APP_VERSION}`;
2021-08-31 18:09:59 +02:00
}
function getLangAtt() {
return $q.lang.isoName;
2021-08-31 18:09:59 +02:00
}
function BeforeMount() {
setDarkMode();
2022-11-29 15:25:06 +01:00
2021-08-31 18:09:59 +02:00
// Estrai la Lang dal Localstorage
if (!globalStore.finishLoading) return;
2021-08-31 18:09:59 +02:00
// console.log('$q.i18n=', $q.i18n, '$q.getLocale()=', $q.lang.isoName)
const mybrowserLang = getLangAtt();
2021-08-31 18:09:59 +02:00
// tools.showNotif($q, 'prima: ' + String(my))
let mylang = tools.getItemLS(toolsext.localStorage.lang);
2021-08-31 18:09:59 +02:00
if (mylang === '') {
if (navigator) {
mylang = navigator.language;
2021-08-31 18:09:59 +02:00
// console.log(`LANG2 NAVIGATOR ${mylang}`)
} else {
mylang = $q.lang.isoName;
2021-08-31 18:09:59 +02:00
}
// console.log('IMPOSTA LANGMY', mylang)
}
mylang = toolsext.checkLangPassed($q, $router, mylang);
2021-08-31 18:09:59 +02:00
tools.setLangAtt($q, $router, mylang);
setshortlang(mylang);
2021-08-31 18:09:59 +02:00
}
function mounted() {
// Test this by running the code snippet below and then
// use the "TableOnlyView" checkbox in DevTools Network panel
// console.log('Event LOAD')
if (window) {
window.addEventListener('load', () => {
// console.log('2) ENTERING Event LOAD')
function updateOnlineStatus(event: any) {
if (navigator.onLine) {
console.log('EVENT ONLINE!');
2021-08-31 18:09:59 +02:00
// handle online status
globalStore.setStateConnection('online');
2021-08-31 18:09:59 +02:00
// mychangeIconConn()
} else {
console.log('EVENT OFFLINE!');
2021-08-31 18:09:59 +02:00
// handle offline status
globalStore.setStateConnection('offline');
2021-08-31 18:09:59 +02:00
// mychangeIconConn()
}
}
window.addEventListener('online', updateOnlineStatus);
window.addEventListener('offline', updateOnlineStatus);
});
2021-08-31 18:09:59 +02:00
}
nextTick(() => {
if (tools.getCookie('menu3oriz') === '1') {
if ($q.screen.width < 800) {
leftDrawerOpen.value = false;
// globalStore.leftDrawerOpen = false
} else {
leftDrawerOpen.value = true;
globalStore.leftDrawerOpen = true;
}
} else if (tools.getCookie('menu3oriz') === '0') {
leftDrawerOpen.value = false;
globalStore.leftDrawerOpen = false;
}
});
2021-08-31 18:09:59 +02:00
}
function imglogo() {
return `../../${tools.getimglogo()}`;
2021-08-31 18:09:59 +02:00
}
function getappname() {
return tools.getappname(tools.isMobile());
2021-08-31 18:09:59 +02:00
}
function toggleanimation() {
console.log('toggleanimation');
visuimg.value = false;
2021-08-31 18:09:59 +02:00
setTimeout(() => {
visuimg.value = true;
}, 100);
2021-08-31 18:09:59 +02:00
}
function logoutHandler() {
userStore.logout().then(() => {
// $router.replace('/logout')
//
// setTimeout(() => {
// $router.replace('/')
// }, 1000)
2021-08-31 18:09:59 +02:00
tools.showNotif($q, t('logout.uscito'), { icon: 'exit_to_app' });
});
2021-08-31 18:09:59 +02:00
}
function clickregister() {
rightDrawerOpen.value = false;
2021-08-31 18:09:59 +02:00
$router.replace('/signup');
2021-08-31 18:09:59 +02:00
}
function getnumOrdersCart() {
2023-12-13 19:18:00 +01:00
/* const arrorderscart = Products.orders.filter((rec) => rec.status < shared_consts.OrderStatus.COMPLETED)
2021-08-31 18:09:59 +02:00
// const arrorderscart = Products.orders
if (!!arrorderscart) {
return arrorderscart.length
}
*/
return 0;
2021-08-31 18:09:59 +02:00
}
function getcart() {
// return Products.cart
return null;
2021-08-31 18:09:59 +02:00
}
2022-11-30 21:31:32 +01:00
function toHome() {
$router.push('/');
2022-11-30 21:31:32 +01:00
}
2021-08-31 18:09:59 +02:00
function changecmd(value: any) {
console.log('changecmd', value);
globalStore.changeCmdClick(value);
2021-08-31 18:09:59 +02:00
}
function clickMenu3Orizz() {
leftDrawerOpen.value = !leftDrawerOpen.value;
globalStore.leftDrawerOpen = leftDrawerOpen.value;
tools.setCookie('menu3oriz', globalStore.leftDrawerOpen ? '1' : '0');
}
onBeforeMount(BeforeMount);
onMounted(mounted);
2021-08-31 18:09:59 +02:00
created();
2021-08-31 18:09:59 +02:00
return {
static_data,
globalStore,
leftDrawerOpen,
rightDrawerOpen,
rightCartOpen,
rightNotifOpen,
rightCoinsOpen,
2021-08-31 18:09:59 +02:00
lang,
2021-09-02 03:22:13 +02:00
langshort,
2021-08-31 18:09:59 +02:00
getnumOrdersCart,
t,
isonline,
isAdmin,
isManager,
isSocio,
isSocioResidente,
isConsiglio,
getcolormenu,
2021-08-31 18:09:59 +02:00
isNewVersionAvailable,
getAppVersion,
RefreshApp,
changecmd,
imglogo,
getappname,
toggleanimation,
2021-09-02 03:22:13 +02:00
getClassColorHeader,
getcart,
getnumItemsCart,
isFacilitatore,
2021-09-02 03:22:13 +02:00
isZoomeri,
isTratuttrici,
getUsernameChatByMsg,
getMyUsername,
Username,
myName,
mySurname,
myCell,
MadeGift,
Email,
getMyImg,
getMyImgforIcon,
getImgByMsg,
getUserByUsername,
getImgByUsername,
isValidUsername,
getNumMsg,
getNumMsgUnread,
getMsgText,
paotest,
2021-09-19 02:59:24 +02:00
logoutHandler,
isUserNotAuth,
tools,
data,
2022-11-23 10:27:36 +01:00
site,
isfinishLoading,
getColorText,
costanti,
dark,
iconConn,
clIconConn,
2022-11-30 21:31:32 +01:00
toHome,
products,
userStore,
clickMenu3Orizz,
isEditor,
2025-03-01 14:14:43 +01:00
editOn,
};
2021-08-31 18:09:59 +02:00
},
});