ToolJet/frontend/src/TooljetDatabase/index.jsx
Arpit 0cb8507640
improvements to pagination (#5053)
improvements to pagination in tooljet database
2022-12-29 13:48:32 +05:30

110 lines
2.9 KiB
JavaScript

import React, { createContext, useState, useMemo } from 'react';
import Layout from '@/_ui/Layout';
import TooljetDatabasePage from './TooljetDatabasePage';
import { usePostgrestQueryBuilder } from './usePostgrestQueryBuilder';
export const TooljetDatabaseContext = createContext({
organizationId: null,
setOrganizationId: () => {},
selectedTable: '',
setSelectedTable: () => {},
searchParam: '',
setSearchParam: () => {},
selectedTableData: [],
setSelectedTableData: () => {},
tables: [],
setTables: () => {},
columns: [],
setColumns: () => {},
totalRecords: 0,
setTotalRecords: () => {},
handleBuildFilterQuery: () => {},
handleBuildSortQuery: () => {},
buildPaginationQuery: () => {},
resetSortQuery: () => {},
resetFilterQuery: () => {},
queryFilters: {},
setQueryFilters: () => {},
sortFilters: {},
setSortFilters: () => {},
});
export const TooljetDatabase = (props) => {
const { organization_id } = JSON.parse(localStorage.getItem('currentUser')) || {};
const [organizationId, setOrganizationId] = useState(organization_id);
const [columns, setColumns] = useState([]);
const [tables, setTables] = useState([]);
const [searchParam, setSearchParam] = useState('');
const [selectedTable, setSelectedTable] = useState('');
const [selectedTableData, setSelectedTableData] = useState([]);
const [totalRecords, setTotalRecords] = useState(0);
const [queryFilters, setQueryFilters] = useState({});
const [sortFilters, setSortFilters] = useState({});
const {
handleBuildFilterQuery,
handleBuildSortQuery,
buildPaginationQuery,
resetSortQuery,
resetFilterQuery,
resetAll,
} = usePostgrestQueryBuilder({
organizationId,
selectedTable,
setSelectedTableData,
setTotalRecords,
});
const value = useMemo(
() => ({
searchParam,
setSearchParam,
organizationId,
setOrganizationId,
tables,
setTables,
columns,
setColumns,
selectedTable,
setSelectedTable,
selectedTableData,
setSelectedTableData,
totalRecords,
setTotalRecords,
handleBuildFilterQuery,
handleBuildSortQuery,
buildPaginationQuery,
resetSortQuery,
resetFilterQuery,
queryFilters,
setQueryFilters,
sortFilters,
setSortFilters,
resetAll,
}),
// eslint-disable-next-line react-hooks/exhaustive-deps
[
searchParam,
organizationId,
tables,
columns,
selectedTable,
selectedTableData,
totalRecords,
queryFilters,
sortFilters,
]
);
return (
<Layout switchDarkMode={props.switchDarkMode} darkMode={props.darkMode}>
<div className="page-wrapper tooljet-database">
<TooljetDatabaseContext.Provider value={value}>
<TooljetDatabasePage />
</TooljetDatabaseContext.Provider>
</div>
</Layout>
);
};