Skip to content

Commit dde3215

Browse files
committed
feat(RootNavigation): fill active icons
Signed-off-by: Grigory Vodyanov <[email protected]>
1 parent ae49d56 commit dde3215

File tree

2 files changed

+44
-16
lines changed

2 files changed

+44
-16
lines changed

src/components/AppNavigation/GroupNavigationItem.vue

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@
1414
<AppNavigationItem
1515
:key="group.key"
1616
:to="group.router"
17-
:name="group.name">
17+
:name="group.name"
18+
:active="routeState === `group:${group.id}`"
19+
@click="$emit('updateRouteState', `group:${group.id}`)">
1820
<template #icon>
19-
<IconContact :size="20" />
21+
<IconContactFilled v-if="routeState === `group:${group.id}`" :size="20" />
22+
<IconContact v-else :size="20" />
2023
</template>
2124
<template #actions>
2225
<ActionButton
@@ -87,6 +90,7 @@ import {
8790
} from '@nextcloud/vue'
8891
import download from 'downloadjs'
8992
import moment from 'moment'
93+
import IconContactFilled from 'vue-material-design-icons/AccountMultiple.vue'
9094
import IconContact from 'vue-material-design-icons/AccountMultipleOutline.vue'
9195
import IconEmail from 'vue-material-design-icons/EmailOutline.vue'
9296
import IconRename from 'vue-material-design-icons/FolderEditOutline.vue'
@@ -111,13 +115,19 @@ export default {
111115
IconRename,
112116
IconDelete,
113117
IconLoading,
118+
IconContactFilled,
114119
},
115120
116121
props: {
117122
group: {
118123
type: Object,
119124
required: true,
120125
},
126+
127+
routeState: {
128+
type: String,
129+
required: true,
130+
},
121131
},
122132
123133
data() {

src/components/AppNavigation/RootNavigation.vue

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@
2424
:to="{
2525
name: 'group',
2626
params: { selectedGroup: GROUP_ALL_CONTACTS },
27-
}">
27+
}"
28+
:active="routeState === 'all'"
29+
@click="updateRouteState('all')">
2830
<template #icon>
29-
<IconContact :size="20" />
31+
<IconContactFilled v-if="routeState === 'all'" :size="20" />
32+
<IconContact v-else :size="20" />
3033
</template>
3134
<template #counter>
3235
<NcCounterBubble
@@ -44,7 +47,9 @@
4447
name: 'chart',
4548
params: { selectedChart: GROUP_ALL_CONTACTS },
4649
}"
47-
icon="icon-category-monitoring" />
50+
:active="routeState === 'orgchart'"
51+
icon="icon-category-monitoring"
52+
@click="updateRouteState('orgchart')" />
4853

4954
<!-- Not grouped group -->
5055
<AppNavigationItem
@@ -54,9 +59,12 @@
5459
:to="{
5560
name: 'group',
5661
params: { selectedGroup: GROUP_NO_GROUP_CONTACTS },
57-
}">
62+
}"
63+
:active="routeState === 'notgrouped'"
64+
@click="updateRouteState('notgrouped')">
5865
<template #icon>
59-
<IconUser :size="20" />
66+
<IconUserFilled v-if="routeState === 'notgrouped'" :size="20" />
67+
<IconUser v-else :size="20" />
6068
</template>
6169
<template #counter>
6270
<NcCounterBubble
@@ -73,7 +81,9 @@
7381
:to="{
7482
name: 'group',
7583
params: { selectedGroup: GROUP_RECENTLY_CONTACTED },
76-
}">
84+
}"
85+
:active="routeState === 'recentlycontacted'"
86+
@click="updateRouteState('recentlycontacted')">
7787
<template #icon>
7888
<IconRecentlyContacted :size="20" />
7989
</template>
@@ -113,7 +123,9 @@
113123
<GroupNavigationItem
114124
v-for="group in ellipsisGroupsMenu"
115125
:key="group.key"
116-
:group="group" />
126+
:route-state="routeState"
127+
:group="group"
128+
@update-route-state="updateRouteState" />
117129

118130
<template v-if="isCirclesEnabled">
119131
<!-- Toggle groups ellipsis -->
@@ -148,7 +160,8 @@
148160
<CircleNavigationItem
149161
v-for="circle in ellipsisCirclesMenu"
150162
:key="circle.key"
151-
:circle="circle" />
163+
:circle="circle"
164+
@click="updateRouteState(`circle:${circle.id}`)" />
152165

153166
<!-- Toggle circles ellipsis -->
154167
<AppNavigationItem
@@ -198,6 +211,8 @@ import {
198211
} from '@nextcloud/vue'
199212
import { mapStores } from 'pinia'
200213
import naturalCompare from 'string-natural-compare'
214+
import IconUserFilled from 'vue-material-design-icons/Account.vue'
215+
import IconContactFilled from 'vue-material-design-icons/AccountMultiple.vue'
201216
import IconContact from 'vue-material-design-icons/AccountMultipleOutline.vue'
202217
import IconUser from 'vue-material-design-icons/AccountOutline.vue'
203218
import IconError from 'vue-material-design-icons/AlertCircleOutline.vue'
@@ -230,7 +245,9 @@ export default {
230245
ContactsSettings,
231246
GroupNavigationItem,
232247
IconContact,
248+
IconContactFilled,
233249
IconUser,
250+
IconUserFilled,
234251
IconAdd,
235252
IconError,
236253
IconLoading,
@@ -243,12 +260,7 @@ export default {
243260
props: {
244261
loading: {
245262
type: Boolean,
246-
default: true,
247-
},
248-
249-
contactsList: {
250-
type: Array,
251-
required: true,
263+
default: false,
252264
},
253265
},
254266
@@ -278,6 +290,8 @@ export default {
278290
collapsedCircles: true,
279291
280292
showSettings: false,
293+
294+
routeState: 'all',
281295
}
282296
},
283297
@@ -493,6 +507,10 @@ export default {
493507
showContactsSettings() {
494508
this.showSettings = true
495509
},
510+
511+
updateRouteState(state) {
512+
this.routeState = state
513+
},
496514
},
497515
}
498516
</script>

0 commit comments

Comments
 (0)