Skip to content

Introduction ​

Store всіх Webitel Applications ΠΏΡ€Π°Ρ†ΡŽΡ” (Π°Π±ΠΎ, ΠΏΡ€ΠΈΠ½Π°ΠΉΠΌΠ½Ρ–, ΠΌΠ°Ρ” ΠΏΡ€Π°Ρ†ΡŽΠ²Π°Ρ‚ΠΈ πŸ™‚) Π½Π° Vuex-модулях, які ΡΡ‚Π²ΠΎΡ€ΡŽΡŽΡ‚ΡŒΡΡ Π·Π° допомогою ΡΠΏΠ΅Ρ†Ρ–Π°Π»ΡŒΠ½ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ–Π² (Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, createBaseStoreModule), Π°Π±ΠΎ класів (Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, BaseStoreModule, Π°Π»Π΅ Π²ΠΎΠ½ΠΈ @deprecated).

ΠŸΡ–Π΄ ΠΊΠΎΠΆΠ΅Π½ Ρ‚ΠΈΠΏΠΎΠ²ΠΈΠΉ кСйс систСми (Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° сутностСй, ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° сутності, Π°ΠΏΡ–) Ρ” ΠΎΠΊΡ€Π΅ΠΌΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для створСння стор модуля. Π―ΠΊΡ‰ΠΎ ΠΆ кСйс Π½Π΅Ρ‚ΠΈΠΏΠΎΠ²ΠΈΠΉ, Ρ‚ΠΎ ΠΊΡ€Π°Ρ‰Π΅ просто використати createBaseStoreModule, ΠΎΡΠΊΡ–Π»ΡŒΠΊΠΈ Ρƒ Π½ΡŒΠΎΠΌΡƒ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ– ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ для Π·Ρ€ΡƒΡ‡Π½ΠΎΡ— Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π· Π±ΡƒΠ΄ΡŒ-яким ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ.

Для Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π·Ρ– стором Ρ‚ΠΈΠΏΠΎΠ²ΠΈΡ… кСйсів Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… Ρ‚Π°ΠΊΠΎΠΆ Ρ” composables, які Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ΡŒ Π»Π΅Π³ΠΊΠΎ взаємодіяти Π·Ρ– стором (Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, useTableStore).

Всі (ΠΌΠ°ΠΉΠΆΠ΅) Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½Ρ– Ρ€Π΅Ρ‡Ρ– для Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π·Ρ– стором ΠΌΠΎΠΆΠ½Π° Ρ–ΠΌΠΏΠΎΡ€Ρ‚ΡƒΠ²Π°Ρ‚ΠΈ Π· @webitel/ui-sdk/store.

javascript
import { createBaseStoreModule, useTableStore } from '@webitel/ui-sdk/store';

In-depth ​

Коли ΠΌΠΈ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ”ΠΌΠΎ create...StoreModule, Π² який ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΈ Π½Π°ΡˆΡ– кастомні state, actions, etc., Π·Π°ΠΏΡƒΡΠΊΠ°Ρ”Ρ‚ΡŒΡΡ Π»Π°Π½ΠΊΠ° створСння Ρ–Ρ”Ρ€Π°Ρ€Ρ…Ρ–Ρ— сторів, ΠΏΠΎΡ‡ΠΈΠ½Π°ΡŽΡ‡ΠΈ Π²Ρ–Π΄ baseStoreModule, Ρ– Π΄Π°Π»Ρ–, Π·Π° пСвною Ρ–Ρ”Ρ€Π°Ρ€Ρ…Ρ–Ρ”ΡŽ.

Π’Π°ΠΌ всС Π΄ΠΎΠ²ΠΎΠ»Ρ– просто: всі ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡŒΡΡ "Π²Π½ΠΈΠ·" ΠΏΠΎ Ρ–Ρ”Ρ€Π°Ρ€Ρ…Ρ–Ρ—, Ρ– Π² ΠΊΡ–Π½Ρ†Ρ– всС просто ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒΡΡ ΠΌΡ–ΠΆ собою, Π· ΠΏΡ€ΠΈΠΎΡ€Ρ–Ρ‚Π΅Ρ‚ΠΎΠΌ "Π²ΠΈΡ‰ΠΎΠ³ΠΎ", Ρ‚ΠΎΠ±Ρ‚ΠΎ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎΠ³ΠΎ "ΠΏΡ–Π·Π½Ρ–ΡˆΠ΅".

