EcoChargeFinder / src / vuejs / mapWithSearchPresenter.jsx
mapWithSearchPresenter.jsx
Raw
import SearchView from "../views/searchView.jsx";
import SearchResultView from "../views/searchResultsView.jsx";
import Map from "../components/map.vue";
import TopbarView from "./topBarPresenter.jsx";
import EventBus from "../Eventbus.js";
export default function Summary(props) {
  function logicfunction(state) {
    if (!state.promise) {
      return null; // Render nothing if no promise is present
    } else if (!state.data && !state.error) {
      return <img src="https://brfenergi.se/iprog/loading.gif" alt="Loading" />; // Render loading GIF
    } else if (state.error) {
      return <p>Error: {state.error}</p>; // Render the error message
    } else if (state.data) {
      function clickhandler(results) {
        // Serialize and save to localStorage
        localStorage.setItem("savedData", JSON.stringify(results));
        EventBus.emit("resultClicked", results);
      }
      return (
        <SearchResultView searchResults={state.data} clickACB={clickhandler} />
      ); // Render search results
    } else {
      return "No data"; // Fallback if none of the conditions match
    }
  }

  function searchTextACB(evt) {
    //console.log(evt);
    props.model.setSearch(evt);
  }

  function searchACB(evt) {
    props.model.doSearch(props.model.searchParams);
  }

  function moredetails() {
    props.model.doDetails();
    console.log(props.model.locationDetailsPromiseState.state);
  }

  return (
    <div>
      <TopbarView model={props.model} />
      <div class="w-full md:w-auto absolute md:top-[120px] md:left-[120px] z-[2] flex gap-4 px-6 py-8 md:px-0 md:py-0 bg-transparent sm:top-[120px]">
        <SearchView
          //searchResults={searchACB}
          onTextChange={searchTextACB}
          onButtonClick={searchACB}
          //onSelectChange={SearchTextACB}
        />
        {logicfunction(props.model.searchResultsPromiseState)}
      </div>
      <Map handleMoreDetailsACB={moredetails} />
    </div>
  );
}