diff --git a/apps/Recipes/Controllers/SingleSubmitController.php b/apps/Recipes/Controllers/SingleSubmitController.php
new file mode 100644
index 0000000..b4f2203
--- /dev/null
+++ b/apps/Recipes/Controllers/SingleSubmitController.php
@@ -0,0 +1,21 @@
+
+
+
+
+
Submit a Recipe
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/Recipes/urls.php b/apps/Recipes/urls.php
index cfb9f0e..d185c4a 100644
--- a/apps/Recipes/urls.php
+++ b/apps/Recipes/urls.php
@@ -9,4 +9,5 @@ $recipes_urls = [
new Path('/catalog', new Controllers\CatalogController(), 'catalog'),
new Path('/daily-meals', new Controllers\DailyMealsController, 'daily-meals'),
new Path('/favorites', new Controllers\FavoritesController(), 'favorites'),
+ new Path('/submit', new Controllers\SingleSubmitController(), 'single-submit'),
];
diff --git a/assets/css/style.css b/assets/css/style.css
index f5bfadc..7a63042 100644
--- a/assets/css/style.css
+++ b/assets/css/style.css
@@ -1217,7 +1217,42 @@ label {
font-family: var(--common-font);
}
+.submit-recipe {
+ margin-top: 46px;
+}
+.submit-recipe .title{
+ text-align: start;
+}
+
+.input-file{
+ margin-bottom: 20px;
+}
+
+.add-ingredient-btn{
+ margin-bottom: 25px;
+}
+
+.single-submit-form span{
+ color: #015847;
+ font-weight: bold;
+}
+
+.ing-modal{
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ background: #fff;
+ padding: 20px;
+ border-radius: 10px;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
+ z-index: 9999;
+}
@media (max-width: 768px) {
diff --git a/assets/js/single-submit.js b/assets/js/single-submit.js
new file mode 100644
index 0000000..61a3664
--- /dev/null
+++ b/assets/js/single-submit.js
@@ -0,0 +1,55 @@
+const addIngredientBtn = document.getElementById('add-ingredient-btn');
+const overlay = document.getElementById('overlay');
+const ingModal = document.getElementById('ingredient-modal');
+
+addIngredientBtn.addEventListener('click', () => {
+ ingModal.classList.remove('hidden');
+ overlay.classList.remove('hidden');
+});
+
+
+document.addEventListener('click', (e) => {
+ if (!ingModal.contains(e.target) && !addIngredientBtn.contains(e.target)) {
+ ingModal.classList.add('hidden');
+ overlay.classList.add('hidden');
+ }
+});
+
+const ingredientSubmitBtn = document.getElementById('new-ingredient-submit');
+const ingredientName = document.getElementById('ing-name-input');
+const ingredientUnit = document.getElementById('ing-unit-input');
+
+ingredientSubmitBtn.addEventListener('click', async (e) => {
+
+ const name = ingredientName.value.trim();
+ const unit = ingredientUnit.value.trim();
+
+ if (!name || !unit) {
+ showToastify('Please fill in all fields.', 'error');
+ return;
+ }
+
+ const formData = new FormData();
+ formData.append('action', 'create_ingredient');
+ formData.append('name', name);
+ formData.append('unit', unit);
+
+ const response = await fetch('/ajax', {
+ method: 'POST',
+ body: formData
+ });
+
+ const json = await response.json();
+
+ if (!response.ok) {
+ const message = json.error;
+ showToastify(message, 'error');
+ return;
+ }
+
+ showToastify(json.success, 'success');
+ ingredientName.value = '';
+ ingredientUnit.value = '';
+ ingModal.classList.add('hidden');
+ overlay.classList.add('hidden');
+});
\ No newline at end of file