Buttons now render entirely in Giraffe

This commit is contained in:
2022-06-30 23:43:16 +10:00
parent 420c6530e0
commit 5e78701b0b
4 changed files with 90 additions and 29 deletions

View File

@@ -310,7 +310,7 @@ let CreateItemFromFileName (index: int) (dirName: string) (file: string) =
| "beer" | "dessert" -> "doubleHeight" | "beer" | "dessert" -> "doubleHeight"
| "mains" | "wine" | "steak temperatures" -> "doubleHeight doubleWidth" | "mains" | "wine" | "steak temperatures" -> "doubleHeight doubleWidth"
| "entrees" -> "doubleWidth" | "entrees" -> "doubleWidth"
| _ -> "" | _ -> "normal"
Entity.Create { Entity.Create {
id=0 id=0

View File

@@ -4,8 +4,10 @@ open DredgePos
open DredgeFramework open DredgeFramework
open DredgePos.Types open DredgePos.Types
open DredgePos.Global.Controller open DredgePos.Global.Controller
open Thoth.Json.Net
open Giraffe open Giraffe
open Microsoft.AspNetCore.Http open Microsoft.AspNetCore.Http
open FSharp.Collections
let getOrderScreenData (tableNumber: int) = let getOrderScreenData (tableNumber: int) =
{| {|
@@ -25,6 +27,24 @@ let loadGrid (gridId: int) =
else ajaxSuccess {|grid=grid;gridHtml=gridHtml|} else ajaxSuccess {|grid=grid;gridHtml=gridHtml|}
|> json |> json
let renderGrid (grid: grid) =
let gridData = grid.data |> Decode.Auto.fromString<Map<string, int[]>>
match gridData with
| Error message -> failwith message
| Ok data ->
data
|> Map.toArray
|> Array.map snd
|> Array.map(
fun buttonIds ->
buttonIds
|> Array.map Entity.GetById<button>
|> Array.map View.itemButton
|> View.gridPage grid
)
let loadOrderScreenView (ctx: HttpContext) (tableNumber: int) = let loadOrderScreenView (ctx: HttpContext) (tableNumber: int) =
Authenticate.Model.RequireClerkAuthentication ctx Authenticate.Model.RequireClerkAuthentication ctx
let currentClerk = Authenticate.Model.getCurrentClerk ctx let currentClerk = Authenticate.Model.getCurrentClerk ctx
@@ -32,19 +52,27 @@ let loadOrderScreenView (ctx: HttpContext) (tableNumber: int) =
let scripts = [|"dredgepos.tables.js";"./external/currency.min.js";"dredgepos.orderScreen.js"; |] |> addDefaultScripts let scripts = [|"dredgepos.tables.js";"./external/currency.min.js";"dredgepos.orderScreen.js"; |] |> addDefaultScripts
let metaTags = [|"viewport", "user-scalable = no, initial-scale=0.8,maximum-scale=0.8 ,shrink-to-fit=yes"|] |> addDefaultMetaTags let metaTags = [|"viewport", "user-scalable = no, initial-scale=0.8,maximum-scale=0.8 ,shrink-to-fit=yes"|] |> addDefaultMetaTags
let orderScreenPageGroups = let printGroupButtons =
Entity.GetAllInVenue<sales_category>
|> Array.map View.printGroupButton
let orderScreenPageGroupButtons =
Entity.GetAllInVenue<order_screen_page_group> Entity.GetAllInVenue<order_screen_page_group>
|> Array.filter (fun page_group -> page_group.id <> 0) |> Array.filter (fun page_group -> page_group.id <> 0)
|> Array.sortBy (fun {order=order} -> order) |> Array.sortBy (fun {order=order} -> order)
|> Array.map View.pageGroupButton
(* let grids = let grids = Model.getAllPageGridsInVenue ()
Model.getAllPageGridsInVenue () let pageGroupNodes =
grids
|> Array.map(fun (grid, page_group) -> |> Array.map(fun (grid, page_group) ->
renderGrid grid
|> View.pageGroup page_group
) )
|>*)
View.index tableNumber styles scripts metaTags currentClerk orderScreenPageGroups
View.index tableNumber styles scripts metaTags currentClerk printGroupButtons orderScreenPageGroupButtons pageGroupNodes
let loadOrderScreen (ctx: HttpContext) (tableNumber: int) : HttpHandler = let loadOrderScreen (ctx: HttpContext) (tableNumber: int) : HttpHandler =
Authenticate.Model.RequireClerkAuthentication ctx Authenticate.Model.RequireClerkAuthentication ctx

View File

@@ -8,7 +8,7 @@ open language
let coverSelector = div [_class "coverSelector"] [] let coverSelector = div [_class "coverSelector"] []
let pageContainer floorplanTable (clerk: clerk) orderScreenPageGroups = let pageContainer floorplanTable (clerk: clerk) printGroupButtons orderScreenPageGroupButtons pageGroups =
div [_id "pageContainer" ; _table floorplanTable] [ div [_id "pageContainer" ; _table floorplanTable] [
div [_id "leftColumn"] [ div [_id "leftColumn"] [
h1 [_class "tableHeading"] [str (getAndReplace "active_table" [floorplanTable.table_number])] h1 [_class "tableHeading"] [str (getAndReplace "active_table" [floorplanTable.table_number])]
@@ -45,7 +45,7 @@ let pageContainer floorplanTable (clerk: clerk) orderScreenPageGroups =
div [_class "functionButtons"] [ div [_class "functionButtons"] [
div [_class "printGroupButtons toggleGroup"] [ div [_class "printGroupButtons toggleGroup"] [
input [_type "hidden"; _class "value"] input [_type "hidden"; _class "value"]
(* Sales category override buttons *) yield! printGroupButtons
] ]
div [_class "functionColumn"] [ div [_class "functionColumn"] [
posButton "accumulateButton" [ActiveInMode "accumulate"] [str (get "accumulate_function")] posButton "accumulateButton" [ActiveInMode "accumulate"] [str (get "accumulate_function")]
@@ -62,17 +62,18 @@ let pageContainer floorplanTable (clerk: clerk) orderScreenPageGroups =
posButton "" [] ["print_function" |> get |> str] posButton "" [] ["print_function" |> get |> str]
] ]
] ]
div [_id "pageList"] [
yield! orderScreenPageGroups
]
div [_id "pageGroupContainer"] [
]
div [_class "pagNavigation"] [
posButton "prevButton" [] ["prev_page" |> get |> str]
posButton "nextButton" [] ["next_page" |> get |> str]
]
] ]
div [_id "pageList"] [
yield! orderScreenPageGroupButtons
]
div [_id "pageGroupContainer"] [
yield! pageGroups
]
div [_class "pageNavigation"] [
posButton "prevButton" [] ["prev_page" |> get |> str]
posButton "nextButton" [] ["next_page" |> get |> str]
]
] ]
] ]
(* Grid Container, Cover Selector *) (* Grid Container, Cover Selector *)
@@ -97,21 +98,54 @@ let gridContainer =
] ]
] ]
let pageGroupButton (pageGroup: order_screen_page_group) = posButton "loadPageGroup" [] [str pageGroup.label] let pageGroupButton (pageGroup: order_screen_page_group) = posButton "loadPageGroup" [(attr "data-page-group-id") (string pageGroup.id)] [str pageGroup.label]
let printGroupButton (printGroup: sales_category) = posButton "" [(attr "data-print-group-id") (string printGroup.id)] [str printGroup.name]
let pageGroup grids = let itemButton (button: button) =
div [_class "pageGroup"] [ let extraClasses =
yield! grids if button.primary_action = "spacer" then button.extra_classes + " invisible"
elif button.image.Length > 0 then button.extra_classes + " hasImage"
else button.extra_classes
let image =
if button.image.Length = 0 then str ""
else
span [
_class "buttonImg"
_style $"background-image:url('/images/items/{button.image}');"
] []
posButton extraClasses [
(attr "data-primary-action") button.primary_action
(attr "data-secondary-action") button.secondary_action
] [
image
span [_class "text "] [str button.text]
] ]
let index orderNumber styles scripts tags clerk (orderScreenPageGroups: order_screen_page_group[]) = let _dataPageGroup = attr "data-page-group"
let _dataPageGroupId = attr "data-page-group-id"
let orderScreenPageGroupButtons = let pageGroup (page_group: order_screen_page_group) gridNodes =
orderScreenPageGroups div [_class "pageGroup"; _dataPageGroupId (string page_group.id); ] [
|> Array.map pageGroupButton yield! gridNodes
]
let gridPage (grid: grid) buttonNodes =
div [
_class "gridPage"
_style $"
grid-template-columns: repeat({grid.cols}, 1fr);
grid-template-rows: repeat({grid.rows}, 1fr);"
] [
yield! buttonNodes
]
let index orderNumber styles scripts tags clerk printGroupButtons orderScreenPageGroupButtons pageGroupNodes =
[| [|
pageContainer (DredgePos.Floorplan.Model.getTable orderNumber) clerk orderScreenPageGroupButtons pageContainer (DredgePos.Floorplan.Model.getTable orderNumber) clerk printGroupButtons orderScreenPageGroupButtons pageGroupNodes
posButtonTemplate posButtonTemplate
gridContainer gridContainer
coverSelector coverSelector

View File

@@ -43,7 +43,6 @@ const loadPageGroup = (e: Event) => {
button.addClass('active') button.addClass('active')
let pageGroupId = button.data('page-group-id') let pageGroupId = button.data('page-group-id')
container.find('.pageGroup').hide() container.find('.pageGroup').hide()
let activeGrid = $(`.pageGroup[data-page-group-id=${pageGroupId}]`) let activeGrid = $(`.pageGroup[data-page-group-id=${pageGroupId}]`)