Skip to content

Commit 01dfc48

Browse files
authored
Merge pull request #471 from appuniversum/chore/more-gts
More Glint / TS conversion
2 parents 4b59eb5 + 0f76dfd commit 01dfc48

10 files changed

+183
-55
lines changed

addon/components/au-form-row.gjs addon/components/au-form-row.gts

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
import Component from '@glimmer/component';
22

3-
export default class AuFormRow extends Component {
3+
export interface AuFormRowSignature {
4+
Args: {
5+
alignment?: 'inline' | 'pre' | 'post';
6+
};
7+
Blocks: {
8+
default: [];
9+
};
10+
Element: HTMLDivElement;
11+
}
12+
13+
export default class AuFormRow extends Component<AuFormRowSignature> {
414
get alignment() {
515
if (this.args.alignment == 'inline') return 'au-c-form-row--inline';
616
if (this.args.alignment == 'pre')

addon/components/au-heading.gjs addon/components/au-heading.gts

+12-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,18 @@ import Component from '@glimmer/component';
33
// TODO: replace these with the named imports from ember-truth-helpers v4 once our dependencies support that version
44
import eq from 'ember-truth-helpers/helpers/eq';
55

6-
export default class AuHeading extends Component {
6+
export interface AuHeadingSignature {
7+
Args: {
8+
level?: '1' | '2' | '3' | '4' | '5' | '6';
9+
skin?: '1' | '2' | '3' | '4' | '5' | '6' | 'functional';
10+
};
11+
Blocks: {
12+
default: [];
13+
};
14+
Element: HTMLHeadingElement;
15+
}
16+
17+
export default class AuHeading extends Component<AuHeadingSignature> {
718
get skin() {
819
if (this.args.skin == '1') return 'au-c-heading--1';
920
if (this.args.skin == '2') return 'au-c-heading--2';

addon/components/au-help-text.gjs addon/components/au-help-text.gts

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
import Component from '@glimmer/component';
22

3-
export default class AuHelpText extends Component {
3+
export interface AuHelpTextSignature {
4+
Args: {
5+
skin?: 'secondary' | 'tertiary';
6+
size?: 'normal' | 'large';
7+
error?: boolean;
8+
warning?: boolean;
9+
};
10+
Blocks: {
11+
default: [];
12+
};
13+
Element: HTMLSpanElement;
14+
}
15+
16+
export default class AuHelpText extends Component<AuHelpTextSignature> {
417
get skin() {
518
if (this.args.skin == 'secondary') return 'au-c-help-text--secondary';
619
if (this.args.skin == 'tertiary') return 'au-c-help-text--tertiary';

addon/template-registry.ts

+6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ import type AuCheckboxGroup from '@appuniversum/ember-appuniversum/components/au
1313
import type AuContentHeader from '@appuniversum/ember-appuniversum/components/au-content-header';
1414
import type AuContent from '@appuniversum/ember-appuniversum/components/au-content';
1515
import type AuDateInput from '@appuniversum/ember-appuniversum/components/au-date-input';
16+
import type AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';
17+
import type AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';
18+
import type AuHelpText from '@appuniversum/ember-appuniversum/components/au-help-text';
1619
import type AuHr from '@appuniversum/ember-appuniversum/components/au-hr';
1720
import type AuIcon from '@appuniversum/ember-appuniversum/components/au-icon';
1821
import type AuInput from '@appuniversum/ember-appuniversum/components/au-input';
@@ -41,6 +44,9 @@ export default interface AppuniversumRegistry {
4144
AuContentHeader: typeof AuContentHeader;
4245
AuContent: typeof AuContent;
4346
AuDateInput: typeof AuDateInput;
47+
AuFormRow: typeof AuFormRow;
48+
AuHeading: typeof AuHeading;
49+
AuHelpText: typeof AuHelpText;
4450
AuHr: typeof AuHr;
4551
AuIcon: typeof AuIcon;
4652
AuInput: typeof AuInput;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { module, test } from 'qunit';
2+
import { setupRenderingTest } from 'ember-qunit';
3+
import { render } from '@ember/test-helpers';
4+
import AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';
5+
6+
module('Integration | Component | au-form-row', function (hooks) {
7+
setupRenderingTest(hooks);
8+
9+
test('it accepts block content', async function (assert) {
10+
await render(
11+
<template>
12+
<AuFormRow data-test-form-row>Form row</AuFormRow>
13+
</template>,
14+
);
15+
16+
assert.dom('[data-test-form-row]').hasText('Form row');
17+
});
18+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import AuHeading, {
2+
type AuHeadingSignature,
3+
} from '@appuniversum/ember-appuniversum/components/au-heading';
4+
import { settled } from '@ember/test-helpers';
5+
import { render } from '@ember/test-helpers';
6+
import { tracked } from '@glimmer/tracking';
7+
import { setupRenderingTest } from 'ember-qunit';
8+
import { module, test } from 'qunit';
9+
10+
module('Integration | Component | au-heading', function (hooks) {
11+
setupRenderingTest(hooks);
12+
13+
test('it accepts block content and extra attributes', async function (assert) {
14+
await render(
15+
<template>
16+
<AuHeading data-test-heading>
17+
Some title
18+
</AuHeading>
19+
</template>,
20+
);
21+
22+
assert.dom('[data-test-heading]').hasText('Some title');
23+
});
24+
25+
test('it defaults to a h1 element', async function (assert) {
26+
await render(
27+
<template>
28+
<AuHeading>
29+
Some title
30+
</AuHeading>
31+
</template>,
32+
);
33+
34+
assert.dom('h1').exists('it defaults to h1');
35+
});
36+
37+
test('it has a `@level` argument that can be used to set the h* element', async function (assert) {
38+
class TestState {
39+
@tracked level?: AuHeadingSignature['Args']['level'];
40+
}
41+
42+
const state = new TestState();
43+
state.level = '1';
44+
45+
await render(
46+
<template>
47+
<AuHeading @level={{state.level}}>
48+
Some title
49+
</AuHeading>
50+
</template>,
51+
);
52+
53+
assert.dom('h1').exists();
54+
55+
state.level = '2';
56+
await settled();
57+
assert.dom('h2').exists();
58+
59+
state.level = '3';
60+
await settled();
61+
assert.dom('h3').exists();
62+
63+
state.level = '4';
64+
await settled();
65+
assert.dom('h4').exists();
66+
67+
state.level = '5';
68+
await settled();
69+
assert.dom('h5').exists();
70+
71+
state.level = '6';
72+
await settled();
73+
assert.dom('h6').exists();
74+
75+
// @ts-expect-error: invalid level values are possible in projects that don't use Glint
76+
state.level = 'invalid level';
77+
await settled();
78+
assert
79+
.dom('h1')
80+
.exists('it falls back to h1 if the level value is invalid');
81+
});
82+
});

tests/integration/components/au-heading-test.js

-26
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import AuHelpText from '@appuniversum/ember-appuniversum/components/au-help-text';
2+
import { render } from '@ember/test-helpers';
3+
import { setupRenderingTest } from 'ember-qunit';
4+
import { module, test } from 'qunit';
5+
6+
module('Integration | Component | au-help-text', function (hooks) {
7+
setupRenderingTest(hooks);
8+
9+
test('it accepts block content and extra attributes', async function (assert) {
10+
await render(
11+
<template>
12+
<AuHelpText data-test-help-text>
13+
Some help text
14+
</AuHelpText>
15+
</template>,
16+
);
17+
18+
assert.dom('[data-test-help-text]').hasText('Some help text');
19+
});
20+
});

tests/integration/components/au-help-text-test.js

-26
This file was deleted.

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

+20
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,26 @@ module('Integration | Component | Loose mode', function (hooks) {
107107
assert.dom('[data-test-date-input]').exists();
108108
});
109109

110+
test('`<AuFormRow>` resolves in loose mode', async function (assert) {
111+
await render(hbs`<AuFormRow data-test-form-row />`);
112+
113+
assert.dom('[data-test-form-row]').exists();
114+
});
115+
116+
test('`<AuHeading>` resolves in loose mode', async function (assert) {
117+
await render(hbs`<AuHeading data-test-heading>Some title</AuHeading>`);
118+
119+
assert.dom('[data-test-heading]').exists();
120+
});
121+
122+
test('`<AuHelpText>` resolves in loose mode', async function (assert) {
123+
await render(
124+
hbs`<AuHelpText data-test-help-text>Some help text</AuHelpText>`,
125+
);
126+
127+
assert.dom('[data-test-help-text]').exists();
128+
});
129+
110130
test('`<AuHr>` resolves in loose mode', async function (assert) {
111131
await render(hbs`<AuHr data-test-hr />`);
112132

0 commit comments

Comments
 (0)