From 6ae82f14cc1b52563755dd73c08f676400be7cf3 Mon Sep 17 00:00:00 2001 From: Paolo Arena Date: Thu, 21 Jul 2022 00:20:48 +0200 Subject: [PATCH] Notifiche - Tutti - non letti --- src/common/shared_vuejs.ts | 54 +++++++- src/components/CKeyAndValue/CKeyAndValue.ts | 4 +- src/components/CKeyAndValue/CKeyAndValue.vue | 1 + src/components/CMyChipList/CMyChipList.ts | 1 + src/components/CMyFieldDb/CMyFieldDb.ts | 14 ++- src/components/CMyFieldDb/CMyFieldDb.vue | 2 + src/components/CMyFieldRec/CMyFieldRec.ts | 9 +- src/components/CMyPopupEdit/CMyPopupEdit.ts | 20 ++- .../CNotifSettings/CNotifSettings.scss | 0 .../CNotifSettings/CNotifSettings.ts | 40 ++++++ .../CNotifSettings/CNotifSettings.vue | 46 +++++++ src/components/CNotifSettings/index.ts | 1 + src/components/index.ts | 1 + src/db/lang/ws_it.js | 1 + src/db/static_data.ts | 11 ++ .../toolbar/messagePopover/messagePopover.ts | 3 +- .../toolbar/messagePopover/messagePopover.vue | 2 +- .../toolbar/notifPopover/notifPopover.scss | 14 +++ .../toolbar/notifPopover/notifPopover.ts | 68 ++++++---- .../toolbar/notifPopover/notifPopover.vue | 116 ++++++++++++------ src/mixins/mixin-base.ts | 59 ++++++--- src/mixins/mixin-users.ts | 24 ++-- src/model/GlobalStore.ts | 7 ++ src/model/MessageStore.ts | 2 + src/model/UserStore.ts | 9 +- src/rootgen/admin/userPanel/userPanel.ts | 44 ++++++- src/rootgen/admin/userPanel/userPanel.vue | 14 ++- src/statics/lang/it.js | 21 +++- src/store/Modules/costanti.ts | 6 + src/store/Modules/fieldsTable.ts | 18 ++- src/store/Modules/tools.ts | 16 ++- src/store/Modules/toolsext.ts | 22 +++- src/store/NotifStore.ts | 45 ++++++- src/store/UserStore.ts | 13 +- src/store/globalStore.ts | 3 +- src/views/messages/messages.ts | 2 + src/views/user/editprofile/editprofile.ts | 2 +- src/views/user/myprofile/myprofile.ts | 9 +- src/views/user/usernotifs/usernotifs.scss | 0 src/views/user/usernotifs/usernotifs.ts | 30 +++++ src/views/user/usernotifs/usernotifs.vue | 21 ++++ 41 files changed, 640 insertions(+), 135 deletions(-) create mode 100755 src/components/CNotifSettings/CNotifSettings.scss create mode 100755 src/components/CNotifSettings/CNotifSettings.ts create mode 100755 src/components/CNotifSettings/CNotifSettings.vue create mode 100755 src/components/CNotifSettings/index.ts create mode 100755 src/views/user/usernotifs/usernotifs.scss create mode 100755 src/views/user/usernotifs/usernotifs.ts create mode 100755 src/views/user/usernotifs/usernotifs.vue diff --git a/src/common/shared_vuejs.ts b/src/common/shared_vuejs.ts index c594e011..a4ab944a 100755 --- a/src/common/shared_vuejs.ts +++ b/src/common/shared_vuejs.ts @@ -854,26 +854,68 @@ export const shared_consts = { NEW_ADV_CITY: 2, NEW_ADV_MY_GROUPS: 4, NEW_ADV_MY_RIS_CIRCUIT: 8, - - }, + typeNotifs: [ + { + value: 1, // + labeltrans: 'typenotifs.new_rec_bacheca', + descr: 'typenotifs.new_rec_bacheca_descr', + }, + { + value: 2, // + labeltrans: 'typenotifs.events', + descr: 'typenotifs.events_descr', + }, + { + value: 3, // + labeltrans: 'typenotifs.friends', + descr: 'typenotifs.friends_descr', + }, + { + value: 4, // + labeltrans: 'typenotifs.circuits', + descr: 'typenotifs.circuits_descr', + }, + { + value: 5, // + labeltrans: 'typenotifs.booking', + descr: '', + }, + ], + + + UsersNotif_Adv_List: [ { value: 1, // NEW_ADV_PROVINCE - label: 'notifs.warn_province', + labeltrans: 'notifs.warn_province', + directory: 1, }, { value: 2, // NEW_ADV_CITY - label: 'notifs.warn_city', + labeltrans: 'notifs.warn_city', + directory: 1, }, { value: 4, // NEW_ADV_MY_GROUPS - label: 'notifs.warn_my_groups', + labeltrans: 'notifs.warn_my_groups', + directory: 1, }, { value: 8, // NEW_ADV_MY_RIS_CIRCUIT - label: 'notifs.warn_my_ris_circuit', + labeltrans: 'notifs.warn_my_ris_circuit', + directory: 1, + }, + { + value: 1, // + labeltrans: 'notifs.new_event', + directory: 2, + }, + { + value: 1, // + labeltrans: 'notifs.new_friends', + directory: 3, }, ], diff --git a/src/components/CKeyAndValue/CKeyAndValue.ts b/src/components/CKeyAndValue/CKeyAndValue.ts index 641cec4b..6d70731a 100755 --- a/src/components/CKeyAndValue/CKeyAndValue.ts +++ b/src/components/CKeyAndValue/CKeyAndValue.ts @@ -16,12 +16,12 @@ export default defineComponent({ required: true, }, myvalue: { - type: String, + type: [String, Number ], required: false, default: '', }, mydate: { - type: Date, + type: [Date, String], required: false, default: null, }, diff --git a/src/components/CKeyAndValue/CKeyAndValue.vue b/src/components/CKeyAndValue/CKeyAndValue.vue index 8b7ffe2e..3593efc3 100755 --- a/src/components/CKeyAndValue/CKeyAndValue.vue +++ b/src/components/CKeyAndValue/CKeyAndValue.vue @@ -17,6 +17,7 @@ diff --git a/src/components/CMyChipList/CMyChipList.ts b/src/components/CMyChipList/CMyChipList.ts index 31ec3df7..cbfe4165 100755 --- a/src/components/CMyChipList/CMyChipList.ts +++ b/src/components/CMyChipList/CMyChipList.ts @@ -164,6 +164,7 @@ export default defineComponent({ } else { if (tools.isBitActive(myval.value, rec[props.optval])) { + // console.log('rec', rec, 'props.optlab', props.optlab) const mydata = { label: t(tools.getValueByFunzOrVal(rec, props.optlab)), value: rec[props.optval], diff --git a/src/components/CMyFieldDb/CMyFieldDb.ts b/src/components/CMyFieldDb/CMyFieldDb.ts index 9447cfad..ca2b77df 100755 --- a/src/components/CMyFieldDb/CMyFieldDb.ts +++ b/src/components/CMyFieldDb/CMyFieldDb.ts @@ -6,7 +6,7 @@ import { fieldsTable } from '@store/Modules/fieldsTable' import { tools } from '@store/Modules/tools' import { costanti } from '@costanti' import { CMyPopupEdit } from '@/components/CMyPopupEdit' -import { IColGridTable } from 'model' +import { IColGridTable, IOperators, ISpecialField } from 'model' import MixinBase from '@/mixins/mixin-base' @@ -26,6 +26,16 @@ export default defineComponent({ required: false, default: '', }, + specialField: { + type: Object as PropType, + required: false, + default: null, + }, + filter: { + type: [String, Function], + required: false, + default: null, + }, indrec: { type: Number, required: false, @@ -128,7 +138,7 @@ export default defineComponent({ console.log('showandsel CMyFieldDb', row, col, newval) if (newval !== valinitial) - setValDb($q, props.mykey, newval, props.type, props.serv, props.table, props.mysubkey, props.id, props.indrec, props.mysubsubkey) + setValDb($q, props.mykey, newval, props.type, props.serv, props.table, props.mysubkey, props.id, props.indrec, props.mysubsubkey, props.specialField) } function withBorder() { diff --git a/src/components/CMyFieldDb/CMyFieldDb.vue b/src/components/CMyFieldDb/CMyFieldDb.vue index ce4eaf8a..0503418d 100755 --- a/src/components/CMyFieldDb/CMyFieldDb.vue +++ b/src/components/CMyFieldDb/CMyFieldDb.vue @@ -29,7 +29,9 @@ :table="table" :title="title" :field="mykey" + :filter="filter" :subfield="mysubkey" + :specialField="specialField" :mysubsubkey="mysubsubkey" :indrec="indrec" :type="type" diff --git a/src/components/CMyFieldRec/CMyFieldRec.ts b/src/components/CMyFieldRec/CMyFieldRec.ts index c66b7baa..551de01b 100755 --- a/src/components/CMyFieldRec/CMyFieldRec.ts +++ b/src/components/CMyFieldRec/CMyFieldRec.ts @@ -6,7 +6,7 @@ import { fieldsTable } from '@store/Modules/fieldsTable' import { tools } from '@store/Modules/tools' import { costanti } from '@costanti' import { CMyPopupEdit } from '@/components/CMyPopupEdit' -import { IColGridTable } from 'model' +import { IColGridTable, ISpecialField } from 'model' import MixinBase from '@/mixins/mixin-base' @@ -36,6 +36,11 @@ export default defineComponent({ required: false, default: '', }, + specialField: { + type: Object as PropType, + required: false, + default: null, + }, myimg: { type: String, required: false, @@ -146,7 +151,7 @@ export default defineComponent({ console.log('showandsel CMyFieldDb', row, col, newval) if (newval !== valinitial) - setValDb($q, mykey.value, newval, props.fieldtype || col.fieldtype, false, props.table, mysubkey.value, props.id, props.indrec, mysubsubkey.value) + setValDb($q, mykey.value, newval, props.fieldtype || col.fieldtype, false, props.table, mysubkey.value, props.id, props.indrec, mysubsubkey.value, props.specialField) } function withBorder() { diff --git a/src/components/CMyPopupEdit/CMyPopupEdit.ts b/src/components/CMyPopupEdit/CMyPopupEdit.ts index 7460fa0b..da1bafd8 100755 --- a/src/components/CMyPopupEdit/CMyPopupEdit.ts +++ b/src/components/CMyPopupEdit/CMyPopupEdit.ts @@ -3,7 +3,7 @@ import { useI18n } from '@src/boot/i18n' import { useUserStore } from '@store/UserStore' import { useGlobalStore } from '@store/globalStore' import { useQuasar } from 'quasar' -import { IColGridTable, IImgGallery } from 'model' +import { IColGridTable, IImgGallery, ISpecialField } from 'model' import { CMyChipList } from '../CMyChipList' import { CDate } from '../CDate' import { CDateTime } from '../CDateTime' @@ -89,6 +89,11 @@ export default defineComponent({ required: false, default: '', }, + specialField: { + type: Object as PropType, + required: false, + default: null, + }, serv: { type: Boolean, required: false, @@ -134,6 +139,11 @@ export default defineComponent({ required: false, default: '', }, + filter: { + type: [String, Function], + required: false, + default: null, + }, field_extra: { type: String, required: false, @@ -231,9 +241,11 @@ export default defineComponent({ // console.table(props) - myvalue.value = getValDb(props.field, props.serv, '', props.table, props.subfield, props.id, props.idmain) + myvalue.value = getValDb(props.field, props.serv, '', props.table, props.subfield, props.id, props.idmain, props.indrec, props.mysubsubkey, props.specialField) // console.log('myvalue.value', myvalue.value) col.value.jointable = props.jointable + if (props.filter) + col.value.filter = props.filter col.value.fieldtype = props.type col.value.label = props.title @@ -459,7 +471,7 @@ export default defineComponent({ function savefield(value: any, initialval: any, myq: any) { if (!props.insertMode) { myvalue.value = value - setValDb(myq, props.field, myvalue.value, props.type, props.serv, props.table, props.subfield, props.id, props.indrec, props.mysubsubkey) + setValDb(myq, props.field, myvalue.value, props.type, props.serv, props.table, props.subfield, props.id, props.indrec, props.mysubsubkey, props.specialField) } } @@ -474,7 +486,7 @@ export default defineComponent({ else myvalue.value = value - setValDb($q, props.field, myvalue, props.type, props.serv, props.table, props.subfield, props.id, props.indrec, props.mysubsubkey) + setValDb($q, props.field, myvalue, props.type, props.serv, props.table, props.subfield, props.id, props.indrec, props.mysubsubkey, props.specialField) } diff --git a/src/components/CNotifSettings/CNotifSettings.scss b/src/components/CNotifSettings/CNotifSettings.scss new file mode 100755 index 00000000..e69de29b diff --git a/src/components/CNotifSettings/CNotifSettings.ts b/src/components/CNotifSettings/CNotifSettings.ts new file mode 100755 index 00000000..91acb14f --- /dev/null +++ b/src/components/CNotifSettings/CNotifSettings.ts @@ -0,0 +1,40 @@ +import { defineComponent, onMounted, PropType, ref, watch } from 'vue' +import { useQuasar } from 'quasar' +import { useI18n } from '@/boot/i18n' +import { useGlobalStore } from '@store/globalStore' +import { fieldsTable } from '@store/Modules/fieldsTable' +import { tools } from '@store/Modules/tools' +import { costanti } from '@costanti' +import { shared_consts } from '@/common/shared_vuejs' +import { CMyFieldDb } from '@/components/CMyFieldDb' +import { CDateTime } from '@/components/CDateTime' + + +export default defineComponent({ + name: 'CNotifSettings', + props: { + }, + components: { CMyFieldDb }, + setup(props, { emit }) { + const $q = useQuasar() + const { t } = useI18n() + const globalStore = useGlobalStore() + + + function mounted() { + // + } + + onMounted(mounted) + + return { + t, + tools, + costanti, + shared_consts, + fieldsTable, + globalStore, + } + }, +}) + diff --git a/src/components/CNotifSettings/CNotifSettings.vue b/src/components/CNotifSettings/CNotifSettings.vue new file mode 100755 index 00000000..6459bdec --- /dev/null +++ b/src/components/CNotifSettings/CNotifSettings.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/components/CNotifSettings/index.ts b/src/components/CNotifSettings/index.ts new file mode 100755 index 00000000..be8468a1 --- /dev/null +++ b/src/components/CNotifSettings/index.ts @@ -0,0 +1 @@ +export {default as CNotifSettings} from './CNotifSettings.vue' diff --git a/src/components/index.ts b/src/components/index.ts index 67dd7301..40df9f78 100755 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -55,4 +55,5 @@ export * from './COpenStreetMap' export * from './COperators' export * from './CFundRaising' export * from './CKeyAndValue' +export * from './CNotifSettings' // export * from './CPreloadImages' diff --git a/src/db/lang/ws_it.js b/src/db/lang/ws_it.js index 3b69a712..76b6a8c0 100755 --- a/src/db/lang/ws_it.js +++ b/src/db/lang/ws_it.js @@ -30,6 +30,7 @@ const msg_website_it = { myhosps2: 'myhosps2', mygood2: 'mygood2', fundraising: 'Sostieni il Progetto', + notifs: 'Configura le Notifiche', test: 'Test', projects: 'Progetti', report: 'Report Ore', diff --git a/src/db/static_data.ts b/src/db/static_data.ts index a9cbe9a3..dcaef6c5 100755 --- a/src/db/static_data.ts +++ b/src/db/static_data.ts @@ -653,6 +653,17 @@ const baseroutes: IListRoutes[] = [ inmenu: true, infooter: true, }, + { + active: true, + order: 200, + path: '/notifs', + materialIcon: 'fas fa-user', + name: 'pages.notifs', + component: () => import('@/views/user/usernotifs/usernotifs.vue'), + meta: { requiresAuth: true }, + inmenu: false, + infooter: false, + }, { active: true, order: 400, diff --git a/src/layouts/toolbar/messagePopover/messagePopover.ts b/src/layouts/toolbar/messagePopover/messagePopover.ts index c7cf0efd..ff2ba381 100755 --- a/src/layouts/toolbar/messagePopover/messagePopover.ts +++ b/src/layouts/toolbar/messagePopover/messagePopover.ts @@ -18,7 +18,7 @@ export default defineComponent({ setup(props) { const $router = useRouter() - const { getNumMsgUnread, getNumMsg, getUsernameChatByMsg, getImgByMsg, getNumNotifUnread } = MixinUsers() + const { getNumMsgUnread, getNumMsg, getUsernameChatByMsg, getImgByMsg } = MixinUsers() // function lasts_messages (state: IUserState) => IMessage[] { // @@ -73,7 +73,6 @@ export default defineComponent({ getNumMsg, getUsernameChatByMsg, getImgByMsg, - getNumNotifUnread, tools, } }, diff --git a/src/layouts/toolbar/messagePopover/messagePopover.vue b/src/layouts/toolbar/messagePopover/messagePopover.vue index a06582f9..5a3b89ba 100755 --- a/src/layouts/toolbar/messagePopover/messagePopover.vue +++ b/src/layouts/toolbar/messagePopover/messagePopover.vue @@ -40,7 +40,7 @@ - {{getNumNotifUnread()}} + {{getNumMsgUnread()}} diff --git a/src/layouts/toolbar/notifPopover/notifPopover.scss b/src/layouts/toolbar/notifPopover/notifPopover.scss index 771673dc..e6ca7ca0 100755 --- a/src/layouts/toolbar/notifPopover/notifPopover.scss +++ b/src/layouts/toolbar/notifPopover/notifPopover.scss @@ -15,3 +15,17 @@ width: 57px; font-size: 13px; } + +.unread { + font-weight: bold; +} + +.read { + color: grey; +} + + +.my-custom-toggle { + border: 1px solid #027be3; +} + diff --git a/src/layouts/toolbar/notifPopover/notifPopover.ts b/src/layouts/toolbar/notifPopover/notifPopover.ts index cac35649..8f1f5e31 100755 --- a/src/layouts/toolbar/notifPopover/notifPopover.ts +++ b/src/layouts/toolbar/notifPopover/notifPopover.ts @@ -5,7 +5,6 @@ import { IMessage, IMsgUsers, INotif, } from '@model' -import './notifPopover.scss' import { tools } from '@src/store/Modules/tools' import { useRouter } from 'vue-router' @@ -39,7 +38,11 @@ export default defineComponent({ const myuser = ref({}) - const lasts_notifs = computed(() => notifStore.getlasts_notifs) + const show_all = ref(true) + const username = computed(() => userStore.my.username) + + const lasts_notifs = computed(() => notifStore.getlasts_notifs().filter((rec) => show_all.value ? true : !rec.read)) + const num_notifs_unread = computed(() => notifStore.getnumNotifUnread()) const usernotifs = computed(() => userStore.my.profile.notifs) const userId = ref('') @@ -50,13 +53,12 @@ export default defineComponent({ datenotif: new Date() }) - const { getNumNotifUnread, getNumNotif, getUsernameChatByNotif, getImgByNotif, getNotifText } = MixinUsers() + const { getNumNotifUnread, getNumNotif, getUsernameChatByNotif, getImgByNotif, getNotifText, getTypeNotif } = MixinUsers() // function lasts_notifs (state: IUserState) => IMessage[] { // // } - watch(() => usernotifs.value, async (to: any, from: any) => { if (usernotifs.value) { @@ -70,8 +72,20 @@ export default defineComponent({ } }) - function clickChat(msg: IMessage) { - // $router.replace(`/notifs/${ msg.dest.username}`) + watch(() => userStore.my.username, async (to: any, from: any) => { + if (userStore.my.username) { + await refreshdata(userStore.my.username) + } + }) + + function clickNotif(notif: INotif) { + if (notif.link) { + let mylink = tools.updateQueryStringParameter(notif.link, 'idnotif', notif._id) + console.log('mylink', mylink, notif._id) + if (mylink) { + $router.replace(mylink) + } + } } function getlastnotif(username: string): any { @@ -98,44 +112,50 @@ export default defineComponent({ } - function refreshdata(username: string) { + async function refreshdata(username: string) { loading.value = true userId.value = userStore.my._id notifsel.value.dest = '' - return notifStore.updateNotifDataFromServer({ - username, - lastdataread: getlastdataread(username) - }).then((ris) => { - notifsel.value.dest = username - loading.value = false + if (!!username) { - const element = document.getElementById('last') - tools.scrollToElement(element) + return notifStore.updateNotifDataFromServer({ + username, + lastdataread: getlastdataread(username) + }).then((ris) => { - // changemsgs('', '') + notifsel.value.dest = username + loading.value = false - }).catch((err) => { - loading.value = false - }) + const element = document.getElementById('last') + tools.scrollToElement(element) + + // changemsgs('', '') + + }).catch((err) => { + loading.value = false + }) + } } - function mounted() { + async function mounted() { myuser.value = userStore.my - refreshdata(userStore.my.username) + await refreshdata(userStore.my.username) } onMounted(mounted) return { lasts_notifs, - clickChat, + num_notifs_unread, + clickNotif, getNumNotifUnread, getNumNotif, getUsernameChatByNotif, getImgByNotif, getNotifText, + getTypeNotif, tools, usernotifs, shared_consts, @@ -143,6 +163,10 @@ export default defineComponent({ myuser, costanti, open, + notifStore, + show_all, + t, + username, } }, }) diff --git a/src/layouts/toolbar/notifPopover/notifPopover.vue b/src/layouts/toolbar/notifPopover/notifPopover.vue index 8fa0e16c..089a8b3f 100755 --- a/src/layouts/toolbar/notifPopover/notifPopover.vue +++ b/src/layouts/toolbar/notifPopover/notifPopover.vue @@ -1,50 +1,63 @@