Fixed the refresh bug

This commit is contained in:
Hein 2025-10-30 14:53:42 +02:00
parent 0ba8dca0b4
commit abcf08f98e
4 changed files with 18 additions and 16 deletions

View File

@ -135,7 +135,7 @@ export interface GridlerState {
_gridSelectionRows?: GridSelection['rows']; _gridSelectionRows?: GridSelection['rows'];
_loadingList: CompactSelection; _loadingList: CompactSelection;
_page_data: Record<number, Array<any>>; _page_data: Record<number, Array<any>>;
_refresh: () => void; _refresh: () => Promise<void>;
_scrollTimeout?: any | number; _scrollTimeout?: any | number;
_visibleArea: Rectangle; _visibleArea: Rectangle;
_visiblePages: Rectangle; _visiblePages: Rectangle;
@ -219,12 +219,11 @@ const { Provider, useStore: useGridlerStore } = createSyncStore<GridlerStoreStat
_events: new EventTarget(), _events: new EventTarget(),
_loadingList: CompactSelection.empty(), _loadingList: CompactSelection.empty(),
_page_data: {}, _page_data: {},
_refresh: () => { _refresh: async () => {
const s = get(); const s = get();
s.loadPage(0, 'all').then(() => { await s.loadPage(0, 'all');
s.refreshCells(); await s.refreshCells();
s.reload?.(); await s.reload?.();
});
}, },
_visibleArea: { height: 10000, width: 1000, x: 0, y: 0 }, _visibleArea: { height: 10000, width: 1000, x: 0, y: 0 },
_visiblePages: { height: 0, width: 0, x: 0, y: 0 }, _visiblePages: { height: 0, width: 0, x: 0, y: 0 },
@ -717,9 +716,11 @@ const { Provider, useStore: useGridlerStore } = createSyncStore<GridlerStoreStat
isDivider: true, isDivider: true,
}, },
{ {
id: 'refesh',
label: `Refresh`, label: `Refresh`,
onClickAsync: async () => { onClick: () => {
await s._refresh?.(); const s = get();
s._refresh?.();
}, },
}, },
]; ];

View File

@ -19,13 +19,12 @@ export interface GlidlerAPIAdaptorForGoLangv2Props<T = unknown> extends APIOptio
} }
function _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForGoLangv2Props<T>) { function _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForGoLangv2Props<T>) {
const [setStateFN, setState, getState, addError, mounted, loadPage] = useGridlerStore((s) => [ const [setStateFN, setState, getState, addError, mounted] = useGridlerStore((s) => [
s.setStateFN, s.setStateFN,
s.setState, s.setState,
s.getState, s.getState,
s.addError, s.addError,
s.mounted, s.mounted,
s.loadPage,
]); ]);
const useAPIQuery: (index: number) => Promise<any> = useCallback( const useAPIQuery: (index: number) => Promise<any> = useCallback(
@ -266,8 +265,10 @@ function _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForG
setState('useAPIQuery', useAPIQuery); setState('useAPIQuery', useAPIQuery);
setState('askAPIRowNumber', askAPIRowNumber); setState('askAPIRowNumber', askAPIRowNumber);
const _refresh = getState('_refresh');
//Reset the loaded pages to new rules //Reset the loaded pages to new rules
loadPage(0, 'all').then(() => { _refresh?.().then(() => {
const onChange = getState('onChange'); const onChange = getState('onChange');
const getGridSelectedRows = getState('getGridSelectedRows'); const getGridSelectedRows = getState('getGridSelectedRows');
if (onChange && typeof onChange === 'function') { if (onChange && typeof onChange === 'function') {

View File

@ -24,11 +24,10 @@ export function GlidlerFormAdaptor(props: {
) => void; ) => void;
showDescriptionInMenu?: boolean; showDescriptionInMenu?: boolean;
}) { }) {
const [getState, mounted, setState, reload, _events] = useGridlerStore((s) => [ const [getState, mounted, setState, _events] = useGridlerStore((s) => [
s.getState, s.getState,
s.mounted, s.mounted,
s.setState, s.setState,
s.reload,
s._events, s._events,
]); ]);
@ -164,8 +163,9 @@ export function GlidlerFormAdaptor(props: {
c: 'orange', c: 'orange',
label: 'Refresh', label: 'Refresh',
leftSection: <IconRefresh color="orange" size={16} />, leftSection: <IconRefresh color="orange" size={16} />,
onClick: () => { onClickAsync: async () => {
reload?.(); const _refresh = getState('_refresh');
await _refresh?.();
}, },
}); });

View File

@ -80,7 +80,7 @@ const MenuItemRenderer = ({ children, label, ...props }: MantineBetterMenuInstan
props.onClick?.(e); props.onClick?.(e);
if (props.onClickAsync) { if (props.onClickAsync) {
setLoading(true); setLoading(true);
props.onClickAsync().finally(() => setLoading(false)); props.onClickAsync(e).finally(() => setLoading(false));
} }
}} }}
styles={{ styles={{