Skip to content

Commit

Permalink
feat(nui): WIP manual pagination
Browse files Browse the repository at this point in the history
  • Loading branch information
LukeWasTakenn committed Jan 4, 2022
1 parent 3a1462e commit 7560099
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 57 deletions.
10 changes: 6 additions & 4 deletions src/logger/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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});
});
10 changes: 3 additions & 7 deletions ui.lua
Original file line number Diff line number Diff line change
@@ -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)

Expand All @@ -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)

Expand Down
39 changes: 18 additions & 21 deletions ui/src/components/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,24 @@ const App: React.FC = () => {

return (
<Center w="100%" h="100%">
{visible && (
<MotionBox
animate={{ y: [100, 0] }}
width="60%"
height="50%"
backgroundColor="#191E26"
borderRadius="1vh"
color="white"
fontFamily="Poppins"
userSelect="none"
>
<TopBar />
<LeftBar />
<RightBar />
<MainContent>
<Routes>
<Route path="/:resource" element={<Resource />} />
</Routes>
</MainContent>
</MotionBox>
)}
<Box
width="60%"
height="50%"
backgroundColor="#191E26"
borderRadius="1vh"
color="white"
fontFamily="Poppins"
userSelect="none"
>
<TopBar />
<LeftBar />
<RightBar />
<MainContent>
<Routes>
<Route path="/:resource" element={<Resource />} />
</Routes>
</MainContent>
</Box>
</Center>
);
};
Expand Down
2 changes: 1 addition & 1 deletion ui/src/components/NavBars/LeftBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const LeftBar: React.FC = () => {

const [initData, setInitData] = useState<InitData>({ resources: [''], totalQueries: 0, totalTime: 0 });

useNuiEvent<InitData>('init', (data) => {
useNuiEvent<InitData>('openUI', (data) => {
setInitData(data);
});

Expand Down
4 changes: 3 additions & 1 deletion ui/src/components/NavBars/RightBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ const RightBar: React.FC = () => {

// Debug data defined in LeftBar.tsx

useNuiEvent<InitData>('init', (data) => setInitData(data));
useNuiEvent<InitData>('openUI', (data) => {
setInitData(data);
});

return (
<Box float="right" w="20%" h="max" p="1.2vh">
Expand Down
51 changes: 32 additions & 19 deletions ui/src/components/Resource.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<QueryData[]>([
Expand All @@ -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<QueryData[]>('loadResource', (data) => {
setResourceData(data);
useNuiEvent<NuiData>('loadResource', (data) => {
setResourceData(data.queries);
setTotalPages(data.pageCount);
});

const data = useMemo<TableData[]>(() => resourceData, [resourceData]);
Expand Down Expand Up @@ -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 (
<>
<Table {...getTableProps} size="sm">
Expand Down
6 changes: 3 additions & 3 deletions ui/src/index.tsx
Original file line number Diff line number Diff line change
@@ -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(
<React.StrictMode>
Expand Down
2 changes: 1 addition & 1 deletion ui/src/providers/VisibilityProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ interface VisibilityProviderValue {
export const VisibilityProvider: React.FC = ({ children }) => {
const [visible, setVisible] = useState(false);

useNuiEvent<boolean>('setVisible', setVisible);
useNuiEvent<boolean>('openUI', setVisible);

// Handle pressing escape/backspace
useEffect(() => {
Expand Down

0 comments on commit 7560099

Please sign in to comment.