@pattern-stack/frontend-patterns 0.2.0-alpha.18 → 0.2.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/frontend-patterns.css +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +163 -35
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +163 -35
- package/dist/index.js.map +1 -1
- package/dist/swebrain/SweBrainShowcase.d.ts +8 -0
- package/dist/swebrain/SweBrainShowcase.d.ts.map +1 -0
- package/dist/swebrain/atoms/Card.d.ts +15 -0
- package/dist/swebrain/atoms/Card.d.ts.map +1 -0
- package/dist/swebrain/atoms/Chip.d.ts +17 -0
- package/dist/swebrain/atoms/Chip.d.ts.map +1 -0
- package/dist/swebrain/atoms/Duration.d.ts +7 -0
- package/dist/swebrain/atoms/Duration.d.ts.map +1 -0
- package/dist/swebrain/atoms/EmptyCell.d.ts +5 -0
- package/dist/swebrain/atoms/EmptyCell.d.ts.map +1 -0
- package/dist/swebrain/atoms/Hand.d.ts +8 -0
- package/dist/swebrain/atoms/Hand.d.ts.map +1 -0
- package/dist/swebrain/atoms/ID.d.ts +9 -0
- package/dist/swebrain/atoms/ID.d.ts.map +1 -0
- package/dist/swebrain/atoms/IdTag.d.ts +9 -0
- package/dist/swebrain/atoms/IdTag.d.ts.map +1 -0
- package/dist/swebrain/atoms/KV.d.ts +7 -0
- package/dist/swebrain/atoms/KV.d.ts.map +1 -0
- package/dist/swebrain/atoms/LiveIndicator.d.ts +7 -0
- package/dist/swebrain/atoms/LiveIndicator.d.ts.map +1 -0
- package/dist/swebrain/atoms/PoolChip.d.ts +14 -0
- package/dist/swebrain/atoms/PoolChip.d.ts.map +1 -0
- package/dist/swebrain/atoms/Row.d.ts +10 -0
- package/dist/swebrain/atoms/Row.d.ts.map +1 -0
- package/dist/swebrain/atoms/Sparkline.d.ts +11 -0
- package/dist/swebrain/atoms/Sparkline.d.ts.map +1 -0
- package/dist/swebrain/atoms/StatusBadge.d.ts +11 -0
- package/dist/swebrain/atoms/StatusBadge.d.ts.map +1 -0
- package/dist/swebrain/atoms/StatusDot.d.ts +11 -0
- package/dist/swebrain/atoms/StatusDot.d.ts.map +1 -0
- package/dist/swebrain/atoms/Timestamp.d.ts +8 -0
- package/dist/swebrain/atoms/Timestamp.d.ts.map +1 -0
- package/dist/swebrain/atoms/index.d.ts +34 -0
- package/dist/swebrain/atoms/index.d.ts.map +1 -0
- package/dist/swebrain/atoms/pool-tokens.d.ts +14 -0
- package/dist/swebrain/atoms/pool-tokens.d.ts.map +1 -0
- package/dist/swebrain/atoms/tokens.d.ts +96 -0
- package/dist/swebrain/atoms/tokens.d.ts.map +1 -0
- package/dist/swebrain/index.d.ts +4 -0
- package/dist/swebrain/index.d.ts.map +1 -0
- package/dist/swebrain/lib/favs.d.ts +5 -0
- package/dist/swebrain/lib/favs.d.ts.map +1 -0
- package/dist/swebrain/lib/vendors.d.ts +14 -0
- package/dist/swebrain/lib/vendors.d.ts.map +1 -0
- package/dist/swebrain/molecules/PoolLegend.d.ts +8 -0
- package/dist/swebrain/molecules/PoolLegend.d.ts.map +1 -0
- package/dist/swebrain/molecules/SearchInput.d.ts +17 -0
- package/dist/swebrain/molecules/SearchInput.d.ts.map +1 -0
- package/dist/swebrain/molecules/StatCard.d.ts +11 -0
- package/dist/swebrain/molecules/StatCard.d.ts.map +1 -0
- package/dist/swebrain/molecules/TimeRangePicker.d.ts +18 -0
- package/dist/swebrain/molecules/TimeRangePicker.d.ts.map +1 -0
- package/dist/swebrain/molecules/index.d.ts +9 -0
- package/dist/swebrain/molecules/index.d.ts.map +1 -0
- package/dist/sync/createEntityHooks.d.ts.map +1 -1
- package/dist/sync/createStore.d.ts +78 -15
- package/dist/sync/createStore.d.ts.map +1 -1
- package/dist/sync/index.d.ts +2 -2
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/types.d.ts +216 -23
- package/dist/sync/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -1,14 +1,39 @@
|
|
|
1
|
-
import type { EntityHooks } from './types.js';
|
|
1
|
+
import type { EntityHooks, LookupsEngine, UseDataOptions, UseDataResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Row constraint shared by entity hooks — every entity row has an optional id.
|
|
4
|
+
*/
|
|
5
|
+
type AnyRow = object & {
|
|
6
|
+
id?: string | null;
|
|
7
|
+
};
|
|
2
8
|
/**
|
|
3
9
|
* Configuration for store creation.
|
|
10
|
+
*
|
|
11
|
+
* `fields` and `lookups` are OPTIONAL — existing callers (and `useList`/
|
|
12
|
+
* `useGet`/mutations) keep working unchanged when they're omitted.
|
|
13
|
+
*
|
|
4
14
|
* Uses `any` for collection types to avoid version mismatch issues
|
|
5
15
|
* with TanStack DB beta types across npm link boundaries.
|
|
16
|
+
*
|
|
17
|
+
* @template TFields - Per-entity FieldMeta record map (consumer/codegen-owned;
|
|
18
|
+
* the sync layer treats each entry generically — it never imports FieldMeta).
|
|
19
|
+
* @template TLookups - The hydrated lookups shape (consumer/codegen-owned).
|
|
6
20
|
*/
|
|
7
|
-
export interface StoreConfig {
|
|
21
|
+
export interface StoreConfig<TFields extends Record<string, any> = Record<string, unknown>, TLookups = unknown> {
|
|
8
22
|
/** Entity hooks keyed by name */
|
|
9
23
|
entities: Record<string, EntityHooks<any, any, any>>;
|
|
10
24
|
/** Collections keyed by name */
|
|
11
25
|
collections: Record<string, any>;
|
|
26
|
+
/**
|
|
27
|
+
* NEW — generated per-entity FieldMeta record, keyed by the same plural names
|
|
28
|
+
* as `entities`. Surfaced by `useData().meta`. Treated generically: the per
|
|
29
|
+
* entity meta type is `TFields[plural]`; the sync layer never inspects it.
|
|
30
|
+
*/
|
|
31
|
+
fields?: TFields;
|
|
32
|
+
/**
|
|
33
|
+
* NEW — cross-entity lookups engine. `useData` hydrates it once on mount and
|
|
34
|
+
* returns `lookups.current`. See {@link LookupsEngine}.
|
|
35
|
+
*/
|
|
36
|
+
lookups?: LookupsEngine<TLookups>;
|
|
12
37
|
}
|
|
13
38
|
/**
|
|
14
39
|
* Resolver functions for FK lookups.
|
|
@@ -28,38 +53,76 @@ export interface Lookups {
|
|
|
28
53
|
current: Record<string, LookupMap<unknown>> | null;
|
|
29
54
|
clear: () => void;
|
|
30
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* The unified `useData` hook signature attached to each `store.<entity>`.
|
|
58
|
+
*
|
|
59
|
+
* @template TRow - The entity row type
|
|
60
|
+
* @template TMeta - The per-entity FieldMeta record (consumer/codegen-owned)
|
|
61
|
+
* @template TLookups - The hydrated lookups shape (consumer/codegen-owned)
|
|
62
|
+
*/
|
|
63
|
+
export type UseDataHook<TRow extends AnyRow, TMeta, TLookups> = (opts?: UseDataOptions) => UseDataResult<TRow, TMeta, TLookups>;
|
|
64
|
+
/**
|
|
65
|
+
* An entity's hooks augmented with the store-level `useData` primitive.
|
|
66
|
+
*
|
|
67
|
+
* `useData` lives here (not on {@link EntityHooks}) because it composes
|
|
68
|
+
* cross-entity `lookups` + per-entity `fields`, which only the store knows.
|
|
69
|
+
*
|
|
70
|
+
* @template TEntity - The entity hooks (inferred per entity)
|
|
71
|
+
* @template TMeta - The per-entity FieldMeta type for this entity
|
|
72
|
+
* @template TLookups - The hydrated lookups shape
|
|
73
|
+
*/
|
|
74
|
+
export type EntityWithData<TEntity, TMeta, TLookups> = TEntity & (TEntity extends EntityHooks<infer TRow, any, any> ? {
|
|
75
|
+
useData: UseDataHook<TRow & AnyRow, TMeta, TLookups>;
|
|
76
|
+
} : {
|
|
77
|
+
useData: UseDataHook<AnyRow, TMeta, TLookups>;
|
|
78
|
+
});
|
|
31
79
|
/**
|
|
32
80
|
* The store type.
|
|
81
|
+
*
|
|
82
|
+
* Each entity gains `useData` (typed against its `fields[K]` meta, if provided,
|
|
83
|
+
* and the shared lookups type).
|
|
84
|
+
*
|
|
85
|
+
* @template TEntities - Entity hooks map
|
|
86
|
+
* @template TFields - Per-entity FieldMeta record map
|
|
87
|
+
* @template TLookups - Hydrated lookups shape
|
|
33
88
|
*/
|
|
34
|
-
export type Store<TEntities extends Record<string, EntityHooks<any, any, any
|
|
35
|
-
[K in keyof TEntities]: TEntities[K]
|
|
89
|
+
export type Store<TEntities extends Record<string, EntityHooks<any, any, any>>, TFields extends Record<string, any> = Record<string, unknown>, TLookups = unknown> = {
|
|
90
|
+
[K in keyof TEntities]: EntityWithData<TEntities[K], K extends keyof TFields ? TFields[K] : unknown, TLookups>;
|
|
36
91
|
} & {
|
|
37
92
|
/** Direct collection access (for advanced use) */
|
|
38
93
|
collections: Record<string, any>;
|
|
39
94
|
/** FK resolution */
|
|
40
95
|
resolve: Resolvers;
|
|
41
|
-
/** Lookup maps */
|
|
96
|
+
/** Lookup maps (legacy in-memory helper — distinct from the lookups engine) */
|
|
42
97
|
lookups: Lookups;
|
|
43
98
|
};
|
|
44
99
|
/**
|
|
45
100
|
* Create a typed store from entity hooks and collections.
|
|
46
101
|
*
|
|
102
|
+
* Each `store.<entity>` exposes the existing `useList`/`useGet`/mutations plus a
|
|
103
|
+
* unified `useData()` — the data + metadata + pagination + hydration primitive.
|
|
104
|
+
* `useData` composes the entity's own `useList` (pagination/status, reused — not
|
|
105
|
+
* reimplemented) with per-entity `fields` meta and the cross-entity `lookups`
|
|
106
|
+
* engine (hydrated once on mount).
|
|
107
|
+
*
|
|
47
108
|
* @example
|
|
48
109
|
* ```typescript
|
|
49
110
|
* export const store = createStore({
|
|
50
|
-
* entities:
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* collections: {
|
|
55
|
-
* transactions: transactionCollection,
|
|
56
|
-
* categories: categoryCollection,
|
|
57
|
-
* },
|
|
111
|
+
* entities: { people: peopleHooks, messages: messageHooks },
|
|
112
|
+
* collections: { people: peopleCollection, messages: messageCollection },
|
|
113
|
+
* fields: { people: peopleFields, messages: messageFields }, // optional
|
|
114
|
+
* lookups: lookupsEngine, // optional
|
|
58
115
|
* })
|
|
116
|
+
*
|
|
117
|
+
* // typed: meta is the people FieldMeta record
|
|
118
|
+
* const { rows, meta, lookups, page, setPage } = store.people.useData({ pageSize: 50 })
|
|
59
119
|
* ```
|
|
60
120
|
*/
|
|
61
|
-
export declare function createStore<TEntities extends Record<string, EntityHooks<any, any, any
|
|
121
|
+
export declare function createStore<TEntities extends Record<string, EntityHooks<any, any, any>>, TFields extends Record<string, any> = Record<string, unknown>, TLookups = unknown>(config: {
|
|
62
122
|
entities: TEntities;
|
|
63
123
|
collections: Record<string, any>;
|
|
64
|
-
|
|
124
|
+
fields?: TFields;
|
|
125
|
+
lookups?: LookupsEngine<TLookups>;
|
|
126
|
+
}): Store<TEntities, TFields, TLookups>;
|
|
127
|
+
export {};
|
|
65
128
|
//# sourceMappingURL=createStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createStore.d.ts","sourceRoot":"","sources":["../../src/sync/createStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createStore.d.ts","sourceRoot":"","sources":["../../src/sync/createStore.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { createEntityHooks } from './createEntityHooks.js';
|
|
2
2
|
export { createStore } from './createStore.js';
|
|
3
3
|
export { EntityStoreProvider, useStore } from './EntityStoreProvider.js';
|
|
4
|
-
export type { EntityHookConfig, EntityHooks, EntityApi, EntityQueryKeys, ListParams, WhereClause, UseListOptions, UseGetOptions, UseListResult, UseGetResult, } from './types.js';
|
|
5
|
-
export type { StoreConfig, Store, Resolvers, Lookups, LookupMap, } from './createStore.js';
|
|
4
|
+
export type { EntityHookConfig, EntityHooks, EntityApi, EntityQueryKeys, Page, ListQuery, ListParams, WhereClause, UseListOptions, UseGetOptions, UseListResult, UseGetResult, UseDataOptions, UseDataResult, LookupsEngine, SortSpec, } from './types.js';
|
|
5
|
+
export type { StoreConfig, Store, Resolvers, Lookups, LookupMap, EntityWithData, } from './createStore.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/sync/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAExE,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,eAAe,EACf,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAExE,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,eAAe,EACf,IAAI,EACJ,SAAS,EACT,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,QAAQ,GACT,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,WAAW,EACX,KAAK,EACL,SAAS,EACT,OAAO,EACP,SAAS,EACT,cAAc,GACf,MAAM,kBAAkB,CAAA"}
|
package/dist/sync/types.d.ts
CHANGED
|
@@ -71,9 +71,9 @@ export interface EntityApi<TEntity, TCreate, TUpdate> {
|
|
|
71
71
|
/**
|
|
72
72
|
* Fetch a list of entities with optional filtering/pagination.
|
|
73
73
|
* @param params - Optional list parameters
|
|
74
|
-
* @returns Promise resolving to
|
|
74
|
+
* @returns Promise resolving to a {@link Page} envelope of entities
|
|
75
75
|
*/
|
|
76
|
-
list(params?:
|
|
76
|
+
list(params?: ListQuery): Promise<Page<TEntity>>;
|
|
77
77
|
/**
|
|
78
78
|
* Fetch a single entity by ID.
|
|
79
79
|
* @param id - The entity ID
|
|
@@ -107,31 +107,86 @@ export interface EntityApi<TEntity, TCreate, TUpdate> {
|
|
|
107
107
|
}>;
|
|
108
108
|
}
|
|
109
109
|
/**
|
|
110
|
-
*
|
|
110
|
+
* Pagination request parameters sent to `api.list`.
|
|
111
|
+
*
|
|
112
|
+
* This is the request half of the pagination contract. The generated API
|
|
113
|
+
* client serializes these into the list endpoint's querystring; the backend
|
|
114
|
+
* returns a {@link Page} envelope. Engine is page-based (OFFSET) in v1, but
|
|
115
|
+
* `cursor` is part of the contract from day one (the keyset request-honoring
|
|
116
|
+
* upgrade is a deferred, seam-internal change — passing a cursor is accepted).
|
|
117
|
+
*
|
|
118
|
+
* Arbitrary additional keys are treated as `where` filters (pagination is
|
|
119
|
+
* orthogonal to filtering).
|
|
111
120
|
*
|
|
112
121
|
* @example
|
|
113
122
|
* ```typescript
|
|
114
|
-
* const
|
|
115
|
-
*
|
|
116
|
-
*
|
|
123
|
+
* const query: ListQuery = {
|
|
124
|
+
* page: 2,
|
|
125
|
+
* pageSize: 50,
|
|
117
126
|
* sort_by: 'created_at',
|
|
118
127
|
* sort_order: 'desc',
|
|
119
|
-
* status: 'active', // Additional filter
|
|
128
|
+
* status: 'active', // Additional where filter
|
|
120
129
|
* }
|
|
121
130
|
* ```
|
|
122
131
|
*/
|
|
123
|
-
export interface
|
|
124
|
-
/**
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
|
|
132
|
+
export interface ListQuery {
|
|
133
|
+
/** 1-based page number to fetch (default: 1) */
|
|
134
|
+
page?: number;
|
|
135
|
+
/** Opaque keyset cursor (contract-stable; v1 OFFSET engine ignores it for fetching) */
|
|
136
|
+
cursor?: string;
|
|
137
|
+
/** Page size — number of items per page (default: 50, clamped server-side) */
|
|
138
|
+
pageSize?: number;
|
|
128
139
|
/** Field to sort by */
|
|
129
140
|
sort_by?: string;
|
|
130
141
|
/** Sort direction */
|
|
131
142
|
sort_order?: 'asc' | 'desc';
|
|
132
|
-
/** Additional filter parameters */
|
|
143
|
+
/** Additional filter parameters (where clause) */
|
|
133
144
|
[key: string]: unknown;
|
|
134
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Pagination response envelope returned by `api.list`.
|
|
148
|
+
*
|
|
149
|
+
* This is the response half of the pagination contract — the shape every
|
|
150
|
+
* codegen-generated list endpoint returns. Extends the proven
|
|
151
|
+
* `{ items, nextCursor }` keyset shape (jobs subsystem `JobRunPage`,
|
|
152
|
+
* observability) with `total`/`page`/`pageCount`/`pageSize` for numbered,
|
|
153
|
+
* jump-to-page UIs.
|
|
154
|
+
*
|
|
155
|
+
* @template T - The entity type
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* const page: Page<Transaction> = {
|
|
160
|
+
* items: [...],
|
|
161
|
+
* page: 1,
|
|
162
|
+
* pageCount: 4,
|
|
163
|
+
* total: 187,
|
|
164
|
+
* pageSize: 50,
|
|
165
|
+
* nextCursor: 'eyJjcmVhdGVkQXQiOiIuLi4ifQ==',
|
|
166
|
+
* }
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
export interface Page<T> {
|
|
170
|
+
/** The rows for the current page */
|
|
171
|
+
items: T[];
|
|
172
|
+
/** 1-based number of the current page */
|
|
173
|
+
page: number;
|
|
174
|
+
/** Total number of pages for the (filtered) set */
|
|
175
|
+
pageCount: number;
|
|
176
|
+
/** Total number of rows in the (filtered) set, across all pages */
|
|
177
|
+
total: number;
|
|
178
|
+
/** Number of items per page */
|
|
179
|
+
pageSize: number;
|
|
180
|
+
/** Opaque cursor for the next page; null on the last page */
|
|
181
|
+
nextCursor: string | null;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Common list parameters for API queries.
|
|
185
|
+
*
|
|
186
|
+
* @deprecated Use {@link ListQuery} instead — `skip`/`limit` were never honored
|
|
187
|
+
* by `useList`. Retained as an alias for source compatibility; will be removed.
|
|
188
|
+
*/
|
|
189
|
+
export type ListParams = ListQuery;
|
|
135
190
|
/**
|
|
136
191
|
* Type-safe filter where value types match field types.
|
|
137
192
|
*
|
|
@@ -162,23 +217,28 @@ export type WhereClause<TEntity> = {
|
|
|
162
217
|
* const options: UseListOptions<Transaction> = {
|
|
163
218
|
* where: { state: 'active' },
|
|
164
219
|
* orderBy: { field: 'created_at', direction: 'desc' },
|
|
165
|
-
*
|
|
166
|
-
*
|
|
220
|
+
* page: 2,
|
|
221
|
+
* pageSize: 50,
|
|
167
222
|
* }
|
|
168
223
|
* ```
|
|
169
224
|
*/
|
|
170
225
|
export interface UseListOptions<TEntity> {
|
|
171
|
-
/** Filter criteria - applied client-side to
|
|
226
|
+
/** Filter criteria - sent to the server AND applied client-side to the page */
|
|
172
227
|
where?: WhereClause<TEntity>;
|
|
173
228
|
/** Sort configuration */
|
|
174
229
|
orderBy?: {
|
|
175
230
|
field: keyof TEntity;
|
|
176
231
|
direction: 'asc' | 'desc';
|
|
177
232
|
};
|
|
178
|
-
/**
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
233
|
+
/**
|
|
234
|
+
* Initial 1-based page to fetch (default: 1). `useList` owns the live page
|
|
235
|
+
* state thereafter — use the returned `setPage`/`next`/`prev` to navigate.
|
|
236
|
+
*/
|
|
237
|
+
page?: number;
|
|
238
|
+
/** Opaque keyset cursor (contract-stable; v1 OFFSET engine ignores it for fetching) */
|
|
239
|
+
cursor?: string;
|
|
240
|
+
/** Page size — number of items per page (default: server default, typically 50) */
|
|
241
|
+
pageSize?: number;
|
|
182
242
|
/** Enable hook (default: true) */
|
|
183
243
|
enabled?: boolean;
|
|
184
244
|
}
|
|
@@ -203,16 +263,25 @@ export interface UseGetOptions {
|
|
|
203
263
|
*
|
|
204
264
|
* @example
|
|
205
265
|
* ```typescript
|
|
206
|
-
* const {
|
|
266
|
+
* const {
|
|
267
|
+
* data, isLoading, error, refetch, collection,
|
|
268
|
+
* page, pageCount, total, pageSize,
|
|
269
|
+
* setPage, next, prev, hasNext, hasPrev,
|
|
270
|
+
* } = useTransactionList({ pageSize: 50 })
|
|
207
271
|
*
|
|
208
272
|
* if (isLoading) return <Spinner />
|
|
209
273
|
* if (error) return <Error message={error.message} />
|
|
210
274
|
*
|
|
211
|
-
* return
|
|
275
|
+
* return (
|
|
276
|
+
* <>
|
|
277
|
+
* <DataTable data={data} />
|
|
278
|
+
* <Pagination page={page} pageCount={pageCount} onPageChange={setPage} />
|
|
279
|
+
* </>
|
|
280
|
+
* )
|
|
212
281
|
* ```
|
|
213
282
|
*/
|
|
214
283
|
export interface UseListResult<TEntity extends object> {
|
|
215
|
-
/**
|
|
284
|
+
/** The current page's entities (empty array if loading or error) */
|
|
216
285
|
data: TEntity[];
|
|
217
286
|
/** True while initial data is loading */
|
|
218
287
|
isLoading: boolean;
|
|
@@ -224,6 +293,24 @@ export interface UseListResult<TEntity extends object> {
|
|
|
224
293
|
refetch: () => void;
|
|
225
294
|
/** Direct collection access for mutations */
|
|
226
295
|
collection: Collection<TEntity, string>;
|
|
296
|
+
/** 1-based number of the current page */
|
|
297
|
+
page: number;
|
|
298
|
+
/** Total number of pages for the (filtered) set */
|
|
299
|
+
pageCount: number;
|
|
300
|
+
/** Total number of rows in the (filtered) set, across all pages */
|
|
301
|
+
total: number;
|
|
302
|
+
/** Number of items per page */
|
|
303
|
+
pageSize: number;
|
|
304
|
+
/** Jump to a specific 1-based page (clamped to [1, pageCount]) and refetch */
|
|
305
|
+
setPage: (page: number) => void;
|
|
306
|
+
/** Advance to the next page (no-op when on the last page) */
|
|
307
|
+
next: () => void;
|
|
308
|
+
/** Go back to the previous page (no-op when on the first page) */
|
|
309
|
+
prev: () => void;
|
|
310
|
+
/** True when a next page exists (page < pageCount) */
|
|
311
|
+
hasNext: boolean;
|
|
312
|
+
/** True when a previous page exists (page > 1) */
|
|
313
|
+
hasPrev: boolean;
|
|
227
314
|
}
|
|
228
315
|
/**
|
|
229
316
|
* Result type for single entity hooks.
|
|
@@ -255,6 +342,112 @@ export interface UseGetResult<TEntity extends object> {
|
|
|
255
342
|
/** Direct collection access for mutations */
|
|
256
343
|
collection: Collection<TEntity, string>;
|
|
257
344
|
}
|
|
345
|
+
/**
|
|
346
|
+
* Cross-entity lookups engine consumed by the unified `useData` hook.
|
|
347
|
+
*
|
|
348
|
+
* Hydrates the FK-resolution sets used to render related entities (e.g. a
|
|
349
|
+
* message's author). Generated/consumer code provides the implementation; the
|
|
350
|
+
* sync layer treats `TLookups` generically (it never inspects the shape).
|
|
351
|
+
*
|
|
352
|
+
* Contract (matches codegen's emitted `createStore({ lookups })`):
|
|
353
|
+
* - `hydrate()` is called ONCE on mount of the first `useData` that needs it
|
|
354
|
+
* (idempotent — callers may invoke it repeatedly; the engine should dedupe).
|
|
355
|
+
* - `current` is the hydrated value, or `null` until hydration resolves.
|
|
356
|
+
*
|
|
357
|
+
* @template TLookups - The hydrated lookups shape (consumer/codegen-owned)
|
|
358
|
+
*
|
|
359
|
+
* @example
|
|
360
|
+
* ```typescript
|
|
361
|
+
* const lookups: LookupsEngine<MyLookups> = {
|
|
362
|
+
* hydrate: async () => { ... }, // fetch + cache, idempotent
|
|
363
|
+
* get current() { return cache }, // null until ready
|
|
364
|
+
* }
|
|
365
|
+
* ```
|
|
366
|
+
*/
|
|
367
|
+
export interface LookupsEngine<TLookups = unknown> {
|
|
368
|
+
/** Hydrate the lookup sets once; resolves when ready. Should be idempotent. */
|
|
369
|
+
hydrate: () => Promise<TLookups>;
|
|
370
|
+
/** The hydrated lookups, or null until hydration resolves. */
|
|
371
|
+
readonly current: TLookups | null;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Result type for the unified `useData` hook.
|
|
375
|
+
*
|
|
376
|
+
* Composes the pagination + status surface of {@link UseListResult} (reused,
|
|
377
|
+
* not reimplemented) with entity FieldMeta (`meta`), hydrated cross-entity
|
|
378
|
+
* `lookups`, a stable `getRowId`, and reserved (inert, typed-not-wired) sort /
|
|
379
|
+
* filter slots for a future upgrade.
|
|
380
|
+
*
|
|
381
|
+
* @template TRow - The entity row type
|
|
382
|
+
* @template TMeta - The per-entity FieldMeta record (consumer/codegen-owned)
|
|
383
|
+
* @template TLookups - The hydrated lookups shape (consumer/codegen-owned)
|
|
384
|
+
*
|
|
385
|
+
* @example
|
|
386
|
+
* ```typescript
|
|
387
|
+
* const { rows, meta, lookups, page, setPage, total } =
|
|
388
|
+
* store.people.useData({ pageSize: 50 })
|
|
389
|
+
* ```
|
|
390
|
+
*/
|
|
391
|
+
export interface UseDataResult<TRow extends object, TMeta = unknown, TLookups = unknown> {
|
|
392
|
+
/** The current page's rows */
|
|
393
|
+
rows: TRow[];
|
|
394
|
+
/** True while initial data is loading */
|
|
395
|
+
isLoading: boolean;
|
|
396
|
+
/** True if an error occurred */
|
|
397
|
+
isError: boolean;
|
|
398
|
+
/** Error object if an error occurred, null otherwise */
|
|
399
|
+
error: Error | null;
|
|
400
|
+
/** Function to manually refetch data */
|
|
401
|
+
refetch: () => void;
|
|
402
|
+
/** 1-based number of the current page */
|
|
403
|
+
page: number;
|
|
404
|
+
/** Total number of pages for the (filtered) set */
|
|
405
|
+
pageCount: number;
|
|
406
|
+
/** Total number of rows in the (filtered) set, across all pages */
|
|
407
|
+
total: number;
|
|
408
|
+
/** Number of items per page */
|
|
409
|
+
pageSize: number;
|
|
410
|
+
/** Jump to a specific 1-based page (clamped) and refetch */
|
|
411
|
+
setPage: (page: number) => void;
|
|
412
|
+
/** Advance to the next page (no-op on the last page) */
|
|
413
|
+
next: () => void;
|
|
414
|
+
/** Go back to the previous page (no-op on the first page) */
|
|
415
|
+
prev: () => void;
|
|
416
|
+
/** True when a next page exists */
|
|
417
|
+
hasNext: boolean;
|
|
418
|
+
/** True when a previous page exists */
|
|
419
|
+
hasPrev: boolean;
|
|
420
|
+
/** Stable row-id accessor (default: `(row) => row.id`) */
|
|
421
|
+
getRowId: (row: TRow) => string;
|
|
422
|
+
/** Per-entity FieldMeta record (from `createStore({ fields })`); undefined if not provided */
|
|
423
|
+
meta: TMeta | undefined;
|
|
424
|
+
/** Hydrated cross-entity lookups (from `createStore({ lookups })`); null until ready / if not provided */
|
|
425
|
+
lookups: TLookups | null;
|
|
426
|
+
/** RESERVED — current sort spec (always null in v1) */
|
|
427
|
+
sort: SortSpec<TRow> | null;
|
|
428
|
+
/** RESERVED — set the sort spec (no-op in v1) */
|
|
429
|
+
setSort: (sort: SortSpec<TRow> | null) => void;
|
|
430
|
+
/** RESERVED — current filter spec (always null in v1) */
|
|
431
|
+
filter: WhereClause<TRow> | null;
|
|
432
|
+
/** RESERVED — set the filter spec (no-op in v1) */
|
|
433
|
+
setFilter: (filter: WhereClause<TRow> | null) => void;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Sort specification for the reserved `useData` sort slot.
|
|
437
|
+
*
|
|
438
|
+
* @template TRow - The entity row type
|
|
439
|
+
*/
|
|
440
|
+
export interface SortSpec<TRow> {
|
|
441
|
+
field: keyof TRow;
|
|
442
|
+
direction: 'asc' | 'desc';
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Options for the unified `useData` hook.
|
|
446
|
+
*/
|
|
447
|
+
export interface UseDataOptions {
|
|
448
|
+
/** Page size — number of items per page (default: server default, typically 50) */
|
|
449
|
+
pageSize?: number;
|
|
450
|
+
}
|
|
258
451
|
/**
|
|
259
452
|
* Query key factory for cache management.
|
|
260
453
|
*
|
package/dist/sync/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAgB,CAC/B,OAAO,SAAS,MAAM,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC/C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAC1B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAE1B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAA;IAEZ;;;;OAIG;IAEH,UAAU,EAAE,GAAG,CAAA;IAEf,yBAAyB;IACzB,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAEzC;;;;;OAKG;IACH,UAAU,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAA;IAErC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO;IAClD;;;;OAIG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@pattern-stack/frontend-patterns",
|
|
3
3
|
"description": "Production-ready React frontend template with atomic architecture patterns. Build ultra-lean applications by importing shared UI foundation patterns.",
|
|
4
4
|
"private": false,
|
|
5
|
-
"version": "0.2.0-alpha.
|
|
5
|
+
"version": "0.2.0-alpha.20",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"react",
|
|
8
8
|
"typescript",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"clean:temp": "rm -rf .playwright-mcp coverage .vite .turbo && find . -name '*.tgz' -delete && find . -name '.DS_Store' -delete",
|
|
62
62
|
"lint": "eslint .",
|
|
63
63
|
"lint:fix": "eslint . --fix",
|
|
64
|
+
"lint:tokens": "node scripts/check-design-tokens.mjs",
|
|
64
65
|
"lint:design-system": "eslint . --ext .tsx,.ts --config eslint.config.js",
|
|
65
66
|
"style:check": "npm run lint:design-system",
|
|
66
67
|
"style:fix": "npm run lint:fix && npm run style:check",
|