Files

136 lines
5.1 KiB
JavaScript

import { RecipeEditor } from "/static/js/modules/recipes/recipe-editor.js";
import { SyncPanel } from "/static/js/modules/recipes/sync-panel.js";
import { DispenserSelector } from "/static/js/modules/recipes/dispenser-selector.js";
import { initRecipeMobileSheetGestures } from "/static/js/modules/recipes/recipe-mobile-sheet-gestures.js";
let initialized = false;
export function initRecipesPage(handlers) {
if (initialized) return;
initialized = true;
const recipeEditorModule = new RecipeEditor({
addIngredient: handlers.addIngredient,
toggleUnloadingLink: handlers.toggleUnloadingLink,
addUnloadingGroup: handlers.addUnloadingGroup,
showRecipeEdit: handlers.showRecipeEdit,
printAllRecipesInPeriod: handlers.printAllRecipesInPeriod,
printRecipe: handlers.printRecipe,
saveRecipe: handlers.saveRecipe,
moveGroupUp: handlers.moveGroupUp,
moveGroupDown: handlers.moveGroupDown,
removeUnloadingGroup: handlers.removeUnloadingGroup,
moveIngredientUp: handlers.moveIngredientUp,
moveIngredientDown: handlers.moveIngredientDown,
removeIngredient: handlers.removeIngredient,
openIngredientMobileSheet: handlers.openIngredientMobileSheet,
closeIngredientMobileSheet: handlers.closeIngredientMobileSheet,
removeIngredientFromSheet: handlers.removeIngredientFromSheet,
openUnloadingGroupMobileSheet: handlers.openUnloadingGroupMobileSheet,
closeUnloadingGroupMobileSheet: handlers.closeUnloadingGroupMobileSheet,
handleGroupTypeChange: handlers.handleGroupTypeChange,
validateGroupValue: handlers.validateGroupValue,
handleIngredientChange: handlers.handleIngredientChange,
handleDryMatterPercentChange: handlers.handleDryMatterPercentChange,
recalculateWeights: handlers.recalculateWeights,
recalculateFromTotalWeight: handlers.recalculateFromTotalWeight,
});
const syncPanelModule = new SyncPanel({
openSettings: handlers.openSettings,
closeSettings: handlers.closeSettings,
toggleCredentialsForm: handlers.toggleCredentialsForm,
toggleSyncForm: handlers.toggleSyncForm,
changeCredentials: handlers.changeCredentials,
editSyncClientSettings: handlers.editSyncClientSettings,
deleteSyncClientSettings: handlers.deleteSyncClientSettings,
saveSyncClientDisplayName: handlers.saveSyncClientDisplayName,
loadSyncClientsSettings: handlers.loadSyncClientsSettings,
});
const dispenserSelectorModule = new DispenserSelector({
selectDispenser: handlers.selectDispenser,
selectRecipe: handlers.selectRecipe,
selectPeriod: handlers.selectPeriod,
copyRecipe: handlers.copyRecipe,
deleteRecipe: handlers.deleteRecipe,
unskipRecipeToday: handlers.unskipRecipeToday,
unskipIngredientPartsToday: handlers.unskipIngredientPartsToday,
unskipGroupPartsToday: handlers.unskipGroupPartsToday,
pasteRecipe: handlers.pasteRecipe,
createNewRecipe: handlers.createNewRecipe,
moveRecipeUp: handlers.moveRecipeUp,
moveRecipeDown: handlers.moveRecipeDown,
});
initRecipeMobileSheetGestures({
closeIngredientMobileSheet: handlers.closeIngredientMobileSheet,
closeUnloadingGroupMobileSheet: handlers.closeUnloadingGroupMobileSheet,
closeRecipeHelpModal: handlers.closeRecipeHelpModal,
});
const createRecipeBtn = document.getElementById("createRecipeBtn");
if (createRecipeBtn) {
createRecipeBtn.addEventListener("click", (event) => {
event.stopPropagation();
const selectedDispenser = handlers.getSelectedDispenser();
if (selectedDispenser) {
handlers.createNewRecipeForMill(selectedDispenser);
}
});
}
document.addEventListener("click", async (event) => {
const actionEl = event.target.closest("[data-action]");
if (!actionEl) return;
const action = actionEl.dataset.action;
if (await syncPanelModule.handleAction(action, event, actionEl)) return;
if (await dispenserSelectorModule.handleAction(action, event, actionEl)) return;
if (await recipeEditorModule.handleAction(action, event, actionEl)) return;
if (action === "open-recipe-help") {
event.preventDefault();
handlers.openRecipeHelp?.(actionEl.id);
return;
}
if (action === "close-recipe-help") {
event.preventDefault();
handlers.closeRecipeHelpModal?.();
return;
}
if (action === "mobile-dashboard-back") {
event.preventDefault();
handlers.mobileDashboardBack?.();
return;
}
if (action === "logout") {
event.preventDefault();
handlers.logout();
}
});
document.addEventListener("change", (event) => {
const actionEl = event.target.closest("[data-action]");
if (!actionEl) return;
const action = actionEl.dataset.action;
recipeEditorModule.handleChange(action, actionEl);
});
document.addEventListener("keydown", (event) => {
if (event.key !== "Escape") return;
const ingSheet = document.getElementById("ingredientMobileSheet");
if (ingSheet && !ingSheet.hidden) {
handlers.closeIngredientMobileSheet?.();
return;
}
const grpSheet = document.getElementById("unloadingGroupMobileSheet");
if (grpSheet && !grpSheet.hidden) {
handlers.closeUnloadingGroupMobileSheet?.();
}
});
}