summaryrefslogtreecommitdiff
path: root/src/chef/frontend/admin/recipe_editor.clj
blob: 69c84ba1a533ad4fad807a9a01795ca1297f6f79 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
(ns chef.frontend.admin.recipe-editor
  (:require [hiccup2.core :as html]
            [hiccup.util :as hutil]
            [ring.util.response :as ruresp]
            [chef.utils :as cutils]

            [chef.logic.categories :as clcategories]
            [chef.logic.recipes :as clrecipes]))

(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/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/recipe/" (:recipes/id recipe) "/thumbnail/")
                               :hx-swap    :none}
                      "Thumbnail entfernen"]
                     [:h2 "Kategorie"]
                     [:select {:name "category"}
                      (for [category (clcategories/get-all-categories)]
                        [:option {:value    (:categories/id category)
                                  :selected (= (:categories/id category) (:recipes/category recipe))}
                         (clcategories/generate-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 (cutils/s->int-or-nil (get-in req [:path-params :id]))]
                      (->> (clrecipes/get-recipe id)
                           render
                           html/html
                           str
                           ruresp/response)
                      (ruresp/bad-request "Bad request."))))