"use client"; import React, { useState } from 'react'; const materialsData = [ { num: "01", cat: "mesh", name: "Chain Link Mesh", desc: "The primary fencing fabric — available in galvanized and vinyl coated black finishes. Multiple gauge and mesh sizes for residential and commercial use.", specs: ["Galvanized", "Black vinyl coated", "Multiple gauges", "2\" mesh typical"], img: "images/chainlink-mesh.jpg" }, { num: "02", cat: "structure", name: "Terminal Posts", desc: "Heavy-duty end, corner, and gate posts that anchor the fence line. Larger diameter than line posts for maximum structural strength at key points.", specs: ["End posts", "Corner posts", "Gate posts", "Multiple diameters"], img: "images/chainlink-terminal-posts.jpg" }, { num: "03", cat: "structure", name: "Line Posts", desc: "Intermediate posts set between terminal posts to support the mesh and top rail at regular intervals, typically every 10 feet.", specs: ["Galvanized steel", "Multiple heights", "Multiple diameters"], img: "images/chainlink-line-posts.jpg" }, { num: "04", cat: "structure", name: "Top Rail", desc: "Horizontal pipe running along the top of the fence, threading through loop caps on line posts to stabilise the mesh and define the top edge.", specs: ["Galvanized pipe", "21ft lengths", "Sleeve-joined"], img: "images/chainlink-top-rail.jpg" }, { num: "05", cat: "mesh", name: "Bottom Tension Wire", desc: "Heavy gauge galvanized wire run along the bottom of the mesh to keep the fence taut and prevent mesh lift. Also available as bottom rail pipe.", specs: ["Galvanized wire", "Bottom rail option", "High tension"], img: "images/chainlink-tension-wire.jpg" }, { num: "06", cat: "hardware", name: "Tension Bars", desc: "Flat steel bars woven vertically through the end of the mesh fabric and secured with tension bands to the terminal post, pulling the mesh taut.", specs: ["Galvanized steel", "Multiple lengths"], img: "images/chainlink-tension-bars.jpg" }, { num: "07", cat: "hardware", name: "Tension Bands", desc: "Clamp bands bolted around terminal posts to hold tension bars and rail ends securely in place. Spaced evenly along the post height.", specs: ["Galvanized steel", "Various post sizes"], img: "images/chainlink-tension-bands.jpg" }, { num: "08", cat: "hardware", name: "Brace Bands", desc: "Used to attach rail ends to line posts, securing the top rail into position around the post perimeter. Essential for top rail alignment and stability.", specs: ["Galvanized", "All post sizes"], img: "images/chainlink-brace-bands.jpg" }, { num: "09", cat: "hardware", name: "Rail Ends", desc: "Pressed steel fittings that attach the end of the top rail to a terminal post via a tension band. Provides a neat, secure termination point for the rail.", specs: ["Pressed steel", "Galvanized"], img: "images/chainlink-rail-ends.jpg" }, { num: "10", cat: "hardware", name: "Post Caps", desc: "Loop caps thread the top rail through the line post for support. Dome caps seal the tops of terminal posts, preventing water ingress and corrosion.", specs: ["Loop caps", "Dome caps", "All post sizes"], img: "images/chainlink-post-caps.jpg" }, { num: "11", cat: "hardware", name: "Fence Ties", desc: "Aluminum or steel wire ties that fasten the chain link mesh to line posts and top rail, securing the fabric in place throughout the fence run.", specs: ["Aluminum", "Steel", "Bulk packs"], img: "images/chainlink-fence-ties.jpg" }, { num: "12", cat: "gates", name: "Gates", desc: "Chain link walk gates and double drive gates in standard and custom widths. Pre-built frames ready to hang, or materials for field-fabricated gates.", specs: ["Single walk gates", "Double drive gates", "Custom widths"], img: "images/chainlink-gates.jpg" }, { num: "13", cat: "gates", name: "Gate Hardware", desc: "Heavy-duty hinges, fork latches, cane bolts, and gate stops. All hardware required for proper gate installation and long-term operation.", specs: ["Hinges", "Latches", "Cane bolts", "Padlock eyes"], img: "images/chainlink-gate-hardware.jpg" }, { num: "14", cat: "structure", name: "Concrete", desc: "Fast-setting concrete mix for post setting. Properly set posts are critical to fence longevity — use concrete on every terminal post and every line post in loose or sandy soil.", specs: ["Fast-setting", "Bags available", "Post setting mix"], img: "images/chainlink-concrete.jpg" }, { num: "15", cat: "extras", name: "Privacy Slats", desc: "Vertical or horizontal slats woven through chain link mesh to add privacy and visual screening. Available in multiple colours to complement any project.", specs: ["Multiple colours", "Vertical weave", "UV resistant"], img: "images/chainlink-privacy-slats.jpg" }, { num: "16", cat: "extras", name: "Windscreen / Privacy Mesh", desc: "Woven or knitted privacy screen attached to the fence exterior. Popular for sports facilities, construction sites, and commercial properties requiring visual screening.", specs: ["Woven fabric", "Commercial grade", "Custom sizes"], img: "images/chainlink-windscreen.jpg" }, { num: "17", cat: "extras", name: "Barbed Wire", desc: "Two-strand galvanized barbed wire for security enhancement on commercial and industrial fence installations. Attached at the top with barbed wire arms.", specs: ["Commercial use", "Galvanized", "Barbed wire arms"], img: "images/chainlink-barbed-wire.jpg" } ]; const ChainLinkMaterials = () => { const [activeCat, setActiveCat] = useState('all'); const filteredMaterials = activeCat === 'all' ? materialsData : materialsData.filter(m => m.cat === activeCat); const categories = [ { id: 'all', label: 'All materials' }, { id: 'structure', label: 'Structure & posts' }, { id: 'mesh', label: 'Mesh & wire' }, { id: 'hardware', label: 'Hardware & fittings' }, { id: 'gates', label: 'Gates & access' }, { id: 'extras', label: 'Extras & accessories' } ]; return (
Product catalogue

Chain link fence
materials list.

Every component you need for a complete chain link fence installation — all stocked and ready for delivery across Ontario.

{categories.map(cat => ( ))}
{filteredMaterials.map((mat) => (
{mat.name} { (e.target as HTMLImageElement).style.display = 'none'; }} />
Product {mat.num}
{mat.img}
{mat.num}
{/* Simplified version of the icons since they are many, keeping a generic but nice look or using the specific ones from HTML if I can extract them easily. Actually, I'll just use the SVG types from the HTML for each card. */} {mat.num === "01" && } {mat.num === "02" && } {mat.num === "03" && } {mat.num === "04" && } {mat.num === "05" && } {mat.num === "06" && } {mat.num === "07" && } {mat.num === "08" && } {mat.num === "09" && } {mat.num === "10" && } {mat.num === "11" && } {mat.num === "12" && } {mat.num === "13" && } {mat.num === "14" && } {mat.num === "15" && } {mat.num === "16" && } {mat.num === "17" && }
{mat.name}
{mat.desc}
{mat.specs.map((spec, i) => ( {spec} ))}
))}
); }; export default ChainLinkMaterials;