diff --git a/src/Client/Client.fsproj b/src/Client/Client.fsproj
index 8b33ea12..afe7ab9d 100644
--- a/src/Client/Client.fsproj
+++ b/src/Client/Client.fsproj
@@ -13,7 +13,7 @@
-
+
diff --git a/src/Client/LocalStorage/ModalPositions.fs b/src/Client/LocalStorage/Widgets.fs
similarity index 100%
rename from src/Client/LocalStorage/ModalPositions.fs
rename to src/Client/LocalStorage/Widgets.fs
diff --git a/src/Client/MainComponents/Navbar.fs b/src/Client/MainComponents/Navbar.fs
index a742353a..a4c7b412 100644
--- a/src/Client/MainComponents/Navbar.fs
+++ b/src/Client/MainComponents/Navbar.fs
@@ -58,7 +58,7 @@ let private quickAccessButtonListEnd (model: Model) dispatch =
]
prop.children [
QuickAccessButton.create(
- "Save as xlsx",
+ "Save",
[
Bulma.icon [Html.i [prop.className "fa-solid fa-floppy-disk";]]
],
diff --git a/src/Client/Model.fs b/src/Client/Model.fs
index 84ca8e28..c89612e2 100644
--- a/src/Client/Model.fs
+++ b/src/Client/Model.fs
@@ -360,7 +360,7 @@ module Protocol =
static member fromString(str:string) =
match str with
| "All" -> All
- | "All Curated" -> OnlyCurated
+ | "DataPLANT official" -> OnlyCurated
| "All Community" -> OnlyCommunities
| anyElse -> Community anyElse
diff --git a/src/Client/Pages/JsonExporter/JsonExporter.fs b/src/Client/Pages/JsonExporter/JsonExporter.fs
index e0f2d8fc..3071a72d 100644
--- a/src/Client/Pages/JsonExporter/JsonExporter.fs
+++ b/src/Client/Pages/JsonExporter/JsonExporter.fs
@@ -25,7 +25,8 @@ let download(filename, text) =
element.click();
- document.body.removeChild(element);
+ document.body.removeChild(element) |> ignore
+ ()
let update (msg:JsonExporter.Msg) (currentModel: Messages.Model) : Messages.Model * Cmd =
match msg with
@@ -196,251 +197,347 @@ let update (msg:JsonExporter.Msg) (currentModel: Messages.Model) : Messages.Mode
currentModel.updateByJsonExporterModel nextModel, Cmd.none
-open Messages
+//open Messages
+//open Feliz
+//open Feliz.Bulma
+
+//let dropdownItem (exportType:JsonExportType) (model:Model) msg (isActive:bool) =
+// Bulma.dropdownItem.a [
+// prop.tabIndex 0
+// prop.onClick (fun e ->
+// e.stopPropagation()
+// exportType |> msg
+// )
+// prop.onKeyDown (fun k -> if (int k.which) = 13 then exportType |> msg)
+// prop.children [
+// Html.span [
+// prop.className "has-tooltip-right has-tooltip-multiline"
+// prop.custom ("data-tooltip", exportType.toExplanation)
+// prop.style [style.fontSize(length.rem 1.1); style.paddingRight 10; style.textAlign.center; style.color NFDIColors.Yellow.Darker20]
+// Html.i [prop.className "fa-solid fa-circle-info"] |> prop.children
+// ]
+
+// Html.span (exportType.ToString())
+// ]
+// ]
+
+//let parseTableToISAJsonEle (model:Model) (dispatch:Messages.Msg -> unit) =
+// mainFunctionContainer [
+// Bulma.field.div [
+// Bulma.field.hasAddons
+// prop.children [
+// Bulma.control.div [
+// Bulma.dropdown [
+// if model.JsonExporterModel.ShowTableExportTypeDropdown then Bulma.dropdown.isActive
+// prop.children [
+// Bulma.dropdownTrigger [
+// Bulma.button.a [
+// prop.onClick(fun e -> e.stopPropagation(); UpdateShowTableExportTypeDropdown (not model.JsonExporterModel.ShowTableExportTypeDropdown) |> JsonExporterMsg |> dispatch )
+// prop.children [
+// span [Style [MarginRight "5px"]] [str (model.JsonExporterModel.TableJsonExportType.ToString())]
+// Html.i [prop.className "fa-solid fa-angle-down"]
+// ]
+// ]
+// ]
+// Bulma.dropdownMenu [
+// Bulma.dropdownContent [
+// let msg = (UpdateTableJsonExportType >> JsonExporterMsg >> dispatch)
+// dropdownItem JsonExportType.Assay model msg (model.JsonExporterModel.TableJsonExportType = JsonExportType.Assay)
+// dropdownItem JsonExportType.ProcessSeq model msg (model.JsonExporterModel.TableJsonExportType = JsonExportType.ProcessSeq)
+// ]
+// ]
+// ]
+// ]
+// ]
+// Bulma.control.div [
+// Bulma.control.isExpanded
+// Bulma.button.a [
+// Bulma.color.isInfo
+// Bulma.button.isFullWidth
+// prop.onClick(fun _ ->
+// InterfaceMsg SpreadsheetInterface.ExportJsonTable |> dispatch
+// )
+// prop.text "Download as isa json"
+// ] |> prop.children
+// ]
+// ]
+// ]
+// ]
+
+//let parseTablesToISAJsonEle (model:Model) (dispatch:Messages.Msg -> unit) =
+// mainFunctionContainer [
+// Bulma.field.div [
+// Bulma.field.hasAddons
+// prop.children [
+// Bulma.control.div [
+// Bulma.dropdown [
+// if model.JsonExporterModel.ShowWorkbookExportTypeDropdown then Bulma.dropdown.isActive
+// prop.children [
+// Bulma.dropdownTrigger [
+// Bulma.button.a [
+// prop.onClick (fun e -> e.stopPropagation(); UpdateShowWorkbookExportTypeDropdown (not model.JsonExporterModel.ShowWorkbookExportTypeDropdown) |> JsonExporterMsg |> dispatch )
+// prop.children [
+// span [Style [MarginRight "5px"]] [str (model.JsonExporterModel.WorkbookJsonExportType.ToString())]
+// Html.i [prop.className "fa-solid fa-angle-down"]
+// ]
+// ]
+// ]
+// Bulma.dropdownMenu [
+// Bulma.dropdownContent [
+// let msg = (UpdateWorkbookJsonExportType >> JsonExporterMsg >> dispatch)
+// dropdownItem JsonExportType.Assay model msg (model.JsonExporterModel.WorkbookJsonExportType = JsonExportType.Assay)
+// dropdownItem JsonExportType.ProcessSeq model msg (model.JsonExporterModel.WorkbookJsonExportType = JsonExportType.ProcessSeq)
+// ]
+// ]
+// ]
+// ]
+// ]
+// Bulma.control.div [
+// Bulma.control.isExpanded
+// Bulma.button.a [
+// Bulma.color.isInfo
+// Bulma.button.isFullWidth
+// prop.onClick(fun _ ->
+// InterfaceMsg SpreadsheetInterface.ExportJsonTables |> dispatch
+// )
+// prop.text "Download as isa json"
+// ]
+// |> prop.children
+// ]
+// ]
+// ]
+// ]
+
+//// SND ELEMENT
+//open Browser.Types
+
+//let fileUploadButton (model:Model) dispatch (id: string) =
+// Bulma.label [
+// prop.className "mb-2 has-text-weight-normal"
+// prop.children [
+// Bulma.fileInput [
+// prop.id id
+// prop.type' "file";
+// prop.style [style.display.none]
+// prop.onChange (fun (ev: File list) ->
+// let files = ev//: Browser.Types.FileList = ev.target?files
+
+// let blobs =
+// files
+// |> List.map (fun f -> f.slice() )
+
+// let reader = Browser.Dom.FileReader.Create()
+
+// reader.onload <- fun evt ->
+// let byteArr =
+// let arraybuffer : Fable.Core.JS.ArrayBuffer = evt.target?result
+// let uintArr = Fable.Core.JS.Constructors.Uint8Array.Create arraybuffer
+// uintArr.ToString().Split([|","|], System.StringSplitOptions.RemoveEmptyEntries)
+// |> Array.map (fun byteStr -> byte byteStr)
+
+// StoreXLSXByteArray byteArr |> JsonExporterMsg |> dispatch
+
+// reader.onerror <- fun evt ->
+// curry GenericLog Cmd.none ("Error", evt.Value) |> DevMsg |> dispatch
+
+// reader.readAsArrayBuffer(blobs |> List.head)
+
+// let picker = Browser.Dom.document.getElementById(id)
+// // https://stackoverflow.com/questions/3528359/html-input-type-file-file-selection-event/3528376
+// picker?value <- null
+// )
+// ]
+// Bulma.button.a [
+// Bulma.color.isInfo;
+// Bulma.button.isFullWidth
+// prop.text "Upload Excel file"
+// ]
+// ]
+// ]
+
+
+//let xlsxUploadAndParsingMainElement (model:Model) (dispatch: Msg -> unit) =
+// let inputId = "xlsxConverter_uploadButton"
+// mainFunctionContainer [
+// // Upload xlsx file to byte []
+// fileUploadButton model dispatch inputId
+// // Request parsing
+// Bulma.field.div [
+// Bulma.field.hasAddons
+// prop.children [
+// Bulma.control.div [
+// Bulma.dropdown [
+// if model.JsonExporterModel.ShowXLSXExportTypeDropdown then Bulma.dropdown.isActive
+// prop.children [
+// Bulma.dropdownTrigger [
+// Bulma.button.a [
+// prop.onClick (fun e -> e.stopPropagation(); UpdateShowXLSXExportTypeDropdown (not model.JsonExporterModel.ShowXLSXExportTypeDropdown) |> JsonExporterMsg |> dispatch )
+// prop.children [
+// span [Style [MarginRight "5px"]] [str (model.JsonExporterModel.XLSXParsingExportType.ToString())]
+// Html.i [prop.className "fa-solid fa-angle-down"]
+// ]
+// ]
+// ]
+// Bulma.dropdownMenu [
+// Bulma.dropdownContent [
+// let msg = (UpdateXLSXParsingExportType >> JsonExporterMsg >> dispatch)
+// dropdownItem JsonExportType.Assay model msg (model.JsonExporterModel.XLSXParsingExportType = JsonExportType.Assay)
+// dropdownItem JsonExportType.ProcessSeq model msg (model.JsonExporterModel.XLSXParsingExportType = JsonExportType.ProcessSeq)
+// dropdownItem JsonExportType.ProtocolTemplate model msg (model.JsonExporterModel.XLSXParsingExportType = JsonExportType.ProtocolTemplate)
+// ]
+// ]
+// ]
+// ]
+// ]
+// Bulma.control.div [
+// Bulma.control.isExpanded
+// Bulma.button.a [
+// let hasContent = model.JsonExporterModel.XLSXByteArray <> Array.empty
+// Bulma.color.isInfo
+// if hasContent then
+// Bulma.button.isActive
+// else
+// Bulma.color.isDanger
+// prop.disabled true
+// Bulma.button.isFullWidth
+// prop.onClick(fun _ ->
+// if hasContent then
+// ParseXLSXToJsonRequest model.JsonExporterModel.XLSXByteArray |> JsonExporterMsg |> dispatch
+// )
+// prop.text "Download as isa json"
+// ]
+// |> prop.children
+// ]
+// ]
+// ]
+// ]
+
+//let jsonExporterMainElement (model:Messages.Model) (dispatch: Messages.Msg -> unit) =
+
+ //Bulma.content [
+
+ // prop.onSubmit (fun e -> e.preventDefault())
+ // prop.onKeyDown (fun k -> if (int k.which) = 13 then k.preventDefault())
+ // prop.onClick (fun e -> CloseAllDropdowns |> JsonExporterMsg |> dispatch)
+ // prop.style [style.minHeight(length.vh 100)]
+ // prop.children [
+ // Bulma.label "Json Exporter"
+
+ // Bulma.help [
+ // str "Export swate annotation tables to "
+ // a [Href @"https://en.wikipedia.org/wiki/JSON"] [str "JSON"]
+ // str " format. Official ISA-JSON types can be found "
+ // a [Href @"https://isa-specs.readthedocs.io/en/latest/isajson.html#"] [str "here"]
+ // str "."
+ // ]
+
+ // Bulma.label "Export active table"
+
+ // parseTableToISAJsonEle model dispatch
+
+ // Bulma.label "Export workbook"
+
+ // parseTablesToISAJsonEle model dispatch
+
+ // Bulma.label "Export Swate conform xlsx file."
+
+ // xlsxUploadAndParsingMainElement model dispatch
+ // ]
+ //]
+
open Feliz
open Feliz.Bulma
-let dropdownItem (exportType:JsonExportType) (model:Model) msg (isActive:bool) =
- Bulma.dropdownItem.a [
- prop.tabIndex 0
- prop.onClick (fun e ->
- e.stopPropagation()
- exportType |> msg
- )
- prop.onKeyDown (fun k -> if (int k.which) = 13 then exportType |> msg)
- prop.children [
- Html.span [
- prop.className "has-tooltip-right has-tooltip-multiline"
- prop.custom ("data-tooltip", exportType.toExplanation)
- prop.style [style.fontSize(length.rem 1.1); style.paddingRight 10; style.textAlign.center; style.color NFDIColors.Yellow.Darker20]
- Html.i [prop.className "fa-solid fa-circle-info"] |> prop.children
- ]
+module FileExporterAux =
- Html.span (exportType.ToString())
- ]
- ]
-
-let parseTableToISAJsonEle (model:Model) (dispatch:Messages.Msg -> unit) =
- mainFunctionContainer [
- Bulma.field.div [
- Bulma.field.hasAddons
- prop.children [
- Bulma.control.div [
- Bulma.dropdown [
- if model.JsonExporterModel.ShowTableExportTypeDropdown then Bulma.dropdown.isActive
- prop.children [
- Bulma.dropdownTrigger [
- Bulma.button.a [
- prop.onClick(fun e -> e.stopPropagation(); UpdateShowTableExportTypeDropdown (not model.JsonExporterModel.ShowTableExportTypeDropdown) |> JsonExporterMsg |> dispatch )
- prop.children [
- span [Style [MarginRight "5px"]] [str (model.JsonExporterModel.TableJsonExportType.ToString())]
- Html.i [prop.className "fa-solid fa-angle-down"]
- ]
- ]
- ]
- Bulma.dropdownMenu [
- Bulma.dropdownContent [
- let msg = (UpdateTableJsonExportType >> JsonExporterMsg >> dispatch)
- dropdownItem JsonExportType.Assay model msg (model.JsonExporterModel.TableJsonExportType = JsonExportType.Assay)
- dropdownItem JsonExportType.ProcessSeq model msg (model.JsonExporterModel.TableJsonExportType = JsonExportType.ProcessSeq)
- ]
- ]
+ open ARCtrl.ISA
+ open ARCtrl.ISA.Json
+
+ []
+ type ISA =
+ | Assay
+ | Study
+ | Investigation
+
+ static member initFromArcfile(arcfile: ArcFiles) =
+ match arcfile with
+ | ArcFiles.Assay _ -> Some Assay
+ | ArcFiles.Study _ -> Some Study
+ | ArcFiles.Investigation _ -> Some Investigation
+ | ArcFiles.Template _ -> None
+
+ let toISAJsonString (arcfile: ArcFiles option) =
+ let timed = fun s -> System.DateTime.Now.ToString("yyyyMMdd_hhmm_") + s
+ match arcfile with
+ | None | Some (ArcFiles.Template _) -> None
+ | Some (ArcFiles.Assay a) -> (timed "assay.json",ArcAssay.toJsonString a) |> Some
+ | Some (ArcFiles.Study (s,as')) -> (timed "study.json", ArcStudy.toJsonString s (ResizeArray as')) |> Some
+ | Some (ArcFiles.Investigation i) -> (timed "investigation.json", ArcInvestigation.toJsonString i) |> Some
+
+open FileExporterAux
+
+type FileExporter =
+
+ []
+ static member JsonExport(model: Messages.Model, dispatch) =
+ let isa, setIsa = React.useState(model.SpreadsheetModel.ArcFile |> Option.bind ISA.initFromArcfile)
+ Html.div [
+ Bulma.field.div [
+ Bulma.field.hasAddons
+ prop.children [
+ Bulma.control.p [
+ //Html.span [
+ // prop.className "select"
+ // prop.children [
+ // Html.select [
+ // Html.option "Test"
+ // Html.option "Test2"
+ // Html.option "Test3"
+ // ]
+ // ]
+ //]
+ Bulma.button.a [
+ prop.text "ISA"
+ Bulma.button.isStatic
]
]
- ]
- Bulma.control.div [
- Bulma.control.isExpanded
- Bulma.button.a [
- Bulma.color.isInfo
- Bulma.button.isFullWidth
- prop.onClick(fun _ ->
- InterfaceMsg SpreadsheetInterface.ExportJsonTable |> dispatch
- )
- prop.text "Download as isa json"
- ] |> prop.children
- ]
- ]
- ]
- ]
-
-let parseTablesToISAJsonEle (model:Model) (dispatch:Messages.Msg -> unit) =
- mainFunctionContainer [
- Bulma.field.div [
- Bulma.field.hasAddons
- prop.children [
- Bulma.control.div [
- Bulma.dropdown [
- if model.JsonExporterModel.ShowWorkbookExportTypeDropdown then Bulma.dropdown.isActive
+ Bulma.control.p [
+ Bulma.control.isExpanded
prop.children [
- Bulma.dropdownTrigger [
- Bulma.button.a [
- prop.onClick (fun e -> e.stopPropagation(); UpdateShowWorkbookExportTypeDropdown (not model.JsonExporterModel.ShowWorkbookExportTypeDropdown) |> JsonExporterMsg |> dispatch )
- prop.children [
- span [Style [MarginRight "5px"]] [str (model.JsonExporterModel.WorkbookJsonExportType.ToString())]
- Html.i [prop.className "fa-solid fa-angle-down"]
- ]
- ]
- ]
- Bulma.dropdownMenu [
- Bulma.dropdownContent [
- let msg = (UpdateWorkbookJsonExportType >> JsonExporterMsg >> dispatch)
- dropdownItem JsonExportType.Assay model msg (model.JsonExporterModel.WorkbookJsonExportType = JsonExportType.Assay)
- dropdownItem JsonExportType.ProcessSeq model msg (model.JsonExporterModel.WorkbookJsonExportType = JsonExportType.ProcessSeq)
- ]
+ Bulma.button.button [
+ Bulma.button.isFullWidth
+ prop.text "Download"
+ if isa.IsNone then
+ prop.disabled true
+ prop.onClick (fun _ ->
+ let r = toISAJsonString model.SpreadsheetModel.ArcFile
+ r |> Option.iter (fun r -> download r)
+ )
]
]
]
]
- Bulma.control.div [
- Bulma.control.isExpanded
- Bulma.button.a [
- Bulma.color.isInfo
- Bulma.button.isFullWidth
- prop.onClick(fun _ ->
- InterfaceMsg SpreadsheetInterface.ExportJsonTables |> dispatch
- )
- prop.text "Download as isa json"
- ]
- |> prop.children
- ]
- ]
- ]
- ]
-
-// SND ELEMENT
-open Browser.Types
-
-let fileUploadButton (model:Model) dispatch (id: string) =
- Bulma.label [
- prop.className "mb-2 has-text-weight-normal"
- prop.children [
- Bulma.fileInput [
- prop.id id
- prop.type' "file";
- prop.style [style.display.none]
- prop.onChange (fun (ev: File list) ->
- let files = ev//: Browser.Types.FileList = ev.target?files
-
- let blobs =
- files
- |> List.map (fun f -> f.slice() )
-
- let reader = Browser.Dom.FileReader.Create()
-
- reader.onload <- fun evt ->
- let byteArr =
- let arraybuffer : Fable.Core.JS.ArrayBuffer = evt.target?result
- let uintArr = Fable.Core.JS.Constructors.Uint8Array.Create arraybuffer
- uintArr.ToString().Split([|","|], System.StringSplitOptions.RemoveEmptyEntries)
- |> Array.map (fun byteStr -> byte byteStr)
-
- StoreXLSXByteArray byteArr |> JsonExporterMsg |> dispatch
-
- reader.onerror <- fun evt ->
- curry GenericLog Cmd.none ("Error", evt.Value) |> DevMsg |> dispatch
-
- reader.readAsArrayBuffer(blobs |> List.head)
-
- let picker = Browser.Dom.document.getElementById(id)
- // https://stackoverflow.com/questions/3528359/html-input-type-file-file-selection-event/3528376
- picker?value <- null
- )
- ]
- Bulma.button.a [
- Bulma.color.isInfo;
- Bulma.button.isFullWidth
- prop.text "Upload Excel file"
]
- ]
- ]
-
-
-let xlsxUploadAndParsingMainElement (model:Model) (dispatch: Msg -> unit) =
- let inputId = "xlsxConverter_uploadButton"
- mainFunctionContainer [
- // Upload xlsx file to byte []
- fileUploadButton model dispatch inputId
- // Request parsing
- Bulma.field.div [
- Bulma.field.hasAddons
- prop.children [
- Bulma.control.div [
- Bulma.dropdown [
- if model.JsonExporterModel.ShowXLSXExportTypeDropdown then Bulma.dropdown.isActive
- prop.children [
- Bulma.dropdownTrigger [
- Bulma.button.a [
- prop.onClick (fun e -> e.stopPropagation(); UpdateShowXLSXExportTypeDropdown (not model.JsonExporterModel.ShowXLSXExportTypeDropdown) |> JsonExporterMsg |> dispatch )
- prop.children [
- span [Style [MarginRight "5px"]] [str (model.JsonExporterModel.XLSXParsingExportType.ToString())]
- Html.i [prop.className "fa-solid fa-angle-down"]
- ]
- ]
- ]
- Bulma.dropdownMenu [
- Bulma.dropdownContent [
- let msg = (UpdateXLSXParsingExportType >> JsonExporterMsg >> dispatch)
- dropdownItem JsonExportType.Assay model msg (model.JsonExporterModel.XLSXParsingExportType = JsonExportType.Assay)
- dropdownItem JsonExportType.ProcessSeq model msg (model.JsonExporterModel.XLSXParsingExportType = JsonExportType.ProcessSeq)
- dropdownItem JsonExportType.ProtocolTemplate model msg (model.JsonExporterModel.XLSXParsingExportType = JsonExportType.ProtocolTemplate)
- ]
- ]
- ]
- ]
+ if isa.IsNone then
+ Bulma.help [
+ Bulma.color.isDanger
+ prop.text "Unable to convert Template to ISA-JSON"
]
- Bulma.control.div [
- Bulma.control.isExpanded
- Bulma.button.a [
- let hasContent = model.JsonExporterModel.XLSXByteArray <> Array.empty
- Bulma.color.isInfo
- if hasContent then
- Bulma.button.isActive
- else
- Bulma.color.isDanger
- prop.disabled true
- Bulma.button.isFullWidth
- prop.onClick(fun _ ->
- if hasContent then
- ParseXLSXToJsonRequest model.JsonExporterModel.XLSXByteArray |> JsonExporterMsg |> dispatch
- )
- prop.text "Download as isa json"
- ]
- |> prop.children
- ]
- ]
]
- ]
-
-let jsonExporterMainElement (model:Messages.Model) (dispatch: Messages.Msg -> unit) =
-
- Bulma.content [
-
- prop.onSubmit (fun e -> e.preventDefault())
- prop.onKeyDown (fun k -> if (int k.which) = 13 then k.preventDefault())
- prop.onClick (fun e -> CloseAllDropdowns |> JsonExporterMsg |> dispatch)
- prop.style [style.minHeight(length.vh 100)]
- prop.children [
- Bulma.label "Json Exporter"
-
- Bulma.help [
- str "Export swate annotation tables to "
- a [Href @"https://en.wikipedia.org/wiki/JSON"] [str "JSON"]
- str " format. Official ISA-JSON types can be found "
- a [Href @"https://isa-specs.readthedocs.io/en/latest/isajson.html#"] [str "here"]
- str "."
+ static member Main(model:Messages.Model, dispatch: Messages.Msg -> unit) =
+ Html.div [
+ pageHeader "File Export"
+
+ Bulma.label "Export to Json"
+ mainFunctionContainer [
+ Bulma.field.div [Bulma.help [
+ str "Export Swate annotation tables to official ISA-JSON ("
+ a [Href @"https://isa-specs.readthedocs.io/en/latest/isajson.html#"] [str "more"]
+ str ")."
+ ]]
+ FileExporter.JsonExport(model, dispatch)
]
+ ]
- Bulma.label "Export active table"
-
- parseTableToISAJsonEle model dispatch
-
- Bulma.label "Export workbook"
-
- parseTablesToISAJsonEle model dispatch
-
- Bulma.label "Export Swate conform xlsx file."
- xlsxUploadAndParsingMainElement model dispatch
- ]
- ]
\ No newline at end of file
diff --git a/src/Client/Routing.fs b/src/Client/Routing.fs
index 6985fae3..b02f29e9 100644
--- a/src/Client/Routing.fs
+++ b/src/Client/Routing.fs
@@ -71,7 +71,7 @@ type Route =
| Route.TemplateMetadata ->
createElem [ Html.i [prop.className "fa-solid fa-circle-plus" ];Html.i [prop.className "fa-solid fa-table" ]] p.toStringRdbl
| Route.FilePicker ->
- createElem [ Html.i [prop.className "fa-solid fa-upload" ]] p.toStringRdbl
+ createElem [ Html.i [prop.className "fa-solid fa-file-signature" ]] p.toStringRdbl
| Route.ActivityLog ->
createElem [ Html.i [prop.className "fa-solid fa-timeline" ]] p.toStringRdbl
| Route.Info ->
diff --git a/src/Client/SidebarComponents/Navbar.fs b/src/Client/SidebarComponents/Navbar.fs
index 9ae30c8b..d5bb9bf8 100644
--- a/src/Client/SidebarComponents/Navbar.fs
+++ b/src/Client/SidebarComponents/Navbar.fs
@@ -214,6 +214,13 @@ let NavbarComponent (model : Model) (dispatch : Msg -> unit) (sidebarsize: Model
Html.i [prop.className "fa-brands fa-twitter"; prop.style [style.color "#1DA1F2"; style.marginLeft 2]]
]
]
+ Bulma.navbarItem.a [
+ prop.onClick (fun e ->
+ setState {state with BurgerActive = not state.BurgerActive}
+ UpdatePageState (Some Routing.Route.Info) |> dispatch
+ )
+ prop.text Routing.Route.Info.toStringRdbl
+ ]
Bulma.navbarItem.a [
prop.href Shared.URLs.SwateWiki ;
prop.target "_Blank";
diff --git a/src/Client/Views/SidebarView.fs b/src/Client/Views/SidebarView.fs
index 4b06e1ae..fa796640 100644
--- a/src/Client/Views/SidebarView.fs
+++ b/src/Client/Views/SidebarView.fs
@@ -62,9 +62,8 @@ let private tabs (model:Model) dispatch (sidebarsize: Model.WindowSize) =
//if not isIEBrowser then
// docsrc attribute not supported in iframe in IE
//createNavigationTab Routing.Route.Dag model dispatch sidebarsize
- createNavigationTab Routing.Route.Info model dispatch sidebarsize
- else
createNavigationTab Routing.Route.JsonExport model dispatch sidebarsize
+ else
createNavigationTab Routing.Route.TemplateMetadata model dispatch sidebarsize
//createNavigationTab Routing.Route.Validation model dispatch sidebarsize
createNavigationTab Routing.Route.Info model dispatch sidebarsize
@@ -163,7 +162,7 @@ module private Content =
Protocol.Core.fileUploadViewComponent model dispatch
| Routing.Route.JsonExport ->
- JsonExporter.Core.jsonExporterMainElement model dispatch
+ JsonExporter.Core.FileExporter.Main(model, dispatch)
| Routing.Route.TemplateMetadata ->
TemplateMetadata.Core.newNameMainElement model dispatch