Build [v.1.3.6]

This commit is contained in:
Daniel Bedeleanu
2026-04-11 17:14:22 +03:00
parent 775808506f
commit 704934165f
27 changed files with 738 additions and 685 deletions

View File

@@ -71,17 +71,25 @@ export default function Home() {
const [categories, setCategories] = useState<any[]>([]);
useEffect(() => {
if (!localStorage.getItem('inventory_token')) {
window.location.href = '/login';
return;
}
setMounted(true);
const savedUser = localStorage.getItem('inventory_user');
if (savedUser) {
setCurrentUser(JSON.parse(savedUser));
}
// Initial categories fetch
inventoryApi.getCategories().then(c => setCategories(c)).catch(() => {});
}, []);
useEffect(() => {
if (!localStorage.getItem('inventory_token')) {
window.location.href = '/login';
return;
}
setMounted(true);
setIsOnline(navigator.onLine);
const handleOnline = () => {
@@ -366,11 +374,18 @@ export default function Home() {
);
});
// Extract unique item types for suggestions
const existingTypes = Array.from(new Set(inventory.map(i => i.type).filter(Boolean))).sort() as string[];
if (!mounted) return null;
return (
<PageShell>
<div className="p-3 md:p-8 overflow-x-hidden w-full">
{/* Search datalist for types */}
<datalist id="existing-types">
{existingTypes.map(t => <option key={t} value={t} />)}
</datalist>
{/* Header */}
<header className="flex flex-col sm:flex-row justify-between sm:items-center gap-4 mb-6 w-full max-w-4xl mx-auto px-1">
@@ -487,7 +502,7 @@ export default function Home() {
className="w-full h-16 rounded-[1.5rem] bg-slate-900/50 border border-slate-800 flex items-center justify-center gap-3 group hover:border-primary/40 transition-all font-bold"
>
<Sparkles size={18} className="text-primary group-hover:scale-110 transition-transform" />
<span className="text-sm">Add New Item (AI Onboarding)</span>
<span className="text-sm">Add NEW Item<br />(AI Onboarding)</span>
</button>
</div>
)}
@@ -498,6 +513,7 @@ export default function Home() {
{showOnboarding && (
<AIOnboarding
categories={categories}
inventory={inventory}
onCancel={() => setShowOnboarding(false)}
onComplete={handleOnboardingComplete}
/>
@@ -587,6 +603,7 @@ export default function Home() {
<label className="text-xs font-black text-slate-500 ml-1">Item Type (e.g. SFP, Patch Cord)</label>
<input
type="text"
list="existing-types"
value={editedItem.type || ''}
onChange={e => setEditedItem({...editedItem, type: e.target.value})}
className="w-full bg-slate-950 border border-slate-800 rounded-xl py-3 px-4 text-sm outline-none text-slate-100"