diff --git a/frontend/src/Editor/Components/Table/Table.jsx b/frontend/src/Editor/Components/Table/Table.jsx index 864fb63d0a..ecc1c80b09 100644 --- a/frontend/src/Editor/Components/Table/Table.jsx +++ b/frontend/src/Editor/Components/Table/Table.jsx @@ -38,6 +38,9 @@ export function Table({ const serverSidePaginationProperty = component.definition.properties.serverSidePagination; const serverSidePagination = serverSidePaginationProperty ? serverSidePaginationProperty.value : false; + const serverSideSearchProperty = component.definition.properties.serverSideSearch; + const serverSideSearch = serverSideSearchProperty ? serverSideSearchProperty.value : false; + const [loadingState, setLoadingState] = useState(false); useEffect(() => { @@ -453,19 +456,29 @@ export function Table({ setGlobalFilter(filterValue || undefined); }, 200); + const handleSearchTextChange = (text) => { + + setValue(text); + onChange(text); + + onComponentOptionChanged(component, 'searchText', text).then(() => { + if(serverSideSearch === true ) { + onEvent('onSearch', { component, data: {} }); + } + }); + } + return (
Search:{' '} { - setValue(e.target.value); - onChange(e.target.value); + handleSearchTextChange(e.target.value) }} onKeyDown={(e) => { if(e.key === 'Enter') { - setValue(e.target.value); - onChange(e.target.value); + handleSearchTextChange(e.target.value) } } diff --git a/frontend/src/Editor/Components/components.js b/frontend/src/Editor/Components/components.js index 7f44359f43..e631630b10 100644 --- a/frontend/src/Editor/Components/components.js +++ b/frontend/src/Editor/Components/components.js @@ -10,6 +10,7 @@ export const componentTypes = [ loadingState: { type: 'code', displayName: 'Loading state' }, columns: { type: 'array', displayName: 'Table Columns' }, serverSidePagination: { type: 'toggle', displayName: 'Server-side pagination'}, + serverSideSearch: { type: 'toggle', displayName: 'Server-side search'}, actionButtonBackgroundColor: { type: 'color', displayName: 'Background color'}, actionButtonTextColor: { type: 'color', displayName: 'Text color'} }, @@ -20,7 +21,8 @@ export const componentTypes = [ events: { onRowClicked: { displayName: 'On row clicked'}, onBulkUpdate: { displayName: 'Bulk update query'}, - onPageChanged: { displayName: 'On page changed'} + onPageChanged: { displayName: 'On page changed'}, + onSearch: { displayName: 'On search'} }, styles: { textColor: { type: 'color', displayName: 'Text Color' } @@ -29,7 +31,8 @@ export const componentTypes = [ selectedRow: {}, changeSet: {}, dataUpdates: [], - pageIndex: 0 + pageIndex: 0, + searchText: '' }, definition: { properties: { @@ -61,7 +64,12 @@ export const componentTypes = [ options: { } + }, + onSearch: { + options: { + } + } }, styles: { textColor: { value: '' } diff --git a/frontend/src/Editor/Inspector/Components/Table.jsx b/frontend/src/Editor/Inspector/Components/Table.jsx index f9848efbe9..2c1daff05d 100644 --- a/frontend/src/Editor/Inspector/Components/Table.jsx +++ b/frontend/src/Editor/Inspector/Components/Table.jsx @@ -401,11 +401,13 @@ class Table extends React.Component {
{renderElement(component, componentMeta, paramUpdated, dataQueries, 'serverSidePagination', 'properties', currentState)} + {renderElement(component, componentMeta, paramUpdated, dataQueries, 'serverSideSearch', 'properties', currentState)}
Events
{renderEvent(component, eventUpdated, dataQueries, eventOptionUpdated, 'onRowClicked', componentMeta.events.onRowClicked, currentState, components)} {renderEvent(component, eventUpdated, dataQueries, eventOptionUpdated, 'onPageChanged', componentMeta.events.onPageChanged, currentState, components)} + {renderEvent(component, eventUpdated, dataQueries, eventOptionUpdated, 'onSearch', componentMeta.events.onSearch, currentState, components)} {renderQuerySelector(component, dataQueries, eventOptionUpdated, 'onBulkUpdate', componentMeta.events.onBulkUpdate)} diff --git a/frontend/src/_helpers/appUtils.js b/frontend/src/_helpers/appUtils.js index e8fc14315a..8428f53f09 100644 --- a/frontend/src/_helpers/appUtils.js +++ b/frontend/src/_helpers/appUtils.js @@ -174,9 +174,9 @@ export function onEvent(_ref, eventName, options) { } } - if (eventName === 'onPageChanged') { + if (['onPageChanged', 'onSearch'].includes(eventName)) { const { component } = options; - const event = component.definition.events.onPageChanged; + const event = component.definition.events[eventName]; if (event.actionId) { executeAction(_self, event);