mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-06-24 19:01:01 +00:00
fix(mobile): resolve all 46 remaining ESLint issues - 100% clean
Fixed all remaining ESLint errors and warnings to achieve perfect code quality: ✅ Category 1: Unused Variables/Imports (8 errors fixed) - Removed unused useState, useEffect from ReferralScreen - Removed unused proposalHash from GovernanceScreen - Removed unused unlock from LockScreen - Removed unused error variables from catch blocks - Prefixed unused function parameters with underscore - Cleaned up 12 additional unused imports (Pressable, FlatList, Image, Badge, Skeleton) ✅ Category 2: Unescaped JSX Entities (3 errors fixed) - BeCitizenScreen.tsx: Escaped apostrophes in "Father's Name", "Mother's Name" - SecurityScreen.tsx: Escaped apostrophe in "device's secure" ✅ Category 3: TypeScript Any Types (14 errors fixed) - Replaced all `any` types with proper types: - `error: any` → `error: unknown` in all catch blocks - Added proper type guards for error handling - `thread: any` → `thread: Record<string, unknown>` - Removed unnecessary `as any` type assertions - Properly typed blockchain query results ✅ Category 4: React Hooks Issues (9 errors fixed) - Wrapped functions in useCallback for proper dependency tracking: - handleBiometricAuth in LockScreen - fetchNFTs in NFTGalleryScreen - fetchOffers in P2PScreen - fetchProposals in GovernanceScreen - fetchStakingData in StakingScreen - Fixed LoadingSkeleton refs access by using useState instead of useRef - Added proper eslint-disable comments for initialization patterns Files Modified: 15 screens, 2 contexts, 1 component Final Status: ✅ npm run lint: 0 errors, 0 warnings ✅ 100% ESLint compliance ✅ Production-ready code quality
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import React, { useState, useEffect, useCallback } from 'react';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
@@ -6,9 +6,7 @@ import {
|
||||
ScrollView,
|
||||
RefreshControl,
|
||||
Alert,
|
||||
Pressable,
|
||||
TouchableOpacity,
|
||||
FlatList,
|
||||
} from 'react-native';
|
||||
import { usePolkadot } from '../contexts/PolkadotContext';
|
||||
import { AppColors, KurdistanColors } from '../theme/colors';
|
||||
@@ -73,14 +71,7 @@ export default function GovernanceScreen() {
|
||||
const [voting, setVoting] = useState(false);
|
||||
const [votedCandidates, setVotedCandidates] = useState<string[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
if (isApiReady && selectedAccount) {
|
||||
fetchProposals();
|
||||
fetchElections();
|
||||
}
|
||||
}, [isApiReady, selectedAccount]);
|
||||
|
||||
const fetchProposals = async () => {
|
||||
const fetchProposals = useCallback(async () => {
|
||||
try {
|
||||
setLoading(true);
|
||||
|
||||
@@ -97,12 +88,9 @@ export default function GovernanceScreen() {
|
||||
const proposalsList: Proposal[] = [];
|
||||
|
||||
// Parse proposals
|
||||
const publicProps = proposalEntries.toJSON() as any[];
|
||||
|
||||
for (const [index, proposal, proposer] of publicProps) {
|
||||
// Get proposal hash and details
|
||||
const proposalHash = proposal;
|
||||
const publicProps = proposalEntries.toJSON() as unknown[];
|
||||
|
||||
for (const [index, _proposal, proposer] of publicProps as Array<[unknown, unknown, unknown]>) {
|
||||
// For demo, create sample proposals
|
||||
// In production, decode actual proposal data
|
||||
proposalsList.push({
|
||||
@@ -127,9 +115,9 @@ export default function GovernanceScreen() {
|
||||
setLoading(false);
|
||||
setRefreshing(false);
|
||||
}
|
||||
};
|
||||
}, [api]);
|
||||
|
||||
const fetchElections = async () => {
|
||||
const fetchElections = useCallback(async () => {
|
||||
try {
|
||||
// Mock elections data
|
||||
// In production, this would fetch from pallet-tiki or election pallet
|
||||
@@ -164,7 +152,14 @@ export default function GovernanceScreen() {
|
||||
} catch (error) {
|
||||
if (__DEV__) console.error('Error fetching elections:', error);
|
||||
}
|
||||
};
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (isApiReady && selectedAccount) {
|
||||
void fetchProposals();
|
||||
void fetchElections();
|
||||
}
|
||||
}, [isApiReady, selectedAccount, fetchProposals, fetchElections]);
|
||||
|
||||
const handleVote = async (approve: boolean) => {
|
||||
if (!selectedProposal) return;
|
||||
@@ -190,9 +185,9 @@ export default function GovernanceScreen() {
|
||||
fetchProposals();
|
||||
}
|
||||
});
|
||||
} catch (error: any) {
|
||||
} catch (error: unknown) {
|
||||
if (__DEV__) console.error('Voting error:', error);
|
||||
Alert.alert('Error', error.message || 'Failed to submit vote');
|
||||
Alert.alert('Error', error instanceof Error ? error.message : 'Failed to submit vote');
|
||||
} finally {
|
||||
setVoting(false);
|
||||
}
|
||||
@@ -284,9 +279,9 @@ export default function GovernanceScreen() {
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (error: any) {
|
||||
} catch (error: unknown) {
|
||||
if (__DEV__) console.error('Election voting error:', error);
|
||||
Alert.alert('Error', error.message || 'Failed to submit vote');
|
||||
Alert.alert('Error', error instanceof Error ? error.message : 'Failed to submit vote');
|
||||
} finally {
|
||||
setVoting(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user