headless-table-core 0.1.6 → 0.1.8

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.
Files changed (2) hide show
  1. package/README.md +136 -51
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,22 +1,18 @@
1
- # smart-table-core
1
+ # headless-table-core — How to Use
2
2
 
3
- Simple, headless utilities for building **searchable, sortable, paginated tables**.
4
-
5
- No UI.
6
- No framework lock-in.
7
- Works with Angular, React, Vue, or plain JavaScript.
3
+ This guide shows **practical usage patterns** of `headless-table-core` in real projects.
8
4
 
9
5
  ---
10
6
 
11
- ## Install
7
+ ## 1️⃣ Install
12
8
 
13
9
  ```bash
14
- npm install @qureshiowais91/smart-table-core
15
- ````
10
+ npm install headless-table-core
11
+ ```
16
12
 
17
13
  ---
18
14
 
19
- ## Import
15
+ ## 2️⃣ Import
20
16
 
21
17
  ```ts
22
18
  import {
@@ -24,12 +20,14 @@ import {
24
20
  sortData,
25
21
  filterData,
26
22
  paginate
27
- } from "@qureshiowais91/smart-table-core";
23
+ } from "headless-table-core";
28
24
  ```
29
25
 
30
26
  ---
31
27
 
32
- ## Example data
28
+ ## 3️⃣ Prepare your data
29
+
30
+ Your data can come from **any API** and can be **nested**.
33
31
 
34
32
  ```ts
35
33
  const users = [
@@ -48,101 +46,188 @@ const users = [
48
46
 
49
47
  ---
50
48
 
51
- ## getValue safe nested access
49
+ ## 4️⃣ Display nested values (safe way)
50
+
51
+ ### Problem
52
+
53
+ Direct access can crash:
52
54
 
53
55
  ```ts
54
- getValue(users[0], "user.name"); // "Ali"
55
- getValue(users[0], "user.profile.age"); // 28
56
- getValue(users[0], "user.address.city"); // ""
56
+ row.user.profile.name
57
+ ```
58
+
59
+ ### Solution
60
+
61
+ Use `getValue`:
62
+
63
+ ```ts
64
+ getValue(row, "user.name");
65
+ getValue(row, "user.profile.age");
57
66
  ```
58
67
 
59
68
  With fallback:
60
69
 
61
70
  ```ts
62
- getValue(users[0], "user.address.city", "N/A");
71
+ getValue(row, "user.address.city", "N/A");
63
72
  ```
64
73
 
74
+ Use this **in rendering**.
75
+
65
76
  ---
66
77
 
67
- ## sortData sort by column
78
+ ## 5️⃣ Search (global search)
79
+
80
+ ### Step 1: Choose searchable fields
68
81
 
69
82
  ```ts
70
- sortData(users, "user.name", "asc");
71
- sortData(users, "user.profile.age", "desc");
83
+ const searchKeys = ["user.name", "email"];
72
84
  ```
73
85
 
74
- * Non-mutating
75
- * Supports nested keys
86
+ ### Step 2: Apply search
87
+
88
+ ```ts
89
+ const searchedRows = filterData(users, searchText, searchKeys);
90
+ ```
76
91
 
77
92
  ---
78
93
 
79
- ## filterData global search
94
+ ## 6️⃣ Sort (column sorting)
95
+
96
+ ### Sort by text
80
97
 
81
98
  ```ts
82
- filterData(users, "ali", ["user.name", "email"]);
99
+ const sortedByName = sortData(searchedRows, "user.name", "asc");
83
100
  ```
84
101
 
85
- * Case-insensitive
86
- * Searches multiple fields
102
+ ### Sort by number
103
+
104
+ ```ts
105
+ const sortedByAge = sortData(searchedRows, "user.profile.age", "desc");
106
+ ```
87
107
 
88
108
  ---
89
109
 
90
- ## paginate pagination logic
110
+ ## 7️⃣ Paginate (page data)
91
111
 
92
112
  ```ts
93
- paginate(users, 1, 10);
113
+ const result = paginate(sortedByAge, page, pageSize);
94
114
  ```
95
115
 
96
- Returns:
116
+ Use:
97
117
 
98
118
  ```ts
