Files
myprojplanet_vite/src/components/MyHeader/MyHeader.ts
Surya Paolo c8589e794f - aggiunto componenti per Home Template... ma ancora da provare
- sistemato catprods
- Sistemato menu
2025-09-22 19:09:14 +02:00

660 lines
17 KiB
TypeScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { useQuasar } from 'quasar';
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';
import { Platform } from 'quasar';
export default defineComponent({
name: 'MyHeader',
components: {
drawer,
messagePopover,
CMyFieldDb,
CMyAvatar,
CSigninNoreg,
CMyCart,
notifPopover,
coinsPopover,
CSelectUserActive,
},
props: {
extraContent: {
required: false,
default: '',
},
clBase: {
required: false,
default: '',
},
},
setup() {
const $q = useQuasar();
const { t } = useI18n();
const $router = useRouter();
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);
const userStore = useUserStore();
const globalStore = useGlobalStore();
const products = useProducts();
const notifStore = useNotifStore();
const { getnumItemsCart } = MixinUsers();
const site = computed(() => globalStore.site);
const isfinishLoading = computed(() => globalStore.finishLoading);
const dark = ref(false);
const leftDrawerOpen = ref(globalStore.leftDrawerOpen);
const editOn = computed({
get: () => globalStore.editOn,
set: (val) => {
tools.updateEditOn(val);
},
});
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';
}
}
});
const getColorText = computed(() => {
if (globalStore.site && globalStore.site.confpages?.col_toolbar === 'white') return 'black';
else return 'white';
});
watch(
() => dark.value,
(value: any, oldval: any) => {
if (isfinishLoading.value) {
$q.dark.set(value);
tools.setCookie('darkmode', value ? '-1' : '0');
}
}
);
function setDarkMode() {
dark.value = tools.getCookie('darkmode', false, false, false) === '-1';
$q.dark.set(dark.value);
}
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);
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);
}
}
const {
getUsernameChatByMsg,
getMyUsername,
Username,
myName,
mySurname,
myCell,
MadeGift,
Email,
getMyImg,
getMyImgforIcon,
getImgByMsg,
getUserByUsername,
getImgByUsername,
isValidUsername,
getNumMsg,
getNumMsgUnread,
getMsgText,
paotest,
} = MixinUsers();
function isonline() {
return globalStore.stateConnection === 'online';
}
function isAdmin() {
return userStore.isAdmin;
}
function isManager() {
return userStore.isManager;
}
function isEditor() {
return userStore.isEditor;
}
const isSocio = computed(() => userStore.my.profile.socio);
function isSocioResidente() {
return userStore.my.profile.socioresidente;
}
function isConsiglio() {
return userStore.my.profile.consiglio;
}
function getcolormenu() {
return isSocio.value ? 'green-7' : 'white';
}
function isFacilitatore() {
return userStore.isFacilitatore;
}
function isZoomeri() {
return userStore.isZoomeri;
}
function isTratuttrici() {
return userStore.isTratuttrici;
}
function conndata_changed() {
return globalStore.connData;
}
function snakeToCamel(str: string) {
return str.replace(/(-\w)/g, (m) => m[1].toUpperCase());
}
function setshortlang(mylang: string) {
static_data.lang_available.forEach((langavail: any) => {
if (langavail.value === mylang) {
langshort.value = langavail.short;
return langshort.value;
}
});
}
function isNewVersionAvailable() {
return globalStore.isNewVersionAvailable;
}
function closeAll() {
globalStore.rightNotifOpen = false;
globalStore.rightCartOpen = false;
globalStore.rightDrawerOpen = false;
globalStore.rightCoinsOpen = false;
}
/*const leftDrawerOpen = computed({
get: () => globalStore.leftDrawerOpen,
set: val => {
globalStore.leftDrawerOpen = val
},
})*/
const rightDrawerOpen = computed({
get: () => globalStore.rightDrawerOpen,
set: (val) => {
closeAll();
globalStore.rightDrawerOpen = val;
},
});
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;
},
});
const lang = computed({
get: () => $q.lang.isoName,
set: (mylang) => {
// console.log('set lang', $q.lang.getLocale(), 'passato', mylang)
$q.lang.set(snakeToCamel(mylang));
// tools.showNotif($q, 'IMPOSTA LANG= ' + $i18n.locale)
// console.log('IMPOSTA LANG= ' + $i18n.locale)
let mylangtopass = mylang;
mylangtopass = toolsext.checkLangPassed($q, $router, mylangtopass);
userStore.setlang($q, $router, mylangtopass);
setshortlang(mylangtopass);
tools.setLangAtt($q, $router, mylangtopass);
userStore.setLangServer();
},
});
watch(
() => stateconn,
// @ts-ignore
(value: string, oldValue: string) => {
globalStore.stateConnection = value;
}
);
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
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
*/
});
/*
@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) {
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' });
}
}
function changeIconConn() {
iconConn.value = globalStore.stateConnection === 'online' ? 'wifi' : 'wifi_off';
clIconConn.value = globalStore.stateConnection === 'online' ? 'clIconOnline' : 'clIconOffline';
}
function getAppVersion() {
// return "AA"
let strv = '';
if (import.meta.env.DEV) {
strv = 'DEV ';
} else if (tools.isTest()) {
strv = 'TEST ';
}
return `${strv}v. ${import.meta.env.VITE_APP_VERSION}`;
}
function getLangAtt() {
return $q.lang.isoName;
}
function BeforeMount() {
setDarkMode();
// Estrai la Lang dal Localstorage
if (!globalStore.finishLoading) return;
// console.log('$q.i18n=', $q.i18n, '$q.getLocale()=', $q.lang.isoName)
const mybrowserLang = getLangAtt();
// tools.showNotif($q, 'prima: ' + String(my))
let mylang = tools.getItemLS(toolsext.localStorage.lang);
if (mylang === '') {
if (navigator) {
mylang = navigator.language;
// console.log(`LANG2 NAVIGATOR ${mylang}`)
} else {
mylang = $q.lang.isoName;
}
// console.log('IMPOSTA LANGMY', mylang)
}
mylang = toolsext.checkLangPassed($q, $router, mylang);
tools.setLangAtt($q, $router, mylang);
setshortlang(mylang);
}
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!');
// handle online status
globalStore.setStateConnection('online');
// mychangeIconConn()
} else {
console.log('EVENT OFFLINE!');
// handle offline status
globalStore.setStateConnection('offline');
// mychangeIconConn()
}
}
window.addEventListener('online', updateOnlineStatus);
window.addEventListener('offline', updateOnlineStatus);
});
}
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;
}
});
}
function imglogo() {
return `${tools.getimglogo()}`;
}
function getappname() {
return tools.getappname(tools.isMobile());
}
function toggleanimation() {
console.log('toggleanimation');
visuimg.value = false;
setTimeout(() => {
visuimg.value = true;
}, 100);
}
function logoutHandler() {
userStore.logout().then(() => {
// $router.replace('/logout')
//
// setTimeout(() => {
// $router.replace('/')
// }, 1000)
tools.showNotif($q, t('logout.uscito'), { icon: 'exit_to_app' });
});
}
function clickregister() {
rightDrawerOpen.value = false;
$router.replace('/signup');
}
function getnumOrdersCart() {
/* const arrorderscart = Products.orders.filter((rec) => rec.status < shared_consts.OrderStatus.COMPLETED)
// const arrorderscart = Products.orders
if (!!arrorderscart) {
return arrorderscart.length
}
*/
return 0;
}
function getcart() {
// return Products.cart
return null;
}
function toHome() {
$router.push('/');
}
function changecmd(value: any) {
console.log('changecmd', value);
globalStore.changeCmdClick(value);
}
function clickMenu3Orizz() {
leftDrawerOpen.value = !leftDrawerOpen.value;
globalStore.leftDrawerOpen = leftDrawerOpen.value;
tools.setCookie('menu3oriz', globalStore.leftDrawerOpen ? '1' : '0');
}
onBeforeMount(BeforeMount);
onMounted(mounted);
created();
return {
static_data,
globalStore,
leftDrawerOpen,
rightDrawerOpen,
rightCartOpen,
rightNotifOpen,
rightCoinsOpen,
lang,
langshort,
getnumOrdersCart,
t,
isonline,
isAdmin,
isManager,
isSocio,
isSocioResidente,
isConsiglio,
getcolormenu,
isNewVersionAvailable,
getAppVersion,
RefreshApp,
changecmd,
imglogo,
getappname,
toggleanimation,
getClassColorHeader,
getcart,
getnumItemsCart,
isFacilitatore,
isZoomeri,
isTratuttrici,
getUsernameChatByMsg,
getMyUsername,
Username,
myName,
mySurname,
myCell,
MadeGift,
Email,
getMyImg,
getMyImgforIcon,
getImgByMsg,
getUserByUsername,
getImgByUsername,
isValidUsername,
getNumMsg,
getNumMsgUnread,
getMsgText,
paotest,
logoutHandler,
isUserNotAuth,
tools,
data,
site,
isfinishLoading,
getColorText,
costanti,
dark,
iconConn,
clIconConn,
toHome,
products,
userStore,
clickMenu3Orizz,
isEditor,
editOn,
};
},
});