@@ -40,6 +40,8 @@ export default defineComponent({
4040
4141 const multsigTransactionData = ref <Action []>([]);
4242 const requestedApprovalsRows = ref <RequestedApprovals []>([]);
43+ const activeProducers = ref <RequestedApprovals []>([]);
44+ const activeProducersApproved = ref <RequestedApprovals []>([]);
4345
4446 const requestedApprovalsColumns = [
4547 {
@@ -99,15 +101,7 @@ export default defineComponent({
99101 ! isCanceled .value
100102 ));
101103
102- const producersApprovalStatus = computed (() => {
103- const allProducers = requestedApprovalsRows .value .filter (
104- item => item .isBp ,
105- );
106- const producersHaveAlreadyApproved = allProducers .filter (
107- item => item .status ,
108- );
109- return ` ${producersHaveAlreadyApproved .length }/${allProducers .length } ` ;
110- });
104+ const producersApprovalStatus = computed (() => ` ${activeProducersApproved .value .length }/${activeProducers .value .length } ` );
111105
112106 function handleError(e : unknown , defaultMessage : string ) {
113107 const error = JSON .parse (JSON .stringify (e )) as Error ;
@@ -282,7 +276,6 @@ export default defineComponent({
282276 proposer .value = proposal .proposer ;
283277
284278 const totalRequestedApprovals = proposal .provided_approvals .length + proposal .requested_approvals .length ;
285- isApproved .value = proposal .provided_approvals .length === totalRequestedApprovals ;
286279 approvalStatus .value = ` ${proposal .provided_approvals .length }/${totalRequestedApprovals } ` ;
287280 isExecuted .value = proposal .executed ;
288281
@@ -302,6 +295,22 @@ export default defineComponent({
302295 requestedApprovalsRows .value = requestedApprovalsRowsValue ;
303296 multsigTransactionData .value = multsigTransactionDataValue ;
304297
298+ activeProducers .value = requestedApprovalsRows .value .filter (
299+ item => item .isBp ,
300+ );
301+ activeProducersApproved .value = activeProducers .value .filter (
302+ item => item .status ,
303+ );
304+
305+ if (activeProducers .value .length === 0 ) {
306+ // No BPs are involved in the proposal, so we need to 100% of the requested approvals
307+ isApproved .value = proposal .provided_approvals .length === totalRequestedApprovals ;
308+ } else {
309+ // If BPs are involved, we need 2/3 (+1) of the BPs to approve the proposal
310+ const approval = (activeProducers .value .length * 2 / 3 ) + 1 ;
311+ isApproved .value = activeProducersApproved .value .length >= Math .floor (approval );
312+ }
313+
305314 const transactions = await handleTransactionHistory (proposal .block_num );
306315
307316 isCanceled .value = transactions .some (
0 commit comments