From 3748469a987e4f9128b0b0505951f859ca495a89 Mon Sep 17 00:00:00 2001 From: ES Date: Tue, 26 Mar 2019 19:29:31 +0530 Subject: [PATCH 1/5] Minor fixes and demo update --- demo/src/schema/basic.js | 87 +++++++++++++++----------- demo/src/store.js | 3 +- src/Datatable/Renderer/Body/Actions.js | 53 ++++++---------- src/Datatable/Toolbar/MassActions.js | 35 +---------- 4 files changed, 71 insertions(+), 107 deletions(-) diff --git a/demo/src/schema/basic.js b/demo/src/schema/basic.js index 11d2ee8..3fec695 100644 --- a/demo/src/schema/basic.js +++ b/demo/src/schema/basic.js @@ -9,8 +9,8 @@ export default { type: 'limiter', visible: true, position: 10, - options: [10, 20, 50], - default: 10, + options: [10, 20, 50, 200, 2000], + default: 200, style: { right: false, } @@ -26,19 +26,18 @@ export default { visible: true, position: 30, style: { - width: '400px', + width: '350px', textAlign: 'center', } }] }, routes: { get: { - route: '/users', + route: '/page', sort: 'id', dir: 'asc', resultPath: { - data: 'data', - total: 'total' + data: 'data' } }, delete: { @@ -51,14 +50,15 @@ export default { id: 'dropdown', options: [{ type: 'action', - onClick: (params, action) => ( - confirm("Are your sure you want to delete these item(s)?") - ? dispatch(action('DELETE_DATA')(params)) - : false - ), name: 'delete', label: 'Delete', - indexField: '@id' + indexField: '@id', + thunk: ( payload ) => ( dispatch, getState ) => { + confirm("Are your sure you want to delete the selected items?") + ? console.log('delete items', getState()) + : console.log(false); + + } }, { type: 'action', name: 'edit', @@ -176,18 +176,18 @@ export default { label: '', sortable: false, type: 'selection', - indexField: '@id', + indexField: '@pageId', width: 50, - selection: true, + extraData: 'selection' }, { label: 'ID', type: 'number', - name: 'id', + name: 'pageId', sortable: true, width: 150, filterable: true, sortable: true, - }, { + }, /*{ label: 'Avatar', type: 'image', name: 'avatar', @@ -212,34 +212,45 @@ export default { textAlign: 'text-left', width: 200, filterable: true, + },*/{ + label: 'Created at', + type: 'date', + name: 'createdAt', + sortable: true, + textAlign: 'left', + width: 200, + filterable: true, }, { label: 'Actions', type: 'actions', name: 'actions', width: 100, - children: { - edit: { - type: 'action', - name: 'route', - action: 'EDIT_PAGE', - label: 'Edit', - btnClass: 'btn btn-secondary', - icon: 'edit', - params: { - id: '@id', - } + items: [{ + type: 'action', + name: 'edit', + label: 'Edit', + btnClass: 'btn btn-secondary', + icon: 'edit', + params: { + id: '@id', }, - delete: { - type: 'action', - name: 'delete', - label: 'Delete', - action: 'DATA_DELETE', - btnClass: 'btn btn-danger', - icon: 'trash-alt', - params: { - id: '@id' - } + thunk: ( payload ) => ( dispatch, getState ) => { + console.log('edit', payload, getState()); } - } + }, { + type: 'action', + name: 'delete', + label: 'Delete', + icon: 'trash-alt', + params: { + id: '@id' + }, + thunk: ( payload ) => ( dispatch, getState ) => { + confirm("Are your sure you want to delete this page?") + ? console.log('delete', getState()) + : console.log(false); + + } + }] }] } diff --git a/demo/src/store.js b/demo/src/store.js index 1af01ee..a1891b8 100644 --- a/demo/src/store.js +++ b/demo/src/store.js @@ -6,6 +6,7 @@ import { api, request } from './request-handlers'; import { createEpicMiddleware, combineEpics } from 'redux-observable'; import { combineReducers, createStore, applyMiddleware, compose } from 'redux'; import { createLogger } from 'redux-logger'; +import thunk from 'redux-thunk'; const requestHandlers = { api, request }; @@ -35,7 +36,7 @@ const prepareEpics = ( epics ) => { } const configureStore = ( config ) => { - let middlewares = []; + let middlewares = [thunk]; const logger = createLogger({ diff: true, duration: true, collapsed: true }); middlewares.push(logger); diff --git a/src/Datatable/Renderer/Body/Actions.js b/src/Datatable/Renderer/Body/Actions.js index 197e178..2b8873c 100644 --- a/src/Datatable/Renderer/Body/Actions.js +++ b/src/Datatable/Renderer/Body/Actions.js @@ -6,40 +6,23 @@ import { withTableConfig } from '../../../TableProvider'; import { paramsResolver, prepareActionPayload } from '../../../utils' import { Button } from 'styled-button-component'; -class Actions extends Component { - constructor( props ) { - super(props); - - this.handleAction = this.handleAction.bind(this); - } - - handleAction( action ) { - const { data, actions } = this.props; - const params = paramsResolver(action.params, data); - actions[action.name](params.get(), action.action); - } - - render() { - const { - colConfig: { items }, - extra, - thunk - } = this.props; - return ( -
- { items.map((item, index) => - - )} -
- ) - } -} +const Actions = ({ + extra, + thunk, + colConfig: { items } +}) => ( +
+ { items.map(({ thunk: cb, ...item }, index) => + + )} +
+); export default Actions; diff --git a/src/Datatable/Toolbar/MassActions.js b/src/Datatable/Toolbar/MassActions.js index 47bef43..9120d7d 100644 --- a/src/Datatable/Toolbar/MassActions.js +++ b/src/Datatable/Toolbar/MassActions.js @@ -56,42 +56,11 @@ class MassActions extends Component { } } - handleAction( action, event ) { - const { - data: { selection }, - massActions - } = this.props; - - let dataKey = getConfigParam(action.indexField); - let selectedItems = getSelectedKeys(selection, dataKey); - - if( !selectedItems || !selectedItems[dataKey] || selectedItems[dataKey].length == 0 ) { - alert("No item(s) selected"); - return false; - } - - switch( action.type ) { - // case 'route': - // context.router.history.push({ - // pathname: action.route, - // search: '?' + selectedItems.toString() - // }); - // break; - - case 'action': - massActions[action.name](selectedItems.get()); - break; - - default: - break; - } - } - render() { const { itemConfig, thunk } = this.props; const { label, options } = itemConfig; const { open } = this.state; - console.log('thunk', thunk); + return (