import { useNotifications } from "@gnu-taler/web-util/browser";
import { Dialog, Transition } from "@headlessui/react";
import { UserIcon, XCircleIcon } from "@heroicons/react/20/solid";
import { CheckCircleIcon, XMarkIcon } from "@heroicons/react/24/outline";
import { InformationCircleIcon } from "@heroicons/react/24/solid";
import { ComponentChildren, Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import logo from "./assets/logo-2021.svg";
import { Pages } from "./pages.js";
import { Router, useCurrentLocation } from "./route.js";
function classNames(...classes: string[]) {
  return classes.filter(Boolean).join(" ");
}
/**
 * mapping route to view
 * not found (error page)
 * nested, index element, relative routes
 * link interception
 * form POST interception, call action
 * fromData => Object.fromEntries
 * segments in the URL
 * navigationState: idle, submitting, loading
 * form GET interception: does a navigateTo
 * form GET Sync:
 *   1.- back after submit: useEffect to sync URL to form
 *   2.- refresh after submit: input default value
 * useSubmit for form submission onChange, history replace
 *
 * post form without redirect
 *
 *
 * @param param0
 * @returns
 */
const GIT_HASH = typeof __GIT_HASH__ !== "undefined" ? __GIT_HASH__ : undefined;
const VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : undefined;
const versionText = VERSION
  ? GIT_HASH
    ? `v${VERSION} (${GIT_HASH.substring(0, 8)})`
    : VERSION
  : "";
/**
 * TO BE FIXED:
 *
 * 1.- when the form change to other form and both form share the same structure
 * the same input component may be rendered in the same place,
 * since input are uncontrolled the are not re-rendered and since they are
 * uncontrolled it will keep the value of the previous form.
 * One solutions could be to remove the form when unloading and when the new
 * form load it will start without previous vdom, preventing the cache
 * to create this behavior.
 * Other solutions could be using IDs in the fields that are constructed
 * with the ID of the form, so two fields of different form will need to re-render
 * cleaning up the state of the previous form.
 *
 * 2.- currently the design prop and the behavior prop of the flexible form
 * are two side of the same coin. From the design point of view, it is important
 * to design the form in a list-of-field manner and there may be additional
 * content that is not directly mapped to the form structure (object)
 * So maybe we want to change the current shape so the computation of the state
 * of the form is in a field level, but this computation required the field value and
 * the whole form values and state (since one field may be disabled/hidden) because
 * of the value of other field.
 *
 * 3.- given the previous requirement, maybe the name of the field of the form could be
 * a function (P: F -> V) where F is the form (or parent object) and V is the type of the
 * property. That will help with the typing of the forms props
 *
 * 4.- tooltip are not placed correctly: the arrow should point the question mark
 * and the text area should be bigger
 *
 * 5.- date field should have the calendar icon clickable so the user can select date without
 * writing text with the correct format
 */
function LeftMenu() {
  const currentLocation = useCurrentLocation(pageList);
  return (
    
  );
}
export function Dashboard({
  children,
}: {
  children?: ComponentChildren;
}): VNode {
  const [sidebarOpen, setSidebarOpen] = useState(false);
  return (
    
                Exchange AML Backoffice
              
            
{message.title}
{message.description && ({message.description}
)}{message.title}