diff --git a/src/components/Reports/ProjectReport/PiechartByProject/PieChartByProject.css b/src/components/Reports/ProjectReport/PiechartByProject/PieChartByProject.css index c94705689e..015fdbd67e 100644 --- a/src/components/Reports/ProjectReport/PiechartByProject/PieChartByProject.css +++ b/src/components/Reports/ProjectReport/PiechartByProject/PieChartByProject.css @@ -4,7 +4,7 @@ margin-bottom: 24px; } -.pie-chart-container{ +.pie-chart-description{ display: flex; justify-content: space-around; alignItems: center; diff --git a/src/components/Reports/ProjectReport/PiechartByProject/PieChartByProject.jsx b/src/components/Reports/ProjectReport/PiechartByProject/PieChartByProject.jsx index 698348625c..d2031b5d01 100644 --- a/src/components/Reports/ProjectReport/PiechartByProject/PieChartByProject.jsx +++ b/src/components/Reports/ProjectReport/PiechartByProject/PieChartByProject.jsx @@ -1,12 +1,15 @@ import React, { PureComponent, useEffect, useState } from 'react'; import { PieChart, Pie, Sector, ResponsiveContainer } from 'recharts'; import './PieChartByProject.css'; +import TriMembersStateToggleSwitch from './TriMembersStateToggleSwitch/TriMembersStateToggleSwitch' +import style from '../../../UserProfile/UserProfileEdit/ToggleSwitch/ToggleSwitch.module.scss'; export function PieChartByProject({ mergedProjectUsersArray, projectName, darkMode }) { + const [showMembers, setShowMembers] = useState(null); const [userData, setUserData] = useState([]); const [isChecked, setIsChecked] = useState(false); const [windowSize, setWindowSize] = useState({ @@ -41,7 +44,7 @@ export function PieChartByProject({ }); - if (showInactive === true) { + if (showMembers === false) { const inactiveUsers = mergedProjectUsersArray.filter(member => !member.personId.isActive ) setInactiveData(inactiveUsers); @@ -62,8 +65,7 @@ export function PieChartByProject({ }); const sortedArr = inactiveArr.sort((a, b) => (a.name).localeCompare(b.name)) setUserData(sortedArr) - } - if (showActive === true) { + } else if (showMembers === true) { const activeUsers = mergedProjectUsersArray.filter(member => member.personId.isActive ) setActiveData(activeUsers); @@ -84,13 +86,12 @@ export function PieChartByProject({ }); const sortedArr = activeArr.sort((a, b) => (a.name).localeCompare(b.name)) setUserData(sortedArr) - } - if (showInactive === false && showActive === false) { + } else { const sortedArr = arrData.sort((a, b) => (a.name).localeCompare(b.name)) setUserData(sortedArr) } - }, [mergedProjectUsersArray,showInactive, showActive ]) + }, [mergedProjectUsersArray,showMembers]) useEffect(() => { window.addEventListener('resize', updateWindowSize); @@ -109,15 +110,26 @@ export function PieChartByProject({ const handleShowPieChart = () => { setIsChecked(!isChecked); }; + + const handleShowMembersChange = (newState) => { + if (newState.showActive) { + setShowMembers(true); + } else if (newState.showInactive) { + setShowMembers(false); + } else { + setShowMembers(null); + } + }; + return (
{showMembers === null ? 'All members' : ''}
+Total Active Members: {activeData.length} - Hrs Applied: { globalactiveHours.toFixed(2) }
Total Inactive Members: {inactiveData.length} - Hrs Applied: { globalInactiveHours.toFixed(2) }
Total Applied Hours: {totalHours.toFixed(2)}
diff --git a/src/components/Reports/ProjectReport/PiechartByProject/TriMembersStateToggleSwitch/TriMembersStateToggleSwitch.css b/src/components/Reports/ProjectReport/PiechartByProject/TriMembersStateToggleSwitch/TriMembersStateToggleSwitch.css new file mode 100644 index 0000000000..119bafeb12 --- /dev/null +++ b/src/components/Reports/ProjectReport/PiechartByProject/TriMembersStateToggleSwitch/TriMembersStateToggleSwitch.css @@ -0,0 +1,81 @@ +:root { + --blue: #0084ff; + --darkgray: #c0baba; + --green: green; + + --switch-width: 60px; + --switch-height: calc(var(--switch-width) * 0.3); + --knob-width: calc(var(--switch-height) * 0.8); +} + +.toggle-switch { + width: var(--switch-width); + height: var(--switch-height); + border-radius: calc(var(--switch-height) / 2); + position: relative; + cursor: pointer; + transition: all 0.3s ease-in-out; + -webkit-transition: all 0.3s ease-in-out; + margin: 5px; +} + +.knob { + width: var(--knob-width); + height: var(--knob-width); + background-color: #fff; + border-radius: 50%; + position: absolute; + top: calc(0.1 * var(--switch-height)); + transition: all 0.3s ease-in-out; + -webkit-transition: all 0.3s ease-in-out; +} + +.posted { + transform: translateX(calc(0.1 * var(--switch-height))); + -webkit-transform: translateX(calc(0.1 * var(--switch-height))); +} + +.default { + transform: translateX(calc(var(--switch-width) / 2 - (var(--knob-width) / 2))); + -webkit-transform: translateX(calc(var(--switch-width) / 2 - (var(--knob-width) / 2))); +} + +.requested { + transform: translateX( + calc(var(--switch-width) - (var(--knob-width)) - (0.1 * var(--switch-height))) + ); + -webkit-transform: translateX( + calc(var(--switch-width) - (var(--knob-width)) - (0.1 * var(--switch-height))) + ); +} + +.bg-blue { + background-color: var(--blue); +} + +.bg-green { + background-color: var(--green); +} + +.bg-darkgray { + background-color: var(--darkgray); +} + +.knob-area { + position: absolute; + display: flex; + justify-content: space-between; + flex-direction: row; + width: var(--switch-width); + height: var(--switch-height); + border-radius: calc(var(--switch-height) / 2); + overflow: hidden; +} + +.knob-area div { + width: 33.33%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} diff --git a/src/components/Reports/ProjectReport/PiechartByProject/TriMembersStateToggleSwitch/TriMembersStateToggleSwitch.jsx b/src/components/Reports/ProjectReport/PiechartByProject/TriMembersStateToggleSwitch/TriMembersStateToggleSwitch.jsx new file mode 100644 index 0000000000..a50d43d08e --- /dev/null +++ b/src/components/Reports/ProjectReport/PiechartByProject/TriMembersStateToggleSwitch/TriMembersStateToggleSwitch.jsx @@ -0,0 +1,44 @@ +import React, { useState, useEffect } from 'react'; +import './TriMembersStateToggleSwitch.css'; + +function TriMembersStateToggleSwitch({ onChange }) { + const [position, setPosition] = useState('default'); + const [bgColor, setBgColor] = useState('darkgray'); + + const handleClick = pos => { + setPosition(pos); + switch (pos) { + case 'posted': + setBgColor('blue'); + onChange({ showInactive: true, showActive: false }); + break; + case 'default': + setBgColor('darkgray'); + onChange({ showInactive: false, showActive: false }); + break; + case 'requested': + setBgColor('green'); + onChange({ showInactive: false, showActive: true }); + break; + default: + break; + } + }; + + useEffect(() => { + handleClick('default'); + }, []); + + return ( +Total Active Members: {activeData.length}
Total Hours Commited: { totalHours.toFixed(2)}