import React, { useEffect, useState, useRef } from "react";
import {
CCard,
CFormGroup,
CCol,
CLabel,
CRow,
CCardHeader,
CButton,
CCollapse,
} from "@coreui/react";
// AG GRID importaion
import { render } from "react-dom";
import { AgGridColumn, AgGridReact } from "ag-grid-react";
import "ag-grid-community/dist/styles/ag-grid.css";
import "ag-grid-community/dist/styles/ag-theme-alpine.css";
import CIcon from "@coreui/icons-react";
import { freeSet } from "@coreui/icons";
import Select from "react-select";
export default function ReacpFormationV2() {
// golbal variables
// var dataFiltred = []; // where we will push all filtred data
// var dataSiteFiltred = []; // contain the data filtred using site
// var siteFilterActive = false;
// var dataMonthFiltred = []; // contain the data filtred using Month
// var monthFilterActive = false;
// var dataLangueFiltred = []; // contain the data filtred using Langue
// var langueFilterActive = false;
// var dataNatureFiltred = []; // contain the data filtred using Nature
// var natureFilterActive = false;
// var dataActifInactifFiltred = []; // contain the data filtred using Actif/Inactif
// var actifInactifFilterActive = false;
// var dataFormateurFiltred = []; // contain the data filtred using Formateur
// var formateurFilterActive = false;
//filtre collapse settings
const [collapseFilter, setCollapseFilter] = useState(false);
const toggleFilter = (e) => {
setCollapseFilter(!collapseFilter);
e.preventDefault();
};
// hooks
const selectInputSiteRef = useRef();
const selectInputMonthRef = useRef();
const selectInputLangueRef = useRef();
const selectInputNatureRef = useRef();
const selectInputActifInactifRef = useRef();
const selectInputFormateurRef = useRef();
const [dataFiltred, setDataFiltred] = useState([]);
const [dataSiteFiltred, setDataSiteFiltred] = useState([]);
const [siteFilterActive, setSiteFilterActive] = useState(false);
const [dataMonthFiltred, setDataMonthFilter] = useState([]);
const [monthFilterActive, setMonthFilterActive] = useState(false);
const [dataLangueFiltred, setDataLangueFiltred] = useState([]);
const [langueFilterActive, setLangueFilterActive] = useState(false);
const [dataNatureFiltred, setDataNatureFiltred] = useState([]);
const [natureFilterActive, setNatureFilterActive] = useState(false);
const [dataActifInactifFiltred, setDataActifInactifFiltred] = useState([]);
const [actifInactifFilterActive, setActifInactifFilterActive] =
useState(false);
const [dataFormateurFiltred, setDataFormateurFiltred] = useState([]);
const [formateurFilterActive, setFormateurFilterActive] = useState(false);
// data
const dataSite = [
{ value: "Sousse", label: "Sousse" },
{ value: "Tunis", label: "Tunis" },
{ value: "France", label: "France" },
];
const dataMonth = [
{ value: "January", label: "January" },
{ value: "February", label: "February" },
{ value: "March", label: "March" },
{ value: "April", label: "April" },
{ value: "May", label: "May" },
{ value: "June", label: "June" },
{ value: "July", label: "July" },
{ value: "August", label: "August" },
{ value: "September", label: "September" },
{ value: "October", label: "October" },
{ value: "November", label: "November" },
{ value: "December", label: "December" },
];
const dataLangue = [
{ value: "FR", label: "FR" },
{ value: "EN", label: "EN" },
{ value: "ES", label: "ES" },
];
const dataNature = [
{ value: "upport Divinatoire", label: "upport Divinatoire" },
{ value: "Commerciale", label: "Commerciale" },
{ value: "Communication", label: "upport Divinatoire" },
{ value: "Culture Générale", label: "Culture Générale" },
{ value: "Divers", label: "Divers" },
];
const dataActifInactif = [
{ value: "Actif", label: "Actif" },
{ value: "Inactif", label: "Inactif" },
];
const dataFormateur = [
{ value: "SEMER", label: "SEMER" },
{ value: "Houssem", label: "Houssem" },
{ value: "Mehdi", label: "Mehdi" },
{ value: "Stéphane", label: "Stéphane" },
{ value: "Bassem", label: "Bassem" },
];
// ********************************* TABLE DATA *********************
const rowHeight = 50;
const rowData = [
{
Pseudo: "Voy1",
Site: "Tunis",
Langue: "FR",
Actif_Inactif: "Actif",
Date_Formation: "January",
Formateur: "Houssem",
Nature_Formation: "Support Divinatoire",
Durée: "4h",
Action: "Visulaiser",
},
{
Pseudo: "Voy2",
Site: "Sousse",
Langue: "EN",
Actif_Inactif: "Inactif",
Date_Formation: "",
Formateur: "Si SEMER",
Nature_Formation: "Commerciale",
Durée: "",
Action: "troller",
},
{
Pseudo: "Voy3",
Site: "France",
Langue: "FR",
Actif_Inactif: "Actif",
Date_Formation: "February",
Formateur: "Stéphane",
Nature_Formation: "Communication",
Durée: "03",
Action: "Divers",
},
{
Pseudo: "Voy4",
Site: "",
Langue: "ES",
Actif_Inactif: "",
Date_Formation: "",
Formateur: "",
Nature_Formation: "Culture Générale",
Durée: "",
Action: "Divers",
},
{
Pseudo: "Voy5",
Site: "",
Langue: "",
Actif_Inactif: "",
Date_Formation: "",
Formateur: "",
Nature_Formation: "Divers",
Durée: "",
Action: "",
},
{
Pseudo: "Voy6",
Site: "",
Langue: "ES",
Actif_Inactif: "",
Date_Formation: "",
Formateur: "",
Nature_Formation: "",
Durée: "",
Action: "",
},
{
Pseudo: "Voy7",
Site: "",
Langue: "ES",
Actif_Inactif: "",
Date_Formation: "",
Formateur: "Mehdi",
Nature_Formation: "",
Durée: "",
Action: "",
},
{
Pseudo: "Voy8",
Site: "",
Langue: "",
Actif_Inactif: "",
Date_Formation: "",
Formateur: "SEMER",
Nature_Formation: "",
Durée: "",
Action: "",
},
{
Pseudo: "Voy9",
Site: "",
Langue: "EN",
Actif_Inactif: "",
Date_Formation: "",
Formateur: "Bassem",
Nature_Formation: "",
Durée: "",
Action: "",
},
{
Pseudo: "Voy10",
Site: "",
Langue: "EN",
Actif_Inactif: "",
Date_Formation: "",
Formateur: "",
Nature_Formation: "",
Durée: "",
Action: "",
},
{
Pseudo: "Voy11",
Site: "",
Langue: "EN",
Actif_Inactif: "",
Date_Formation: "",
Formateur: "",
Nature_Formation: "",
Durée: "",
Action: "",
},
{
Pseudo: "Voy12",
Site: "",
Langue: "FR",
Actif_Inactif: "",
Date_Formation: "",
Formateur: "",
Nature_Formation: "",
Durée: "",
Action: "",
},
];
// ********************************* RENDER TABLE *********************
const renderTableData = () => {
return (
<div className="selectTable">
<div
className="ag-theme-alpine"
style={{
height: "75vh",
width: "110wh",
alignContent: "center",
alignItems: "center",
alignSelf: "center",
}}
>
<AgGridReact
rowData={dataFiltred}
rowHeight={rowHeight}
rowStyle={{ textAlign: "center" }}
>
<AgGridColumn field="Pseudo"></AgGridColumn>
<AgGridColumn field="Site"></AgGridColumn>
<AgGridColumn field="Langue"></AgGridColumn>
<AgGridColumn field="Actif_Inactif"></AgGridColumn>
<AgGridColumn field="Date_Formation"></AgGridColumn>
<AgGridColumn field="Formateur"></AgGridColumn>
<AgGridColumn field="Nature_Formation"></AgGridColumn>
<AgGridColumn field="Durée"></AgGridColumn>
<AgGridColumn field="Action"></AgGridColumn>
</AgGridReact>
</div>
</div>
);
};
// ********************************* logic *********************
function onSiteChange(value, type) {
if (type === "Site") {
value.forEach((elem) => {
rowData.forEach((data) => {
if (data["Site"] === elem["value"]) {
setDataSiteFiltred([...dataSiteFiltred, data]);
}
});
});
}
if (dataSiteFiltred.length) {
setDataFiltred([]);
dataSiteFiltred.forEach((elem) => {
setDataFiltred([...dataFiltred, elem]);
});
}
}
function updateTableData() {
if (!dataFiltred.length) {
rowData.forEach((elem) => {
setDataFiltred([...dataFiltred, elem]);
console.log(dataFiltred);
});
}
}
updateTableData();
useEffect(() => {
renderTableData();
}, [dataFiltred, dataSiteFiltred]);
return (
<>
<CCard>
<CCardHeader>
<div
style={{
textAlign: "center",
fontSize: "large",
fontWeight: "bold",
}}
>
Récapitulatif de formation continue
</div>
</CCardHeader>
</CCard>
<CCard>
<CCardHeader>
<CFormGroup row>
<CCol md="6">
<CButton
className="btn-sm"
size="sm"
variant="outline"
color="info"
onClick={toggleFilter}
>
<CIcon size={"sm"} content={freeSet.cilFilter}></CIcon>
Afficher Filtre
</CButton>
</CCol>
</CFormGroup>
<CFormGroup>
<CCollapse show={collapseFilter}>
<CFormGroup>
<CCol md="6 mt-1">
<CRow>
<CCol md="2 mt-1">
<CLabel>Site:</CLabel>
</CCol>
<CCol md="8 mt-0">
<Select
isMulti
name="selectSite"
options={dataSite}
ref={selectInputSiteRef}
onChange={(value) => onSiteChange(value, "Site")}
/>
</CCol>
</CRow>
<CRow>
<CCol md="2 mt-1">
<CLabel>Month:</CLabel>
</CCol>
<CCol md="8 mt-0">
<Select
isMulti
name="selectMonth"
id="selectMonth"
options={dataMonth}
ref={selectInputMonthRef}
/>
</CCol>
</CRow>
<CRow>
<CCol md="2 mt-1">
<CLabel>Langue:</CLabel>
</CCol>
<CCol md="8 mt-0">
<Select
isMulti
name="SelectLangue"
options={dataLangue}
ref={selectInputLangueRef}
/>
</CCol>
</CRow>
<CRow>
<CCol md="2 mt-1">
<CLabel>Nature:</CLabel>
</CCol>
<CCol md="8 mt-0">
<Select
isMulti
name="selectNature"
options={dataNature}
ref={selectInputNatureRef}
/>
</CCol>
</CRow>
<CRow>
<CCol md="2 mt-1">
<CLabel>Actif/Inactif:</CLabel>
</CCol>
<CCol md="8 mt-0">
<Select
isMulti
name="selectAcifInactif"
options={dataActifInactif}
ref={selectInputActifInactifRef}
/>
</CCol>
</CRow>
<CRow>
<CCol md="2 mt-1">
<CLabel>Formateur:</CLabel>
</CCol>
<CCol md="8 mt-0">
<Select
isMulti
name="selectFormateur"
options={dataFormateur}
ref={selectInputFormateurRef}
/>
</CCol>
</CRow>
</CCol>
</CFormGroup>
</CCollapse>
</CFormGroup>
</CCardHeader>
</CCard>
<div className="formationContinueContainer">
{/* ********************** Table ****************** */}
{renderTableData()}
</div>
</>
);
}