Skip to content

Commit eda18e6

Browse files
Merge pull request #5095 from OneCommunityGlobal/Kitchen-Inventory-Management-Implement-Feed-Management-Section
Abhinav - Kitchen inventory management implement feed management section
2 parents 727a0ed + d54faaf commit eda18e6

4 files changed

Lines changed: 676 additions & 35 deletions

File tree

src/components/KitchenInterfaces/Processing/ProcessingLandingPage.module.css

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -797,16 +797,13 @@
797797
}
798798

799799
.formGroup input[type="date"] {
800-
display: flex;
801-
align-items: center;
802-
justify-content: space-between;
800+
cursor: pointer;
803801
}
804802

805803
.darkModeModal input[type="date"] {
806804
color-scheme: dark;
807805
}
808806

809807
.darkModeModal input[type="date"]::-webkit-calendar-picker-indicator {
810-
filter: invert(1);
811808
cursor: pointer;
812809
}

src/components/KitchenInterfaces/Production/AnimalManagement/AnimalManagement.jsx

Lines changed: 72 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,50 @@
1-
import React, { useState } from 'react';
1+
import React, { useState, useEffect } from 'react';
22
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
33
import { faPaw, faShoppingCart, faBoxOpen, faCalendarAlt } from '@fortawesome/free-solid-svg-icons';
44
import { useSelector } from 'react-redux';
55
import AnimalOrdersTab from './AnimalOrdersTab';
66
import CullingCalendarTab from './CullingCalendarTab';
7+
import FeedManagementTab from './FeedManagementTab';
78
import styles from './AnimalManagement.module.css';
89

910
const AnimalManagement = () => {
1011
const darkMode = useSelector(state => state.theme?.darkMode || false);
1112
const [activeTab, setActiveTab] = useState('orders');
1213

14+
useEffect(() => {
15+
const handleScroll = () => {
16+
const btn = document.querySelector('.back-to-top');
17+
if (!btn) return;
18+
if (window.scrollY > 300) {
19+
btn.style.setProperty('display', 'flex', 'important');
20+
} else {
21+
btn.style.setProperty('display', 'none', 'important');
22+
}
23+
};
24+
25+
const handleBackToTopClick = e => {
26+
e.preventDefault();
27+
window.scrollTo({ top: 0, behavior: 'smooth' });
28+
};
29+
30+
const btn = document.querySelector('.back-to-top');
31+
if (btn) {
32+
btn.addEventListener('click', handleBackToTopClick);
33+
}
34+
window.addEventListener('scroll', handleScroll);
35+
36+
// Initial check
37+
handleScroll();
38+
39+
return () => {
40+
window.removeEventListener('scroll', handleScroll);
41+
if (btn) {
42+
btn.removeEventListener('click', handleBackToTopClick);
43+
btn.style.display = '';
44+
}
45+
};
46+
}, []);
47+
1348
const [orders, setOrders] = useState([
1449
{
1550
id: 'AO-001',
@@ -48,8 +83,35 @@ const AnimalManagement = () => {
4883
},
4984
]);
5085

86+
const [feedOrders, setFeedOrders] = useState([
87+
{
88+
id: 'FO-001',
89+
supplierName: 'Farm Supply Co.',
90+
items: 'Layer Feed (100 lbs), Scratch Grains (50 lbs)',
91+
orderedDate: '2024-10-15',
92+
expectedDate: '2024-10-18',
93+
status: 'delivered',
94+
},
95+
{
96+
id: 'FO-002',
97+
supplierName: 'Organic Feed Depot',
98+
items: 'Goat Pellets (80 lbs), Hay Bales (10)',
99+
orderedDate: '2024-10-22',
100+
expectedDate: '2024-10-29',
101+
status: 'shipped',
102+
},
103+
]);
104+
105+
const [feedInventory, setFeedInventory] = useState([
106+
{ id: 'FI-1', name: 'Layer Feed', unit: 'lbs', stockLeft: 75, reorderThreshold: 25 },
107+
{ id: 'FI-2', name: 'Scratch Grains', unit: 'lbs', stockLeft: 30, reorderThreshold: 15 },
108+
{ id: 'FI-3', name: 'Goat Pellets', unit: 'lbs', stockLeft: 15, reorderThreshold: 20 },
109+
{ id: 'FI-4', name: 'Hay Bales', unit: 'bales', stockLeft: 18, reorderThreshold: 10 },
110+
]);
111+
51112
const pendingOrdersCount = orders.filter(o => o.status !== 'delivered').length;
52113
const upcomingCullingCount = cullingEvents.filter(e => e.status === 'scheduled').length;
114+
const pendingFeedOrdersCount = feedOrders.filter(o => o.status !== 'delivered').length;
53115

54116
return (
55117
<div
@@ -86,7 +148,7 @@ const AnimalManagement = () => {
86148
<div className={styles['dashboard-card']}>
87149
<div className={styles['card-info']}>
88150
<span className={styles['card-title']}>Feed Orders</span>
89-
<span className={styles['card-value']}>2</span>
151+
<span className={styles['card-value']}>{pendingFeedOrdersCount}</span>
90152
</div>
91153
<div className={`${styles['card-icon']} ${styles['icon-feed']}`}>
92154
<FontAwesomeIcon icon={faBoxOpen} />
@@ -136,16 +198,19 @@ const AnimalManagement = () => {
136198
{activeTab === 'culling' && (
137199
<CullingCalendarTab events={cullingEvents} setEvents={setCullingEvents} />
138200
)}
201+
{activeTab === 'feed' && (
202+
<FeedManagementTab
203+
feedOrders={feedOrders}
204+
setFeedOrders={setFeedOrders}
205+
feedInventory={feedInventory}
206+
setFeedInventory={setFeedInventory}
207+
/>
208+
)}
139209
{activeTab === 'inventory' && (
140210
<div className={styles['tab-content']}>
141211
<div className={styles['empty-state']}>Animal Inventory content coming soon.</div>
142212
</div>
143213
)}
144-
{activeTab === 'feed' && (
145-
<div className={styles['tab-content']}>
146-
<div className={styles['empty-state']}>Feed Management content coming soon.</div>
147-
</div>
148-
)}
149214
</div>
150215
</div>
151216
);

0 commit comments

Comments
 (0)