Skip to content

Commit d6d66e3

Browse files
authored
fixes: remove contacts button & Import csv (#1988)
* Disable button when no selection & Remove tooltip workarounds The tooltip not working when component is `disabled` seems to be fixed by PrimeVue * more package.json consistency * fix i18n: select at least one contacto to {action} * import csv goes to stepper 2 only on start mining on click "import csv or excel" and closing the window, the stepper should be at stepper 1 not 2 * frontend: run prettier * Update ImportFileDialog.vue
1 parent 7e214b6 commit d6d66e3

File tree

8 files changed

+58
-48
lines changed

8 files changed

+58
-48
lines changed

backend/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
"test:unit": "jest ./test/unit",
88
"test:integration": "jest ./test/integration",
99
"test-ci:unit": "jest ./test/unit --coverage",
10-
"dev-api": "nodemon src/server.ts",
11-
"dev-mock-external-services": "nodemon src/mocks/enrichment/server.ts",
12-
"dev-worker": "nodemon src/messageWorker.ts",
13-
"dev-email-worker": "nodemon src/emailVerificationWorker.ts",
10+
"dev:api": "nodemon src/server.ts",
11+
"dev:mock-external-services": "nodemon src/mocks/enrichment/server.ts",
12+
"dev:worker": "nodemon src/messageWorker.ts",
13+
"dev:email-worker": "nodemon src/emailVerificationWorker.ts",
1414
"dev:webhook-listener": "stripe listen --forward-to http://localhost:8081/api/payment/stripe/webhook",
1515
"dev:inspect": "node --inspect -r ts-node/register src/server.ts",
1616
"lint": "eslint src test",

frontend/nuxt.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ export default defineNuxtConfig({
164164
src: 'icons/pickaxe-512-512.png',
165165
sizes: '512x512',
166166
type: 'image/png',
167-
purpose: 'any'
167+
purpose: 'any',
168168
},
169169
{
170170
src: 'icons/pickaxe-512-512.png',
@@ -175,7 +175,7 @@ export default defineNuxtConfig({
175175
],
176176
},
177177
workbox: {
178-
navigateFallback: "/",
178+
navigateFallback: '/',
179179
},
180180
devOptions: {
181181
enabled: true,

frontend/src/components/Mining/Buttons/RemoveContactButton.vue

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
<template>
22
<Button
33
id="remove-contact"
4-
v-tooltip.top="t('remove_contacts', contactsToDeleteLength)"
4+
v-tooltip.top="
5+
!isRemoveDisabled && t('remove_contacts', contactsToDeleteLength)
6+
"
57
icon="pi pi-times"
68
:label="$screenStore.size.md ? t('remove') : undefined"
79
severity="danger"
8-
:disabled="isRemoveDisabled || isRemovingContacts"
10+
:disabled="isRemoveDisabled"
911
:loading="isRemovingContacts"
1012
@click="showWarning()"
1113
/>
@@ -57,10 +59,12 @@ const { deselectContacts } = props;
5759
5860
const contactsToDelete = computed(() => props.contactsToDelete);
5961
const contactsToDeleteLength = computed(() => props.contactsToDeleteLength);
60-
const isRemoveDisabled = computed(() => props.isRemoveDisabled);
62+
const isRemovingContacts = ref(false);
63+
const isRemoveDisabled = computed(
64+
() => props.isRemoveDisabled || isRemovingContacts.value,
65+
);
6166
6267
const showRemoveContactModal = ref(false);
63-
const isRemovingContacts = ref(false);
6468
6569
function showWarning() {
6670
showRemoveContactModal.value = true;

frontend/src/components/Mining/ImportFileDialog.vue

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -118,20 +118,16 @@
118118
icon="pi pi-arrow-left"
119119
@click="reset()"
120120
/>
121-
<!-- This is a workaround as tooltip doesn't work when component is `disabled`-->
122-
<div
121+
<Button
123122
v-tooltip.top="
124123
!selectedHeaders.includes('email') && t('email_column_required')
125124
"
126-
>
127-
<Button
128-
class="border-solid border-2 border-black"
129-
:label="t('start_mining')"
130-
severity="contrast"
131-
:disabled="!selectedHeaders.includes('email')"
132-
@click="startMining"
133-
/>
134-
</div>
125+
class="border-solid border-2 border-black"
126+
:label="t('start_mining')"
127+
severity="contrast"
128+
:disabled="!selectedHeaders.includes('email')"
129+
@click="startMining"
130+
/>
135131
</template>
136132
</Dialog>
137133
</template>
@@ -147,6 +143,7 @@ const { t } = useI18n({
147143
useScope: 'local',
148144
});
149145
const $leadminerStore = useLeadminerStore();
146+
const $stepper = useMiningStepper();
150147
151148
const dialog = ref();
152149
const visible = ref(false);
@@ -207,7 +204,7 @@ const $screenStore = useScreenStore();
207204
208205
const DELIMITERS = [',', ';', '|', '\t'];
209206
function getLocalDelimiter() {
210-
const language = navigator.language?.substring(0, 2);
207+
const language = navigator?.language?.substring(0, 2);
211208
switch (language) {
212209
case 'fr':
213210
case 'de':
@@ -229,7 +226,7 @@ function getOrderedDelimiters() {
229226
const orderedDelimiters = getOrderedDelimiters();
230227
231228
function reset() {
232-
fileUpload.value.clear();
229+
fileUpload.value?.clear();
233230
contentJson.value = null;
234231
columns.value = [];
235232
fileName.value = undefined;
@@ -414,6 +411,7 @@ function startMining() {
414411
name: fileName.value ?? '',
415412
contacts: parsedDataWithMappedHeaders,
416413
};
414+
$stepper.next();
417415
$leadminerStore.startMining(SOURCE);
418416
visible.value = false;
419417
}

frontend/src/components/Mining/StepperPanels/MinePanel.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,6 @@ const progressTooltip = computed(() =>
204204
205205
onMounted(async () => {
206206
if (source.value === 'file') {
207-
importFileDialogRef.value.openModal();
208207
return;
209208
}
210209

frontend/src/components/Mining/StepperPanels/SourcePanel.vue

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,13 @@
6060
v-model:show="$imapDialogStore.showImapDialog"
6161
/>
6262
<Button
63-
id="import-csv"
63+
id="import-file"
6464
outlined
6565
icon="pi pi-upload"
6666
:label="t('import_csv_excel')"
67-
@click="importTable()"
67+
@click="importFileDialogRef.openModal()"
6868
/>
69+
<importFileDialog ref="importFileDialogRef" />
6970
</div>
7071
</div>
7172
</div>
@@ -76,7 +77,9 @@ import ImapSource from '@/components/Mining/AddSourceImap.vue';
7677
import OauthSource from '@/components/Mining/AddSourceOauth.vue';
7778
import { FetchError } from 'ofetch';
7879
import type { MiningSource } from '~/types/mining';
80+
import importFileDialog from '../ImportFileDialog.vue';
7981
82+
const importFileDialogRef = ref();
8083
const { t } = useI18n({
8184
useScope: 'local',
8285
});
@@ -138,11 +141,6 @@ onMounted(async () => {
138141
defineExpose({
139142
onSourceChange,
140143
});
141-
142-
function importTable() {
143-
//miningSource would be undefined
144-
$stepper.next();
145-
}
146144
</script>
147145

148146
<i18n lang="json">

frontend/src/components/Mining/Table/MiningTable.vue

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,24 +58,31 @@
5858
</template>
5959
<template #header>
6060
<div class="flex items-center gap-1">
61-
<!-- This is a workaround as tooltip doesn't work when component is `disabled`-->
62-
<div
63-
v-tooltip.top="isExportDisabled && t('select_at_least_one_contact')"
64-
class="flex items-center gap-1"
65-
>
61+
<div class="flex items-center gap-1">
6662
<Button
6763
id="export-csv"
64+
v-tooltip.top="
65+
isExportDisabled &&
66+
t('select_at_least_one_contact', { action: t('export') })
67+
"
6868
icon="pi pi-external-link"
6969
:label="$screenStore.size.md ? t('export_csv') : undefined"
7070
:disabled="isExportDisabled"
7171
@click="exportTable()"
7272
/>
73-
<RemoveContactButton
74-
:contacts-to-delete="contactsToTreat"
75-
:contacts-to-delete-length="implicitlySelectedContactsLength"
76-
:is-remove-disabled="isExportDisabled"
77-
:deselect-contacts="deselectContacts"
78-
/>
73+
<div
74+
v-tooltip.top="
75+
(isExportDisabled || !selectedContactsLength) &&
76+
t('select_at_least_one_contact', { action: t('remove') })
77+
"
78+
>
79+
<RemoveContactButton
80+
:contacts-to-delete="contactsToTreat"
81+
:contacts-to-delete-length="selectedContactsLength"
82+
:is-remove-disabled="isExportDisabled || !selectedContactsLength"
83+
:deselect-contacts="deselectContacts"
84+
/>
85+
</div>
7986
</div>
8087
<div>
8188
<EnrichButton
@@ -1115,8 +1122,10 @@ table.p-datatable-table {
11151122
"of": "of",
11161123
"no_contacts_found": "No contacts found",
11171124
"try_clearing_filters": "Try clearing filters",
1118-
"select_at_least_one_contact": "Select at least one contact to export",
1125+
"select_at_least_one_contact": "Select at least one contact to {action}",
11191126
"export_csv": "Export CSV",
1127+
"export": "export",
1128+
"remove": "remove",
11201129
"clear": "Clear",
11211130
"filter": "Filter",
11221131
"toggle_valid_tooltip": "Ensure the deliverability of your campaign",
@@ -1161,7 +1170,9 @@ table.p-datatable-table {
11611170
"of": "sur",
11621171
"no_contacts_found": "Aucun contact trouvé",
11631172
"try_clearing_filters": "Essayez de vider les filtres",
1164-
"select_at_least_one_contact": "Sélectionnez au moins un contact à exporter",
1173+
"select_at_least_one_contact": "Sélectionnez au moins un contact à {action}",
1174+
"export": "exporter",
1175+
"remove": "supprimer",
11651176
"export_csv": "Export CSV",
11661177
"clear": "Vider",
11671178
"filter": "Filtrer",

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
"dev:supabase": "supabase start",
1313
"dev:supabase-functions": "supabase functions serve",
1414
"dev:frontend": "npm run dev --prefix ./frontend",
15-
"dev:backend-api": "npm run dev-api --prefix ./backend",
16-
"dev:backend-worker": "npm run dev-worker --prefix ./backend",
17-
"dev:backend-email-worker": "npm run dev-email-worker --prefix ./backend",
18-
"dev:backend-mock-external-services": "npm run dev-mock-external-services --prefix ./backend"
15+
"dev:backend-api": "npm run dev:api --prefix ./backend",
16+
"dev:backend-worker": "npm run dev:worker --prefix ./backend",
17+
"dev:backend-email-worker": "npm run dev:email-worker --prefix ./backend",
18+
"dev:backend-mock-external-services": "npm run dev:mock-external-services --prefix ./backend"
1919
},
2020
"author": "ankaboot",
2121
"license": "AGPL-3.0",

0 commit comments

Comments
 (0)