diff --git a/frontend/components/UserList.jsx b/frontend/components/UserList.jsx index bad19177..aaa6c727 100755 --- a/frontend/components/UserList.jsx +++ b/frontend/components/UserList.jsx @@ -4,8 +4,8 @@ import _ from "lodash"; const moment = require("moment"); require("moment/locale/fr"); -import { csrfToken } from "./utils"; -import { makeDebounce } from "../tools/inputs"; +import {csrfToken} from "./utils"; +import {makeDebounce} from "../tools/inputs"; import ReactTableFullScreen from "./ReactTableFullScreen"; import * as api from "../tools/api"; import swal from "sweetalert2"; @@ -72,7 +72,7 @@ class UserList extends React.Component { } fetchData(state, instance) { - this.setState({ loading: true, filter: state }); + this.setState({loading: true, filter: state}); debounce(() => { requestData( @@ -156,20 +156,16 @@ class UserList extends React.Component { }); } - sendConfirmationMail() - { + sendConfirmationMail() { api.set() .success((datas) => { - if(!datas || datas.length === 0) - { + if (!datas || datas.length === 0) { swal({ title: `Tous les utilisateurs ${this.state.selected.length > 0 ? "sélectionnés" : ""} ont déjà confirmé leur compte`, type: "warning", confirmButtonText: "Ok" }); - } - else - { + } else { swal({ title: `Les utilisateurs suivants ont reçu un mail de confirmation :`, html: "", @@ -188,8 +184,60 @@ class UserList extends React.Component { .post('/users/resend_confirmation', {ids: this.state.selected.length > 0 ? this.state.selected : this.state.data.map(d => d.id)}); } + handleDeleteUser = () => { + const selectedUserIds = this.state.selected; + let successCount = 0; + let errorCount = 0; + const isSingleUser = selectedUserIds.length === 1; + + swal({ + title: `Supprimer ${isSingleUser ? "l'utilisateur sélectionné" : "les utilisateurs sélectionnés"}`, + html: `

Cela supprimera ${isSingleUser ? "l'utilisateur, ses liens familiaux ainsi que son adhésion" : "les utilisateurs, leurs liens familiaux ainsi que leurs adhésions"}. Êtes-vous sûr ?


+

Les utilisateurs associés seront détachés, et un email leur sera envoyé pour créer un mot de passe (si leur email est différent de celui de ce compte).

`, + type: "warning", + showCancelButton: true, + confirmButtonText: "Oui, supprimer", + cancelButtonText: "Annuler" + }).then((result) => { + if (result.value) { + Promise.all( + selectedUserIds.map((id) => + api.set() + .success(() => { successCount += 1; }) + .error(() => { errorCount += 1; }) + .del(`/destroy/User/${id}`) + ) + ).then(() => { + const successMessage = successCount === 1 ? + "1 utilisateur supprimé avec succès." : + `${successCount} utilisateurs supprimés avec succès.`; + const errorMessage = errorCount > 0 ? + `

${errorCount} erreur(s) rencontrée(s).

` : + ""; + + swal({ + title: "Suppression terminée", + html: `

${successMessage}

${errorMessage}`, + type: successCount > 0 ? "success" : "error", + confirmButtonText: "Ok" + }); + this.fetchData(this.state.filter); + this.setState({ selected: [] }); + }).catch(() => { + swal({ + title: "Erreur", + text: "Une erreur est survenue lors de la suppression de masse.", + type: "error", + confirmButtonText: "Ok" + }); + }); + } + }); +}; + + render() { - const { data, pages, loading } = this.state; + const {data, pages, loading} = this.state; const columns = [ { @@ -289,10 +337,10 @@ class UserList extends React.Component { }, sortable: false, filterable: !this.props.nofilter, - Filter: ({ filter, onChange }) => ( + Filter: ({filter, onChange}) => ( onChange(event.target.value)} - style={{ width: "100%" }} + style={{width: "100%"}} value={filter ? filter.value : "all"} > @@ -364,7 +412,7 @@ class UserList extends React.Component { ); } - return

; + return

; }, filterable: false, }, @@ -386,7 +434,7 @@ class UserList extends React.Component { href={`/planning/${props.original.planning.id}`} className="btn btn-xs btn-primary m-b-sm" > - +   Planning ) : null} @@ -401,16 +449,16 @@ class UserList extends React.Component { { anyActive(props.original.adhesions) || props.original['any_users_self_is_paying_for?'] ? ( - - -   Paiements - - ) : ( - "" - )} + + +   Paiements + + ) : ( + "" + )} ); @@ -429,7 +477,7 @@ class UserList extends React.Component { className="btn btn-primary m-r" onClick={() => this.onCsvExport()} > - + Exporter en CSV @@ -437,7 +485,8 @@ class UserList extends React.Component { Fusionner des doublons - @@ -445,9 +494,18 @@ class UserList extends React.Component { + + {this.state.selected.length > 0 ? ( + + ) : null} + { if (row[filter.id] != null) { return row[filter.id] @@ -492,7 +550,7 @@ class UserList extends React.Component { { this.setState({showAttachAccountModal: false}); this.fetchData(this.state.filter) - }} /> + }}/> );