diff --git a/Core/Browser.module.fs b/Core/Browser.module.fs
index 07cb33d..b76830f 100644
--- a/Core/Browser.module.fs
+++ b/Core/Browser.module.fs
@@ -25,5 +25,4 @@ let setCookie name value (expiry: DateTimeOffset) (context: HttpContext) =
options.Expires <- expiry
context.Response.Cookies.Append(name, value, options);
-let redirect url (context: HttpContext) =
- context.Response.Redirect url
\ No newline at end of file
+let redirect url (context: HttpContext) = context.Response.Redirect url
\ No newline at end of file
diff --git a/DredgePos.fsproj b/DredgePos.fsproj
index a5df94d..21966c6 100644
--- a/DredgePos.fsproj
+++ b/DredgePos.fsproj
@@ -20,6 +20,7 @@
+
diff --git a/Entities/Buttons/Model.fs b/Entities/Buttons/Model.fs
new file mode 100644
index 0000000..5680079
--- /dev/null
+++ b/Entities/Buttons/Model.fs
@@ -0,0 +1,19 @@
+module DredgePos.Entities.Buttons.Model
+
+open DredgePos.Types
+open DredgeFramework
+
+let attr = Giraffe.ViewEngine.HtmlElements.attr
+
+let getItemActionAttributes (itemCode: string) =
+ let item = Entity.GetFirstByColumn- "code" (StringTrim itemCode)
+ [(attr "data-item") <| jsonEncode item]
+
+let getGridActionAttributes (gridId: int) = [(attr "data-grid") <| jsonEncode gridId]
+
+let getActionAttributes (action: string) (actionValue: string) =
+
+ match action with
+ | "item" -> getItemActionAttributes actionValue
+ | "grid" -> actionValue |> int |> getGridActionAttributes
+ | _ -> []
\ No newline at end of file
diff --git a/Floorplan/Model.fs b/Floorplan/Model.fs
index f7ac2db..98a6239 100644
--- a/Floorplan/Model.fs
+++ b/Floorplan/Model.fs
@@ -87,14 +87,20 @@ let saveOrderToTable orderXML tableNumber =
File.WriteAllText(tableFile, tableXML)
-let getTable (tableNumber : int) =
+let getTableSafely (tableNumber: int) =
let query = select {
table "floorplan_tables"
where (eq "table_number" tableNumber + eq "venue_id" (getCurrentVenue()))
}
- let result = query |> Database.Select
- result |> first
+ query
+ |> Database.Select
+ |> Array.tryItem 0
+
+let getTable (tableNumber : int) =
+ match getTableSafely tableNumber with
+ | None -> failwith $"Table {tableNumber} not found in current venue"
+ | Some table -> table
let getTableById (id : int) =
select {
diff --git a/Global/View.fs b/Global/View.fs
index 9a63587..a20d283 100644
--- a/Global/View.fs
+++ b/Global/View.fs
@@ -101,6 +101,19 @@ let posButton (extraClasses: string) attrs content =
let allAttrs = [_class $"posButton {extraClasses}"] |> List.append attrs
a allAttrs content
+let PosButton classes (attrs: Map) text =
+ let attrArray =
+ attrs
+ |> Map.map (fun key value ->
+ (attr key) (string value)
+ )
+ |> Map.values
+ |> Array.ofSeq
+
+ posButton classes [
+ yield! attrArray
+ ] [str text]
+
let HtmlPage pageTitle scripts styles tags content =
html [] [
head [] [
diff --git a/OrderScreen/Controller.fs b/OrderScreen/Controller.fs
index 6cd3835..f1db196 100644
--- a/OrderScreen/Controller.fs
+++ b/OrderScreen/Controller.fs
@@ -4,6 +4,7 @@ open DredgePos
open DredgeFramework
open DredgePos.Types
open DredgePos.Global.Controller
+open Saturn.CSRF
open Thoth.Json.Net
open Giraffe
open Microsoft.AspNetCore.Http
@@ -20,14 +21,6 @@ let getOrderScreenData (tableNumber: int) =
|> ajaxSuccess
|> json
-let loadGrid (gridId: int) =
- let grid = Entity.GetById gridId
- let gridHtml = Model.loadGrid gridId
- if gridHtml = "Error" then ajaxFail gridHtml
- else ajaxSuccess {|grid=grid;gridHtml=gridHtml|}
- |> json
-
-
let renderGrid (grid: grid) =
let gridData = grid.data |> Decode.Auto.fromString