Skip to content

Commit

Permalink
Add movable building block short cut dialogue ✨
Browse files Browse the repository at this point in the history
  • Loading branch information
Freymaurer committed Jan 31, 2024
1 parent a64b7bd commit db3f76b
Show file tree
Hide file tree
Showing 7 changed files with 161 additions and 250 deletions.
30 changes: 16 additions & 14 deletions src/Client/Client.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
<Content Include="docs\IOntologyAPIv2.html" />
<None Include="index.html" />
<None Include="style.scss" />
<Compile Include="LocalStorage\ModalPositions.fs" />
<Compile Include="LocalStorage\SplitWindow.fs" />
<Compile Include="LocalStorage\Darkmode.fs" />
<Compile Include="Colors\NFDIColors.fs" />
Expand Down Expand Up @@ -62,20 +63,6 @@
<Compile Include="SharedComponents\AdvancedSearch.fs" />
<Compile Include="SharedComponents\TermSearchInput.fs" />
<Compile Include="SharedComponents\QuickAccessButton.fs" />
<Compile Include="MainComponents\MainViewContainer.fs" />
<Compile Include="MainComponents\Metadata\Forms.fs" />
<Compile Include="MainComponents\Metadata\Template.fs" />
<Compile Include="MainComponents\Metadata\Assay.fs" />
<Compile Include="MainComponents\Metadata\Study.fs" />
<Compile Include="MainComponents\Metadata\Investigation.fs" />
<Compile Include="MainComponents\NoTablesElement.fs" />
<Compile Include="MainComponents\ContextMenu.fs" />
<Compile Include="MainComponents\Cells.fs" />
<Compile Include="MainComponents\KeyboardShortcuts.fs" />
<Compile Include="MainComponents\AddRows.fs" />
<Compile Include="MainComponents\SpreadsheetView.fs" />
<Compile Include="MainComponents\Navbar.fs" />
<Compile Include="MainComponents\FooterTabs.fs" />
<Compile Include="SidebarComponents\DarkmodeButton.fs" />
<Compile Include="SidebarComponents\LayoutHelper.fs" />
<Compile Include="SidebarComponents\ResponsiveFA.fs" />
Expand All @@ -99,6 +86,21 @@
<Compile Include="Pages\JsonExporter\JsonExporter.fs" />
<Compile Include="Pages\TemplateMetadata\TemplateMetadata.fs" />
<Compile Include="Pages\Dag\Dag.fs" />
<Compile Include="MainComponents\BuildingBlockModal.fs" />
<Compile Include="MainComponents\MainViewContainer.fs" />
<Compile Include="MainComponents\Metadata\Forms.fs" />
<Compile Include="MainComponents\Metadata\Template.fs" />
<Compile Include="MainComponents\Metadata\Assay.fs" />
<Compile Include="MainComponents\Metadata\Study.fs" />
<Compile Include="MainComponents\Metadata\Investigation.fs" />
<Compile Include="MainComponents\NoTablesElement.fs" />
<Compile Include="MainComponents\ContextMenu.fs" />
<Compile Include="MainComponents\Cells.fs" />
<Compile Include="MainComponents\KeyboardShortcuts.fs" />
<Compile Include="MainComponents\AddRows.fs" />
<Compile Include="MainComponents\SpreadsheetView.fs" />
<Compile Include="MainComponents\Navbar.fs" />
<Compile Include="MainComponents\FooterTabs.fs" />
<Compile Include="Views\XlsxFileView.fs" />
<Compile Include="Views\SplitWindowView.fs" />
<Compile Include="Views\NotFoundView.fs" />
Expand Down
40 changes: 40 additions & 0 deletions src/Client/LocalStorage/ModalPositions.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
module LocalStorage.ModalPositions

open Feliz
open Fable.Core.JsInterop

type Position = {
X: int
Y: int
} with
static member init () = {
X = 0
Y = 0
}

open Fable.SimpleJson

[<RequireQualifiedAccess>]
module LocalStorage =

open Browser

let [<Literal>] private DataTheme_Key_Prefix = "ModalPosition_"

let write(modalName:string, dt: Position) =
let s = Json.serialize dt
WebStorage.localStorage.setItem(DataTheme_Key_Prefix + modalName, s)

let load(modalName:string) =
let key = DataTheme_Key_Prefix + modalName
try
WebStorage.localStorage.getItem(key)
|> Json.parseAs<Position>
|> Some
with
|_ ->
WebStorage.localStorage.removeItem(key)
printfn "Could not find %s" key
None

let [<Literal>] BuildingBlockModal = "BuildingBlock"
66 changes: 66 additions & 0 deletions src/Client/MainComponents/BuildingBlockModal.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
namespace MainComponents

open Feliz
open Feliz.Bulma
open Browser.Types

open LocalStorage.ModalPositions

module InitExtensions =

type Position with
static member initBuildingBlock() =
match LocalStorage.load LocalStorage.ModalPositions.BuildingBlockModal with
| Some p -> p
| None -> Position.init()

open InitExtensions

type Modals =