Π’Π°ΠΊΠΎΠΆ, Π²Π°ΠΆΠ»ΠΈΠ²ΠΎ: ​

  • State НЕ ΠΊΠΎΠΏΡ–ΡŽΡ”Ρ‚ΡŒΡΡ. Π’Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π½ΠΎ, ΠΏΡ€ΠΈ ΠΊΠΎΠΆΠ½ΠΎΠΌΡƒ створСнні кастомного модуля Π² Π΄Π΅ΠΊΡ–Π»ΡŒΠΊΠΎΡ… кСйсах Ρ‚Ρ€Π΅Π±Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΠΈ ΠΎΠΊΡ€Π΅ΠΌΠΈΠΉ, Π½ΠΎΠ²ΠΈΠΉ, ΠΎΠ±ΚΌΡ”ΠΊΡ‚ state Π² ΠΊΠΎΠΆΠ΅Π½ кСйс - Ρ‚ΠΎΠΌΡƒ Ρ‰ΠΎ Ρ–Π½Π°ΠΊΡˆΠ΅ Ρ†Π΅ Π±ΡƒΠ΄Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΚΌΡ”ΠΊΡ‚ ΠΌΡ–ΠΆ всіма стор модулями, який Π±ΡƒΠ΄Π΅ ΠΌΡ–ΠΆ Π½ΠΈΠΌΠΈ ΡˆΠ΅ΠΉΡ€ΠΈΡ‚ΠΈΡΡŒ. Наприклад, ΠΌΠΈ Ρ…ΠΎΡ‡Π΅ΠΌΠΎ створити свою ΠΎΠ±Π³ΠΎΡ€Ρ‚ΠΊΡƒ стора для ΠΏΠ΅Ρ€ΠΌΡ–ΡˆΠ΅Π½Ρ–Π², яку ΠΌΠΈ Π±ΡƒΠ΄Π΅ΠΌΠΎ пСрСвикористовувати Ρƒ ΠΊΠΎΠΆΠ½Ρ–ΠΉ сутності, яка ΠΌΠ°Ρ” Π² собі ΠΏΠ΅Ρ€ΠΌΡ–ΡˆΠ΅Π½ΠΈ. Π―ΠΊΡ‰ΠΎ ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΌΠΎ ΠΎΠ΄ΠΈΠ½ Ρ– Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΎΠ±ΚΌΡ”ΠΊΡ‚ state Π² ΠΊΠΎΠΆΠ΅Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π·ΠΌΡ–Π½Ρ– стСйту Π² ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»Ρ–, Π²Ρ–Π½ ΠΌΡ–Π½ΡΡ‚ΠΈΠΌΠ΅Ρ‚ΡŒΡΡ Ρƒ Ρ–Π½ΡˆΠΈΡ….

  • State ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒΡΡ Π³Π»ΠΈΠ±ΠΎΠΊΠΎ. Π’ΠΎΠ±Ρ‚ΠΎ, ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒΡΡ Π½Π°Π²Ρ–Ρ‚ΡŒ Π³Π»ΠΈΠ±ΠΎΠΊΠ° Π²ΠΊΠ»Π°Π΄Π΅Π½Ρ–ΡΡ‚ΡŒ. АЛЕ! НС ΠΌΠ΅Ρ€Π΄ΠΆΠ°Ρ‚ΡŒΡΡ ΠΎΠ±ΚΌΡ”ΠΊΡ‚ΠΈ, які Π½Π΅ Ρ” ΠΎΠ±ΚΌΡ”ΠΊΡ‚Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, Π½Π΅ Π·ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒΡΡ 2 ΠΌΠ°ΠΏΠΈ Π² ΠΎΠ΄Π½Ρƒ, Π· ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π· ΠΎΠ±ΠΎΡ… ΠΌΠ°ΠΏ)

Π―ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ ΠΊΠΎΡ€ΠΈΡΡ‚ΡƒΠ²Π°Ρ‚ΠΈΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ стор ΠΌΠΎΠ΄ΡƒΠ»Ρ–Π²? ​

БтворСння стор модуля Π½Π° основі Ρ–ΡΠ½ΡƒΡŽΡ‡ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ–Π² ​

javascript
// import method
import { createBaseStoreModule } from '@webitel/ui-sdk/store';

// create custom state
const state = {
  custom: 'state',
};

// create custom actions
const actions = {
  CUSTOM: () => {},
  // will override action with name "EXISTING" from baseStoreModule
  EXISTING: () => {},
};

// create module
const myModule = createBaseStoreModule({
  state,
  actions,
});

// export module
export default myModule;

Π―ΠΊ створити Π½ΠΎΠ²ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ​

javascript
// createCustomStoreModule.js

