Álvaro Valenzuela Valdes commited on
Commit
e8380c7
·
1 Parent(s): 42df68f

fix: Restore logic and implement mobile responsiveness

Browse files
Files changed (1) hide show
  1. frontend/app/page.tsx +38 -12
frontend/app/page.tsx CHANGED
@@ -29,6 +29,7 @@ type Tab = (typeof tabs)[number];
29
  export default function HomePage() {
30
  const [activeTab, setActiveTab] = useState<Tab>("Dashboard");
31
  const [showSync, setShowSync] = useState(true);
 
32
  const [tenders, setTenders] = useState<Tender[]>([]);
33
  const [selectedTender, setSelectedTender] = useState<Tender | null>(null);
34
  const [companyProfile, setCompanyProfile] = useState<CompanyProfileType>({
@@ -123,27 +124,52 @@ export default function HomePage() {
123
  return (
124
  <div className="min-h-screen">
125
  {showSync && <GlobalSync onComplete={() => setShowSync(false)} />}
126
- <div className="mx-auto flex min-h-screen max-w-[1500px] gap-8 px-8 py-6">
127
- <Sidebar
128
- tabs={tabs}
129
- activeTab={activeTab}
130
- onTabSelect={setActiveTab}
131
- status={status}
132
- />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
 
134
- <main className="flex-1 flex flex-col gap-6 overflow-hidden">
135
  {/* Dashboard Header */}
136
- <header className="flex items-center justify-between px-2">
137
  <div>
138
- <h2 className="text-3xl font-bold text-white mb-1">{activeTab}</h2>
139
- <p className="text-slate-500 text-sm">
140
  {activeTab === "Dashboard" && "Overview of your tender ecosystem."}
141
  {activeTab === "Tender Search" && "Explore new opportunities from the market."}
142
  {activeTab === "Agent Analysis" && "Deep-dive into tender documentation."}
143
  {activeTab === "My Portfolio" && "Manage your followed opportunities."}
144
  </p>
145
  </div>
146
- <div className="flex items-center gap-4">
147
  <div className="flex -space-x-3">
148
  {[1, 2, 3].map(i => (
149
  <div key={i} className="w-8 h-8 rounded-full border-2 border-[#030303] bg-slate-800 flex items-center justify-center text-[10px] font-bold text-slate-400">
 
29
  export default function HomePage() {
30
  const [activeTab, setActiveTab] = useState<Tab>("Dashboard");
31
  const [showSync, setShowSync] = useState(true);
32
+ const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
33
  const [tenders, setTenders] = useState<Tender[]>([]);
34
  const [selectedTender, setSelectedTender] = useState<Tender | null>(null);
35
  const [companyProfile, setCompanyProfile] = useState<CompanyProfileType>({
 
124
  return (
125
  <div className="min-h-screen">
126
  {showSync && <GlobalSync onComplete={() => setShowSync(false)} />}
127
+
128
+ {/* Mobile Header */}
129
+ <div className="md:hidden flex items-center justify-between px-6 py-4 bg-black/40 backdrop-blur-lg border-b border-white/5 sticky top-0 z-50">
130
+ <div className="flex items-center gap-2">
131
+ <div className="w-8 h-8 premium-gradient rounded-lg flex items-center justify-center text-white font-bold text-sm shadow-lg shadow-purple-500/20">A</div>
132
+ <span className="font-bold text-white text-sm tracking-tight">AndesOps AI</span>
133
+ </div>
134
+ <button
135
+ onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}
136
+ className="p-2 text-white bg-white/5 rounded-lg border border-white/10 active:scale-95 transition-all"
137
+ >
138
+ {isMobileMenuOpen ? "✕" : "☰"}
139
+ </button>
140
+ </div>
141
+
142
+ <div className="mx-auto flex flex-col md:flex-row min-h-screen max-w-[1500px] gap-4 md:gap-8 px-4 md:px-8 py-4 md:py-6">
143
+ <div className={`${isMobileMenuOpen ? "fixed inset-0 z-[60] flex" : "hidden"} md:block md:sticky md:top-6 md:h-[calc(100vh-3rem)]`}>
144
+ {isMobileMenuOpen && (
145
+ <div className="absolute inset-0 bg-black/80 backdrop-blur-sm md:hidden" onClick={() => setIsMobileMenuOpen(false)} />
146
+ )}
147
+ <div className="relative z-10 w-72 md:w-auto h-full md:h-auto">
148
+ <Sidebar
149
+ tabs={tabs}
150
+ activeTab={activeTab}
151
+ onTabSelect={(tab) => {
152
+ setActiveTab(tab);
153
+ setIsMobileMenuOpen(false);
154
+ }}
155
+ status={status}
156
+ />
157
+ </div>
158
+ </div>
159
 
160
+ <main className="flex-1 flex flex-col gap-6 overflow-hidden w-full">
161
  {/* Dashboard Header */}
162
+ <header className="flex flex-col md:flex-row md:items-center justify-between gap-4 px-2">
163
  <div>
164
+ <h2 className="text-2xl md:text-3xl font-bold text-white mb-1">{activeTab}</h2>
165
+ <p className="text-slate-500 text-xs md:text-sm">
166
  {activeTab === "Dashboard" && "Overview of your tender ecosystem."}
167
  {activeTab === "Tender Search" && "Explore new opportunities from the market."}
168
  {activeTab === "Agent Analysis" && "Deep-dive into tender documentation."}
169
  {activeTab === "My Portfolio" && "Manage your followed opportunities."}
170
  </p>
171
  </div>
172
+ <div className="hidden md:flex items-center gap-4">
173
  <div className="flex -space-x-3">
174
  {[1, 2, 3].map(i => (
175
  <div key={i} className="w-8 h-8 rounded-full border-2 border-[#030303] bg-slate-800 flex items-center justify-center text-[10px] font-bold text-slate-400">