Skip to content

Commit 65c52bf

Browse files
committed
Add Glint support to the {{au-inputmask}} modifier
1 parent 9d209c8 commit 65c52bf

File tree

6 files changed

+96
-57
lines changed

6 files changed

+96
-57
lines changed

addon/modifiers/au-inputmask.js

-15
This file was deleted.

addon/modifiers/au-inputmask.ts

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { modifier } from 'ember-modifier';
2+
import Inputmask from 'inputmask';
3+
4+
interface Args {
5+
// TODO: we could probably expose the underlying Inputmask options types here?
6+
// Not sure if we want to do that, since it requires a `@types` package as well?
7+
options: object;
8+
}
9+
10+
export default modifier(function auInputmask(
11+
element: HTMLElement,
12+
positional,
13+
{ options = {} }: Args,
14+
) {
15+
const inputmask = new Inputmask(options);
16+
17+
inputmask.mask(element);
18+
19+
return () => {
20+
element.inputmask?.remove();
21+
};
22+
});

addon/template-registry.ts

+2
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import type AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolb
4646

4747
// Modifiers
4848
import type AuDateInputModifier from '@appuniversum/ember-appuniversum/modifiers/au-date-input';
49+
import type AuInputMaskModifier from '@appuniversum/ember-appuniversum/modifiers/au-inputmask';
4950

5051
export default interface AppuniversumRegistry {
5152
// Components
@@ -96,4 +97,5 @@ export default interface AppuniversumRegistry {
9697

9798
// Modifiers
9899
'au-date-input': typeof AuDateInputModifier;
100+
'au-inputmask': typeof AuInputMaskModifier;
99101
}

tests/integration/components/loose-mode-test.ts

+8
Original file line numberDiff line numberDiff line change
@@ -322,4 +322,12 @@ module('Integration | Modifier | Loose mode', function (hooks) {
322322

323323
assert.dom('[data-test-date-input]').hasValue('02-02-2023');
324324
});
325+
326+
test('`{{au-inputmask}}` resolves in loose mode', async function (assert) {
327+
await render(hbs`
328+
<AuInput data-test-inputmask value="123" {{au-inputmask options=(hash mask="9.9.9")}} />
329+
`);
330+
331+
assert.dom('[data-test-inputmask]').hasValue('1.2.3');
332+
});
325333
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import inputmask from '@appuniversum/ember-appuniversum/modifiers/au-inputmask';
2+
import { hash } from '@ember/helper';
3+
import { on } from '@ember/modifier';
4+
import { fillIn, find, render } from '@ember/test-helpers';
5+
import { setupRenderingTest } from 'ember-qunit';
6+
import { module, test } from 'qunit';
7+
8+
module('Integration | Modifier | au-inputmask', function (hooks) {
9+
setupRenderingTest(hooks);
10+
11+
test('it works', async function (assert) {
12+
await render(
13+
<template>
14+
<label>Foo<input
15+
value="123"
16+
{{inputmask options=(hash mask="9.9.9")}}
17+
/></label>
18+
</template>,
19+
);
20+
21+
const inputElement = find('input')!;
22+
assert.ok(
23+
inputElement.inputmask,
24+
'the inputmask property is added to the element after initialising',
25+
);
26+
27+
assert.strictEqual(
28+
inputElement.value,
29+
'1.2.3',
30+
'.value returns the masked value',
31+
);
32+
assert.strictEqual(
33+
inputElement.inputmask?.unmaskedvalue(),
34+
'123',
35+
'.unmaskedvalue() returns the unmasked value',
36+
);
37+
});
38+
39+
test('it supports regular input events', async function (assert) {
40+
const handleChange = (event: Event) => {
41+
const inputElement = event.target as HTMLInputElement;
42+
assert.step(inputElement.value);
43+
44+
if (inputElement.inputmask) {
45+
assert.step(inputElement.inputmask.unmaskedvalue());
46+
}
47+
};
48+
await render(
49+
<template>
50+
<label>Foo
51+
<input
52+
{{inputmask options=(hash mask="9.9.9")}}
53+
{{on "change" handleChange}}
54+
/>
55+
</label>
56+
</template>,
57+
);
58+
59+
const inputElement = find('input')!;
60+
await fillIn(inputElement, '123');
61+
62+
assert.verifySteps(['1.2.3', '123']);
63+
});
64+
});

tests/integration/modifiers/au-inputmask-test.js

-42
This file was deleted.

0 commit comments

Comments
 (0)