diff --git a/src/logger/index.ts b/src/logger/index.ts index 03bf776..999d035 100644 --- a/src/logger/index.ts +++ b/src/logger/index.ts @@ -48,12 +48,14 @@ RegisterCommand( true ); -onNet(`oxmysql:fetchResource`, (resource: string) => { - if (typeof resource !== 'string') return; +onNet(`oxmysql:fetchResource`, (data: {resource: string, pageIndex: number}) => { + if (typeof data.resource !== 'string') return; - const queries = logStorage[resource]; + const queries = logStorage[data.resource].slice(data.pageIndex * 12, data.pageIndex + 12) + + const pageCount = Math.ceil(logStorage[data.resource].length / 12) if (!queries) return; - emitNet(`oxmysql:loadResource`, source, queries); + emitNet(`oxmysql:loadResource`, source, {queries, pageCount}); }); diff --git a/ui.lua b/ui.lua index 9763d9a..6746059 100644 --- a/ui.lua +++ b/ui.lua @@ -1,12 +1,8 @@ RegisterNetEvent('oxmysql:openUi', function(data) SendNUIMessage({ - action = 'init', + action = 'openUI', data = data }) - SendNUIMessage({ - action = 'setVisible', - data = true - }) SetNuiFocus(true, true) end) @@ -15,8 +11,8 @@ RegisterNUICallback('exit', function(_, cb) SetNuiFocus(false, false) end) -RegisterNUICallback('fetchResource', function(resource, cb) - TriggerServerEvent('oxmysql:fetchResource', resource) +RegisterNUICallback('fetchResource', function(data, cb) + TriggerServerEvent('oxmysql:fetchResource', data) cb(true) end) diff --git a/ui/src/components/App.tsx b/ui/src/components/App.tsx index 19ea523..2b49da5 100644 --- a/ui/src/components/App.tsx +++ b/ui/src/components/App.tsx @@ -23,27 +23,24 @@ const App: React.FC = () => { return (
- {visible && ( - - - - - - - } /> - - - - )} + + + + + + + } /> + + +
); }; diff --git a/ui/src/components/NavBars/LeftBar.tsx b/ui/src/components/NavBars/LeftBar.tsx index 79f0f29..cd831c9 100644 --- a/ui/src/components/NavBars/LeftBar.tsx +++ b/ui/src/components/NavBars/LeftBar.tsx @@ -19,7 +19,7 @@ const LeftBar: React.FC = () => { const [initData, setInitData] = useState({ resources: [''], totalQueries: 0, totalTime: 0 }); - useNuiEvent('init', (data) => { + useNuiEvent('openUI', (data) => { setInitData(data); }); diff --git a/ui/src/components/NavBars/RightBar.tsx b/ui/src/components/NavBars/RightBar.tsx index 77d1194..f1414c8 100644 --- a/ui/src/components/NavBars/RightBar.tsx +++ b/ui/src/components/NavBars/RightBar.tsx @@ -8,7 +8,9 @@ const RightBar: React.FC = () => { // Debug data defined in LeftBar.tsx - useNuiEvent('init', (data) => setInitData(data)); + useNuiEvent('openUI', (data) => { + setInitData(data); + }); return ( diff --git a/ui/src/components/Resource.tsx b/ui/src/components/Resource.tsx index 3a23877..4c8f8b4 100644 --- a/ui/src/components/Resource.tsx +++ b/ui/src/components/Resource.tsx @@ -25,6 +25,11 @@ interface TableData { executionTime: number; } +interface NuiData { + queries: QueryData[]; + pageCount: number; +} + const Resource: React.FC = () => { let { resource } = useParams(); const [resourceData, setResourceData] = useState([ @@ -34,24 +39,11 @@ const Resource: React.FC = () => { executionTime: 0, }, ]); + const [totalPages, setTotalPages] = useState(1); - useEffect(() => { - fetchNui('fetchResource', resource); - debugData([ - { - action: 'loadResource', - data: [ - { query: 'SELECT * FROM `users`', executionTime: 5 }, - { query: 'SELECT * FROM `owned_vehicles`', executionTime: 2 }, - { query: 'SELECT * FROM `properties`', executionTime: 7 }, - { query: 'SELECT * FROM `phone_messages`', executionTime: 13 }, - ], - }, - ]); - }, [resource]); - - useNuiEvent('loadResource', (data) => { - setResourceData(data); + useNuiEvent('loadResource', (data) => { + setResourceData(data.queries); + setTotalPages(data.pageCount); }); const data = useMemo(() => resourceData, [resourceData]); @@ -84,9 +76,30 @@ const Resource: React.FC = () => { previousPage, state: { pageIndex }, prepareRow, - } = useTable({ columns, data, initialState: { pageSize: 12 } }, useSortBy, usePagination); + } = useTable( + { columns, data, initialState: { pageSize: 12 }, manualPagination: true, pageCount: totalPages }, + useSortBy, + usePagination + ); + + useEffect(() => { + fetchNui('fetchResource', { resource, pageIndex }); + debugData([ + { + action: 'loadResource', + data: { + pageCount: 1, + queries: [ + { query: 'SELECT * FROM `users`', executionTime: 5 }, + { query: 'SELECT * FROM `owned_vehicles`', executionTime: 2 }, + { query: 'SELECT * FROM `properties`', executionTime: 7 }, + { query: 'SELECT * FROM `phone_messages`', executionTime: 13 }, + ], + }, + }, + ]); + }, [resource, pageIndex]); - // Todo: pagination return ( <> diff --git a/ui/src/index.tsx b/ui/src/index.tsx index 053e1ac..c49521d 100644 --- a/ui/src/index.tsx +++ b/ui/src/index.tsx @@ -1,10 +1,10 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import { BrowserRouter } from "react-router-dom"; +import { BrowserRouter } from 'react-router-dom'; import './index.css'; import App from './components/App'; -import { VisibilityProvider } from "./providers/VisibilityProvider"; -import { ChakraProvider } from '@chakra-ui/react' +import { VisibilityProvider } from './providers/VisibilityProvider'; +import { ChakraProvider } from '@chakra-ui/react'; ReactDOM.render( diff --git a/ui/src/providers/VisibilityProvider.tsx b/ui/src/providers/VisibilityProvider.tsx index 53d23e7..b8de6c0 100644 --- a/ui/src/providers/VisibilityProvider.tsx +++ b/ui/src/providers/VisibilityProvider.tsx @@ -14,7 +14,7 @@ interface VisibilityProviderValue { export const VisibilityProvider: React.FC = ({ children }) => { const [visible, setVisible] = useState(false); - useNuiEvent('setVisible', setVisible); + useNuiEvent('openUI', setVisible); // Handle pressing escape/backspace useEffect(() => {