npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-antd-itemslist

v1.0.7

Published

react ant table to load remote data, show default buttons, add, edit, delete with custom methods

Downloads

4

Readme

react-antd-itemslist

react and antd based component:

  • show a list of objects as a table
  • Add buttons to add, delete items
  • Reload and search table
  • Pagination
  • Add, Edit, Delete using standard methods (axios.get, axios.put, axios.post, axios.delete) on a base URL + item key
  • List items using standard method (axios.get) on a list URL
  • Custom methods support for each of the above actions
  • Editor hookups to add/edit item

Dependencies and Peer Dependencies

reactjs and antd are assumed to be used by the parent app with appropriate css (e.g antd/dist/antd.css) already loaded by your app

Install

npm install --save react-antd-itemslist

Import Component

import ItemsList from 'react-antd-itemslist';

Usage

import React from 'react'
import ItemsList from 'react-antd-itemslist'
import 'antd/dist/antd.css'

export default class App extends React.Component {
    columns = [
        {
            title: 'User Id',
            dataIndex: 'login'
        }
    ]
    render() {
        return <ItemsList
            itemsListUrl="https://api.github.com/users"
            columns={this.columns}
        />
    }
}

Look at Examples for more options

Here is a link to the codesandbox

Properties

| Name | Description | | - | - | | tableTitle | Title for the table. String or a ReactNode | | tableTitleIcon | Icon before the title. Default shows a list icon. false/null hides the icon. Icon must be a ReactNode. eg. <DashboardOutlined />. Instead of an Icon, you can provide any valid ReactNode | | tableTitleStyle | Custom CSS Style object to apply for the title | | tableActions | "default", false or a ReactNode. "default" shows Add, Delete, Reload buttons on the left and a search bar on the right (all these elements are customizable). false does not render the buttons and the search | | actionButtonsSpan | Number of antd columns to span for the left section (buttons), default 8. 0 hides the action buttons | | searchSpan | Number of antd columns to span for the left section (buttons), default 16. 0 hides the search bar | | addButtonTitle | string or ReactNode or false. Default is "Add". Empty string just shows the icon | | addButtonAction | Function to call on clicking the button. Default shows the editor used to add an item - editor component is supplied as a prop (explained later in this document) | | deleteButtonTitle | string or ReactNode or false. Default is "Delete". Empty string just shows the icon | | reloadButtonTitle | string or ReactNode or false. Default is "Reload". Empty string just shows the icon | | itemsListUrl | URL that returns a list of objects. You can skip this and provide a custom method (explained later) to get the list of items. The component calls axios.get(this.props.itemsListUrl). Check this section for the expected format of the output | | itemBaseUrl | Base URL used for edit (put), delete methods. The url is suffixed with the id of the item and does a axios.delete(this.props.itemBaseUrl + '/' + item[this.props.dataKey]). You can skip this and provide a custom methods to handle edits and delete | | itemsListMethod | Function to call to get the list of items. The function should return a promise and must resolve with 'data' attribute to get the response similar to axios.get | | itemGetMethod | Custom function called to get a single item (when the user views a specific record). The function is called with the table row object. Default axios.get(this.props.itemBaseUrl + '/' + item[this.props.dataKey]) or customFuction(record). The function must return a promise that resolves with 'data' attribute to get the resposne, similar to axios.get | | itemAddMethod | Custom function called to add a new record. An editor (explained below) can be provided for the user to enter the details of a new item to add. Once the user clicks to add, the itemAddMethod is called with the values in the editor form. Defaults to axios.post(this.props.itemsListUrl, formValues) or customFunction(formValues) | | itemDeleteMethod | Custom function called to delete a record. Defaults to axios.delete(this.props.itemBaseUrl + '/' + item(this.props.dataKey]) or customFunction(record) | | itemsDeleteMethod | Custom function called to delete multiple records. Defaults to deleting each record individually using the itemDeleteMethod or customFunction(listOfrecords) | | reformatListMethod | Function called after a call to itemsListMethod. You can customize the data and return the object or array of items as required by the component. The data returned must be an array or an object. Check itemsListMethod | | dataKey | The key or the unique id of each item in the array of data objects. Defaults to id | | columns | This is the antd columns object. Its a list of objects used to display the table. Check Columns for more details | | indexCol | Show serial number (index) for each row. true/false. Defaults to true (show the number for each row) | | indexColViewLink | Make the indexCol clickable so it shows the details, like viewItemLink above | | rowActions | An array of actions to show at each row. The valid values in the array are ['deleteItem', 'editItem'] | | pagination | true/false. Defaults to false. Show the pagination. It requires the list method to return the data as object with appropriate count, page and page_size attributes | | rowSelection | true/false. Defaults to true. Show a checkbox at each row so that multiple items can be deleted | | itemViewerView | "drawer" or "modal". Defaults to "drawer". Show the details of the item in this view | | itemViewerWidth | Width in percentage for the drawer or the modal. Defaults to "50%" | | itemViewer | Custom function that's called with the itemDetails record and must return a ReactNode to display. Default shows the table columns data in a columnar table | | itemViewerTitle | Function called to return a title (ReactNode) for the viewer. Defaults to "Details of $rowIndex - $record[this.props.dataKey] | | itemViewerEditLink | true/false. Show an "Edit" button in the viewer | | editorView | "drawer" or "modal". Defaults to "drawer". Show the details of the item in this view | | editorWidth | Width in percentage for the drawer or the modal. Defaults to "50%" | | editorAddModeTitle | Title to show in the editor view when adding a new item. Defaults to "Add" | | editorEditModeTitle | Title to show in the editor view when editing an existing item. Defaults to "Edit" | | editor | Editor component name. Check the requirements for the editor component | | editorAddModeOkButtonTitle | OK Button Title of the Editor in Add mode. Defaults to "Add" | | editorAddModeCancelButtonTitle | Cancel Title of the Editor in Add mode. Defaults to "Cancel" | | editorEditModeOkButtonTitle | OK Button Title of the Editor in Edit mode. Defaults to "Save" | | editorEditModeCancelButtonTitle | Cancel Title of the Editor in Edit mode. Defaults to "Cancel" | | editorProps | Object that's passed as props to the editor | | onSearchChange | Function to call when the user searches. Function is called with the search value entered. Defaults to changing the URL by adding an argument defined in searchUrlParameter. Default handler needs access to history attribute from the route (react-router-dom) | | searchUrlParameter | If onSearchChange is not defined, the default behaviour on search is to change the URL by adding an argument with name defined here. Defaults to "search". E.g https//www.myapp.com?search=search-value | | onPagerChange | Function to call when the user changes the page or the page size. function(page, pageSize). Defaults to changing the URL by adding arguments pageUrlParameter=page&pageSizeUrlParameter=pageSize. The URL parameters default to "page" and "page_size". Default handler needs access to history attribute from the route (react-router-dom) | | pageUrlParameter | For the default pagination handler that updates the URL, use this as the parameter name, defaults to "page" | | pageSizeUrlParameter | For the default pagination handler that updates the URL, use this as the parameter name, defaults to "page_size" | | reloadKey | Used by the component to check if it needs to do a call to get the list of items. By default it checks the URL and compares with the previous URL and it they are not same, reloads the list of items. This should be sufficient to handle reloads in case of changes. However if the component is embedded in other pages where the URL is not changed, then provide a value here that helps the component to trigger a reload |

Structure of List Items

If you use custom itemsListMethod with reformatListMethod or the default axios.get(this.props.itemsListUrl) the calls must return either a list of objects or an object with the following keys:

  • items - [array of data objects]
  • count - Total number of items available. If you are using pagination, this can be the total count of items in the database (e.g 100000). If this is not provided, defaults to the length of the array

Columns

The definition of columns is as follows:

[
    {
        title: 'Column 1',
        dataIndex: 'data attribute of the object in the list'
    },
    {
        title: 'Column 2',
        dataIndex: 'data attribute of the object in the list',
        render: (colData, record, colIndex) => {
            return customRenderer
        }
    }
]

On top of the antd column definition, you can add another attribute called viewItemLink: true on a column, and it makes this column clickable to view the details of the item

{
    title: 'ViewDetails Column',
    dataIndex: 'idField',
    viewItemLink: true
}

Editor

  • Editor must have a form with name as "editor-form"
  • Editor is passed editorMode="add" or editorMode="edit" to inform if its in add/edit mode
  • Editor is passed editorValues={valuesObject} with values of the current record (in edit mode) and must take decisions on whether to show a field or not in edit mode
  • Editor must call this.props.onSubmit(valuesObject) in onFinish handler.

Look at the example for a sample of the editor component