56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import React, { type PropsWithChildren, type Ref, useImperativeHandle } from 'react';
|
|
|
|
import { type GridlerRef, useGridlerStore } from './GridlerStore';
|
|
|
|
function _GridlerRefHandler(props: PropsWithChildren, ref: Ref<GridlerRef> | undefined) {
|
|
const [setStateFN, getstate] = useGridlerStore((s) => [s.setStateFN, s.getState]);
|
|
|
|
useImperativeHandle<GridlerRef, GridlerRef>(ref, () => {
|
|
return {
|
|
getGlideRef: () => {
|
|
return getstate('_glideref');
|
|
},
|
|
getState: getstate,
|
|
isEmpty: () => getstate('isEmpty'),
|
|
refresh: async (parms?: any) => {
|
|
const refreshCells = getstate('refreshCells');
|
|
const loadPage = getstate('loadPage');
|
|
loadPage?.(parms?.pageIndex ?? 0, 'all').then(() => {
|
|
refreshCells?.();
|
|
});
|
|
},
|
|
reload: async (parms?: any) => {
|
|
const refreshCells = getstate('refreshCells');
|
|
const loadPage = getstate('loadPage');
|
|
loadPage?.(parms?.pageIndex ?? 0, 'all').then(() => {
|
|
refreshCells?.();
|
|
});
|
|
},
|
|
reloadRow: async (key: number | string) => {
|
|
const refreshCells = getstate('refreshCells');
|
|
//const loadPage = getstate('loadPage');
|
|
const getRowIndexByKey = getstate('getRowIndexByKey');
|
|
const rn = await getRowIndexByKey?.(String(key));
|
|
if (rn && rn >= 0) {
|
|
refreshCells?.(rn, rn + 1);
|
|
//todo loadpage or row from server
|
|
}
|
|
},
|
|
scrollToRow: async (key: number | string) => {
|
|
if (key && Number(key) >= 0) {
|
|
setStateFN('scrollToRowKey', (cv) => Number(key ?? cv));
|
|
}
|
|
},
|
|
selectRow: async (key: number | string) => {
|
|
if (key && Number(key) >= 0) {
|
|
setStateFN('selectedRowKey', (cv) => Number(key ?? cv));
|
|
}
|
|
},
|
|
setStateFN: setStateFN,
|
|
};
|
|
}, []);
|
|
return <>{props.children}</>;
|
|
}
|
|
|
|
export const GridlerRefHandler = React.forwardRef(_GridlerRefHandler);
|