svet-pos-project-client / src / pages / settings / Business / ListBusinesses.tsx
ListBusinesses.tsx
Raw
import React, { useEffect, useState } from "react";
import { Link } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux";
import { fetchBusinesses } from "../../../store/business-action";
import SearchBar from "material-ui-search-bar";
import { Box, Button, Container, Grid } from "@material-ui/core";
import {
  DataGrid,
  GridColDef,
  GridValueGetterParams,
  GridApi,
  GridCellValue,
} from "@material-ui/data-grid";
import DeleteIcon from "@material-ui/icons/Delete";

interface Business {
  businessName: string;
  type: string;
}
function ListBusinesses() {
  const businesses = useSelector((state: any) => state.business.businesses);
  const dispatch = useDispatch();
  useEffect(() => {
    console.log("lB");
    dispatch(fetchBusinesses());
  }, [dispatch]);

  const columns: GridColDef[] = [
    { field: "id", headerName: "ID", width: 70 },
    { field: "businessName", headerName: "Business Name", width: 170 },
    { field: "type", headerName: "Business type", width: 170 },
    {
      field: "button",
      headerName: "Button",
      sortable: false,
      width: 100,
      disableClickEventBubbling: true,
      renderCell: (params) => {
        const onClick = async () => {
          const api: GridApi = params.api;
          const fields = api
            .getAllColumns()
            .map((c) => c.field)
            .filter((c) => c !== "__check__" && !!c);
          const thisRow: Record<string, GridCellValue> = {};

          fields.forEach((f) => {
            thisRow[f] = params.getValue(f);
          });
        };
        return (
          <Button
            onClick={onClick}
            color="secondary"
            startIcon={<DeleteIcon />}
          >
            Delete
          </Button>
        );
      },
    },
  ];

  const [searched, setSearched] = useState<string>("");
  const [items, setItems] = useState<Business[]>([]);

  const requestSearch = (searchedVal: string) => {
    const filteredRows = data.outlets.filter((row: any) => {
      return row.businessName.toLowerCase().includes(searchedVal.toLowerCase());
    });
    console.log({ filteredRows });
    setItems(filteredRows);
  };
  const data = {
    outlets: [],
  };

  const cancelSearch = () => {
    setSearched("");
    requestSearch(searched);
  };

  useEffect(() => {
    setItems(businesses);
  }, [businesses]);
  return (
    <div>
      My Business
      <Box margin={1}>
        <Button variant="contained" color="primary">
          {" "}
          <Link
            style={{ color: "white", textDecoration: "none" }}
            to="/settings/business/new"
          >
            Open New Business
          </Link>
        </Button>
      </Box>
      <SearchBar
        value={searched}
        onChange={(searchVal) => requestSearch(searchVal)}
        onCancelSearch={() => cancelSearch()}
      />
      <div style={{ height: '400px', width: "100%" }}>
        <DataGrid
          rows={businesses}
          columns={columns}
          pageSize={4}
          checkboxSelection
        />
      </div>
    </div>
  );
}

export default ListBusinesses;