#7136 - Enable paginate event in VnSelectFilter #255
Open
jsegarra
wants to merge 86 commits from
7136_vnselectFilter_paginate
into dev
pull from: 7136_vnselectFilter_paginate
merge into: verdnatura:dev
verdnatura:dev
verdnatura:hotfix_itemFixedPrice
verdnatura:hotfix_8217_updateCustomerCredit
verdnatura:8113-preventDuplicateRecords
verdnatura:8207-hotfix-tableActions
verdnatura:fix_moreOptions
verdnatura:test
verdnatura:6943_customer_improvements
verdnatura:master
verdnatura:hotFix_orderCatalogFilter_refactor_fix
verdnatura:7229-fixUrl
verdnatura:7917-freelancerRoute
verdnatura:7529-workerPIT
verdnatura:8001-expeditionGrafana
verdnatura:8217_updateCustomerCredit
verdnatura:7134-supplierBalance
verdnatura:7301-itemLastEntries
verdnatura:warmfix_itemLastEntriesFilter
verdnatura:fix_js_e2e
verdnatura:performance_mixins
verdnatura:hotFix_customer_balance_email
verdnatura:8077-sumDefaulterFront
verdnatura:8194-VnSelectWorker
verdnatura:hotfix-itemLastEntries
verdnatura:8138-add-component-ticketProblems
verdnatura:Fix-AddSearchbarToWagonModule
verdnatura:6919-syncData
verdnatura:6389-changesMonitor
verdnatura:7304-warningCustomerBasicData
verdnatura:7301-itemHistory
verdnatura:hotFix_customerSumamry_balanceDue
verdnatura:8185-DuplicateLeftMenu
verdnatura:8061_newCP
verdnatura:hotfix_OrderNew_redirectTo_catalog
verdnatura:hotfix_newCustomer_SalesPerson
verdnatura:hotfix_customer_salesPerson_Filter
verdnatura:hotfix_termograph_filter
verdnatura:7940-quasarBus_try
verdnatura:xxxx-addSupportService
verdnatura:8114-removeAutoAddress
verdnatura:7132-FixTranslations
verdnatura:fixEntrySummary
verdnatura:4774-traducciones
verdnatura:7119-vehicle_module
verdnatura:improve_vnSelectOption
verdnatura:vnselectoption
verdnatura:hotfix-termo
verdnatura:7790_formFocus_mixin
verdnatura:7950-cmr
verdnatura:6583-addDestinationFilter
verdnatura:7220_cypressUnitTest
verdnatura:6839-newUIMenu
verdnatura:6818-saySimple
verdnatura:6726-LogSection
verdnatura:improve_isRequired_input
verdnatura:7925-removeRedirect
verdnatura:6994-vnLog_descriptors
verdnatura:8101-loadMoreData
verdnatura:7940-removeEvent
verdnatura:6897-entryBuyListRefactor
verdnatura:8110_itemDiary_scroll
verdnatura:8087-nuevoCampoTravel
verdnatura:6695-docker_push
verdnatura:warmfix_createNewPostcodeForm
verdnatura:6242-AddHasRoundingField
verdnatura:8010-fix_performance
verdnatura:7925_fix_cast_param_id
verdnatura:7679_improve_newPostcode_form
verdnatura:7731-clientViesCode
verdnatura:7793_sortByWeight
verdnatura:7202-AddCustomAgentFkColumn
verdnatura:8004-liliumStyleRemake
verdnatura:6452-dropWorkerPbx
verdnatura:7404_vnTable_style
verdnatura:7404-fixSomeStyleIssues
verdnatura:hotfix_vnImg_zoom_resolution
verdnatura:Hotfix-ZoneOrderFilters
verdnatura:fix_height_zoneLocationTree
verdnatura:FixSales
verdnatura:8062-testToMaster
verdnatura:8031_notify_dataSaved
verdnatura:masterToTest_conflicts
verdnatura:fix_8018
verdnatura:8018_location_label
verdnatura:fix_vnTable_onDataSaved
verdnatura:7679_improve_filters
verdnatura:warmfix-addSearchUrl
verdnatura:8048-subtitleToTownProvinceCity
verdnatura:6943-warmfix-preventNull
verdnatura:7553_FixTicketExpedition
verdnatura:vnInput_autoFocus
verdnatura:6321_negative_tickets
verdnatura:7671_dense_itemFixedPrices
verdnatura:7632-useStateQuery
verdnatura:7822-checkUrl
verdnatura:fix-ScopeDays2
verdnatura:fix_VnTable_infiniteScroll
verdnatura:highlight_today_qDate
verdnatura:add_shortcut_add_subSections
verdnatura:fix_supplierFD_location
verdnatura:7677_vnLocation_perf
verdnatura:7017_formModel_validations
verdnatura:6553-workerBusiness
verdnatura:5938_filterGrouped
verdnatura:7409-workerBalance_fixes
verdnatura:6156-advanceTicketsNewField
verdnatura:5926_pda_worker_docuware
verdnatura:5938_fine_ticketAdvance
verdnatura:6897-modifyEntryBuys
verdnatura:plus_key_shortcut
verdnatura:6900_simplify_invoiceInCorrective
verdnatura:7897_masterTest_24_36
verdnatura:7889_main_shortcuts
verdnatura:6772_reload_sections
verdnatura:7896_down_devToTest_2436
verdnatura:7896_devToTest_2436
verdnatura:7287-reasonLog
verdnatura:test_dev_resolveConflicts
verdnatura:7884_daysBackward
verdnatura:hotfix_account_descriptor
verdnatura:7323_workerPhoto
verdnatura:6896_order_fix
verdnatura:6336_claim_fix_states
verdnatura:7864_testToMaster_2434
verdnatura:7717_fixOrderCatalog
verdnatura:7830-customerDesplegables
verdnatura:hotfix-6449-summaryId
verdnatura:hotfix_myEntries
verdnatura:7648_myEntries
verdnatura:7323_WorkerMigration_End
verdnatura:6822-createEntryTransferOption
verdnatura:7648_myEntries_filter
verdnatura:warmfix_ticketList
verdnatura:6896_Order_End
verdnatura:6899_InvoiceOut_End
verdnatura:6825_vnTable_searchBtn_sticky
verdnatura:7380_substitutionCondition
verdnatura:7030-FixTranslations
verdnatura:6899-EndInvoiceOutMigration
verdnatura:7407-workerMedical
verdnatura:7648_customerEntries
verdnatura:7649-fixStyles
verdnatura:5447-travelExtraCommunity
verdnatura:6464-fixNegativeBases
verdnatura:6739-invoiceOut
verdnatura:6977-ClonedURL
verdnatura:7566-FixCustomerSummary
verdnatura:7604_refreshImgSumamry
verdnatura:fix-customerExtendedListFilter
verdnatura:7502-liliumIcons
verdnatura:7516_improve_navigate_redirect
verdnatura:7187-fixTranslates
verdnatura:6972_defaultGlobalValues
verdnatura:7311_boilerplate_users
verdnatura:6427_sms_resetPassword
verdnatura:6332-calendarColors
verdnatura:6767-deleteDivCol
verdnatura:ES_smsTranslations
verdnatura:7261_boilerplate_monitors
verdnatura:7239_FR_smsTranslations
verdnatura:7187-addPdaFreelancer
verdnatura:6425-translationProposal
verdnatura:6641
verdnatura:6394_filterPanel_bugs
verdnatura:6918_routerfilter_improve
verdnatura:6416-refactor-InvoiceIn
verdnatura:4466-InvoiceInCorrective
verdnatura:5888_fix_placeholder
verdnatura:6386_imageWithNoFormat
verdnatura:hotfix-amountClaimLines
verdnatura:6654_sticky_custom_toolbar
verdnatura:fix-claims
verdnatura:removeId
verdnatura:6172_transfer_ticket_message_error
verdnatura:5739-local-docker
verdnatura:6611_popup-proxy_descriptor
verdnatura:5895-vuepress
verdnatura:5895-jsdoc
verdnatura:6325-refundComercial
verdnatura:6157-createClaimAction
verdnatura:5989-redirectButton
No reviewers
Labels
Milestone
Clear milestone
No items
No Milestone
Assignees
Clear assignees
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: verdnatura/salix-front#255
Reference in New Issue
No description provided.
Delete Branch "7136_vnselectFilter_paginate"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
#7136 - Enable paginate event in VnSelectFilterto WIP: #7136 - Enable paginate event in VnSelectFilterWIP: #7136 - Enable paginate event in VnSelectFilterto #7136 - Enable paginate event in VnSelectFilterEstá mal enfocado.
Si equivale a , este si no se limita no se debería limitar por defecto.
Si se usa FetchData estas queriendo cargarte todos los datos normalmente.
En el caso de querer paginar en VnSelectFilter se debería paginar solo cuando te pasen la prop de url igual que funciona en salix(angularjs) ver ejemplo del propio InvoiceInFilter que has modificado
modules/invoiceIn/front/search-panel/index.html L25
.Un caso perfecto para probar la funcionalidad (en Vue) sería en InvoiceInBasicData el VnSelectFilter de Suppliers.
(
vn-crud-model
si tiene la posibilidad de paginar pero es cuando se le define unvn-id="model"
que luego lo usara el componentevn-data-viewer
algo equivalente a nuestroVnPaginate
pero no viene al caso)Aparte he probado el filtro de http://localhost:9000/#/invoice-in/list y va un poco raro. Si que pagina pero si lo haces rapido ya no, tienes que subir hacia arriba y luego volver a bajar y ahi si pagina
También había intentado buscarte más ejemplos de urls pero no me ha funcionado el regex en vscode
VnSelectFilter[\s\S]*url
@alexm
Te he dejado un commit para usar el paginate dentro de InvoiceInBasicData, para cuando se usa url dentro de VnSelectFilter.
Ya me dices.
PD: he intentado duplicar registros pero hay muchas restricciones en BD
Las regexp son complicadas pero saldrá jejejej
No acaba de ir fino, cuando llegas al final. Sigues haciendo scroll y no carga nada mas. Y si haces scroll hacia arriba. Y vuelves a llegar al "final" ahí si que te carga más registros
@ -50,3 +87,4 @@
if ($props.limit) filter.limit = $props.limit;
if ($props.skip) filter.skip = $props.skip;
const { data } = await axios.get($props.url, {
Igual deberiamos sustiur el fetch por el fetch de arrayData y tambien al paginar usar el propio de arrayData
Asi duplicamos funcionalidad
Revisado y refactorizado:
38e3e1c004
@ -33,8 +37,27 @@ const $props = defineProps({
},
});
const arrayData = useArrayData($props.url ?? $props.dataKey, {
No estoy segur de si deberiamos poner la funcionalidad de usar arrayData//paginar en FechData si luego quien lo usa es VnSelectFilter, en vez de ponerla directamente en VnSelectFilter. @juan
@ -112,6 +112,8 @@ export function useArrayData(key, userOptions) {
return response;
}
function isHasMoreData() {}
Creo que se te ha olvidado quitarla
@ -51,3 +43,4 @@
<QItemSection>
<VnSelect
:label="t('Client')"
:options="clients"
ya no hace falta el options, de hecho si arriba hay refs para los options tampoco hacen falta
Gacias por el detalle, he visto que salespersons y authos también habia que quitar
@ -50,3 +36,4 @@
dense
outlined
rounded
url="Suppliers"
Nada mas entrar en http://localhost:9000/#/invoice-in/1/summary?limit=10 me falla y creo que esta peticion
He modificado el valor default de la prop where
@ -65,11 +66,12 @@ const requiredFieldRule = (val) => val ?? t('globals.fieldRequired');
const { optionLabel, optionValue, optionFilter, options, modelValue } = toRefs($props);
const myOptions = ref([]);
const myOptionsFiltered = ref([]);
Por como estaba creo recordar que
myOptions
era la variable para las opciones filtradas ymyOptionsOriginal
para las originales.myOptionsFiltered
para que seria? Puede sermyOptions
?Me he dado cuenta que la necesidad de esa variable no cubre otro caso de uso asi que la elimino
@ -88,0 +103,4 @@
setOptions(data);
return;
}
if ($props.options) setOptions($props.options);
De primeras diria que esta linea no hace falta, dado que la primera ja lo hace
Pero quiero evitar que haga fetch
Un caso de uso sería: se lo declaro en el componente o una variable
@ -88,0 +104,4 @@
return;
}
if ($props.options) setOptions($props.options);
else fetchFilter($props.modelValue);
Esta parte solo debe hacerla si hay url. Y por como esta ahora ya habria hecho la peticion al entrar en
if (useURL.value)
Lo cambio para dejarlo asi
if (!$props.options) fetchFilter($props.modelValue);
@ -119,0 +148,4 @@
}
async function fetchFilter(val) {
const { fields, sortBy, limit } = $props;
const where = buildwhere(val);
Si de por si solo entra en fetchFilter si hay url, no hace falta separar la construccion del where en una funcion apart, que solo se usa en un sitio
Vale, lo debí separar para otra situación que acabé borrando y esto se quedó así
Lo limipio
@ -150,3 +200,4 @@
<template>
<FetchData
v-if="useURL"
Usando arrayData + lo que hablamos ayer creo que ya no hace falta el FetchData
#7136 - Enable paginate event in VnSelectFilterto WIP: #7136 - Enable paginate event in VnSelectFilterSe ha implementado el uso de ArrayData
WIP: #7136 - Enable paginate event in VnSelectFilterto #7136 - Enable paginate event in VnSelectFilter@ -5,2 +5,3 @@
import FetchData from 'src/components/FetchData.vue';
const emit = defineEmits(['update:modelValue', 'update:options']);
import { useArrayData } from 'src/composables/useArrayData';
import { useFetchData } from 'src/composables/useFetchData';
Quitar
@ -84,2 +84,3 @@
if (append) myOptionsOriginal.value = JSON.parse(JSON.stringify(data));
}
onMounted(() => {
const useURL = computed(() => $props.url?.length > 0);
Esto no sería lo mismo que hacerle un computed a $props.url ¿?
const useURL = computed(() => $props.url);
@ -86,0 +95,4 @@
limit: $props.limit,
sortBy: $props.sortBy,
fields: $props.fields,
} ?? {};
Si lo estas definiendo no puede ser null no?
@ -88,0 +103,4 @@
if (useURL.value) {
arrayData.store.userFilter = $props.where;
arrayData.store.filter.where = $props.where;
const { data } = await arrayData.fetch({ append: true });
updateRouter: false
sino podrá cosas en la url@ -117,3 +145,3 @@
const where = { ...{ [key]: { like: `%${val}%` } }, ...$props.where };
return dataRef.value.fetch({ fields, where, order: sortBy, limit });
return arrayData.value.fetch({ fields, where, order: sortBy, limit });
Por como esta useArrayData, fetch no acepta los datos por paramtros. Solo
{ append = false, updateRouter = true }
@ -0,0 +1,30 @@
// import { ref } from 'vue';
Este archivo no se usar, quitarlo
He resuelto un caso de uso que evitaba paginar después de haber escrito un valor
@ -89,0 +91,4 @@
const useURL = computed(() => $props.url);
const $attrs = useAttrs();
const arrayDataKey = $props.dataKey ?? ($props.url !== '' ? $props.url : $attrs.label);
'' es false
$props.url ? $props.url : $attrs.label
Otra cosa, me ha costado bastante de leer pq hay variables por el medio, watchers , el onMounted a mitad y tal.
Me lo he ordenado como (que es mas o menos como se recomienda, https://vuejs.org/style-guide/rules-recommended) :
-Variables
-Variables computed
-onMounted
-Watchers
-Funciones
Y me ha resultado mas fácil de leer
@ -122,4 +164,1 @@
if (new RegExp(/\d/g).test(val)) key = optionValue.value;
const defaultWhere = $props.useLike
El useLike no me lo quites pls
hecho
@ -93,2 +114,3 @@
if ($props.focusOnMount) setTimeout(() => vnSelectRef.value.showPopup(), 300);
setOptions(options.value);
if ($props.url && $props.modelValue) fetchFilter($props.modelValue);
if (!$props.options) fetchFilter($props.modelValue);
Que esten estas dos funciones a la vez lo veo raro (fetchFilter, initSelect)
Pq si no hay options y hay URL hara la peticion 2 veces. Yo diria que la funcion de initSelect no hace falta.
De hecho yo creo que solo deberia haber un fetch y cuando se quiera hacer un fetch se llame ahi (fetchFilter)
Creía que habían mas ocurrencias de initselect, lo he eliminado
@ -133,1 +170,3 @@
let isFiltered = false;
watch(filterValue, (newVal, oldVal) => {
// if (vnSelectRef.value.modelValue) {
Quitar
@ -0,0 +9,4 @@
if (props.limit) filter.limit = props.limit;
return JSON.stringify(filter);
};
const fetch = async (filter) =>
get no?
Lo he eliminado de la PR, y un ejemplo de su implementacion tambien.
Asi se queda lo mas limpio posible.
cuando surja la tarea si hace falta hacemos cherry-pick
@ -127,3 +96,3 @@
</VnRow>
<VnRow class="row q-gutter-md q-mb-md">
<QSelect
<VnSelect
He probado este y se vuelve loco el descriptor
Me tendrás que mostrar, please
En general diría de revisar el código de VnSelect, pq creo que se han ido añadiendo funciones y se puede simplificar
Ver #551
New commits pushed, approval review dismissed automatically according to repository settings
Revisar skip, deberia ser multiplo del limit
Tambien quitar codigo comentado