(ns chef.pages.admin.recipe-editor (:require [hiccup2.core :as html] [hiccup.util :as hutil] [honey.sql :as sql] [next.jdbc :as jdbc] [chef.database :as cdb] [ring.util.response :as ruresp] [chef.utils :as cutils])) (defn render [recipe] (cutils/gen-page "chef - Rezept bearbeiten" [:div {:style {:margin-left "1em"}} [:h1 "Rezept bearbeiten"] [:form {:style {:width "50%"} :hx-post (str "/api/admin/edit-recipe/" (:recipes/id recipe)) :hx-swap "none" :enctype "multipart/form-data"} [:input {:type :text :name "title" :placeholder "Titel" :value (:recipes/title recipe)}] [:div {:style {:display :flex}} [:p {:style {:margin-right "0.5em"}} "Thumbnail: "] [:input {:type :file :name "thumbnail" :style {:height :fit-content :padding "0.3em"}}]] [:button {:class ["button" "error"] :hx-trigger "click" :hx-delete (str "/api/admin/delete-thumbnail/" (:recipes/id recipe)) :hx-swap :none} "Thumbnail entfernen"] [:h2 "Kategorie"] [:select {:name "category"} (for [category (->> (sql/format {:select [:*] :from [:categories]}) (jdbc/execute! @cdb/db) (filter #(pos? (:categories/id %))))] [:option {:value (:categories/id category) :selected (= (:categories/id category) (:recipes/category recipe))} (cutils/category-path category)])] [:h2 "Zutaten"] [:div {:style {:display :flex}} [:p {:style {:margin-right "0.5em"}} "Pro"] [:select {:name "ingredients-unit" :style {:height :fit-content :padding "0.3em"}} [:option {:value 0 :selected (= (:recipes/unit recipe) 0)} "Portion"] [:option {:value 1 :selected (= (:recipes/unit recipe) 1)} "Person"]] [:p ":"]] [:textarea {:name "ingredients"} (:recipes/ingredients recipe)] [:p "(Je Zeile eine Zutat, in dem Format " [:code "[Beschreibung der Zutat]=[Menge als Zahl][Einheit der Menge]"] ".)"] [:h2 "Zubereitung"] [:textarea {:name "preparation"} (:recipes/preparation recipe)] [:button {:type :submit :style {:margin-top "1em"}} "Speichern"]]] [:script (hutil/raw-string "window.addEventListener(\"htmx:afterRequest\", () => window.close())")])) (defn handler [req] (cutils/auth-only req (if-let [id (try (Integer/parseInt (get-in req [:path-params :id])) (catch Exception _ nil))] (->> (sql/format {:select [:*] :from [:recipes] :where [:= :id id]}) (jdbc/execute! @cdb/db) first render html/html str ruresp/response) (ruresp/bad-request "Bad request."))))