[<ReactComponent>]
static member BuildingBlock (model, dispatch, rmv: MouseEvent -> unit) =
let position, setPosition = React.useState(Position.initBuildingBlock)
let startPosition, setStartPosition = React.useState(None)
let isMoving, setIsMoving = React.useState false
let element = React.useElementRef()
Bulma.modalCard [
prop.ref element
prop.style [style.overflow.visible; style.top position.Y; style.left position.X; style.position.absolute]
prop.children [
Bulma.modalCardHead [
prop.onMouseDown(fun e ->
let x = e.clientX - element.current.Value.offsetLeft
let y = e.clientY - element.current.Value.offsetTop;
setStartPosition <| Some {X = int x; Y = int y}
setIsMoving true
)
prop.onMouseMove(fun e ->
if isMoving then
log "move"
let maxX = Browser.Dom.window.innerWidth - element.current.Value.offsetWidth;
let tempX = int e.clientX - startPosition.Value.X
let newX = System.Math.Min(System.Math.Max(tempX,0),int maxX)
let maxY = Browser.Dom.window.innerHeight - element.current.Value.offsetHeight;
let tempY = int e.clientY - startPosition.Value.Y
let newY = System.Math.Min(System.Math.Max(tempY,0),int maxY)
setPosition {X = newX; Y = newY}
)
prop.onMouseUp(fun _ ->
setStartPosition None
LocalStorage.write(BuildingBlockModal,position)
setIsMoving false
)
prop.style [style.cursor.move]
prop.children [
Bulma.modalCardTitle Html.none
Bulma.delete [ prop.onClick rmv ]
]
]
Bulma.modalCardBody [
BuildingBlock.SearchComponent.Main model dispatch
]
]
]


43 changes: 39 additions & 4 deletions src/Client/MainComponents/Navbar.fs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ open LocalHistory
open Messages
open Components.QuickAccessButton

[<RequireQualifiedAccess>]
type private Modal =
| BuildingBlock
| Template

let quickAccessButtonListStart (state: LocalHistory.Model) dispatch =
let private quickAccessButtonListStart (state: LocalHistory.Model) (setModal: Modal option -> unit) dispatch =
Html.div [
prop.style [
style.display.flex; style.flexDirection.row
Expand Down Expand Up @@ -44,10 +48,30 @@ let quickAccessButtonListStart (state: LocalHistory.Model) dispatch =
),
isActive = (state.NextPositionIsValid(state.HistoryCurrentPosition - 1))
).toReactElement()
QuickAccessButton.create(
"Add Building Block",
[
Bulma.icon [
Html.i [prop.className "fa-solid fa-circle-plus" ]
Html.i [prop.className "fa-solid fa-table-columns" ]
]
],
(fun _ -> setModal (Some Modal.BuildingBlock))
).toReactElement()
//QuickAccessButton.create(
// "Add Template",
// [
// Bulma.icon [
// Html.i [prop.className "fa-solid fa-circle-plus" ]
// Html.i [prop.className "fa-solid fa-table" ]
// ]
// ],
// (fun _ -> setModal (Some Modal.Template))
//).toReactElement()
]
]

let quickAccessButtonListEnd (model: Model) dispatch =
let private quickAccessButtonListEnd (model: Model) dispatch =
Html.div [
prop.style [
style.display.flex; style.flexDirection.row
Expand All @@ -71,9 +95,18 @@ let quickAccessButtonListEnd (model: Model) dispatch =
]
]

let private modalDisplay (modal: Modal option, model, dispatch, setModal) =
let rmv = fun _ -> setModal (None)
match modal with
| None -> Html.none
| Some Modal.BuildingBlock ->
MainComponents.Modals.BuildingBlock (model, dispatch, rmv)
| Some Modal.Template ->
MainComponents.Modals.BuildingBlock (model, dispatch, rmv)

[<ReactComponent>]
let Main (model: Messages.Model) dispatch =
let modal, setModal = React.useState(None)
Bulma.navbar [
prop.className "myNavbarSticky"
prop.id "swate-mainNavbar"
Expand All @@ -84,6 +117,7 @@ let Main (model: Messages.Model) dispatch =
style.minHeight(length.rem 3.25)
]
prop.children [
modalDisplay (modal, model, dispatch, setModal)
Bulma.navbarBrand.div [

]
Expand Down Expand Up @@ -119,7 +153,8 @@ let Main (model: Messages.Model) dispatch =
(fun e -> ()),
false
).toReactElement()
quickAccessButtonListStart (model.History: LocalHistory.Model) dispatch
quickAccessButtonListStart (model.History: LocalHistory.Model) setModal dispatch

]
]
]
Expand All @@ -128,7 +163,7 @@ let Main (model: Messages.Model) dispatch =
Bulma.navbarStart.div [
prop.style [style.display.flex; style.alignItems.stretch; style.justifyContent.flexStart; style.custom("marginRight", "auto")]
prop.children [
quickAccessButtonListStart model.History dispatch
quickAccessButtonListStart model.History setModal dispatch
]
]
Bulma.navbarEnd.div [
Expand Down
Loading

0 comments on commit db3f76b

Please sign in to comment.