Skip to content

State Container Pattern

File: resources/js/types/state.ts

Setiap store di aplikasi mengikuti pola StateContainer<TData>. Ini memastikan konsistensi di semua modul.

Kenapa Ada

Tanpa pattern standar, setiap pengembang akan membuat bentuk state sendiri. StateContainer memaksakan satu struktur sehingga store mana pun bisa langsung dipahami.

Bentuk Container

typescript
interface StateContainer<TData> {
    meta: StateMeta;     // loading, initialized, timestamp
    data: TData;         // data domain
    errors: StateErrors; // error validasi
}

Aturan Arsitektur Store

Component → Store → Service → API
  • Component: panggil action store, subscribe ke state
  • Store: kelola StateContainer, delegasi logika ke service
  • Service: fungsi murni, orchestration
  • API: HTTP fetch saja

Cara Buat Store

typescript
import { initialMeta } from '@/types/state';
import type { StateContainer } from '@/types/state';

interface MyData { items: string[]; sending: boolean; }
type MyContainer = StateContainer<MyData>;

function createState(): MyContainer {
    return {
        meta: { ...initialMeta, initialized: true },
        data: { items: [], sending: false },
        errors: {},
    };
}

Nama File

Pattern: <aksi>-<modul>.stores.ts

Contoh: fetch-bulletin.stores.ts, super-user-form.stores.ts