From e442bb0687a213dc12c6916d660d3c2e8b381cab Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sat, 13 Jan 2024 21:57:08 -0300 Subject: [PATCH 1/3] fix api docs ui --- src/ApiDocs.res | 111 ++++++++++++++++++++++++++++++------------------ 1 file changed, 69 insertions(+), 42 deletions(-) diff --git a/src/ApiDocs.res b/src/ApiDocs.res index 600d62d5a..eb83ceeaf 100644 --- a/src/ApiDocs.res +++ b/src/ApiDocs.res @@ -41,9 +41,58 @@ type item = detail: Js.Null.t, }) +module RightSidebar = { + @react.component + let make = (~items: array) => { + switch items->Js.Array2.length === 0 { + | true => React.null + | false => + let valuesAndTypes = items->Js.Array2.map(item => { + switch item { + | Value({name, deprecated}) as kind | Type({name, deprecated}) as kind => + let (icon, textColor, bgColor, href) = switch kind { + | Type(_) => ("t", "text-fire-30", "bg-fire-5", `#type-${name}`) + | Value(_) => ("v", "text-sky-30", "bg-sky-5", `#value-${name}`) + } + let deprecatedIcon = switch deprecated->Js.Null.toOption { + | Some(_) => +
+ {"D"->React.string} +
->Some + | None => None + } + let title = `${Belt.Option.isSome(deprecatedIcon) ? "Deprecated " : ""}` ++ name + let result = +
  • + +
    + + {icon->React.string} + +
    + {React.string(name)} + {switch deprecatedIcon { + | Some(icon) => icon + | None => React.null + }} +
    +
  • + result + } + }) + valuesAndTypes->React.array + } + } +} + module SidebarTree = { @react.component - let make = (~isOpen: bool, ~toggle: unit => unit, ~node: node) => { + let make = (~isOpen: bool, ~toggle: unit => unit, ~node: node, ~items: array) => { let router = Next.Router.useRouter() let moduleRoute = @@ -54,6 +103,16 @@ module SidebarTree = { let summaryClassName = "truncate py-1 md:h-auto tracking-tight text-gray-60 font-medium text-14 rounded-sm hover:bg-gray-20 hover:-ml-2 hover:py-1 hover:pl-2 " let classNameActive = " bg-fire-5 text-red-500 -ml-2 pl-2 font-medium hover:bg-fire-70" + let subMenu = switch items->Js.Array2.length > 0 { + | true => +
    +
      + +
    +
    + | false => React.null + } + let rec renderNode = node => { let isCurrentRoute = Js.Array2.joinWith(moduleRoute, "/") === Js.Array2.joinWith(node.path, "/") @@ -63,6 +122,8 @@ module SidebarTree = { let hasChildren = node.children->Js.Array2.length > 0 let href = node.path->Js.Array2.joinWith("/") + let tocModule = isCurrentRoute ? subMenu : React.null + switch hasChildren { | true => let open_ = @@ -77,6 +138,7 @@ module SidebarTree = { {node.name->React.string} + tocModule {if hasChildren {
      {node.children @@ -92,6 +154,7 @@ module SidebarTree = { {node.name->React.string} + tocModule } } @@ -160,6 +223,7 @@ module SidebarTree = { href={node.path->Js.Array2.joinWith("/")}> {node.name->React.string} + {moduleRoute->Js.Array2.length === 1 ? subMenu : React.null}
      {"submodules"->React.string}
      {node.children @@ -277,54 +341,16 @@ let default = (props: props) => { let rightSidebar = switch props { | Ok({module_: {items}}) if Js.Array2.length(items) > 0 => - let valuesAndTypes = items->Belt.Array.keepMap(item => { - switch item { - | Value({name, deprecated}) as kind | Type({name, deprecated}) as kind => - let (icon, textColor, bgColor, href) = switch kind { - | Type(_) => ("t", "text-fire-30", "bg-fire-5", `#type-${name}`) - | Value(_) => ("v", "text-sky-30", "bg-sky-5", `#value-${name}`) - } - let deprecatedIcon = switch deprecated->Js.Null.toOption { - | Some(_) => -
      - {"D"->React.string} -
      ->Some - | None => None - } - let title = `${Belt.Option.isSome(deprecatedIcon) ? "Deprecated " : ""}` ++ name - let result = -
    • - -
      - - {icon->React.string} - -
      - {React.string(name)} - {switch deprecatedIcon { - | Some(icon) => icon - | None => React.null - }} -
      -
    • - Some(result) - } - }) + let rightSidebar =
      - | _ => React.null } @@ -334,7 +360,8 @@ let default = (props: props) => { } let sidebar = switch props { - | Ok({toctree}) => + | Ok({toctree, module_: {items}}) => + | Error(_) => React.null } From 14aef7987a22f5d5ce2c2d8618ba0f880bcce977 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Fri, 26 Jan 2024 01:03:40 -0300 Subject: [PATCH 2/3] inline component --- src/ApiDocs.res | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ApiDocs.res b/src/ApiDocs.res index eb83ceeaf..d830c685b 100644 --- a/src/ApiDocs.res +++ b/src/ApiDocs.res @@ -341,14 +341,15 @@ let default = (props: props) => { let rightSidebar = switch props { | Ok({module_: {items}}) if Js.Array2.length(items) > 0 => - let rightSidebar =
      | _ => React.null From 5062cd8e472a27804fd924f0215cab7ff42488f4 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Wed, 31 Jan 2024 18:02:49 -0300 Subject: [PATCH 3/3] remove redundant length check --- src/ApiDocs.res | 81 ++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 42 deletions(-) diff --git a/src/ApiDocs.res b/src/ApiDocs.res index d830c685b..ba683bcba 100644 --- a/src/ApiDocs.res +++ b/src/ApiDocs.res @@ -44,49 +44,46 @@ type item = module RightSidebar = { @react.component let make = (~items: array) => { - switch items->Js.Array2.length === 0 { - | true => React.null - | false => - let valuesAndTypes = items->Js.Array2.map(item => { - switch item { - | Value({name, deprecated}) as kind | Type({name, deprecated}) as kind => - let (icon, textColor, bgColor, href) = switch kind { - | Type(_) => ("t", "text-fire-30", "bg-fire-5", `#type-${name}`) - | Value(_) => ("v", "text-sky-30", "bg-sky-5", `#value-${name}`) - } - let deprecatedIcon = switch deprecated->Js.Null.toOption { - | Some(_) => -
      - {"D"->React.string} -
      ->Some - | None => None - } - let title = `${Belt.Option.isSome(deprecatedIcon) ? "Deprecated " : ""}` ++ name - let result = -
    • - -
      - - {icon->React.string} - -
      - {React.string(name)} - {switch deprecatedIcon { - | Some(icon) => icon - | None => React.null - }} -
      -
    • - result + items + ->Js.Array2.map(item => { + switch item { + | Value({name, deprecated}) as kind | Type({name, deprecated}) as kind => + let (icon, textColor, bgColor, href) = switch kind { + | Type(_) => ("t", "text-fire-30", "bg-fire-5", `#type-${name}`) + | Value(_) => ("v", "text-sky-30", "bg-sky-5", `#value-${name}`) } - }) - valuesAndTypes->React.array - } + let deprecatedIcon = switch deprecated->Js.Null.toOption { + | Some(_) => +
      + {"D"->React.string} +
      ->Some + | None => None + } + let title = `${Belt.Option.isSome(deprecatedIcon) ? "Deprecated " : ""}` ++ name + let result = +
    • + +
      + + {icon->React.string} + +
      + {React.string(name)} + {switch deprecatedIcon { + | Some(icon) => icon + | None => React.null + }} +
      +
    • + result + } + }) + ->React.array } }