function ToolsView({ token, t, actionParams }) { const [activeTool, setActiveTool] = useState(null); const [activeCategory, setActiveCategory] = useState('all'); const [recentlyUsed, setRecentlyUsed] = useState(() => { const saved = localStorage.getItem('recentlyUsedTools'); return saved ? JSON.parse(saved) : []; }); // Quick Actions state const [quickActions, setQuickActions] = useState(() => { const saved = localStorage.getItem('quickActions'); return saved ? JSON.parse(saved) : []; }); const [openMenuId, setOpenMenuId] = useState(null); // Handle opening tool from Dashboard Quick Actions React.useEffect(() => { if (actionParams?.openTool) { setActiveTool(actionParams.openTool); } }, [actionParams]); const toolCategories = [ { id: 'calculators', name: t.calculators || 'Calculators', tools: [ { id: 'basic-calc', name: t.basic_calculator || 'Basic Calculator', icon: 'โ', component: BasicCalculator }, { id: 'scientific-calc', name: t.scientific_calculator || 'Scientific Calculator', icon: '๐ฌ', component: ScientificCalculator }, { id: 'bmi-calc', name: t.bmi_calculator || 'BMI Calculator', icon: 'โ๏ธ', component: BMICalculator }, { id: 'age-calc', name: t.age_calculator || 'Age Calculator', icon: '๐', component: AgeCalculator }, { id: 'discount-calc', name: t.discount_calculator || 'Discount Calculator', icon: '๐ท๏ธ', component: DiscountCalculator }, { id: 'gst-calc', name: t.gst_calculator || 'GST Calculator', icon: '๐งพ', component: GSTCalculator }, { id: 'investment-calc', name: t.investment_calculator || 'Investment Calculator', icon: '๐น', component: InvestmentCalculator }, { id: 'loan-calc', name: t.loan_emi_calculator || 'Loan EMI Calculator', icon: '๐ฆ', component: LoanCalculator }, { id: 'currency-conv', name: t.currency_converter || 'Currency Converter', icon: '๐ฑ', component: CurrencyConverter }, ] }, { id: 'converters', name: t.converters || 'Converters', tools: [ { id: 'temp-conv', name: t.temperature || 'Temperature', icon: '๐ก๏ธ', component: TemperatureConverter }, { id: 'length-conv', name: 'Length', icon: '๐', component: LengthConverter }, { id: 'mass-conv', name: t.mass_weight || 'Mass/Weight', icon: 'โ๏ธ', component: MassConverter }, { id: 'data-conv', name: t.data_size || 'Data Size', icon: '๐พ', component: DataConverter }, { id: 'speed-conv', name: t.speed || 'Speed', icon: '๐', component: SpeedConverter }, { id: 'numeric-conv', name: t.number_systems || 'Number Systems', icon: '๐ข', component: NumericConverter }, ] }, { id: 'daily', name: 'Daily Features', tools: [ { id: 'daily-word', name: 'Daily Word', icon: '๐', component: DailyWord }, { id: 'daily-quote', name: 'Daily Quote', icon: '๐ญ', component: DailyQuote }, ] }, { id: 'advanced', name: t.advanced_tools || 'Advanced Tools', tools: [ { id: 'graph-2d', name: t.graph_2d || '2D Graph Plotter', icon: '๐', component: Graph2DPlotter }, { id: 'graph-3d', name: t.graph_3d || '3D Graph Plotter', icon: '๐', component: Graph3DPlotter }, { id: 'shape-pack', name: t.shape_packing || 'Shape Packing', icon: '๐ฆ', component: ShapePackingCalculator }, ] } ]; const trackToolUsage = (toolId) => { const tool = toolCategories.flatMap(cat => cat.tools).find(tl => tl.id === toolId); if (!tool) return; const filtered = recentlyUsed.filter(tl => tl.id !== toolId); const updated = [{ ...tool, timestamp: Date.now() }, ...filtered].slice(0, 6); setRecentlyUsed(updated); localStorage.setItem('recentlyUsedTools', JSON.stringify(updated)); setActiveTool(toolId); }; // Quick Actions functions const isInQuickActions = (toolId) => { return quickActions.some(qa => qa.id === toolId); }; const addToQuickActions = (tool, categoryId) => { const toolData = { ...tool, categoryId }; const updated = [...quickActions, toolData]; setQuickActions(updated); localStorage.setItem('quickActions', JSON.stringify(updated)); setOpenMenuId(null); }; const removeFromQuickActions = (toolId) => { const updated = quickActions.filter(qa => qa.id !== toolId); setQuickActions(updated); localStorage.setItem('quickActions', JSON.stringify(updated)); setOpenMenuId(null); }; const toggleMenu = (toolId, e) => { e.stopPropagation(); setOpenMenuId(openMenuId === toolId ? null : toolId); }; // Close menu when clicking outside React.useEffect(() => { const handleClickOutside = () => setOpenMenuId(null); document.addEventListener('click', handleClickOutside); return () => document.removeEventListener('click', handleClickOutside); }, []); if (activeTool) { const tool = toolCategories.flatMap(cat => cat.tools).find(tl => tl.id === activeTool); const ToolComponent = tool?.component; return (
Comprehensive suite of calculators, converters, and advanced tools for students, researchers, and engineers.
{/* Recently Used Section */} {recentlyUsed.length > 0 && (