// import base method
import { createBaseStoreModule } from '@webitel/ui-sdk/store';

// create custom state, use method to prevent sharing same state object between customStoreModule usages
const customState = () => ({
  custom: 'state',
});

const createCustomStoreModule = (modules) => {
  // modules can accept arrays
  const modulesArr = Array.isArray(modules) ? modules : [modules];

  // createBaseStoreModule
  return createBaseStoreModule([
    // customStoreModule specifics
    { state: customState() },
    // + some extensions, passed as arguments
    ...modulesArr,
  ]);
};

Π©ΠΎ Ρƒ нас Ρ‚ΡƒΡ‚ Ρ”? ​

На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написання Π΄ΠΎΠΊΠΈ:

  • createBaseStoreModule - Π±Π°Π·ΠΎΠ²ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для створСння стор модуля, який ΠΌΠ°Ρ” Π² собі Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ– ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ для Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π·Ρ– стором.

  • createTableStoreModule + useTableStoreModule - ΠΌΠ΅Ρ‚ΠΎΠ΄ для створСння стора для Ρ‚Π°Π±Π»ΠΈΡ†Ρ– сутностСй, Ρ‚Π° ΠΊΠΎΠΌΠΏΠΎΡƒΠ·Π°Π±Π» для Ρ–Π½Ρ‚Π΅Π³Ρ€Π°Ρ†Ρ–Ρ— Π· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ.

  • createCardStoreModule + useCardStoreModule - ΠΌΠ΅Ρ‚ΠΎΠ΄ для створСння стора для ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ сутності, + ΠΊΠΎΠΌΠΏΠΎΡƒΠ·Π°Π±Π».

  • createApiStoreModule - ΠΌΠ΅Ρ‚ΠΎΠ΄ для створСння стора для Π°ΠΏΡ–, який Π²ΠΆΠ΅ ΠΌΠ°Ρ” Π² собі ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ для Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π· Π°ΠΏΡ–.

Коли Ρ‰ΠΎ використовувати? ​

Π’ΠΈΠΏΠΎΠ²ΠΈΠΉ Ρ€ΠΎΠ·Π΄Ρ–Π» ​

  • Π ΠΎΠ±ΠΈΡ‚Π΅ складний Ρ€ΠΎΠ·Π΄Ρ–Π» Π· Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΡŽ Ρ‚Π° ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΎΡŽ сутності? Π’Π°ΠΌ Ρ‚Ρ€Π΅Π±Π° ΠΌΠ°ΠΉΠΆΠ΅ всС, Π΄ΠΈΠ²Ρ–Ρ‚ΡŒΡΡ how to: Integration between store modules.

Π’Ρ–Π»ΡŒΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° ​

Π ΠΎΠ±ΠΈΡ‚Π΅ просто Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΡƒ? Π‘Π΅Ρ€Π΅Ρ‚Π΅ createTableStoreModule Π΄ΠΎΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ для стора, i ΠΊΠΎΠΌΠΏΠΎΡƒΠ·Π°Π±Π» `useTableStoreModuleя для Ρ–Π½Ρ‚Π΅Π³Ρ€Π°Ρ†Ρ–Ρ— Π· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ.

Π’Ρ–Π»ΡŒΠΊΠΈ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° ​

Π ΠΎΠ±ΠΈΡ‚Π΅ Ρ‚Ρ–Π»ΡŒΠΊΠΈ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ? Π¦Π΅ Π½Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ, Ρ‰ΠΎ Π²Π°ΠΌ Π·Π½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, Π°Π»Π΅ ΠΏΡ€ΠΈΠ΄ΠΈΠ²Ρ–Ρ‚ΡŒΡΡ Π΄ΠΎ createCardStoreModule Π΄ΠΎΠΊΠ°.

Апі ​

НСобхідно ΠΏΡ–Π΄ΚΌΡ”Π΄Π½Π°Ρ‚ΠΈ api Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π· ΠΏΠΎΠΏΠ΅Ρ€Π΅Π΄Π½Ρ–Ρ… кСйсів? ВикористовуйтС Π²ΠΆΠ΅ Ρ–Π½Ρ‚Π΅Π³Ρ€ΠΎΠ²Π°Π½ΠΈΠΉ Π² Π½ΠΈΡ… createApiStoreModule Π΄ΠΎΠΊΠ°.

Шось своє ​

Π₯ΠΎΡ‡Π΅Ρ‚Π΅ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Ρ‰ΠΎΡΡŒ своє? ВикористовуйтС createBaseStoreModule Π΄ΠΎΠΊΠ°.