diff --git a/governance/cypress/cypress/e2e/Councils - Administration.e2e.js b/governance/cypress/cypress/e2e/Councils - Administration.e2e.js
index b07073bc7..1819eca45 100644
--- a/governance/cypress/cypress/e2e/Councils - Administration.e2e.js
+++ b/governance/cypress/cypress/e2e/Councils - Administration.e2e.js
@@ -23,22 +23,6 @@ it('Councils - Administration', () => {
.should('have.css', 'width', '40px')
.and('have.css', 'height', '40px');
cy.get('[data-cy="council-information-spartan"]').should('have.css', 'gap', '8px');
- cy.get('[data-cy="number-table-header"]').click();
- cy.get('[data-cy="sort-arrow-up"]').should('exist');
- cy.get('[data-cy="sort-arrow-up"]').click();
- cy.get('[data-cy="sort-arrow-down"]').should('exist');
- cy.get('[data-cy="name-table-header"]').click();
- cy.get('[data-cy="sort-arrow-up"]').should('exist');
- cy.get('[data-cy="sort-arrow-up"]').click();
- cy.get('[data-cy="sort-arrow-down"]').should('exist');
- cy.get('[data-cy="votes-table-header"]').click();
- cy.get('[data-cy="sort-arrow-up"]').should('exist');
- cy.get('[data-cy="sort-arrow-up"]').click();
- cy.get('[data-cy="sort-arrow-down"]').should('exist');
- cy.get('[data-cy="voting-power-table-header"]').click();
- cy.get('[data-cy="sort-arrow-up"]').should('exist');
- cy.get('[data-cy="sort-arrow-up"]').click();
- cy.get('[data-cy="sort-arrow-down"]').should('exist');
cy.viewport(400, 800);
cy.visit('#/councils');
cy.get('[data-cy="my-votes-summary-text"]').should('have.css', 'font-size', '14px');
diff --git a/governance/ui/src/components/CouncilMembers/CouncilMembers.tsx b/governance/ui/src/components/CouncilMembers/CouncilMembers.tsx
index 3bad09517..5401814cd 100644
--- a/governance/ui/src/components/CouncilMembers/CouncilMembers.tsx
+++ b/governance/ui/src/components/CouncilMembers/CouncilMembers.tsx
@@ -18,12 +18,12 @@ import { useGetCurrentPeriod } from '../../queries/useGetCurrentPeriod';
import { useMemo, useState } from 'react';
import { ArrowUpDownIcon } from '@chakra-ui/icons';
import SortArrows from '../SortArrows/SortArrows';
-import { useGetCouncilMembers, useGetUserDetailsQuery } from '../../queries';
+import { useGetCouncilMembers, useGetHistoricalVotes, useGetUserDetailsQuery } from '../../queries';
import TableLoading from '../TableLoading/TableLoading';
import { sortUsers } from '../../utils/sort-users';
export default function CouncilMembers({ activeCouncil }: { activeCouncil: CouncilSlugs }) {
- const [sortConfig, setSortConfig] = useState<[boolean, string]>([false, 'start']);
+ const [sortConfig, setSortConfig] = useState<[boolean, string]>([true, 'votingPower']);
const { data: councilMembers } = useGetCouncilMembers(activeCouncil);
const { data: councilMemberDetails, isLoading: userDetailsLoading } = useGetUserDetailsQuery(
@@ -31,12 +31,13 @@ export default function CouncilMembers({ activeCouncil }: { activeCouncil: Counc
);
const { data: councilSchedule } = useGetEpochSchedule(activeCouncil);
const { data: councilPeriod } = useGetCurrentPeriod(activeCouncil);
+ const { data: votes } = useGetHistoricalVotes();
const nextEpoch = calculateNextEpoch(councilSchedule);
const sortedNominees = useMemo(() => {
- return sortUsers(activeCouncil, '', sortConfig, councilMemberDetails);
- }, [sortConfig, councilMemberDetails, activeCouncil]);
+ return sortUsers(activeCouncil, '', sortConfig, councilMemberDetails, votes);
+ }, [sortConfig, councilMemberDetails, activeCouncil, votes]);
return (
}
)}
- {councilPeriod === '0' && (
-
|
- )}
+ {/* {councilPeriod === '0' && (
+ |
+ )}*/}
@@ -142,10 +143,11 @@ export default function CouncilMembers({ activeCouncil }: { activeCouncil: Counc
sortedNominees.map((councilNominee, index) => {
return (
);
}
+
+function totalVotingPowerForCouncil(council: CouncilSlugs) {
+ switch (council) {
+ case 'spartan':
+ return 'totalVotingPowerSpartan';
+ case 'ambassador':
+ return 'totalVotingPowerAmbassador';
+ case 'treasury':
+ return 'totalVotingPowerTreasury';
+ }
+}
diff --git a/governance/ui/src/components/CouncilTabs/CouncilTabs.tsx b/governance/ui/src/components/CouncilTabs/CouncilTabs.tsx
index 90549f974..724ffb5f3 100644
--- a/governance/ui/src/components/CouncilTabs/CouncilTabs.tsx
+++ b/governance/ui/src/components/CouncilTabs/CouncilTabs.tsx
@@ -172,22 +172,22 @@ export default function CouncilTabs({ activeCouncil }: { activeCouncil: CouncilS
{councilPeriod === '2' && utils.isAddress(newVoteCast || '') ? (
<>
{userInformation[index]?.userInformation?.address
? newVoteCast?.toLowerCase() !==
userInformation[index]?.userInformation?.address?.toLowerCase() && (
<>
-
+
>
)
: null}
@@ -199,7 +199,6 @@ export default function CouncilTabs({ activeCouncil }: { activeCouncil: CouncilS
)}
@@ -207,7 +206,8 @@ export default function CouncilTabs({ activeCouncil }: { activeCouncil: CouncilS
{newVoteCast && userInformation[index].userInformation?.address && (
)}
- {(newVoteCast === 'remove' || !newVoteCast) && (
+ {(newVoteCast === 'remove' ||
+ (!newVoteCast && !userInformation[index].userInformation?.address)) && (
(
+
+
+
+);
diff --git a/governance/ui/src/components/Icons/index.ts b/governance/ui/src/components/Icons/index.ts
index f0e839f40..efae798b0 100644
--- a/governance/ui/src/components/Icons/index.ts
+++ b/governance/ui/src/components/Icons/index.ts
@@ -6,3 +6,4 @@ export * from './EditIcon';
export * from './ShareIcon';
export * from './Optimism';
export * from './Ethereum';
+export * from './CrownIcon';
diff --git a/governance/ui/src/components/MyVoteRow/MyVoteRow.tsx b/governance/ui/src/components/MyVoteRow/MyVoteRow.tsx
index bc5f805cd..2946a5f39 100644
--- a/governance/ui/src/components/MyVoteRow/MyVoteRow.tsx
+++ b/governance/ui/src/components/MyVoteRow/MyVoteRow.tsx
@@ -35,10 +35,11 @@ export default function MyVoteRow({
);
const voteAddressState = typeof voteSelection === 'string' ? voteSelection : '';
- const hasVoted =
- utils.isAddress(votedCandidate) &&
- utils.isAddress(voteAddressState) &&
- votedCandidate.toLowerCase() === voteAddressState.toLowerCase();
+ const hasVoted = utils.isAddress(voteAddressState)
+ ? utils.isAddress(votedCandidate) &&
+ utils.isAddress(voteAddressState) &&
+ votedCandidate.toLowerCase() === voteAddressState.toLowerCase()
+ : utils.isAddress(votedCandidate);
const isDisabled = period !== '2';
const handleAddVote = (e: React.MouseEvent) => {
@@ -107,7 +108,7 @@ export default function MyVoteRow({
}}
>
- {!hasVoted && votedCandidate && voteAddressState && (
+ {((!hasVoted && votedCandidate && voteAddressState) || voteAddressState === 'remove') && (
<>
@@ -115,7 +116,7 @@ export default function MyVoteRow({
)}
- {hasVoted ? (
+ {hasVoted && voteAddressState !== 'remove' ? (
Your Vote
) : voteAddressState ? (
diff --git a/governance/ui/src/components/MyVotesBox/MyVotesBox.tsx b/governance/ui/src/components/MyVotesBox/MyVotesBox.tsx
index 043bad61a..2a040fe2a 100644
--- a/governance/ui/src/components/MyVotesBox/MyVotesBox.tsx
+++ b/governance/ui/src/components/MyVotesBox/MyVotesBox.tsx
@@ -21,7 +21,7 @@ export default function MyVotesBox({
{
e.stopPropagation();
- if (nominationInformation?.isNominated && isNominatedFetched) {
+ if (
+ (nominationInformation?.isNominated && isNominatedFetched) ||
+ !isNominationOrVoting
+ ) {
navigate({ pathname: `/councils/${activeCouncil}`, search: `view=${address}` });
} else {
navigate({
@@ -121,7 +125,11 @@ export default function UserListItem({
}}
color="white"
>
- {nominationInformation?.isNominated ? 'View' : 'Nominate Self'}
+ {isNominationOrVoting
+ ? nominationInformation?.isNominated
+ ? 'View'
+ : 'Nominate Self'
+ : 'View'}
)
)}
diff --git a/governance/ui/src/components/UserProfileCard/ProfilePicture/ProfilePicture.tsx b/governance/ui/src/components/UserProfileCard/ProfilePicture/ProfilePicture.tsx
index 453c95664..4bcea1fc1 100644
--- a/governance/ui/src/components/UserProfileCard/ProfilePicture/ProfilePicture.tsx
+++ b/governance/ui/src/components/UserProfileCard/ProfilePicture/ProfilePicture.tsx
@@ -33,18 +33,11 @@ export const ProfilePicture = ({
filter={isCouncilTabs ? 'grayscale(1)' : ''}
zIndex={10}
position="relative"
- data-cy={`user-blockies-council-tabs-${address || newVoteCast}`}
+ data-cy={`user-blockies-council-tabs-${address}`}
>
- {!!newVoteCast && (
-
- )}
-
+
);
}
- return null;
+ return ;
};
diff --git a/governance/ui/src/components/UserProfileCard/UserProfileDetails.tsx b/governance/ui/src/components/UserProfileCard/UserProfileDetails.tsx
index f3bd9081f..67dbe7e47 100644
--- a/governance/ui/src/components/UserProfileCard/UserProfileDetails.tsx
+++ b/governance/ui/src/components/UserProfileCard/UserProfileDetails.tsx
@@ -81,12 +81,6 @@ export const UserProfileDetails = ({
};
checkOverflow();
window.addEventListener('resize', checkOverflow);
- return () => {
- window.removeEventListener('resize', checkOverflow);
- };
- }, []);
-
- useEffect(() => {
const handleScroll = () => {
if (elementRef.current) {
const { scrollTop, scrollHeight, clientHeight } = elementRef.current;
@@ -107,6 +101,7 @@ export const UserProfileDetails = ({
if (refCurrent) {
refCurrent.removeEventListener('scroll', handleScroll);
}
+ window.removeEventListener('resize', checkOverflow);
};
}, []);
@@ -343,7 +338,10 @@ export const UserProfileDetails = ({
dispatch({
type: activeCouncil.toUpperCase(),
payload: {
- action: 'remove',
+ action:
+ voteAddressState === 'remove'
+ ? ballot?.votedCandidates[0].toLowerCase()
+ : 'remove',
network: parsedNetwork,
epochId: epochId?.toString(),
wallet: activeWallet?.address,
@@ -353,7 +351,9 @@ export const UserProfileDetails = ({
dispatch({
type: activeCouncil.toUpperCase(),
payload: {
- action: undefined,
+ action: ballot?.votedCandidates[0]?.toLowerCase()
+ ? ballot?.votedCandidates[0].toLowerCase()
+ : undefined,
network: parsedNetwork,
epochId: epochId?.toString(),
wallet: activeWallet?.address,
diff --git a/governance/ui/src/components/UserProfileForm/UserProfileEditPreview.tsx b/governance/ui/src/components/UserProfileForm/UserProfileEditPreview.tsx
index 3d9e7a447..2c799aff8 100644
--- a/governance/ui/src/components/UserProfileForm/UserProfileEditPreview.tsx
+++ b/governance/ui/src/components/UserProfileForm/UserProfileEditPreview.tsx
@@ -31,12 +31,6 @@ export default function UserProfileEditPreview({
};
checkOverflow();
window.addEventListener('resize', checkOverflow);
- return () => {
- window.removeEventListener('resize', checkOverflow);
- };
- }, []);
-
- useEffect(() => {
const handleScroll = () => {
if (elementRef.current) {
const { scrollTop, scrollHeight, clientHeight } = elementRef.current;
@@ -57,6 +51,7 @@ export default function UserProfileEditPreview({
if (refCurrent) {
refCurrent.removeEventListener('scroll', handleScroll);
}
+ window.removeEventListener('resize', checkOverflow);
};
}, []);
diff --git a/governance/ui/src/components/UserTableView/UserTableView.tsx b/governance/ui/src/components/UserTableView/UserTableView.tsx
index e78b9de0c..b7b8dde79 100644
--- a/governance/ui/src/components/UserTableView/UserTableView.tsx
+++ b/governance/ui/src/components/UserTableView/UserTableView.tsx
@@ -1,4 +1,4 @@
-import { Button, Flex, Icon, Text, Td, Tr } from '@chakra-ui/react';
+import { Button, Flex, Text, Td, Tr } from '@chakra-ui/react';
import { GetUserDetails } from '../../queries/useGetUserDetailsQuery';
import { Badge } from '../Badge';
import { useNavigate, useSearchParams } from 'react-router-dom';
@@ -10,6 +10,7 @@ import { useGetUserBallot } from '../../queries';
import { BigNumber, utils } from 'ethers';
import { formatNumber } from '@snx-v3/formatters';
import { renderCorrectBorder } from '../../utils/table-border';
+import { CrownIcon } from '../Icons';
export default function UserTableView({
user,
@@ -180,14 +181,3 @@ export default function UserTableView({
);
}
-
-const CrownIcon = () => (
-
-
-
-);
diff --git a/governance/ui/src/hooks/useCountdown.tsx b/governance/ui/src/hooks/useCountdown.tsx
index e9c4b3b22..8b0badabf 100644
--- a/governance/ui/src/hooks/useCountdown.tsx
+++ b/governance/ui/src/hooks/useCountdown.tsx
@@ -34,7 +34,6 @@ const useCountdown = (id: string, timestamp: number) => {
}));
};
- // Update immediately and then set an interval to update every minute
updateCountdown();
const timer = setInterval(updateCountdown, 60000);
diff --git a/governance/ui/src/queries/useGetCurrentPeriod.ts b/governance/ui/src/queries/useGetCurrentPeriod.ts
index 12e6d4c1f..38a337364 100644
--- a/governance/ui/src/queries/useGetCurrentPeriod.ts
+++ b/governance/ui/src/queries/useGetCurrentPeriod.ts
@@ -11,9 +11,6 @@ export function useGetCurrentPeriod(council?: CouncilSlugs) {
return useQuery({
queryKey: ['period', council, network?.id, schedule?.endDate],
queryFn: async () => {
- if (schedule?.endDate && schedule.endDate < 0) {
- return '3';
- }
return (
await getCouncilContract(council!)
.connect(motherShipProvider(network?.id || 2192))
diff --git a/governance/ui/src/queries/useGetEpochSchedule.ts b/governance/ui/src/queries/useGetEpochSchedule.ts
index b910695c8..636e7c539 100644
--- a/governance/ui/src/queries/useGetEpochSchedule.ts
+++ b/governance/ui/src/queries/useGetEpochSchedule.ts
@@ -17,8 +17,7 @@ export function useGetEpochSchedule(council?: CouncilSlugs) {
startDate: Number(schedule.startDate.toString()),
nominationPeriodStartDate: Number(schedule.nominationPeriodStartDate.toString()),
votingPeriodStartDate: Number(schedule.votingPeriodStartDate.toString()),
- // Todo @dev remove after "bug" is resolved
- endDate: Number((schedule.endDate - 3600).toString()),
+ endDate: Number(schedule.endDate.toString()),
} as
| {
startDate: number;
diff --git a/governance/ui/src/utils/table-border.ts b/governance/ui/src/utils/table-border.ts
index 8bbf10591..892c329ab 100644
--- a/governance/ui/src/utils/table-border.ts
+++ b/governance/ui/src/utils/table-border.ts
@@ -18,6 +18,9 @@ export function renderCorrectBorder(
if (period === '0') {
return '';
}
+ if (period === '3') {
+ return '';
+ }
return isSelected ? '1px solid' : '';
} else if (position === 'bottom') {
return isSelected ? '1px solid' : '';