#7300 create reset function #478
|
@ -112,9 +112,7 @@ async function search(evt) {
|
|||
isLoading.value = true;
|
||||
const filter = { ...userParams.value };
|
||||
store.userParamsChanged = true;
|
||||
store.filter.skip = 0;
|
||||
store.skip = 0;
|
||||
store.page = 1;
|
||||
arrayData.reset(['skip', 'filter.skip', 'page']);
|
||||
const { params: newParams } = await arrayData.addFilter({ params: userParams.value });
|
||||
userParams.value = newParams;
|
||||
|
||||
|
@ -138,9 +136,7 @@ async function reload() {
|
|||
async function clearFilters() {
|
||||
isLoading.value = true;
|
||||
store.userParamsChanged = true;
|
||||
store.filter.skip = 0;
|
||||
store.skip = 0;
|
||||
store.page = 1;
|
||||
arrayData.reset(['skip', 'filter.skip', 'page']);
|
||||
// Filtrar los params no removibles
|
||||
const removableFilters = Object.keys(userParams.value).filter((param) =>
|
||||
$props.unremovableParams.includes(param)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<script setup>
|
||||
import { onMounted, ref, watch } from 'vue';
|
||||
import { onBeforeUnmount, onMounted, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useArrayData } from 'composables/useArrayData';
|
||||
|
||||
|
@ -95,6 +95,8 @@ onMounted(async () => {
|
|||
mounted.value = true;
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => arrayData.reset());
|
||||
|
||||
|
||||
watch(
|
||||
() => props.data,
|
||||
() => {
|
||||
|
@ -118,8 +120,7 @@ const addFilter = async (filter, params) => {
|
|||
|
||||
async function fetch(params) {
|
||||
useArrayData(props.dataKey, params);
|
||||
store.filter.skip = 0;
|
||||
store.skip = 0;
|
||||
arrayData.reset(['filter.skip', 'skip']);
|
||||
await arrayData.fetch({ append: false });
|
||||
if (!store.hasMoreData) {
|
||||
isLoading.value = false;
|
||||
|
|
|
@ -103,8 +103,7 @@ async function search() {
|
|||
const staticParams = Object.entries(store.userParams).filter(
|
||||
([key, value]) => value && (props.staticParams || []).includes(key)
|
||||
);
|
||||
store.skip = 0;
|
||||
store.page = 1;
|
||||
arrayData.reset(['skip', 'page']);
|
||||
|
||||
if (props.makeFetch)
|
||||
await arrayData.applyFilter({
|
||||
|
|
|
@ -18,7 +18,8 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
|||
|
||||
onMounted(() => {
|
||||
setOptions();
|
||||
store.skip = 0;
|
||||
arrayDataStore.reset(['skip']);
|
||||
|
||||
const query = route.query;
|
||||
const searchUrl = store.searchUrl;
|
||||
if (query[searchUrl]) {
|
||||
|
@ -126,6 +127,10 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
|||
delete store[option];
|
||||
}
|
||||
|
||||
function reset(opts = []) {
|
||||
if (arrayDataStore.get(key)) arrayDataStore.reset(key, opts);
|
||||
}
|
||||
|
||||
function cancelRequest() {
|
||||
if (canceller) {
|
||||
canceller.abort();
|
||||
|
@ -149,9 +154,8 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
|||
userParams = sanitizerParams(userParams, store?.exprBuilder);
|
||||
|
||||
store.userParams = userParams;
|
||||
store.skip = 0;
|
||||
store.filter.skip = 0;
|
||||
store.page = 1;
|
||||
arrayDataStore.reset(['skip', 'filter.skip', 'page']);
|
||||
|
||||
await fetch({ append: false });
|
||||
return { filter, params };
|
||||
}
|
||||
|
@ -187,7 +191,6 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
|||
store.page += 1;
|
||||
|
||||
await fetch({ append: true });
|
||||
updateStateParams();
|
||||
jorgep
commented
Si hacemos un router.replace te redirige, por tanto al hacer scroll, te lleva al principio. Lo dejo en esta rama porque es un cambio pequeñito. Si hacemos un router.replace te redirige, por tanto al hacer scroll, te lleva al principio. Lo dejo en esta rama porque es un cambio pequeñito.
|
||||
}
|
||||
|
||||
async function refresh() {
|
||||
|
@ -241,5 +244,6 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
|||
updateStateParams,
|
||||
isLoading,
|
||||
deleteOption,
|
||||
reset,
|
||||
};
|
||||
}
|
||||
|
|
|
@ -3,37 +3,56 @@ import { defineStore } from 'pinia';
|
|||
|
||||
export const useArrayDataStore = defineStore('arrayDataStore', () => {
|
||||
const state = ref({});
|
||||
const defaultOpts = {
|
||||
filter: {},
|
||||
userFilter: {},
|
||||
userParams: {},
|
||||
url: '',
|
||||
limit: 10,
|
||||
skip: 0,
|
||||
order: '',
|
||||
isLoading: false,
|
||||
userParamsChanged: false,
|
||||
exprBuilder: null,
|
||||
searchUrl: 'params',
|
||||
navigate: null,
|
||||
page: 1,
|
||||
};
|
||||
|
||||
function get(key) {
|
||||
return state.value[key];
|
||||
}
|
||||
|
||||
function set(key) {
|
||||
state.value[key] = {
|
||||
filter: {},
|
||||
userFilter: {},
|
||||
userParams: {},
|
||||
url: '',
|
||||
limit: 10,
|
||||
skip: 0,
|
||||
order: '',
|
||||
data: ref(),
|
||||
isLoading: false,
|
||||
userParamsChanged: false,
|
||||
exprBuilder: null,
|
||||
searchUrl: 'params',
|
||||
navigate: null,
|
||||
page: 1,
|
||||
};
|
||||
state.value[key] = getDefaultState();
|
||||
}
|
||||
|
||||
function clear(key) {
|
||||
delete state.value[key];
|
||||
}
|
||||
|
||||
function reset(key, opts = []) {
|
||||
if (!opts.length) state.value[key] = getDefaultState();
|
||||
else
|
||||
opts.forEach((opt) => {
|
||||
if (opt.includes('.')) {
|
||||
const [parent, child] = opt.split('.');
|
||||
state.value[key][parent][child] = defaultOpts[child];
|
||||
} else if (Object.hasOwn(state.value[key], opt))
|
||||
state.value[key][opt] = defaultOpts[opt];
|
||||
});
|
||||
}
|
||||
|
||||
function getDefaultState() {
|
||||
return Object.assign(JSON.parse(JSON.stringify(defaultOpts)), {
|
||||
data: ref(),
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
get,
|
||||
set,
|
||||
clear,
|
||||
reset,
|
||||
};
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue
Cuando haces scroll en una sección List , sales, vuelves a entrar y haces scroll otra vez, se conserva el skip. Con esto se resetean los valores al salir.