Код: Выделить всё
import dot from 'dot-object';
import isEmpty from 'lodash/isEmpty';
import isEqual from 'lodash/isEqual';
import isNil from 'lodash/isNil';
import qs from 'qs';
import { useFormContext } from 'react-hook-form';
import { useLocation } from 'react-router';
import { useEffect, useMemo, useState } from 'react';
export const useSyncUrlParamsToForm = (hideForm) => {
const { setValue, getValues } = useFormContext();
const { search } = useLocation();
const [executeInitialSearch, setExecuteInitialSearch] = useState(false);
const queryParams = useMemo(
() => qs.parse(search, { ignoreQueryPrefix: true }),
[search]
);
useEffect(() => {
if (!hideForm) {
if (isEmpty(queryParams)) {
return;
}
}
dot.keepArray = true;
const executeSearch = hideForm ?? false;
const currentValues = dot.dot(getValues());
for (const [key] of Object.entries(currentValues)) {
if (queryParams[key] && !isEqual(queryParams[key], currentValues[key])) {
setValue(key, queryParams[key]);
} else if (key === 'sortModel' && queryParams.sort) {
// executeSearch = true;
let field = queryParams.sort;
const sort = field.startsWith('-') ? 'desc' : 'asc';
if (field.startsWith('-')) {
field = field.substring(1);
}
const sortModel = [{ field, sort }];
if (!isEqual(sortModel, currentValues[key])) {
setValue(key, sortModel);
}
} else if (
key === 'paginationModel' &&
(queryParams.limit || queryParams.skip)
) {
// executeSearch = true;
const limit = isNil(queryParams.limit)
? 100
: parseInt(queryParams.limit, 10);
const skip = isNil(queryParams.skip)
? 0
: parseInt(queryParams.skip, 10);
const pagination = {
pageSize: limit,
page: skip / limit
};
if (!isEqual(pagination, currentValues[key])) {
setValue(key, pagination);
}
}
}
if (executeSearch) {
setExecuteInitialSearch(true);
}
}, [getValues, hideForm, queryParams, setValue]);
return [executeInitialSearch, setExecuteInitialSearch];
};
< /code>
Я не уверен, что будет причинять это в React 19, и не уверен, как идти вперед. Я пробовал такие вещи, как FlushSync Подробнее здесь: https://stackoverflow.com/questions/794 ... n-react-19