@neovici/cosmoz-form 2.6.0 → 2.8.0
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/inputs/autocomplete.d.ts +5 -4
- package/dist/inputs/autocomplete.d.ts.map +1 -1
- package/dist/inputs/autocomplete.js +3 -3
- package/dist/inputs/common.d.ts +1 -0
- package/dist/inputs/common.d.ts.map +1 -1
- package/dist/inputs/common.js +2 -1
- package/dist/test/use-items.test.js +163 -11
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import '@neovici/cosmoz-autocomplete';
|
|
2
2
|
import { Resolvable } from '../types';
|
|
3
|
-
type OptionsOpts<T, V> = {
|
|
3
|
+
type OptionsOpts<T, V, C> = {
|
|
4
4
|
active: boolean;
|
|
5
5
|
query: string;
|
|
6
6
|
value: V;
|
|
7
7
|
values: T;
|
|
8
|
+
context: C;
|
|
8
9
|
};
|
|
9
|
-
export interface AutocompleteProps<T extends object, K extends keyof T, V extends T[K]> {
|
|
10
|
-
options?: Resolvable<unknown[] | false | undefined, [OptionsOpts<T, V>]>;
|
|
10
|
+
export interface AutocompleteProps<T extends object, K extends keyof T, V extends T[K], C extends object> {
|
|
11
|
+
options?: Resolvable<unknown[] | false | undefined, [OptionsOpts<T, V, C>]>;
|
|
11
12
|
limit?: number;
|
|
12
13
|
textProperty?: string;
|
|
13
14
|
valueProperty?: string;
|
|
@@ -22,6 +23,6 @@ export interface AutocompleteProps<T extends object, K extends keyof T, V extend
|
|
|
22
23
|
externalSearch?: boolean;
|
|
23
24
|
itemHeight?: number | 'auto';
|
|
24
25
|
}
|
|
25
|
-
export declare const autocomplete: <T extends object, K extends keyof T, V extends T[K]>({ field, value, values, onChange: update, context, ...thru }: import("..").InputProps<T, K, V,
|
|
26
|
+
export declare const autocomplete: <T extends object, K extends keyof T, V extends T[K], C extends object>({ field, value, values, onChange: update, context, ...thru }: import("..").InputProps<T, K, V, C>) => import("..").Renderable;
|
|
26
27
|
export {};
|
|
27
28
|
//# sourceMappingURL=autocomplete.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../src/inputs/autocomplete.ts"],"names":[],"mappings":"AAKA,OAAO,8BAA8B,CAAC;AAEtC,OAAO,EAAiB,UAAU,EAAE,MAAM,UAAU,CAAC;AAIrD,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../src/inputs/autocomplete.ts"],"names":[],"mappings":"AAKA,OAAO,8BAA8B,CAAC;AAEtC,OAAO,EAAiB,UAAU,EAAE,MAAM,UAAU,CAAC;AAIrD,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,EAAE,CAAC,CAAC;CACX,CAAC;AAEF,MAAM,WAAW,iBAAiB,CACjC,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACd,CAAC,SAAS,MAAM;IAEhB,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAOD,eAAO,MAAM,YAAY,GACvB,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,+HAuEtE,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { live } from 'lit-html/directives/live.js';
|
|
|
5
5
|
import '@neovici/cosmoz-autocomplete';
|
|
6
6
|
import { input } from './base';
|
|
7
7
|
import { renderContents } from './render';
|
|
8
|
-
export const autocomplete = input(({ id, label, noLabelFloat, alwaysFloatLabel, error, warning, suffix, disabled, onChange, options, limit, min, textProperty, valueProperty, value, values, itemRenderer, chipRenderer, keepOpened, keepQuery, placeholder, wrap, showSingle, preserveOrder, title, textual, description, externalSearch, itemHeight, ...thru }) => {
|
|
8
|
+
export const autocomplete = input(({ id, label, noLabelFloat, alwaysFloatLabel, error, warning, suffix, disabled, onChange, options, limit, min, textProperty, valueProperty, value, values, itemRenderer, chipRenderer, keepOpened, keepQuery, placeholder, wrap, showSingle, preserveOrder, title, textual, description, externalSearch, itemHeight, context, ...thru }) => {
|
|
9
9
|
return html `<cosmoz-autocomplete
|
|
10
10
|
class="input input-autocomplete"
|
|
11
11
|
?data-warning=${!!warning}
|
|
@@ -25,8 +25,8 @@ export const autocomplete = input(({ id, label, noLabelFloat, alwaysFloatLabel,
|
|
|
25
25
|
.errorMessage=${error}
|
|
26
26
|
.label=${label}
|
|
27
27
|
.value=${live(value)}
|
|
28
|
-
.source=${guard([options, value, values], () => typeof options === 'function'
|
|
29
|
-
? (info) => options({ ...thru, ...info, value, values })
|
|
28
|
+
.source=${guard([options, value, values, context], () => typeof options === 'function'
|
|
29
|
+
? (info) => options({ ...thru, ...info, value, values, context })
|
|
30
30
|
: options)}
|
|
31
31
|
.textProperty=${textProperty}
|
|
32
32
|
.valueProperty=${valueProperty}
|
package/dist/inputs/common.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export interface CommonFieldProps<T extends object, K extends keyof T, V extends
|
|
|
12
12
|
max?: Invokable<T, Field<T, K, V, C>, V, number | string, C>;
|
|
13
13
|
autosize?: boolean;
|
|
14
14
|
noSpinner?: boolean;
|
|
15
|
+
autocomplete?: string;
|
|
15
16
|
}
|
|
16
17
|
export interface Common<T extends object, K extends keyof T, V extends T[K]> extends Omit<InputBaseOpts<T, K, V>, 'onChange'> {
|
|
17
18
|
type?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/inputs/common.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAC/B,OAAO,gCAAgC,CAAC;AAQxC,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIhE,MAAM,WAAW,gBAAgB,CAChC,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACd,CAAC,SAAS,MAAM,GAAG,MAAM;IAEzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7D,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/inputs/common.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAC/B,OAAO,gCAAgC,CAAC;AAQxC,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIhE,MAAM,WAAW,gBAAgB,CAChC,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACd,CAAC,SAAS,MAAM,GAAG,MAAM;IAEzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7D,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,MAAM,CACtB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CACb,SAAQ,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACzE,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,yCAmDtB,CAAC;AAEF,eAAO,MAAM,IAAI,GACf,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,oIAQpD,CAAC;AACF,eAAO,MAAM,MAAM,GACjB,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,oIAcpD,CAAC;AACF,eAAO,MAAM,IAAI,GACf,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,oIASpD,CAAC;AACF,eAAO,MAAM,KAAK,GAChB,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,oIASpD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,QAAQ,GACnB,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,oIAgCpD,CAAC"}
|
package/dist/inputs/common.js
CHANGED
|
@@ -8,7 +8,7 @@ import { input } from './base';
|
|
|
8
8
|
import { renderContents } from './render';
|
|
9
9
|
export const common = (props) => {
|
|
10
10
|
const { value, values, onFocus, onInput, context, ...field } = props;
|
|
11
|
-
const { id, type = 'text', label, placeholder, noLabelFloat, alwaysFloatLabel, error, prefix, suffix, warning, allowedPattern, step, disabled, maxlength, min, max, autosize, noSpinner, title, description, } = field;
|
|
11
|
+
const { id, type = 'text', label, placeholder, noLabelFloat, alwaysFloatLabel, error, prefix, suffix, warning, allowedPattern, step, disabled, maxlength, min, max, autosize, noSpinner, autocomplete, title, description, } = field;
|
|
12
12
|
return html `<cosmoz-input
|
|
13
13
|
class="input input-common input-${type}"
|
|
14
14
|
name=${id}
|
|
@@ -29,6 +29,7 @@ export const common = (props) => {
|
|
|
29
29
|
maxlength=${ifDefined(maxlength)}
|
|
30
30
|
min=${ifDefined(invoke(min, value, values, field, context))}
|
|
31
31
|
max=${ifDefined(invoke(max, value, values, field, context))}
|
|
32
|
+
autocomplete=${ifDefined(autocomplete)}
|
|
32
33
|
@focus=${onFocus}
|
|
33
34
|
@input=${onInput}
|
|
34
35
|
>${renderContents({ prefix, suffix, warning, description })}</cosmoz-input
|
|
@@ -258,6 +258,100 @@ suite('useItems', () => {
|
|
|
258
258
|
}, 'normal rules are applied after load');
|
|
259
259
|
});
|
|
260
260
|
});
|
|
261
|
+
suite('append', () => {
|
|
262
|
+
test('appends items to the list', async () => {
|
|
263
|
+
result.current.append([{ name: 'appended' }]);
|
|
264
|
+
await nextUpdate();
|
|
265
|
+
assert.equal(result.current.items.length, 2);
|
|
266
|
+
assert.equal(result.current.items[0].name, 'initial');
|
|
267
|
+
assert.equal(result.current.items[1].name, 'appended');
|
|
268
|
+
});
|
|
269
|
+
test('appends multiple items at once', async () => {
|
|
270
|
+
result.current.append([{ name: 'a' }, { name: 'b' }]);
|
|
271
|
+
await nextUpdate();
|
|
272
|
+
assert.equal(result.current.items.length, 3);
|
|
273
|
+
assert.equal(result.current.items[0].name, 'initial');
|
|
274
|
+
assert.equal(result.current.items[1].name, 'a');
|
|
275
|
+
assert.equal(result.current.items[2].name, 'b');
|
|
276
|
+
});
|
|
277
|
+
test('rules are applied to appended items', async () => {
|
|
278
|
+
result.current.append([{ name: 'appended' }]);
|
|
279
|
+
await nextUpdate();
|
|
280
|
+
assert.equal(result.current.items[1].nameLength, 8);
|
|
281
|
+
assert.equal(result.current.items[1].doubledNameLength, 16);
|
|
282
|
+
assert.equal(result.current.items[1].history, '#1: appended(8)');
|
|
283
|
+
});
|
|
284
|
+
test('appended items have correct indexes', async () => {
|
|
285
|
+
result.current.append([{ name: 'a' }, { name: 'b' }]);
|
|
286
|
+
await nextUpdate();
|
|
287
|
+
assert.equal(result.current.items[1].index, 1);
|
|
288
|
+
assert.equal(result.current.items[2].index, 2);
|
|
289
|
+
});
|
|
290
|
+
test('one-off rules are applied to appended items', async () => {
|
|
291
|
+
result.current.append([{ name: 'appended' }]);
|
|
292
|
+
await nextUpdate();
|
|
293
|
+
assert.equal(result.current.items[1].originalName, 'appended');
|
|
294
|
+
assert.equal(result.current.items[1].id, 1);
|
|
295
|
+
});
|
|
296
|
+
test('existing items are not re-processed on append', async () => {
|
|
297
|
+
result.current.append([{ name: 'appended' }]);
|
|
298
|
+
await nextUpdate();
|
|
299
|
+
assert.equal(result.current.items[0].name, 'initial');
|
|
300
|
+
assert.equal(result.current.items[0].nameLength, 7);
|
|
301
|
+
assert.equal(result.current.items[0].history, '#0: initial(7)');
|
|
302
|
+
assert.equal(result.current.items[0].originalName, 'initial');
|
|
303
|
+
assert.equal(result.current.items[0].id, 0);
|
|
304
|
+
assert.equal(result.current.items[0].index, 0);
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
suite('prepend', () => {
|
|
308
|
+
test('prepends items to the list', async () => {
|
|
309
|
+
result.current.prepend([{ name: 'prepended' }]);
|
|
310
|
+
await nextUpdate();
|
|
311
|
+
assert.equal(result.current.items.length, 2);
|
|
312
|
+
assert.equal(result.current.items[0].name, 'prepended');
|
|
313
|
+
assert.equal(result.current.items[1].name, 'initial');
|
|
314
|
+
});
|
|
315
|
+
test('prepends multiple items at once', async () => {
|
|
316
|
+
result.current.prepend([{ name: 'a' }, { name: 'b' }]);
|
|
317
|
+
await nextUpdate();
|
|
318
|
+
assert.equal(result.current.items.length, 3);
|
|
319
|
+
assert.equal(result.current.items[0].name, 'a');
|
|
320
|
+
assert.equal(result.current.items[1].name, 'b');
|
|
321
|
+
assert.equal(result.current.items[2].name, 'initial');
|
|
322
|
+
});
|
|
323
|
+
test('rules are applied to prepended items', async () => {
|
|
324
|
+
result.current.prepend([{ name: 'prepended' }]);
|
|
325
|
+
await nextUpdate();
|
|
326
|
+
assert.equal(result.current.items[0].nameLength, 9);
|
|
327
|
+
assert.equal(result.current.items[0].doubledNameLength, 18);
|
|
328
|
+
assert.equal(result.current.items[0].history, '#0: prepended(9)');
|
|
329
|
+
});
|
|
330
|
+
test('prepended items have correct indexes', async () => {
|
|
331
|
+
result.current.prepend([{ name: 'a' }, { name: 'b' }]);
|
|
332
|
+
await nextUpdate();
|
|
333
|
+
assert.equal(result.current.items[0].index, 0);
|
|
334
|
+
assert.equal(result.current.items[1].index, 1);
|
|
335
|
+
});
|
|
336
|
+
test('existing items are re-indexed after prepend', async () => {
|
|
337
|
+
result.current.prepend([{ name: 'prepended' }]);
|
|
338
|
+
await nextUpdate();
|
|
339
|
+
assert.equal(result.current.items[1].index, 1);
|
|
340
|
+
assert.equal(result.current.items[1].history, '#0: initial(7) -> #1: initial(7)');
|
|
341
|
+
});
|
|
342
|
+
test('one-off rules are applied to prepended items', async () => {
|
|
343
|
+
result.current.prepend([{ name: 'prepended' }]);
|
|
344
|
+
await nextUpdate();
|
|
345
|
+
assert.equal(result.current.items[0].originalName, 'prepended');
|
|
346
|
+
assert.equal(result.current.items[0].id, 1);
|
|
347
|
+
});
|
|
348
|
+
test('one-off rules are not re-applied to existing items on prepend', async () => {
|
|
349
|
+
result.current.prepend([{ name: 'prepended' }]);
|
|
350
|
+
await nextUpdate();
|
|
351
|
+
assert.equal(result.current.items[1].originalName, 'initial');
|
|
352
|
+
assert.equal(result.current.items[1].id, 0);
|
|
353
|
+
});
|
|
354
|
+
});
|
|
261
355
|
suite('touched', () => {
|
|
262
356
|
test('initial items are not touched', async () => {
|
|
263
357
|
assert.isTrue(!result.current.items[0][TOUCHED]);
|
|
@@ -272,6 +366,16 @@ suite('useItems', () => {
|
|
|
272
366
|
await nextUpdate();
|
|
273
367
|
assert.isTrue(result.current.items[1][TOUCHED]);
|
|
274
368
|
});
|
|
369
|
+
test('appended items are not individually touched', async () => {
|
|
370
|
+
result.current.append([{ name: 'appended' }]);
|
|
371
|
+
await nextUpdate();
|
|
372
|
+
assert.isTrue(!result.current.items[1][TOUCHED]);
|
|
373
|
+
});
|
|
374
|
+
test('prepended items are not individually touched', async () => {
|
|
375
|
+
result.current.prepend([{ name: 'prepended' }]);
|
|
376
|
+
await nextUpdate();
|
|
377
|
+
assert.isTrue(!result.current.items[0][TOUCHED]);
|
|
378
|
+
});
|
|
275
379
|
test('replaced items are not touched', async () => {
|
|
276
380
|
result.current.setItems([{ name: 'replaced' }]);
|
|
277
381
|
await nextUpdate();
|
|
@@ -302,6 +406,16 @@ suite('useItems', () => {
|
|
|
302
406
|
await nextUpdate();
|
|
303
407
|
assert.isTrue(result.current.touched);
|
|
304
408
|
});
|
|
409
|
+
test('touched after append', async () => {
|
|
410
|
+
result.current.append([{ name: 'appended' }]);
|
|
411
|
+
await nextUpdate();
|
|
412
|
+
assert.isTrue(result.current.touched);
|
|
413
|
+
});
|
|
414
|
+
test('touched after prepend', async () => {
|
|
415
|
+
result.current.prepend([{ name: 'prepended' }]);
|
|
416
|
+
await nextUpdate();
|
|
417
|
+
assert.isTrue(result.current.touched);
|
|
418
|
+
});
|
|
305
419
|
test('not touched after replace', async () => {
|
|
306
420
|
result.current.setItems([{ name: 'replaced' }]);
|
|
307
421
|
await nextUpdate();
|
|
@@ -371,16 +485,55 @@ suite('useItems with context', () => {
|
|
|
371
485
|
await waitUntil(() => result.current.items[0].score === 100, 'score should update when context threshold changes');
|
|
372
486
|
assert.equal(result.current.items[0].score, 100);
|
|
373
487
|
});
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
488
|
+
suite('append', () => {
|
|
489
|
+
test('applies context-aware rule to new items', async () => {
|
|
490
|
+
const ctx = { org: 'test' };
|
|
491
|
+
const { result, nextUpdate } = await renderHook(() => useItems({
|
|
492
|
+
initial: [],
|
|
493
|
+
rules: [labelRule],
|
|
494
|
+
context: ctx,
|
|
495
|
+
}));
|
|
496
|
+
result.current.append([{ name: 'new' }]);
|
|
497
|
+
await nextUpdate();
|
|
498
|
+
assert.equal(result.current.items[0].label, 'test/new');
|
|
499
|
+
});
|
|
500
|
+
test('applies context-aware rule to appended items alongside existing ones', async () => {
|
|
501
|
+
const ctx = { org: 'acme' };
|
|
502
|
+
const { result, nextUpdate } = await renderHook(() => useItems({
|
|
503
|
+
initial: [{ name: 'first' }],
|
|
504
|
+
rules: [labelRule],
|
|
505
|
+
context: ctx,
|
|
506
|
+
}));
|
|
507
|
+
result.current.append([{ name: 'second' }]);
|
|
508
|
+
await nextUpdate();
|
|
509
|
+
assert.equal(result.current.items[0].label, 'acme/first');
|
|
510
|
+
assert.equal(result.current.items[1].label, 'acme/second');
|
|
511
|
+
});
|
|
512
|
+
});
|
|
513
|
+
suite('prepend', () => {
|
|
514
|
+
test('applies context-aware rule to prepended items', async () => {
|
|
515
|
+
const ctx = { org: 'test' };
|
|
516
|
+
const { result, nextUpdate } = await renderHook(() => useItems({
|
|
517
|
+
initial: [],
|
|
518
|
+
rules: [labelRule],
|
|
519
|
+
context: ctx,
|
|
520
|
+
}));
|
|
521
|
+
result.current.prepend([{ name: 'new' }]);
|
|
522
|
+
await nextUpdate();
|
|
523
|
+
assert.equal(result.current.items[0].label, 'test/new');
|
|
524
|
+
});
|
|
525
|
+
test('existing items keep context-aware labels when index changes', async () => {
|
|
526
|
+
const ctx = { org: 'acme' };
|
|
527
|
+
const { result, nextUpdate } = await renderHook(() => useItems({
|
|
528
|
+
initial: [{ name: 'existing' }],
|
|
529
|
+
rules: [labelRule],
|
|
530
|
+
context: ctx,
|
|
531
|
+
}));
|
|
532
|
+
result.current.prepend([{ name: 'new' }]);
|
|
533
|
+
await nextUpdate();
|
|
534
|
+
assert.equal(result.current.items[0].label, 'acme/new', 'prepended item gets correct label');
|
|
535
|
+
assert.equal(result.current.items[1].label, 'acme/existing', 'existing item keeps its label since labelRule does not depend on index');
|
|
536
|
+
});
|
|
384
537
|
});
|
|
385
538
|
test('backward compat — rules without context arg work unchanged', async () => {
|
|
386
539
|
const rules = [
|
|
@@ -392,5 +545,4 @@ suite('useItems with context', () => {
|
|
|
392
545
|
}));
|
|
393
546
|
assert.equal(result.current.items[0].nameLength, 5);
|
|
394
547
|
});
|
|
395
|
-
// TODO: add tests for append and prepend
|
|
396
548
|
});
|
package/dist/types/index.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export type Codec<T extends object, K extends keyof T, V extends T[K], C extends
|
|
|
29
29
|
Invoked<T, Field<T, K, V, C>, V, unknown, C>,
|
|
30
30
|
Invoked<T, Field<T, K, V, C>, unknown, V, C>
|
|
31
31
|
];
|
|
32
|
-
export interface Field<T extends object, K extends keyof T, V extends T[K] = T[K], C extends object = object> extends CommonFieldProps<T, K, V, C>, TextareaProps, AutocompleteProps<T, K, V>, FileProps<T, K, V>, ReadOnlyNumberProps {
|
|
32
|
+
export interface Field<T extends object, K extends keyof T, V extends T[K] = T[K], C extends object = object> extends CommonFieldProps<T, K, V, C>, TextareaProps, AutocompleteProps<T, K, V, C>, FileProps<T, K, V>, ReadOnlyNumberProps {
|
|
33
33
|
id: K;
|
|
34
34
|
path?: keyof T;
|
|
35
35
|
label?: Invokable<T, Field<T, K, V, C>, V, string, C>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|