@makroz/mobile 1.2.3 → 1.2.4
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/README.md +1 -1
- package/bin/mk-update.js +245 -41
- package/dist/components/MkTable.js +23 -1
- package/dist/components/MkTable.js.map +1 -1
- package/dist/context/MkAuthContext.d.ts +0 -15
- package/dist/hooks/useApi.d.ts +19 -5
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/hooks/useApi.js +73 -61
- package/dist/hooks/useApi.js.map +1 -1
- package/dist/hooks/useMkInfiniteList.d.ts +1 -1
- package/dist/hooks/useMkList.d.ts +10 -28
- package/dist/hooks/useMkList.d.ts.map +1 -1
- package/dist/hooks/useMkList.js +23 -9
- package/dist/hooks/useMkList.js.map +1 -1
- package/dist/hooks/useMkList.test.d.ts +2 -0
- package/dist/hooks/useMkList.test.d.ts.map +1 -0
- package/dist/hooks/useMkList.test.js +138 -0
- package/dist/hooks/useMkList.test.js.map +1 -0
- package/dist/theme/MkThemeProvider.d.ts.map +1 -1
- package/dist/theme/MkThemeProvider.js.map +1 -1
- package/dist/theme/MkThemeProvider.test.js +0 -27
- package/dist/theme/MkThemeProvider.test.js.map +1 -1
- package/package.json +10 -3
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ Librería de componentes UI para React Native. Mantiene paridad de diseño y tok
|
|
|
5
5
|
## Características Core
|
|
6
6
|
- **MkThemeProvider**: Contexto para manejar Light/Dark mode y customización de tokens.
|
|
7
7
|
- **Tokens Parity**: Mismos nombres y escalas de colores que `@makroz/web`.
|
|
8
|
-
- **useApi Native**: Hook optimizado para peticiones a MK-Director desde dispositivos móviles.
|
|
8
|
+
- **useApi Native**: Hook optimizado para peticiones a MK-Director desde dispositivos móviles. AbortController + `response.ok` + timeout enforced via shared `@makroz/core` `executeApiRequest`, so mobile stays in lock-step with web semantics.
|
|
9
9
|
|
|
10
10
|
## Uso
|
|
11
11
|
```typescript
|
package/bin/mk-update.js
CHANGED
|
@@ -57,10 +57,125 @@ function getLatestRegistryVersion(packageName) {
|
|
|
57
57
|
return 'unknown';
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
function getRegistryVersions(packageName) {
|
|
61
|
+
try {
|
|
62
|
+
const stdout = execSync(`npm view ${packageName} versions --json`, {
|
|
63
|
+
encoding: 'utf8',
|
|
64
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
65
|
+
timeout: 5000,
|
|
66
|
+
});
|
|
67
|
+
if (stdout.trim()) {
|
|
68
|
+
const parsed = JSON.parse(stdout.trim());
|
|
69
|
+
return Array.isArray(parsed) ? parsed : [parsed];
|
|
70
|
+
}
|
|
71
|
+
} catch {
|
|
72
|
+
try {
|
|
73
|
+
const stdout = execSync(`npm view ${packageName} versions`, {
|
|
74
|
+
encoding: 'utf8',
|
|
75
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
76
|
+
timeout: 5000,
|
|
77
|
+
});
|
|
78
|
+
if (stdout.trim()) {
|
|
79
|
+
return stdout.replace(/[\[\]']/g, '').split(',').map(v => v.trim()).filter(Boolean);
|
|
80
|
+
}
|
|
81
|
+
} catch {
|
|
82
|
+
// silent fallback
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function parseVersion(v) {
|
|
89
|
+
const clean = v.replace(/^v/, '');
|
|
90
|
+
const [main, prerelease] = clean.split('-');
|
|
91
|
+
const [major, minor, patch] = main.split('.').map(Number);
|
|
92
|
+
return {
|
|
93
|
+
major: isNaN(major) ? 0 : major,
|
|
94
|
+
minor: isNaN(minor) ? 0 : minor,
|
|
95
|
+
patch: isNaN(patch) ? 0 : patch,
|
|
96
|
+
prerelease: prerelease || null,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function compareVersions(v1, v2) {
|
|
101
|
+
const p1 = parseVersion(v1);
|
|
102
|
+
const p2 = parseVersion(v2);
|
|
103
|
+
|
|
104
|
+
if (p1.major !== p2.major) return p1.major - p2.major;
|
|
105
|
+
if (p1.minor !== p2.minor) return p1.minor - p2.minor;
|
|
106
|
+
if (p1.patch !== p2.patch) return p1.patch - p2.patch;
|
|
107
|
+
|
|
108
|
+
if (p1.prerelease && !p2.prerelease) return -1;
|
|
109
|
+
if (!p1.prerelease && p2.prerelease) return 1;
|
|
110
|
+
|
|
111
|
+
if (p1.prerelease && p2.prerelease) {
|
|
112
|
+
const regex = /^([a-zA-Z.-]+)(\d*)$/;
|
|
113
|
+
const m1 = p1.prerelease.match(regex);
|
|
114
|
+
const m2 = p2.prerelease.match(regex);
|
|
115
|
+
|
|
116
|
+
if (m1 && m2) {
|
|
117
|
+
const label1 = m1[1];
|
|
118
|
+
const label2 = m2[1];
|
|
119
|
+
if (label1 !== label2) {
|
|
120
|
+
return label1.localeCompare(label2);
|
|
121
|
+
}
|
|
122
|
+
const num1 = m1[2] ? parseInt(m1[2], 10) : 0;
|
|
123
|
+
const num2 = m2[2] ? parseInt(m2[2], 10) : 0;
|
|
124
|
+
return num1 - num2;
|
|
125
|
+
}
|
|
126
|
+
return p1.prerelease.localeCompare(p2.prerelease);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return 0;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function performUpdate(updates, packageManager) {
|
|
133
|
+
const pkgJsonPath = path.join(process.cwd(), 'package.json');
|
|
134
|
+
const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'));
|
|
135
|
+
|
|
136
|
+
const dependencies = pkg.dependencies || {};
|
|
137
|
+
const devDependencies = pkg.devDependencies || {};
|
|
138
|
+
|
|
139
|
+
updates.forEach(upd => {
|
|
140
|
+
const newSpec = upd.isLocal ? `file:../../mk-director/packages/${upd.name.replace('@makroz/', 'mk-')}` : `^${upd.version}`;
|
|
141
|
+
if (dependencies[upd.name]) {
|
|
142
|
+
dependencies[upd.name] = newSpec;
|
|
143
|
+
} else if (devDependencies[upd.name]) {
|
|
144
|
+
devDependencies[upd.name] = newSpec;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
fs.writeFileSync(pkgJsonPath, JSON.stringify(pkg, null, 2) + '\n', 'utf8');
|
|
149
|
+
console.log('\n✅ package.json actualizado.');
|
|
150
|
+
|
|
151
|
+
let command = '';
|
|
152
|
+
if (packageManager === 'pnpm') {
|
|
153
|
+
command = 'pnpm install';
|
|
154
|
+
} else if (packageManager === 'yarn') {
|
|
155
|
+
command = 'yarn install';
|
|
156
|
+
} else {
|
|
157
|
+
command = 'npm install';
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
console.log(`\nEjecutando: ${command}...\n`);
|
|
161
|
+
|
|
162
|
+
try {
|
|
163
|
+
execSync(command, { stdio: 'inherit' });
|
|
164
|
+
console.log('\n🏁 Actualización finalizada con éxito.\n');
|
|
165
|
+
} catch (e) {
|
|
166
|
+
console.error(`\n❌ Error al ejecutar la actualización: ${e.message}\n`);
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
60
171
|
async function run() {
|
|
61
172
|
const args = process.argv.slice(2);
|
|
62
173
|
const toLocal = args.includes('--local') || args.includes('--dev');
|
|
63
174
|
const toProd = args.includes('--prod') || args.includes('--registry') || args.includes('--remote');
|
|
175
|
+
const dryRun = args.includes('--dry-run');
|
|
176
|
+
|
|
177
|
+
const cleanArgs = args.filter(arg => !['--local', '--dev', '--prod', '--registry', '--remote', '--dry-run'].includes(arg));
|
|
178
|
+
const targetVersionArg = cleanArgs.find(arg => !arg.startsWith('-'));
|
|
64
179
|
|
|
65
180
|
const pkgJsonPath = path.join(process.cwd(), 'package.json');
|
|
66
181
|
if (!fs.existsSync(pkgJsonPath)) {
|
|
@@ -117,6 +232,10 @@ async function run() {
|
|
|
117
232
|
updateSection(devDependencies);
|
|
118
233
|
|
|
119
234
|
if (modified) {
|
|
235
|
+
if (dryRun) {
|
|
236
|
+
console.log('\n[Simulación] Se omitió la escritura en package.json y la ejecución del gestor de paquetes.');
|
|
237
|
+
process.exit(0);
|
|
238
|
+
}
|
|
120
239
|
fs.writeFileSync(pkgJsonPath, JSON.stringify(pkg, null, 2) + '\n', 'utf8');
|
|
121
240
|
console.log('\n✅ package.json actualizado correctamente.');
|
|
122
241
|
const packageManager = detectPackageManager();
|
|
@@ -159,37 +278,44 @@ async function run() {
|
|
|
159
278
|
const isLocal = spec.startsWith('file:');
|
|
160
279
|
const installed = getInstalledVersion(name);
|
|
161
280
|
|
|
162
|
-
let
|
|
281
|
+
let versions = [];
|
|
282
|
+
let latestStable = 'unknown';
|
|
283
|
+
|
|
163
284
|
if (isLocal) {
|
|
164
|
-
|
|
285
|
+
const localVersion = getLatestLocalVersion(spec);
|
|
286
|
+
if (localVersion !== 'unknown') {
|
|
287
|
+
versions = [localVersion];
|
|
288
|
+
}
|
|
165
289
|
} else {
|
|
166
|
-
|
|
290
|
+
versions = getRegistryVersions(name);
|
|
291
|
+
latestStable = getLatestRegistryVersion(name);
|
|
167
292
|
}
|
|
168
293
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
needsUpdate = true;
|
|
294
|
+
let higherVersions = [];
|
|
295
|
+
if (installed !== 'unknown') {
|
|
296
|
+
higherVersions = versions.filter(v => compareVersions(v, installed) > 0);
|
|
297
|
+
} else {
|
|
298
|
+
higherVersions = versions;
|
|
175
299
|
}
|
|
176
300
|
|
|
301
|
+
higherVersions.sort((a, b) => compareVersions(b, a));
|
|
302
|
+
|
|
177
303
|
packageInfos.push({
|
|
178
304
|
name,
|
|
179
305
|
currentSpec: spec,
|
|
180
306
|
installedVersion: installed,
|
|
181
|
-
|
|
307
|
+
higherVersions,
|
|
308
|
+
latestStable,
|
|
182
309
|
isLocal,
|
|
183
|
-
needsUpdate,
|
|
310
|
+
needsUpdate: higherVersions.length > 0,
|
|
184
311
|
});
|
|
185
312
|
}
|
|
186
313
|
|
|
187
|
-
// Print summary of packages
|
|
188
314
|
console.log('Estado de los paquetes:');
|
|
189
315
|
for (const info of packageInfos) {
|
|
190
316
|
const typeLabel = info.isLocal ? '[Local]' : '[Registry]';
|
|
191
317
|
if (info.needsUpdate) {
|
|
192
|
-
console.log(` ⚠️ ${info.name} ${typeLabel}: ${info.installedVersion} -> ${info.
|
|
318
|
+
console.log(` ⚠️ ${info.name} ${typeLabel}: ${info.installedVersion} -> ${info.higherVersions[0]} (Actualizaciones disponibles: ${info.higherVersions.length})`);
|
|
193
319
|
} else {
|
|
194
320
|
console.log(` ✅ ${info.name} ${typeLabel}: ${info.installedVersion} (Al día)`);
|
|
195
321
|
}
|
|
@@ -205,45 +331,123 @@ async function run() {
|
|
|
205
331
|
const packageManager = detectPackageManager();
|
|
206
332
|
console.log(`\nGestor de paquetes detectado: ${packageManager}`);
|
|
207
333
|
|
|
334
|
+
if (targetVersionArg) {
|
|
335
|
+
const targetVersionClean = targetVersionArg.replace(/^v/, '');
|
|
336
|
+
console.log(`\n📌 Versión especificada por argumento: v${targetVersionClean}`);
|
|
337
|
+
|
|
338
|
+
if (dryRun) {
|
|
339
|
+
console.log(`[Simulación] Se actualizarían los siguientes paquetes a v${targetVersionClean}:`);
|
|
340
|
+
updatable.forEach(info => console.log(` - ${info.name}`));
|
|
341
|
+
process.exit(0);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
const rl = readline.createInterface({
|
|
345
|
+
input: process.stdin,
|
|
346
|
+
output: process.stdout,
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
rl.question(`\n¿Confirmás la actualización a v${targetVersionClean}? (Y/n): `, (answer) => {
|
|
350
|
+
rl.close();
|
|
351
|
+
if (answer.trim().toLowerCase() === 'n') {
|
|
352
|
+
console.log('Actualización cancelada.');
|
|
353
|
+
process.exit(0);
|
|
354
|
+
}
|
|
355
|
+
performUpdate(updatable.map(info => ({ name: info.name, version: targetVersionClean, isLocal: info.isLocal })), packageManager);
|
|
356
|
+
});
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
|
|
208
360
|
const rl = readline.createInterface({
|
|
209
361
|
input: process.stdin,
|
|
210
362
|
output: process.stdout,
|
|
211
363
|
});
|
|
212
364
|
|
|
213
|
-
|
|
214
|
-
rl.close();
|
|
215
|
-
const confirmed = answer.trim().toLowerCase() !== 'n';
|
|
365
|
+
const selectedUpdates = [];
|
|
216
366
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
367
|
+
async function askPackageUpdate(index) {
|
|
368
|
+
if (index >= updatable.length) {
|
|
369
|
+
rl.close();
|
|
370
|
+
if (selectedUpdates.length === 0) {
|
|
371
|
+
console.log('No se seleccionó ninguna actualización.');
|
|
372
|
+
process.exit(0);
|
|
373
|
+
}
|
|
221
374
|
|
|
222
|
-
|
|
223
|
-
|
|
375
|
+
console.log('\nSelección de actualizaciones:');
|
|
376
|
+
selectedUpdates.forEach(upd => {
|
|
377
|
+
console.log(` - ${upd.name} -> v${upd.version}`);
|
|
378
|
+
});
|
|
224
379
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
} else {
|
|
230
|
-
// npm
|
|
231
|
-
const args = updatable.map(info => {
|
|
232
|
-
return info.isLocal ? info.name : `${info.name}@latest`;
|
|
233
|
-
}).join(' ');
|
|
234
|
-
command = `npm install ${args}`;
|
|
235
|
-
}
|
|
380
|
+
if (dryRun) {
|
|
381
|
+
console.log('\n[Simulación] Se omitirá la descarga e instalación.');
|
|
382
|
+
process.exit(0);
|
|
383
|
+
}
|
|
236
384
|
|
|
237
|
-
|
|
385
|
+
const confirmRl = readline.createInterface({
|
|
386
|
+
input: process.stdin,
|
|
387
|
+
output: process.stdout,
|
|
388
|
+
});
|
|
238
389
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
390
|
+
confirmRl.question('\n¿Confirmás la actualización? (Y/n): ', (answer) => {
|
|
391
|
+
confirmRl.close();
|
|
392
|
+
if (answer.trim().toLowerCase() === 'n') {
|
|
393
|
+
console.log('Actualización cancelada.');
|
|
394
|
+
process.exit(0);
|
|
395
|
+
}
|
|
396
|
+
performUpdate(selectedUpdates, packageManager);
|
|
397
|
+
});
|
|
398
|
+
return;
|
|
245
399
|
}
|
|
246
|
-
|
|
400
|
+
|
|
401
|
+
const info = updatable[index];
|
|
402
|
+
console.log(`\n----------------------------------------`);
|
|
403
|
+
console.log(`¿A qué versión querés actualizar ${info.name}? (Actual: ${info.installedVersion})`);
|
|
404
|
+
|
|
405
|
+
const choices = info.higherVersions.map((version, i) => {
|
|
406
|
+
const isLatestStable = version === info.latestStable;
|
|
407
|
+
const isRc = /rc|alpha|beta/i.test(version);
|
|
408
|
+
const marker = isLatestStable ? ' ⭐ (última estable)' : (isRc ? ' 🧪 (pre-release)' : '');
|
|
409
|
+
return {
|
|
410
|
+
text: `v${version}${marker}`,
|
|
411
|
+
version,
|
|
412
|
+
};
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
choices.forEach((choice, i) => {
|
|
416
|
+
console.log(` [${i + 1}] ${choice.text}`);
|
|
417
|
+
});
|
|
418
|
+
console.log(` [s] Omitir este paquete`);
|
|
419
|
+
|
|
420
|
+
rl.question(`\nIngresá el número de opción (1-${choices.length}) o 's' para omitir [default 1]: `, (ans) => {
|
|
421
|
+
const cleanAns = ans.trim();
|
|
422
|
+
if (cleanAns.toLowerCase() === 's') {
|
|
423
|
+
console.log(`Omitiendo ${info.name}.`);
|
|
424
|
+
askPackageUpdate(index + 1);
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
let choiceIndex = 0;
|
|
429
|
+
if (cleanAns !== '') {
|
|
430
|
+
const parsedAns = parseInt(cleanAns, 10);
|
|
431
|
+
if (isNaN(parsedAns) || parsedAns < 1 || parsedAns > choices.length) {
|
|
432
|
+
console.log('Opción inválida. Reintentando...');
|
|
433
|
+
askPackageUpdate(index);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
choiceIndex = parsedAns - 1;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
const selectedVersion = choices[choiceIndex].version;
|
|
440
|
+
selectedUpdates.push({
|
|
441
|
+
name: info.name,
|
|
442
|
+
version: selectedVersion,
|
|
443
|
+
isLocal: info.isLocal,
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
askPackageUpdate(index + 1);
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
askPackageUpdate(0);
|
|
247
451
|
}
|
|
248
452
|
|
|
249
453
|
run();
|
|
@@ -22,7 +22,7 @@ export function MkTable({ data, columns, loading = false, onSort, sortField, sor
|
|
|
22
22
|
return null;
|
|
23
23
|
return (_jsxs(View, { style: [styles.pagination, { borderTopColor: theme.border }], children: [_jsx(TouchableOpacity, { disabled: pagination.current_page === 1, onPress: () => onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange((pagination.current_page || 1) - 1), style: [styles.pageBtn, { borderColor: theme.border }, pagination.current_page === 1 && { opacity: 0.4 }], children: _jsx(Text, { style: { color: theme.foreground, fontSize: 13 }, children: "\u2190 Anterior" }) }), _jsxs(Text, { style: { color: theme.mutedForeground, fontSize: 13 }, children: [pagination.current_page, " / ", pagination.last_page] }), _jsx(TouchableOpacity, { disabled: pagination.current_page === pagination.last_page, onPress: () => onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange((pagination.current_page || 1) + 1), style: [styles.pageBtn, { borderColor: theme.border }, pagination.current_page === pagination.last_page && { opacity: 0.4 }], children: _jsx(Text, { style: { color: theme.foreground, fontSize: 13 }, children: "Siguiente \u2192" }) })] }));
|
|
24
24
|
}, [loading, pagination, onPageChange, theme]);
|
|
25
|
-
return (_jsxs(View, { style: [styles.container, { borderColor: theme.border, borderRadius: tokens.shared.radius }, style], children: [renderHeader(), _jsx(FlatList, { data: data, renderItem: renderRow, keyExtractor: keyExtractor ||
|
|
25
|
+
return (_jsxs(View, { style: [styles.container, { borderColor: theme.border, borderRadius: tokens.shared.radius }, style], children: [renderHeader(), _jsx(FlatList, { data: data, renderItem: renderRow, keyExtractor: keyExtractor || defaultKeyExtractor, ListEmptyComponent: renderEmpty, ListFooterComponent: renderFooter, onRefresh: onRefresh, refreshing: refreshing, showsVerticalScrollIndicator: false })] }));
|
|
26
26
|
}
|
|
27
27
|
const MkRowActions = ({ options, onSelect, theme }) => {
|
|
28
28
|
const [open, setOpen] = React.useState(false);
|
|
@@ -44,4 +44,26 @@ const styles = StyleSheet.create({
|
|
|
44
44
|
actionsPopup: { position: 'absolute', right: 0, top: 24, minWidth: 140, borderWidth: 1, borderRadius: 8, padding: 4, elevation: 8, shadowColor: '#000', shadowOpacity: 0.1, shadowRadius: 8, shadowOffset: { width: 0, height: 4 }, zIndex: 50 },
|
|
45
45
|
actionItem: { flexDirection: 'row', alignItems: 'center', paddingVertical: 8, paddingHorizontal: 12, borderRadius: 4 },
|
|
46
46
|
});
|
|
47
|
+
/**
|
|
48
|
+
* Default row-key resolver. Tries `id`, then `uuid`, then `key`,
|
|
49
|
+
* then falls back to a positional placeholder. The positional
|
|
50
|
+
* fallback is unique per index within a render but will cause
|
|
51
|
+
* React to reconcile rows incorrectly across sort/filter — add a
|
|
52
|
+
* stable id to your data source to avoid this.
|
|
53
|
+
*/
|
|
54
|
+
function defaultKeyExtractor(item, index) {
|
|
55
|
+
const candidate = item;
|
|
56
|
+
const toKey = (v) => typeof v === 'string' || typeof v === 'number' ? String(v) : '';
|
|
57
|
+
if (toKey(candidate === null || candidate === void 0 ? void 0 : candidate.id))
|
|
58
|
+
return toKey(candidate.id);
|
|
59
|
+
if (toKey(candidate === null || candidate === void 0 ? void 0 : candidate.uuid))
|
|
60
|
+
return toKey(candidate.uuid);
|
|
61
|
+
if (toKey(candidate === null || candidate === void 0 ? void 0 : candidate.key))
|
|
62
|
+
return toKey(candidate.key);
|
|
63
|
+
// eslint-disable-next-line no-console
|
|
64
|
+
console.warn(`[MkTable] Row at index ${index} has no id/uuid/key. ` +
|
|
65
|
+
'Falling back to a positional key — add a stable id to fix ' +
|
|
66
|
+
'reconciliation bugs after sort/filter.');
|
|
67
|
+
return `mk-row-${index}`;
|
|
68
|
+
}
|
|
47
69
|
//# sourceMappingURL=MkTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MkTable.js","sourceRoot":"","sources":["../../src/components/MkTable.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"MkTable.js","sourceRoot":"","sources":["../../src/components/MkTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { MkAuthContextType } from '@makroz/core';
|
|
4
|
-
/**
|
|
5
|
-
* @deprecated Use the new Auth module located in `src/auth/` instead.
|
|
6
|
-
* This legacy context is kept for backward compatibility only and will be removed in future releases.
|
|
7
|
-
* Migrate to `MkAuthProvider` from `src/auth/MkAuthProvider.tsx`.
|
|
8
|
-
*/
|
|
9
4
|
export interface MkAuthProviderProps {
|
|
10
5
|
children: ReactNode;
|
|
11
6
|
endpoints?: {
|
|
@@ -19,16 +14,6 @@ export interface MkAuthProviderProps {
|
|
|
19
14
|
removeItem: (key: string) => Promise<void> | void;
|
|
20
15
|
};
|
|
21
16
|
}
|
|
22
|
-
/**
|
|
23
|
-
* @deprecated Use `MkAuthProvider` from `@makroz/mobile` (backed by `src/auth/MkAuthProvider.tsx`) instead.
|
|
24
|
-
* The new provider uses SecureStore for token persistence and scope-aware authentication.
|
|
25
|
-
* This legacy provider is kept for backward compatibility only and will be removed in future releases.
|
|
26
|
-
*/
|
|
27
17
|
export declare const MkAuthProvider: React.FC<MkAuthProviderProps>;
|
|
28
|
-
/**
|
|
29
|
-
* @deprecated Use `useMkAuth` from `@makroz/mobile` (backed by `src/auth/useMkAuth.ts`) instead.
|
|
30
|
-
* The new hook uses SecureStore and throws `'useMkAuth must be used within an <MkAuthProvider>'`.
|
|
31
|
-
* This legacy hook is kept for backward compatibility only and will be removed in future releases.
|
|
32
|
-
*/
|
|
33
18
|
export declare const useMkAuth: () => MkAuthContextType;
|
|
34
19
|
//# sourceMappingURL=MkAuthContext.d.ts.map
|
package/dist/hooks/useApi.d.ts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ApiStatus, MkResponse } from '@makroz/core';
|
|
2
|
+
import { type MkQueryParams } from '@makroz/core';
|
|
3
|
+
/**
|
|
4
|
+
* Mobile `useApi` hook — Expo/RN counterpart to `@makroz/web`'s.
|
|
5
|
+
*
|
|
6
|
+
* Same shape, same state machine, same AbortController wiring. The
|
|
7
|
+
* only platform-specific bits live in `globalThis.fetch` (RN's polyfill
|
|
8
|
+
* or the native one) — everything else is shared via
|
|
9
|
+
* `@makroz/core`'s `executeApiRequest`.
|
|
10
|
+
*
|
|
11
|
+
* Public return shape is byte-compatible with v1.2.3 so consumer
|
|
12
|
+
* call sites do not need to change.
|
|
13
|
+
*/
|
|
2
14
|
interface UseApiOptions {
|
|
3
15
|
baseUrl?: string;
|
|
4
16
|
headers?: Record<string, string>;
|
|
@@ -6,14 +18,16 @@ interface UseApiOptions {
|
|
|
6
18
|
export declare function useApi<T = unknown>(options?: UseApiOptions): {
|
|
7
19
|
status: ApiStatus;
|
|
8
20
|
data: T | null;
|
|
9
|
-
error:
|
|
21
|
+
error: string | null;
|
|
10
22
|
waiting: number;
|
|
11
23
|
loading: boolean;
|
|
12
|
-
get: <R = T>(endpoint: string, params?:
|
|
13
|
-
post: <R = T>(endpoint: string, body:
|
|
14
|
-
put: <R = T>(endpoint: string, body:
|
|
24
|
+
get: <R = T>(endpoint: string, params?: MkQueryParams) => Promise<MkResponse<R>>;
|
|
25
|
+
post: <R = T>(endpoint: string, body: unknown) => Promise<MkResponse<R>>;
|
|
26
|
+
put: <R = T>(endpoint: string, body: unknown) => Promise<MkResponse<R>>;
|
|
15
27
|
delete: (endpoint: string) => Promise<MkResponse<void>>;
|
|
16
28
|
remove: (endpoint: string) => Promise<MkResponse<void>>;
|
|
29
|
+
abort: () => void;
|
|
30
|
+
refetch: () => void;
|
|
17
31
|
};
|
|
18
32
|
export {};
|
|
19
33
|
//# sourceMappingURL=useApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAGnF;;;;;;;;;;GAUG;AAEH,UAAU,aAAa;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,wBAAgB,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,GAAE,aAAkB;;;;;;UA8GtD,CAAC,gBAAgB,MAAM,WAAW,aAAa;WAK/C,CAAC,gBAAgB,MAAM,QAAQ,OAAO;UAKtC,CAAC,gBAAgB,MAAM,QAAQ,OAAO;uBAK5B,MAAM;uBAAN,MAAM;;;EAkBxB"}
|
package/dist/hooks/useApi.js
CHANGED
|
@@ -1,81 +1,91 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { executeApiRequest, ApiCoreError } from '@makroz/core';
|
|
2
3
|
import { useMkApiContext } from '../context/MkApiContext';
|
|
3
|
-
const buildQueryParams = (params) => {
|
|
4
|
-
const query = new URLSearchParams();
|
|
5
|
-
if (!params)
|
|
6
|
-
return "";
|
|
7
|
-
if (params.q)
|
|
8
|
-
query.append('q', String(params.q));
|
|
9
|
-
if (params.sort)
|
|
10
|
-
query.append('sort', String(params.sort));
|
|
11
|
-
if (params.page)
|
|
12
|
-
query.append('page', String(params.page));
|
|
13
|
-
if (params.per_page)
|
|
14
|
-
query.append('per_page', String(params.per_page));
|
|
15
|
-
if (params.filter && typeof params.filter === 'object') {
|
|
16
|
-
Object.entries(params.filter).forEach(([field, value]) => {
|
|
17
|
-
if (typeof value === 'object' && value !== null) {
|
|
18
|
-
Object.entries(value).forEach(([op, opVal]) => {
|
|
19
|
-
query.append(`filter[${field}][${op}]`, String(opVal));
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
query.append(`filter[${field}]`, String(value));
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
const queryString = query.toString();
|
|
28
|
-
return queryString ? `?${queryString}` : "";
|
|
29
|
-
};
|
|
30
4
|
export function useApi(options = {}) {
|
|
31
5
|
const context = useMkApiContext();
|
|
6
|
+
const baseUrl = options.baseUrl || context.baseUrl;
|
|
7
|
+
const mergedHeaders = useMemo(() => { var _a, _b; return (Object.assign(Object.assign({}, ((_a = context.headers) !== null && _a !== void 0 ? _a : {})), ((_b = options.headers) !== null && _b !== void 0 ? _b : {}))); }, [context.headers, options.headers]);
|
|
8
|
+
// RN exposes the platform fetch via `globalThis.fetch` (or via
|
|
9
|
+
// `react-native-fetch-api` if installed). The wrapper does not
|
|
10
|
+
// bind it — RN's fetch is already bound to its module instance.
|
|
11
|
+
const fetchImpl = useMemo(() => globalThis.fetch, []);
|
|
32
12
|
const [status, setStatus] = useState('idle');
|
|
33
13
|
const [data, setData] = useState(null);
|
|
34
14
|
const [error, setError] = useState(null);
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const
|
|
15
|
+
const controllerRef = useRef(null);
|
|
16
|
+
const lastRequestRef = useRef(null);
|
|
17
|
+
const abort = useCallback(() => {
|
|
18
|
+
var _a;
|
|
19
|
+
(_a = controllerRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
20
|
+
controllerRef.current = null;
|
|
21
|
+
}, []);
|
|
22
|
+
const call = useCallback(async (req) => {
|
|
23
|
+
var _a, _b;
|
|
24
|
+
(_a = controllerRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
25
|
+
const controller = new AbortController();
|
|
26
|
+
controllerRef.current = controller;
|
|
27
|
+
lastRequestRef.current = req;
|
|
28
|
+
context.setWaiting(1, `call:${req.endpoint}`);
|
|
46
29
|
try {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
method,
|
|
53
|
-
|
|
54
|
-
|
|
30
|
+
setStatus('loading');
|
|
31
|
+
setError(null);
|
|
32
|
+
const result = await executeApiRequest({
|
|
33
|
+
baseUrl,
|
|
34
|
+
endpoint: req.endpoint,
|
|
35
|
+
method: req.method,
|
|
36
|
+
body: req.body,
|
|
37
|
+
params: req.params,
|
|
38
|
+
headers: mergedHeaders,
|
|
39
|
+
signal: controller.signal,
|
|
40
|
+
timeoutMs: req.timeoutMs,
|
|
41
|
+
fetchImpl,
|
|
55
42
|
});
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
throw new Error(result.message || 'API Error');
|
|
43
|
+
if (controller.signal.aborted && controllerRef.current !== controller) {
|
|
44
|
+
return result;
|
|
59
45
|
}
|
|
60
46
|
setData(result.data);
|
|
61
47
|
setStatus('success');
|
|
62
48
|
return result;
|
|
63
49
|
}
|
|
64
50
|
catch (err) {
|
|
65
|
-
|
|
66
|
-
|
|
51
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
if (controllerRef.current !== controller) {
|
|
55
|
+
throw err;
|
|
56
|
+
}
|
|
57
|
+
const message = err instanceof Error
|
|
58
|
+
? err.message
|
|
59
|
+
: typeof err === 'string'
|
|
60
|
+
? err
|
|
61
|
+
: 'Unknown fetch error';
|
|
62
|
+
setError(message);
|
|
67
63
|
setStatus('error');
|
|
68
|
-
throw err
|
|
64
|
+
throw err instanceof Error
|
|
65
|
+
? err
|
|
66
|
+
: new ApiCoreError(message, {
|
|
67
|
+
status: 0,
|
|
68
|
+
statusText: 'unknown',
|
|
69
|
+
endpoint: req.endpoint,
|
|
70
|
+
method: ((_b = req.method) !== null && _b !== void 0 ? _b : 'GET'),
|
|
71
|
+
});
|
|
69
72
|
}
|
|
70
73
|
finally {
|
|
71
|
-
context.setWaiting(-1, `-call:${endpoint}`);
|
|
74
|
+
context.setWaiting(-1, `-call:${req.endpoint}`);
|
|
75
|
+
if (controllerRef.current === controller) {
|
|
76
|
+
controllerRef.current = null;
|
|
77
|
+
}
|
|
72
78
|
}
|
|
73
|
-
}, [context]);
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
}, [baseUrl, mergedHeaders, fetchImpl, context]);
|
|
80
|
+
const refetch = useCallback(() => {
|
|
81
|
+
const last = lastRequestRef.current;
|
|
82
|
+
if (last)
|
|
83
|
+
void call(last);
|
|
84
|
+
}, [call]);
|
|
85
|
+
const get = useCallback((endpoint, params) => call({ endpoint, method: 'GET', params }), [call]);
|
|
86
|
+
const post = useCallback((endpoint, body) => call({ endpoint, method: 'POST', body }), [call]);
|
|
87
|
+
const put = useCallback((endpoint, body) => call({ endpoint, method: 'PUT', body }), [call]);
|
|
88
|
+
const deleteFn = useCallback((endpoint) => call({ endpoint, method: 'DELETE' }), [call]);
|
|
79
89
|
return {
|
|
80
90
|
status,
|
|
81
91
|
data,
|
|
@@ -86,7 +96,9 @@ export function useApi(options = {}) {
|
|
|
86
96
|
post,
|
|
87
97
|
put,
|
|
88
98
|
delete: deleteFn,
|
|
89
|
-
remove:
|
|
99
|
+
remove: deleteFn,
|
|
100
|
+
abort,
|
|
101
|
+
refetch,
|
|
90
102
|
};
|
|
91
103
|
}
|
|
92
104
|
//# sourceMappingURL=useApi.js.map
|
package/dist/hooks/useApi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useApi.js","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useApi.js","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ export interface InfiniteListOptions {
|
|
|
7
7
|
export declare function useMkInfiniteList(endpoint: string, options?: InfiniteListOptions): {
|
|
8
8
|
items: any[];
|
|
9
9
|
loading: boolean;
|
|
10
|
-
error:
|
|
10
|
+
error: string | null;
|
|
11
11
|
isRefreshing: boolean;
|
|
12
12
|
hasMore: boolean;
|
|
13
13
|
loadMore: () => void;
|
|
@@ -25,19 +25,7 @@ export interface MkListParams {
|
|
|
25
25
|
per_page?: number;
|
|
26
26
|
q?: string;
|
|
27
27
|
sort?: string;
|
|
28
|
-
filter?: Record<string,
|
|
29
|
-
}
|
|
30
|
-
/** Shape of the server response for paginated lists. */
|
|
31
|
-
export interface MkListResponse<T = unknown> {
|
|
32
|
-
data: T[];
|
|
33
|
-
__extraData?: {
|
|
34
|
-
current_page?: number;
|
|
35
|
-
last_page?: number;
|
|
36
|
-
per_page?: number;
|
|
37
|
-
total?: number;
|
|
38
|
-
[key: string]: unknown;
|
|
39
|
-
};
|
|
40
|
-
[key: string]: unknown;
|
|
28
|
+
filter?: Record<string, any>;
|
|
41
29
|
}
|
|
42
30
|
export interface MkListOptions {
|
|
43
31
|
/** Initial params. */
|
|
@@ -56,24 +44,18 @@ export declare function useMkList(endpoint: string, options?: MkListOptions): {
|
|
|
56
44
|
setSort: (sort: string) => void;
|
|
57
45
|
setPerPage: (per_page: number) => void;
|
|
58
46
|
resetFilters: () => void;
|
|
59
|
-
refresh: (extraParams?: MkListParams) => Promise<import("@makroz/core").MkResponse<
|
|
47
|
+
refresh: (extraParams?: MkListParams) => Promise<import("@makroz/core").MkResponse<unknown>>;
|
|
60
48
|
/** Pagination meta from __extraData */
|
|
61
|
-
pagination:
|
|
62
|
-
[key: string]: unknown;
|
|
63
|
-
current_page?: number;
|
|
64
|
-
last_page?: number;
|
|
65
|
-
per_page?: number;
|
|
66
|
-
total?: number;
|
|
67
|
-
};
|
|
49
|
+
pagination: any;
|
|
68
50
|
status: import("@makroz/core").ApiStatus;
|
|
69
|
-
data:
|
|
70
|
-
error:
|
|
51
|
+
data: any;
|
|
52
|
+
error: any;
|
|
71
53
|
waiting: number;
|
|
72
54
|
loading: boolean;
|
|
73
|
-
get:
|
|
74
|
-
post:
|
|
75
|
-
put:
|
|
76
|
-
delete: (endpoint: string) => Promise<import("@makroz/core").MkResponse<
|
|
77
|
-
remove: (endpoint: string) => Promise<import("@makroz/core").MkResponse<
|
|
55
|
+
get: (endpoint: string, params?: any) => Promise<import("@makroz/core").MkResponse<unknown>>;
|
|
56
|
+
post: (endpoint: string, body: any) => Promise<import("@makroz/core").MkResponse<unknown>>;
|
|
57
|
+
put: (endpoint: string, body: any) => Promise<import("@makroz/core").MkResponse<unknown>>;
|
|
58
|
+
delete: (endpoint: string) => Promise<import("@makroz/core").MkResponse<unknown>>;
|
|
59
|
+
remove: (endpoint: string) => Promise<import("@makroz/core").MkResponse<unknown>>;
|
|
78
60
|
};
|
|
79
61
|
//# sourceMappingURL=useMkList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMkList.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACvC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,WAAW,CAAC,EAAE;QACV,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B,sBAAsB;IACtB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;;;
|
|
1
|
+
{"version":3,"file":"useMkList.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACvC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,WAAW,CAAC,EAAE;QACV,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B,sBAAsB;IACtB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;;;uBA+B7B,MAAM,SAAS,GAAG;oBAQrB,MAAM;mBAIP,MAAM;oBAIL,MAAM;2BAIC,MAAM;;4BAjCxB,YAAY;IAiEhC,yFAAyF;;;;;;;;;;;;;;EAGhG"}
|
package/dist/hooks/useMkList.js
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
2
2
|
import { useApi } from './useApi';
|
|
3
3
|
export function useMkList(endpoint, options = {}) {
|
|
4
|
-
var _a;
|
|
5
4
|
const { initialParams = {}, autoFetch = true } = options;
|
|
6
5
|
const api = useApi();
|
|
7
6
|
const [params, setParams] = useState(Object.assign({ page: 1, per_page: 15 }, initialParams));
|
|
7
|
+
// R-PKG-023 (rc12): capture __extraData from the response envelope
|
|
8
|
+
// (top-level, sibling of `data`, per the @makroz/core MkResponse<T>
|
|
9
|
+
// contract). The previous implementation read from `api.data?.__extraData`
|
|
10
|
+
// which worked for the legacy nested shape but breaks once the Laravel
|
|
11
|
+
// backend emits the canonical top-level shape. We auto-detect: top-level
|
|
12
|
+
// first, then fallback to legacy nested.
|
|
13
|
+
const [extraData, setExtraData] = useState({});
|
|
8
14
|
const mountedRef = useRef(false);
|
|
9
|
-
const refresh = useCallback((extraParams = {}) => {
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
const refresh = useCallback(async (extraParams = {}) => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
const response = await api.get(endpoint, Object.assign(Object.assign({}, params), extraParams));
|
|
18
|
+
// Auto-detect response shape (R-PKG-023):
|
|
19
|
+
// - Top-level (rc12+ with flag): `response.__extraData` exists.
|
|
20
|
+
// - Legacy nested (rc11 and earlier): `response.data?.__extraData`.
|
|
21
|
+
const topLevel = response.__extraData;
|
|
22
|
+
const nested = (_a = response.data) === null || _a === void 0 ? void 0 : _a.__extraData;
|
|
23
|
+
setExtraData((_b = topLevel !== null && topLevel !== void 0 ? topLevel : nested) !== null && _b !== void 0 ? _b : {});
|
|
24
|
+
return response;
|
|
25
|
+
}, [endpoint, params, api]);
|
|
12
26
|
const setFilter = useCallback((field, value) => {
|
|
13
27
|
setParams(prev => (Object.assign(Object.assign({}, prev), { page: 1, filter: Object.assign(Object.assign({}, prev.filter), { [field]: value }) })));
|
|
14
28
|
}, []);
|
|
@@ -34,12 +48,12 @@ export function useMkList(endpoint, options = {}) {
|
|
|
34
48
|
// Skip the initial mount — let the consumer decide
|
|
35
49
|
if (!mountedRef.current) {
|
|
36
50
|
mountedRef.current = true;
|
|
37
|
-
refresh();
|
|
51
|
+
void refresh();
|
|
38
52
|
return;
|
|
39
53
|
}
|
|
40
|
-
refresh();
|
|
54
|
+
void refresh();
|
|
41
55
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
|
-
}, [params]);
|
|
56
|
+
}, [params, refresh]);
|
|
43
57
|
return Object.assign(Object.assign({}, api), { params,
|
|
44
58
|
setParams,
|
|
45
59
|
setFilter,
|
|
@@ -49,7 +63,7 @@ export function useMkList(endpoint, options = {}) {
|
|
|
49
63
|
setPerPage,
|
|
50
64
|
resetFilters,
|
|
51
65
|
refresh,
|
|
52
|
-
/** Pagination meta from __extraData */
|
|
53
|
-
pagination:
|
|
66
|
+
/** Pagination meta from __extraData (R-PKG-023: top-level, fallback to legacy nested) */
|
|
67
|
+
pagination: extraData });
|
|
54
68
|
}
|
|
55
69
|
//# sourceMappingURL=useMkList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMkList.js","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAuDlC,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,UAAyB,EAAE
|
|
1
|
+
{"version":3,"file":"useMkList.js","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMkList.test.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkList.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { renderHook, act, waitFor } from '@testing-library/react';
|
|
3
|
+
import { useMkList } from './useMkList';
|
|
4
|
+
// Mock the MkApiContext
|
|
5
|
+
const mockSetWaiting = vi.fn();
|
|
6
|
+
const mockContext = {
|
|
7
|
+
baseUrl: 'http://localhost:8000/api',
|
|
8
|
+
headers: {},
|
|
9
|
+
waiting: 0,
|
|
10
|
+
setWaiting: mockSetWaiting,
|
|
11
|
+
};
|
|
12
|
+
vi.mock('../context/MkApiContext', () => ({
|
|
13
|
+
useMkApiContext: () => mockContext,
|
|
14
|
+
}));
|
|
15
|
+
// Mock fetch globally
|
|
16
|
+
const mockFetch = vi.fn();
|
|
17
|
+
global.fetch = mockFetch;
|
|
18
|
+
describe('useMkList (R-PKG-023 response shape auto-detect, mobile)', () => {
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
vi.clearAllMocks();
|
|
21
|
+
mockFetch.mockReset();
|
|
22
|
+
});
|
|
23
|
+
it('reads __extraData from the canonical TOP-LEVEL location (R-PKG-023 rc12+)', async () => {
|
|
24
|
+
// Canonical top-level shape — the @makroz/core MkResponse<T> contract.
|
|
25
|
+
const mockResponse = {
|
|
26
|
+
success: true,
|
|
27
|
+
message: 'OK',
|
|
28
|
+
data: [
|
|
29
|
+
{ id: 1, name: 'Item 1' },
|
|
30
|
+
{ id: 2, name: 'Item 2' },
|
|
31
|
+
],
|
|
32
|
+
__extraData: {
|
|
33
|
+
total: 150,
|
|
34
|
+
current_page: 1,
|
|
35
|
+
last_page: 15,
|
|
36
|
+
per_page: 10,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
mockFetch.mockResolvedValueOnce({
|
|
40
|
+
ok: true,
|
|
41
|
+
json: () => Promise.resolve(mockResponse),
|
|
42
|
+
});
|
|
43
|
+
const { result } = renderHook(() => useMkList('/items', { autoFetch: false }));
|
|
44
|
+
await act(async () => {
|
|
45
|
+
await result.current.refresh();
|
|
46
|
+
});
|
|
47
|
+
await waitFor(() => {
|
|
48
|
+
expect(result.current.pagination).toEqual({
|
|
49
|
+
total: 150,
|
|
50
|
+
current_page: 1,
|
|
51
|
+
last_page: 15,
|
|
52
|
+
per_page: 10,
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
expect(result.current.data).toEqual(mockResponse.data);
|
|
56
|
+
});
|
|
57
|
+
it('falls back to the LEGACY nested __extraData location (rc11 and earlier)', async () => {
|
|
58
|
+
// Legacy nested shape — Laravel pre-rc12 wrapped `data` in a
|
|
59
|
+
// `{ data: [...], __extraData: {...} }` envelope.
|
|
60
|
+
const mockResponse = {
|
|
61
|
+
success: true,
|
|
62
|
+
message: 'OK',
|
|
63
|
+
data: {
|
|
64
|
+
data: [
|
|
65
|
+
{ id: 1, name: 'Item 1' },
|
|
66
|
+
{ id: 2, name: 'Item 2' },
|
|
67
|
+
],
|
|
68
|
+
__extraData: {
|
|
69
|
+
total: 75,
|
|
70
|
+
current_page: 1,
|
|
71
|
+
last_page: 8,
|
|
72
|
+
per_page: 10,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
mockFetch.mockResolvedValueOnce({
|
|
77
|
+
ok: true,
|
|
78
|
+
json: () => Promise.resolve(mockResponse),
|
|
79
|
+
});
|
|
80
|
+
const { result } = renderHook(() => useMkList('/items', { autoFetch: false }));
|
|
81
|
+
await act(async () => {
|
|
82
|
+
await result.current.refresh();
|
|
83
|
+
});
|
|
84
|
+
await waitFor(() => {
|
|
85
|
+
expect(result.current.pagination).toEqual({
|
|
86
|
+
total: 75,
|
|
87
|
+
current_page: 1,
|
|
88
|
+
last_page: 8,
|
|
89
|
+
per_page: 10,
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
it('returns empty pagination when neither top-level nor nested __extraData exists', async () => {
|
|
94
|
+
// Minimal response with no __extraData at all.
|
|
95
|
+
const mockResponse = {
|
|
96
|
+
success: true,
|
|
97
|
+
message: 'OK',
|
|
98
|
+
data: [{ id: 1, name: 'Item 1' }],
|
|
99
|
+
};
|
|
100
|
+
mockFetch.mockResolvedValueOnce({
|
|
101
|
+
ok: true,
|
|
102
|
+
json: () => Promise.resolve(mockResponse),
|
|
103
|
+
});
|
|
104
|
+
const { result } = renderHook(() => useMkList('/items', { autoFetch: false }));
|
|
105
|
+
await act(async () => {
|
|
106
|
+
await result.current.refresh();
|
|
107
|
+
});
|
|
108
|
+
await waitFor(() => {
|
|
109
|
+
expect(result.current.data).toEqual([{ id: 1, name: 'Item 1' }]);
|
|
110
|
+
});
|
|
111
|
+
expect(result.current.pagination).toEqual({});
|
|
112
|
+
});
|
|
113
|
+
it('prefers top-level __extraData over nested when both are present (defensive)', async () => {
|
|
114
|
+
// Edge case: backend accidentally emits BOTH top-level AND nested.
|
|
115
|
+
// Top-level wins because that's the canonical contract.
|
|
116
|
+
const mockResponse = {
|
|
117
|
+
success: true,
|
|
118
|
+
message: 'OK',
|
|
119
|
+
data: {
|
|
120
|
+
data: [{ id: 1 }],
|
|
121
|
+
__extraData: { total: 99, source: 'nested' },
|
|
122
|
+
},
|
|
123
|
+
__extraData: { total: 100, source: 'top-level' },
|
|
124
|
+
};
|
|
125
|
+
mockFetch.mockResolvedValueOnce({
|
|
126
|
+
ok: true,
|
|
127
|
+
json: () => Promise.resolve(mockResponse),
|
|
128
|
+
});
|
|
129
|
+
const { result } = renderHook(() => useMkList('/items', { autoFetch: false }));
|
|
130
|
+
await act(async () => {
|
|
131
|
+
await result.current.refresh();
|
|
132
|
+
});
|
|
133
|
+
await waitFor(() => {
|
|
134
|
+
expect(result.current.pagination).toEqual({ total: 100, source: 'top-level' });
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=useMkList.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMkList.test.js","sourceRoot":"","sources":["../../src/hooks/useMkList.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MkThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoE,MAAM,OAAO,CAAC;AACzF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAID,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"MkThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoE,MAAM,OAAO,CAAC;AACzF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAID,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,CAa1F,CAAC;AAEF,eAAO,MAAM,UAAU,wBAMtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MkThemeProvider.js","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzF,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC,MAAM,YAAY,GAAG,aAAa,CAA+B,SAAS,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"MkThemeProvider.js","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzF,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC,MAAM,YAAY,GAAG,aAAa,CAA+B,SAAS,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,eAAe,GAAmE,CAAC,EAC9F,QAAQ,EACR,WAAW,GAAG,KAAK,EACpB,EAAE,EAAE;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7E,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAE5F,OAAO,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAyB,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -4,7 +4,6 @@ rnMocks();
|
|
|
4
4
|
import { describe, it, expect } from 'vitest';
|
|
5
5
|
import { renderHook, act } from '@testing-library/react';
|
|
6
6
|
import { MkThemeProvider, useMkTheme } from './MkThemeProvider';
|
|
7
|
-
import { tokens } from '@makroz/core';
|
|
8
7
|
describe('MkThemeProvider referential stability', () => {
|
|
9
8
|
it('should keep the context value reference stable across renders', () => {
|
|
10
9
|
const wrapper = ({ children }) => (_jsx(MkThemeProvider, { children: children }));
|
|
@@ -32,30 +31,4 @@ describe('MkThemeProvider referential stability', () => {
|
|
|
32
31
|
expect(result.current.toggleTheme).toBe(firstToggle);
|
|
33
32
|
});
|
|
34
33
|
});
|
|
35
|
-
describe('MkThemeProvider custom themes override', () => {
|
|
36
|
-
it('should merge customLightTheme overrides with the default light tokens', () => {
|
|
37
|
-
const customLightTheme = { primary: '#1e40af' };
|
|
38
|
-
const wrapper = ({ children }) => (_jsx(MkThemeProvider, { customLightTheme: customLightTheme, children: children }));
|
|
39
|
-
const { result } = renderHook(() => useMkTheme(), { wrapper });
|
|
40
|
-
expect(result.current.theme.primary).toBe('#1e40af');
|
|
41
|
-
// Check fallback to default tokens
|
|
42
|
-
expect(result.current.theme.background).toBe(tokens.light.background);
|
|
43
|
-
});
|
|
44
|
-
it('should merge customDarkTheme overrides and toggle dynamically', () => {
|
|
45
|
-
const customLightTheme = { primary: '#1e40af' };
|
|
46
|
-
const customDarkTheme = { primary: '#3b82f6' };
|
|
47
|
-
const wrapper = ({ children }) => (_jsx(MkThemeProvider, { customLightTheme: customLightTheme, customDarkTheme: customDarkTheme, children: children }));
|
|
48
|
-
const { result } = renderHook(() => useMkTheme(), { wrapper });
|
|
49
|
-
// Initially light
|
|
50
|
-
expect(result.current.theme.primary).toBe('#1e40af');
|
|
51
|
-
// Toggle to dark
|
|
52
|
-
act(() => {
|
|
53
|
-
result.current.toggleTheme();
|
|
54
|
-
});
|
|
55
|
-
expect(result.current.isDark).toBe(true);
|
|
56
|
-
expect(result.current.theme.primary).toBe('#3b82f6');
|
|
57
|
-
// Check fallback to default dark tokens
|
|
58
|
-
expect(result.current.theme.background).toBe(tokens.dark.background);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
34
|
//# sourceMappingURL=MkThemeProvider.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MkThemeProvider.test.js","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,CAAC;AAEV,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"MkThemeProvider.test.js","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,CAAC;AAEV,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEhE,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAiC,EAAE,EAAE,CAAC,CAC7D,KAAC,eAAe,cAAE,QAAQ,GAAmB,CAChD,CAAC;QAEF,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;QAElC,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;QAEnC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAiC,EAAE,EAAE,CAAC,CAC7D,KAAC,eAAe,cAAE,QAAQ,GAAmB,CAChD,CAAC;QAEF,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;QAElC,GAAG,CAAC,GAAG,EAAE;YACL,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAC/D,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAiC,EAAE,EAAE,CAAC,CAC7D,KAAC,eAAe,cAAE,QAAQ,GAAmB,CAChD,CAAC;QAEF,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAE/C,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QAE7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@makroz/mobile",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"description": "React Native UI components and hooks for MK-Director mobile applications",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"@react-native-async-storage/async-storage": "^3.0.2",
|
|
34
34
|
"@shopify/flash-list": "^2.0.0",
|
|
35
35
|
"react-native-svg": "^15.15.4",
|
|
36
|
-
"@makroz/core": "1.1.
|
|
36
|
+
"@makroz/core": "1.1.6"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"@shopify/flash-list": ">=2.0.0",
|
|
@@ -45,7 +45,13 @@
|
|
|
45
45
|
"expo-sqlite": "~56.0.5",
|
|
46
46
|
"expo-updates": "~56.0.19",
|
|
47
47
|
"react": "^19.0.0",
|
|
48
|
-
"react-native": "0.85.x"
|
|
48
|
+
"react-native": "0.85.x",
|
|
49
|
+
"react-native-buffer": "^6.0.1"
|
|
50
|
+
},
|
|
51
|
+
"peerDependenciesMeta": {
|
|
52
|
+
"react-native-buffer": {
|
|
53
|
+
"optional": true
|
|
54
|
+
}
|
|
49
55
|
},
|
|
50
56
|
"devDependencies": {
|
|
51
57
|
"@testing-library/react": "^16.3.2",
|
|
@@ -55,6 +61,7 @@
|
|
|
55
61
|
"@vitest/coverage-v8": "^3.0.0",
|
|
56
62
|
"esbuild": "^0.25.0",
|
|
57
63
|
"eslint": "^9.20.0",
|
|
64
|
+
"jsdom": "^24.0.0",
|
|
58
65
|
"react": "^19.0.0",
|
|
59
66
|
"react-test-renderer": "^19.2.7",
|
|
60
67
|
"typescript": "^5.7.0",
|