Skip to content

Latest commit

 

History

History
159 lines (121 loc) · 3.57 KB

File metadata and controls

159 lines (121 loc) · 3.57 KB

Switching from URL-Based to Local Logos

Overview

By default, BILAHUJAN loads government logos from Wikimedia Commons URLs. For faster loading and offline support, you can serve logos locally from src/assets/logos/.


Step-by-Step Guide

1. Save Logo Files Locally

Download and save logos to:

src/assets/logos/
├── jps.svg (or jps.png)
├── nadma.svg (or nadma.png)
└── apm.svg (or apm.png)

2. Update Your Component Import

File: src/screens/ReportScreen.tsx

Before (URL-based):

import { officialLogos } from '../data/officialLogos';

// Later in component:
<img src={officialLogos[dept].logo} alt={dept} />

After (Local):

import { officialLogos } from '../data/officialLogos';
import jpsLogo from '../assets/logos/jps.svg';
import nadmaLogo from '../assets/logos/nadma.svg';
import apmLogo from '../assets/logos/apm.svg';

// Later in component:
const getLocalLogo = (dept: string) => {
  switch(dept) {
    case 'JPS': return jpsLogo;
    case 'NADMA': return nadmaLogo;
    case 'APM': return apmLogo;
    default: return officialLogos[dept].logo; // fallback to URL
  }
};

<img src={getLocalLogo(dept)} alt={dept} />

3. Alternative: Update officialLogos.ts Directly

File: src/data/officialLogos.ts

import jpsLogo from '../assets/logos/jps.svg';
import nadmaLogo from '../assets/logos/nadma.svg';
import apmLogo from '../assets/logos/apm.svg';

export const officialLogos = {
  JPS: {
    name: 'Department of Irrigation & Drainage',
    logo: jpsLogo,  // ← Changed from URL
    contact: '+60 3 2619-0000'
  },
  NADMA: {
    name: 'National Disaster Management Agency',
    logo: nadmaLogo,  // ← Changed from URL
    contact: '+60 3 8064-2400'
  },
  APM: {
    name: 'Malaysia Civil Defence Force',
    logo: apmLogo,  // ← Changed from URL
    contact: '+60 3 2715-3000'
  }
};

Then use normally:

<img src={officialLogos[dept].logo} alt={dept} />

Verification

1. Verify Files Exist

ls -la src/assets/logos/

You should see:

jps.svg (or .png)
nadma.svg (or .png)
apm.svg (or .png)

2. Check FileSize (Optional Optimization)

du -sh src/assets/logos/*

If any file is > 200 KB, compress it:

npx imagemin src/assets/logos/jps.png --out-dir=src/assets/logos

3. Restart Dev Server

npm run dev

4. Test in Browser

Navigate to ReportScreen (Camera → Report a Flood):

  • Look for JPS, NADMA, APM buttons
  • Logos should appear instantly (no network delay)

Check DevTools Console for:

  • ✅ No 404 errors for logo requests
  • ✅ No CORS warnings

Performance Impact

Approach Load Time Offline Support Bundle Size
URL-based 1.2s (network delay) ❌ No ~0 KB (external)
Local (SVG) 0.05s (instant) ✅ Yes +40 KB
Local (Optimized PNG) 0.08s (instant) ✅ Yes +60 KB

Rollback to URL-Based

If you want to revert to URL logos:

// Simply comment out the import:
// import jpsLogo from '../assets/logos/jps.svg';

// And use:
<img src={officialLogos[dept].logo} alt={dept} />

Troubleshooting

Issue Solution
Blank logo images Check file path — must be relative from component location
404 in console Verify files exist in src/assets/logos/
Build fails with "cannot find module" Ensure logo files are saved with correct extension (.svg or .png)
Images too large Run optimization: npx imagemin logos/*.png --out-dir=logos