99
- {
100
- data: [...],
101
- total: number,
102
- page: number,
103
- limit: number
104
- }
119
+ result.data // rows for current page
120
+ result.total // total rows
105
121
  ```
106
122
 
107
123
  ---
108
124
 
109
- ## Recommended usage (real flow)
125
+ ## 8️⃣ Full usage flow (MOST IMPORTANT)
126
+
127
+ This is the **correct order** and **most common usage**.
110
128
 
111
129
  ```ts
112
130
  let rows = users;
113
131
 
114
- rows = filterData(rows, searchText, ["user.name", "email"]);
132
+ // 1. Search
133
+ rows = filterData(rows, searchText, [
134
+ "user.name",
135
+ "email"
136
+ ]);
137
+
138
+ // 2. Sort
115
139
  rows = sortData(rows, sortKey, sortOrder);
140
+
141
+ // 3. Paginate
116
142
  const result = paginate(rows, page, limit);
143
+ ```
144
+
145
+ You render:
117
146
 
118
- // render result.data
147
+ ```ts
148
+ result.data
119
149
  ```
120
150
 
121
151
  ---
122
152
 
123
- ## Notes
153
+ ## 9️⃣ Example: Plain JavaScript table
124
154
 
125
- * This library handles **logic only**
126
- * You control UI and rendering
127
- * Original data is never mutated
155
+ ```ts
156
+ const searchText = "ali";
157
+ const sortKey = "user.name";
158
+ const sortOrder = "asc";
159
+ const page = 1;
160
+ const limit = 10;
161
+
162
+ let rows = users;
163
+
164
+ rows = filterData(rows, searchText, ["user.name", "email"]);
165
+ rows = sortData(rows, sortKey, sortOrder);
166
+ const table = paginate(rows, page, limit);
167
+
168
+ console.log(table.data);
169
+ ```
128
170
 
129
171
  ---
130
172
 
131
- ## License
173
+ ## 🔟 Example: Angular component
174
+
175
+ ```ts
176
+ this.rows = paginate(
177
+ sortData(
178
+ filterData(this.users, this.searchText, ["user.name", "email"]),
179
+ this.sortKey,
180
+ this.sortOrder
181
+ ),
182
+ this.page,
183
+ 10
184
+ ).data;
185
+ ```
186
+
187
+ ---
132
188
 
133
- MIT
189
+ ## 1️⃣1️⃣ Example: React component
134
190
 
191
+ ```ts
192
+ const filtered = filterData(data, search, ["user.name", "email"]);
193
+ const sorted = sortData(filtered, sortKey, order);
194
+ const pageData = paginate(sorted, page, 10).data;
135
195
  ```
136
196
 
137
197
  ---
138
198
 
139
- ### This README is **good enough to ship**.
199
+ ## 1️⃣2️⃣ Common mistakes (avoid these)
200
+
201
+ ❌ Sorting before filtering
202
+ ❌ Mutating original array
203
+ ❌ Expecting UI components
204
+ ❌ Passing wrong nested keys
205
+
206
+ ---
207
+
208
+ ## 1️⃣3️⃣ When to use this library
209
+
210
+ Use `headless-table-core` when:
211
+
212
+ * You have more than one table
213
+ * API responses are nested
214
+ * You want consistent behavior
215
+ * You want framework-agnostic logic
216
+
217
+ ---
218
+
219
+ ## 1️⃣4️⃣ When NOT to use it
220
+
221
+ * One-off small table
222
+ * No search/sort/pagination needed
223
+
224
+ ---
140
225
 
141
- If you want next:
142
- - Ultra-short README for npm page
143
- - Examples folder
144
- - React hook version
145
- - Angular wrapper
226
+ ## Summary (TL;DR)
146
227
 
147
- Just tell me.
228
+ 1. Install
229
+ 2. Import
230
+ 3. Filter → Sort → Paginate
231
+ 4. Render result.data
148
232
 
233
+ That’s it.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "headless-table-core",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "Headless utilities for building sortable, searchable tables",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",