diff --git a/frontend/src/modules/member/components/list/member-list-toolbar.vue b/frontend/src/modules/member/components/list/member-list-toolbar.vue
index 9bd9243a0b..6d8ab07764 100644
--- a/frontend/src/modules/member/components/list/member-list-toolbar.vue
+++ b/frontend/src/modules/member/components/list/member-list-toolbar.vue
@@ -25,7 +25,6 @@
Merge members
- Enrich members
+ {{
+ enrichmentLabel
+ }}
@@ -130,22 +131,34 @@ export default {
},
elegibleEnrichmentMembersIds() {
return this.selectedRows
- .filter(
- (r) =>
- (r.username?.github || r.email) &&
- !r.lastEnriched
- )
+ .filter((r) => r.username?.github || r.email)
.map((item) => item.id)
},
- selectedIds() {
- return this.selectedRows
- .filter((item) => !item.lastEnriched)
- .map((item) => item.id)
+ enrichedMembers() {
+ return this.selectedRows.filter((r) => r.lastEnriched)
+ .length
},
- areSelectedMembersNotEnriched() {
- return this.selectedRows.some(
- (item) => !item.lastEnriched
- )
+ enrichmentLabel() {
+ if (
+ this.enrichedMembers &&
+ this.enrichedMembers ===
+ this.elegibleEnrichmentMembersIds.length
+ ) {
+ return `Re-enrich ${pluralize(
+ 'member',
+ this.selectedIds.length,
+ false
+ )}`
+ }
+
+ return `Enrich ${pluralize(
+ 'member',
+ this.selectedIds.length,
+ false
+ )}`
+ },
+ selectedIds() {
+ return this.selectedRows.map((item) => item.id)
},
markAsTeamMemberOptions() {
const isTeamView = this.activeView.id === 'team'
@@ -192,16 +205,45 @@ export default {
} else if (command.action === 'destroyAll') {
await this.doDestroyAllWithConfirm()
} else if (command.action === 'enrichMember') {
+ const enrichments =
+ this.elegibleEnrichmentMembersIds.length
+ let doEnrich = false
+ let reEnrichmentMessage = null
+
+ if (this.enrichedMembers) {
+ reEnrichmentMessage =
+ this.enrichedMembers === 1
+ ? `You selected 1 member that was already enriched. If you proceed, this member will be re-enriched and counted towards your quota.`
+ : `You selected ${this.enrichedMembers} members that were already enriched. If you proceed, these members will be re-enriched and counted towards your quota.`
+ }
+
// All members are elegible for enrichment
- if (
- this.elegibleEnrichmentMembersIds.length ===
- this.selectedIds.length
- ) {
- await this.doBulkEnrich(
- this.elegibleEnrichmentMembersIds
- )
- } else {
+ if (enrichments === this.selectedIds.length) {
+ // If there are already enriched members, show a warning dialog
+ if (this.enrichedMembers) {
+ try {
+ await ConfirmDialog({
+ type: 'warning',
+ title: 'Some members were already enriched',
+ message: reEnrichmentMessage,
+ confirmButtonText: `Proceed with enrichment (${pluralize(
+ 'member',
+ enrichments,
+ true
+ )})`,
+ cancelButtonText: 'Cancel',
+ icon: 'ri-alert-line'
+ })
+
+ doEnrich = true
+ } catch (error) {
+ // no
+ }
+ } else {
+ doEnrich = true
+ }
// Only a few members are elegible for enrichment
+ } else {
try {
await ConfirmDialog({
type: 'warning',
@@ -211,20 +253,25 @@ export default {
'Member enrichment requires an associated GitHub profile or Email. If you proceed, only the members who fulfill this requirement will be enriched and counted towards your quota.',
confirmButtonText: `Proceed with enrichment (${pluralize(
'member',
- this.elegibleEnrichmentMembersIds.length,
+ enrichments,
true
)})`,
+ highlightedInfo: reEnrichmentMessage,
cancelButtonText: 'Cancel',
icon: 'ri-alert-line'
})
- await this.doBulkEnrich(
- this.elegibleEnrichmentMembersIds
- )
+ doEnrich = true
} catch (error) {
// no
}
}
+
+ if (doEnrich) {
+ await this.doBulkEnrich(
+ this.elegibleEnrichmentMembersIds
+ )
+ }
}
},
diff --git a/frontend/src/modules/member/components/member-dropdown.vue b/frontend/src/modules/member/components/member-dropdown.vue
index 5f9f5be655..748eea6043 100644
--- a/frontend/src/modules/member/components/member-dropdown.vue
+++ b/frontend/src/modules/member/components/member-dropdown.vue
@@ -22,7 +22,7 @@
}
}"
>
-
Enrich member{{
+ member.lastEnriched
+ ? 'Re-enrich member'
+ : 'Enrich member'
+ }}
diff --git a/frontend/src/shared/dialog/confirm-dialog.js b/frontend/src/shared/dialog/confirm-dialog.js
index d3db1592a3..03db9e9d6f 100644
--- a/frontend/src/shared/dialog/confirm-dialog.js
+++ b/frontend/src/shared/dialog/confirm-dialog.js
@@ -52,10 +52,26 @@ export default ({
)
]
),
- h('p', {
- innerHTML: message,
- class: 'text-gray-500 text-sm'
- })
+ h('div', [
+ h('p', {
+ innerHTML: message,
+ class: 'text-gray-500 text-sm'
+ }),
+ highlightedInfo
+ ? h(
+ 'div',
+ {
+ class:
+ 'text-2xs text-yellow-600 flex items-center mt-4'
+ },
+ [
+ h('div', {
+ innerHTML: highlightedInfo
+ })
+ ]
+ )
+ : undefined
+ ])
]
)