A lot of refectoring
This commit is contained in:
29
src/Gridler/components/adaptors/GlidlerLocalDataAdaptor.tsx
Normal file
29
src/Gridler/components/adaptors/GlidlerLocalDataAdaptor.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
import React, { useEffect } from 'react';
|
||||
|
||||
import { useGridlerStore } from '../GridlerStore';
|
||||
|
||||
export interface GlidlerLocalDataAdaptorProps {
|
||||
data: Array<unknown>;
|
||||
}
|
||||
|
||||
//The computer component does not need to be recalculated on every render, so we use React.memo to prevent unnecessary re-renders.
|
||||
export const GlidlerLocalDataAdaptor = React.memo((props: GlidlerLocalDataAdaptorProps) => {
|
||||
const [setState, getState, mounted] = useGridlerStore((s) => [s.setState, s.getState, s.mounted]);
|
||||
|
||||
const useAPIQuery: (index: number) => Promise<any> = async (index: number) => {
|
||||
const pageSize = getState('pageSize');
|
||||
|
||||
if (!(props.data && Array.isArray(props.data))) {
|
||||
return [];
|
||||
}
|
||||
|
||||
setState('total_rows', props.data.length);
|
||||
return props.data.slice(index * (pageSize ?? 50), (index + 1) * (pageSize ?? 50));
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
setState('useAPIQuery', useAPIQuery);
|
||||
}, [mounted, setState]);
|
||||
|
||||
return <></>;
|
||||
});
|
||||
Reference in New Issue
Block a user