@webitel/ui-datalist Table Store β
ΠΠ±'ΡΠ΄Π½Π°Π½ΠΈΠΉ all-in-one ΡΡΠΎΡ Π΄Π»Ρ ΡΠ°Π±Π»ΠΈΡΠΊΠΈ.
Π ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ ΡΡΠ²ΠΎΡΡΡ Ρ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡ ΠΎΠΊΡΠ΅ΠΌΡ ΡΡΠΎΡΠΈ:
headers (shown headers, sort, fields)
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΠΎΠ± Π·Π°Ρ ΠΎΠ²Π°ΡΠΈ Π²ΡΡ ΡΠΊΠ»Π°Π΄Π½ΠΎΡΡ ΠΏΡΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½Ρ Ρ Π½ΡΠ°Π½ΡΠΈ, Π° Π½Π° ΡΡΠ²Π½Ρ ΠΊΠ»ΡΡΠ½ΡΠ° (ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ) Π²ΡΠ΅ Π±ΡΠ»ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΈΠΌ Ρ Π»Π°ΠΊΠΎΠ½ΡΡΠ½ΠΈΠΌ: ΠΡΠ΄ΠΊΠ»ΡΡΠΈΠ»ΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Ρ ΠΏΠΎΠ³Π½Π°Π»ΠΈ.
TLDR; Usage β
Source code link: cases.ts
Π‘ΡΠ²ΠΎΡΠΈΡΠΈ β
// crm/.../stores/cases.ts
import { createTableStore } from '@webitel/ui-datalist';
// other imports: { CasesAPI, CasesNamespace, headers }
export const useCasesStore = createTableStore(CasesNamespace, {
apiModule: CasesAPI,
headers,
});ΠΠΈΠΊΠΎΡΠΈΡΡΠ°ΡΠΈ β
Source code link: the-cases.vue
// crm/.../components/the-cases.vue
<template />
<script setup>
// ...
import { useCasesStore } from '../stores/cases';
// ...
const tableStore = useCasesStore();
const {
dataList,
selected,
error,
isLoading,
page,
size,
next,
headers,
shownHeaders,
filtersManager,
} = storeToRefs(tableStore);
const {
initialize,
loadDataList,
updateSelected,
updatePage,
updateSize,
updateSort,
deleteEls,
updateShownHeaders,
} = tableStore;
</script>Features and configuration params β
Config: isAppendDataList β
Π’Π°Π±Π»ΠΈΡΠΊΠ° ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈΠΌΠ΅ Π² ΡΠ΅ΠΆΠΈΠΌΡ Π΄ΠΎΠ²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ Π΄Π°Π½ΠΈΡ
Π΄ΠΎ dataList.
aka features:
- infinite scroll
- "load more"
Config: storeType β
Pinia/Composable.
ΠΠ»Ρ "ΡΠΈΠΏΠΎΠ²ΠΈΡ " ΡΡΠΎΡΡΠ½ΠΎΠΊ-ΡΠ°Π±Π»ΠΈΡΠΎΠΊ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΠΌΠΎ
pinia(Π·Π° Π·Π°ΠΌΠΎΠ²ΡΡΠ²Π°Π½Π½ΡΠΌ).ΠΠ»Ρ ΠΏΡΠΎΡΡΡΡΠΎΠ³ΠΎ (ΠΏΠΎΠΏΠ°ΠΏΠΈ, ΡΠΊΠ°ΠΆΡΠΌΠΎ) - ΠΊΡΠ°ΡΠ΅
composable.
See Store Types.
Config: disablePersistence β
ΠΠΎΠ²Π½ΡΡΡΡ Π²ΠΈΠΌΠΊΠ½ΡΡΠΈ PersistenceStorage Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠΎΡΠ°. Π΄Π»Ρ ΡΡΠΎΡΠ° Ρ ΠΉΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π΄ΡΠ².
Π ΡΠΊΡΠΎ Π·Π½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π²ΠΈΠ±ΡΡΠΊΠΎΠ²Π΅ Π²ΠΈΠΌΠΊΠ½Π΅Π½Π½Ρ? β
Π’ΡΠ΅Π±Π° Π±ΡΠ΄Π΅ ΡΠΎΠ·ΡΠΈΡΠΈΡΠΈ ΡΠ΅ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΡΠΎΠ± Π²ΡΠ½ ΠΌΡΠ³ ΠΏΡΠΈΠΉΠΌΠ°ΡΠΈ Π½Π΅ ΡΡΠ»ΡΠΊΠΈ boolean, Π° ΠΉ { ${store}: boolean }.
ΠΠ±ΠΎ Π²Π·Π°Π³Π°Π»Ρ ΠΊΠΎΠ½ΡΡΠ³ΡΡΡΠ²Π°ΡΠΈ Π΄Π»Ρ ΠΎΠΊΡΠ΅ΠΌΠΈΡ ΡΡΠ»Π΄ΡΠ².
Nested list: ΡΠ°Π±Π»ΠΈΡΠΊΠ° Π² ΡΠ°Π±Ρ ΠΊΠ°ΡΡΠΎΡΠΊΠΈ β
Store Π²ΠΊΠ»Π°Π΄Π΅Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΡ β ΡΠΎΠΉ ΡΠ°ΠΌΠΈΠΉ, Π° ΠΎΡ ΠΏΡΠ΄ΠΊΠ»ΡΡΠ°ΡΠΈ ΠΉΠΎΠ³ΠΎ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΡΠ΅Π±Π° ΡΠ΅ΡΠ΅Π· useNestedTableList: ΠΊΠ°ΡΡΠΎΡΠΊΠ° ΠΌΡΡΠΈΡΡ Π²ΠΎΠ»ΠΎΠ΄ΡΡΠΈ ΡΠ²ΠΎΡΠΌΠΈ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ, ΡΠ½Π°ΠΊΡΠ΅ ΡΠ°Π± ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠ°ΡΡΠΎΡΠΊΠΈ, ΡΠΊΡ Π²ΡΠ΄ΠΊΡΠΈΠ²Π°Π»ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΡΡ.
const tableStore = useNestedTableList({
useTableStore: useQueueBucketsDatalistStore,
});ΠΠ΅ΡΠ°Π»Ρ, lifecycle Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° β Nested Table List.
$reset β
Π§ΠΈΡΡΠΈΡΡ ΡΠ΅, ΡΠΎ Π½Π°Π»Π΅ΠΆΠ°Π»ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π±Π°ΡΡΠΊΡΠ²ΡΡΠΊΠΎΠΌΡ Π·Π°ΠΏΠΈΡΡ: dataList, selected, error, isLoading, parentId, ΠΏΠ°Π³ΡΠ½Π°ΡΡΡ Ρ ΡΡΠ»ΡΡΡΠΈ.
ΠΠ΅ ΡΠΈΡΡΠΈΡΡ headers (Π²ΠΈΠ±ΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ°) Ρ isStoreSetUp (persistence Π²ΡΠ΄Π½ΠΎΠ²Π»ΡΡΡΡΡΡ ΡΠ°Π· Π½Π° ΠΆΠΈΡΡΡ Π°ΠΏΠΊΠΈ).
ΠΠΈΠΊΠ»ΠΈΠΊΠ°Ρ ΠΉΠΎΠ³ΠΎ card store, Ρ ΡΠΊΠΎΠΌΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΡΠ΅ΡΡΡΡΠΎΠ²Π°Π½ΠΈΠΉ β Π²ΡΡΡΠ½Ρ Π½Π΅ ΡΡΠ΅Π±Π°.
Design Considerations β
Π―ΠΊ watch'ΠΈΡΠΈ Π·ΠΌΡΠ½ΠΈ ΡΡΠ»ΡΡΡΡΠ²? β
ΠΠ°ΡΠ°Π·Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠΌΡΡΠΈΠ²Π½ΠΎ, Π·Π³ΡΠ΄Π½ΠΎ KISS: Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΠΈ Vue watch.
ΠΠ° ΡΠ°ΡΡΡ, pinia Π²ΠΌΡΡ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈ Π· watch'Π°ΠΌΠΈ, Π½Π° Π²ΡΠ΄ΠΌΡΠ½Ρ Π²ΡΠ΄ vuex. Π©ΠΎ Π΄ΡΠΆΠ΅ ΡΠΏΡΠΎΡΡΡ ΡΡ Π·Π°Π΄Π°ΡΡ.