0.1.3 • Published 4 years ago

laravel-react-datatable v0.1.3

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

Laravel-react-datatable

work in progress ...

Installation


npm i laravel-react-datatable

usage

import React from "react";
import "./App.css";
import LaraTable from "laravel-react-datatable";

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      headers: [
        { title: "#", accessor: "id", index: 1, dataType: "number" },
        {
          title: "First Name",
          accessor: "first_name",
          width: "200",
          index: 2,
          searchable: true,
          dataType: "string",
        },
        {
          title: "Last Name",
          searchable: true,
          accessor: (d) => d.last_name,
          width: "300",
          index: 3,
          dataType: "function",
        },
        {
          title: "username",
          // accessor: "username",
          accessor: (d) => (
            <span>
              name <i>{d.username}</i>
              <a href="#"> link</a>
            </span>
          ),
          width: "300",
          index: 5,
          searchable: true,
          dataType: "function",
        },
        {
          title: "rate",
          searchable: true,
          accessor: "doctor.average",

          width: "300",
          index: 6,
        },
        {
          title: "Rating",
          accessor: "doctor.avg_rate",
          searchable: false,
          index: 7,
          width: "200",
          cell: (row) => {
            return (
              <div className="rating">
                <div
                  style={{
                    backgroundColor: "lightskyblue",
                    textAlign: "center",
                    height: "1.9em",
                    width: (row.doctor.avg_rate / 5) * 201 + "px",
                    margin: "3px 0 4px 0",
                  }}
                >
                  <a href={`/showchart/${row.id}`}>{row.doctor.avg_rate}</a>
                </div>
              </div>
            );
          },
        },
      ],
      data: [],
      current_page: 1,
      last_page_url: null,
      next_page_url: null,
      per_page: 5,
      totalRecords: 5,
      from: null,
      to: null,
    };
  }

  search = async (pageNumber = 1) => {
    let baseApiURL = "http://localhost:8000/api";
    try {
      let searchURL = `${baseApiURL}/search?page=${pageNumber}`;
      const response = await fetch(searchURL, {
        method: "POST",
        headers: {
          Accept: "application/json",
          "Content-Type": "application/json",
          "Access-Control-Allow-Origin": "*",
          "X-Requested-With": "XMLHttpRequest",
        },
      });
      const data = await response.json();
      if (data.error === false) {
        return data.data;
      } else {
        return {};
      }
    } catch (err) {
      console.error("error", err);
    }
  };
  async componentDidMount() {
    let res = await this.search();
    this.setState({
      data: res.data,
      current_page: res.current_page,
      last_page_url: res.last_page_url,
      next_page_url: res.next_page_url,
      per_page: res.per_page,
      totalRecords: res.total,
      from: res.from,
      to: res.to,
    });
  }

  /***
   * Handle Page Change
   */
  handlePageChange = async (pageNumber) => {
    let res = await this.search(pageNumber);
    this.setState({
      data: res.data,
      current_page: pageNumber,
    });
  };
  render() {
    const pagination = {
      enabled: true,
      itemsCountPerPage: this.state.per_page,
      position: ["top left"],
    };
    return (
      <div>
        <LaraTable
          keyField="id"
          edit={true}
          pagination={pagination}
          width="100%"
          headers={this.state.headers}
          data={this.state.data}
          noData="No records!"
          currentPage={this.state.current_page}
          totalRecords={this.state.totalRecords}
          pageRangeDisplayed={5}
          onPageChange={this.handlePageChange}
          //searchable
        />
      </div>
    );
  }
}
export default App;

Pagination Params

NameTypeDefaultDescription
enabledBooleantrueEnable or Disable pagination
positionArray"bottom left", "top left"Postion of pagination
totalItemsCountNumberRequired. Total count of items which you are going to display
onChangeFunctionRequired. Page change handler. Receive pageNumber as arg
activePageNumber1Required. Active page
itemsCountPerPageNumber10Count of items per page
pageRangeDisplayedNumber5Range of pages in paginator, exclude navigation blocks (prev, next, first, last pages)
prevPageTextString / ReactElementText of prev page navigation button
firstPageTextString / ReactElement«Text of first page navigation button
lastPageTextString / ReactElement»Text of last page navigation button
nextPageTextString / ReactElementText of next page navigation button
getPageUrlFunctionGenerate href attribute for page
innerClassStringpaginationClass name of <ul> tag
activeClassStringactiveClass name of active <li> tag
activeLinkClassStringClass name of active <a> tag
itemClassStringDefault class of the <li> tag
itemClassFirstStringClass of the first <li> tag
itemClassPrevStringClass of the previous <li> tag
itemClassNextStringClass of the next <li> tag
itemClassLastStringClass of the last <li> tag
disabledClassStringdisabledClass name of the first, previous, next and last <li> tags when disabled
hideDisabledBooleanfalseHide navigation buttons (prev, next, first, last) if they are disabled.
hideNavigationBooleanfalseHide navigation buttons (prev page, next page)
hideFirstLastPagesBooleanfalseHide first/last navigation buttons
linkClassStringDefault class of the <a> tag
linkClassFirstStringClass of the first <a> tag
linkClassPrevStringClass of the previous <a> tag
linkClassNextStringClass of the next <a> tag
linkClassLastStringClass of the last <a> tag
0.1.3

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.0

4 years ago