Skip to content

@webitel/ui-datalist Table Store ​

Об'Ρ”Π΄Π½Π°Π½ΠΈΠΉ all-in-one стор для Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΈ.

Π’ сСрСдині ΡΡ‚Π²ΠΎΡ€ΡŽΡ” Ρ– використовує ΠΎΠΊΡ€Π΅ΠΌΡ– стори:

  • filters

  • pagination

  • headers (shown headers, sort, fields)

    Для Ρ‚ΠΎΠ³ΠΎ, Ρ‰ΠΎΠ± Π·Π°Ρ…ΠΎΠ²Π°Ρ‚ΠΈ всі складнощі ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ Ρ– нюанси, Π° Π½Π° Ρ€Ρ–Π²Π½Ρ– ΠΊΠ»Ρ–Ρ”Π½Ρ‚Π° (Ρ†ΡŒΠΎΠ³ΠΎ модуля) всС Π±ΡƒΠ»ΠΎ максимально простим Ρ– Π»Π°ΠΊΠΎΠ½Ρ–Ρ‡Π½ΠΈΠΌ: ΠŸΡ–Π΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ– ΠΏΠΎΠ³Π½Π°Π»ΠΈ.

TLDR; Usage ​

Source code link: cases.ts

Π‘Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΠΈ ​

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

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 для Ρ†ΡŒΠΎΠ³ΠΎ стора. для стора Ρ– ΠΉΠΎΠ³ΠΎ Ρ‡Π°ΠΉΠ»Π΄Ρ–Π².

link

А якщо Π·Π½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π²ΠΈΠ±Ρ–Ρ€ΠΊΠΎΠ²Π΅ вимкнСння? ​

Π’Ρ€Π΅Π±Π° Π±ΡƒΠ΄Π΅ Ρ€ΠΎΠ·ΡˆΠΈΡ€ΠΈΡ‚ΠΈ Ρ†Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Ρ‰ΠΎΠ± Π²Ρ–Π½ ΠΌΡ–Π³ ΠΏΡ€ΠΈΠΉΠΌΠ°Ρ‚ΠΈ Π½Π΅ Ρ‚Ρ–Π»ΡŒΠΊΠΈ boolean, Π° ΠΉ { ${store}: boolean }.

Або Π²Π·Π°Π³Π°Π»Ρ– ΠΊΠΎΠ½Ρ„Ρ–Π³ΡƒΡ€ΡƒΠ²Π°Ρ‚ΠΈ для ΠΎΠΊΡ€Π΅ΠΌΠΈΡ… Ρ„Ρ–Π»Π΄Ρ–Π².

Nested list: Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° Π² Ρ‚Π°Π±Ρ– ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ ​

Store Π²ΠΊΠ»Π°Π΄Π΅Π½ΠΎΠ³ΠΎ списку β€” Ρ‚ΠΎΠΉ самий, Π° ΠΎΡ‚ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΠΈ ΠΉΠΎΠ³ΠΎ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ‚Ρ€Π΅Π±Π° Ρ‡Π΅Ρ€Π΅Π· useNestedTableList: ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° ΠΌΡƒΡΠΈΡ‚ΡŒ Π²ΠΎΠ»ΠΎΠ΄Ρ–Ρ‚ΠΈ своїми списками, Ρ–Π½Π°ΠΊΡˆΠ΅ Ρ‚Π°Π± ΠΏΠΎΠΊΠ°ΠΆΠ΅ записи ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ, яку Π²Ρ–Π΄ΠΊΡ€ΠΈΠ²Π°Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ†Ρ–Ρ”ΡŽ.

ts
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. Π©ΠΎ Π΄ΡƒΠΆΠ΅ спрощує Ρ†ΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.