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