|
|
|
|
|
import os |
|
|
import json |
|
|
import streamlit as st |
|
|
from datetime import datetime |
|
|
|
|
|
name = "Project Cooking" |
|
|
|
|
|
st.set_page_config( |
|
|
page_title=name, |
|
|
page_icon="π©βπ³" |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
st.title(name) |
|
|
st.subheader("Add Items") |
|
|
|
|
|
|
|
|
if 'items' not in st.session_state: |
|
|
st.session_state.fridge_items = [] |
|
|
|
|
|
DATA_DIR = "data" |
|
|
FRIDGE_FILE = "data/items.json" |
|
|
|
|
|
|
|
|
def load_items(): |
|
|
if os.path.exists(FRIDGE_FILE): |
|
|
with open(FRIDGE_FILE, 'r') as f: |
|
|
return json.load(f) |
|
|
return [] |
|
|
|
|
|
|
|
|
def save_items(items): |
|
|
with open(FRIDGE_FILE, 'w') as f: |
|
|
json.dump(items, f) |
|
|
|
|
|
|
|
|
|
|
|
st.session_state.fridge_items = load_items() |
|
|
|
|
|
|
|
|
|
|
|
col1, col2 = st.columns([2.5, 1]) |
|
|
|
|
|
with col1: |
|
|
new_item = st.text_input("Item Name") |
|
|
with col2: |
|
|
categories = ["Meats", "Vegetables", "Dairy", "Fruits", "Carbs", "Other"] |
|
|
category = st.selectbox("Category", categories) |
|
|
|
|
|
col1, col2 = st.columns([1, 2.5]) |
|
|
|
|
|
with col2: |
|
|
units = ["Amount", "Weight (g)"] |
|
|
unit = st.selectbox("Units", units) |
|
|
|
|
|
unit = 'g' if unit == 'Weight (g)' else '' |
|
|
with col1: |
|
|
amount = st.number_input("Amount (optional)", step=1) |
|
|
|
|
|
|
|
|
if st.button("Add Item", use_container_width=True): |
|
|
if new_item: |
|
|
|
|
|
item_data = { |
|
|
'name': new_item, |
|
|
'category': category, |
|
|
'amount': f'{amount}{unit}', |
|
|
'added_on': datetime.now().strftime("%Y-%m-%d") |
|
|
} |
|
|
|
|
|
st.session_state.fridge_items.append(item_data) |
|
|
save_items(st.session_state.fridge_items) |
|
|
|
|
|
|
|
|
st.success(f"Added {new_item} to the fridge") |
|
|
else: |
|
|
st.warning("Please enter an item name") |
|
|
|
|
|
|
|
|
|
|
|
st.subheader("Items in Fridge") |
|
|
|
|
|
if not st.session_state.fridge_items: |
|
|
st.info("Your Fridge is empty. Add some items to get started") |
|
|
else: |
|
|
|
|
|
fridge_categories = {} |
|
|
|
|
|
for item in st.session_state.fridge_items: |
|
|
category = item["category"] |
|
|
if category not in fridge_categories: |
|
|
fridge_categories[category] = [] |
|
|
fridge_categories[category].append(item) |
|
|
|
|
|
|
|
|
for category, items in fridge_categories.items(): |
|
|
with st.expander(f"{category} ({len(items)} items)", expanded=True): |
|
|
for i, item in enumerate(items): |
|
|
col1, col2 = st.columns([3, 1]) |
|
|
|
|
|
with col1: |
|
|
st.write(f"{item['name']}: {item['amount']}") |
|
|
with col2: |
|
|
if st.button("Remove", key=f"remove_{category}_{i}"): |
|
|
original_index = st.session_state.fridge_items.index(item) |
|
|
st.session_state.fridge_items.pop(original_index) |
|
|
save_items(st.session_state.fridge_items) |
|
|
st.rerun() |
|
|
|
|
|
|
|
|
if st.button("Clear All Items", use_container_width=True): |
|
|
if st.session_state.fridge_items: |
|
|
st.session_state.fridge_items = [] |
|
|
save_items([]) |
|
|
st.success("All items cleared from your fridge!") |
|
|
st.experimental_rerun() |
|
|
else: |
|
|
st.info("Your fridge is already empty!") |