Skip to content

Commit a4e48ac

Browse files
authored
Convert test-app to TS (#1010)
* Convert test-app to TS * Move more tests to TS * Convert trigger tests to TS * Run lint
1 parent e4735b5 commit a4e48ac

15 files changed

Lines changed: 2449 additions & 1677 deletions

File tree

ember-basic-dropdown/src/template-registry.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44

55
import type BasicDropdownComponent from './components/basic-dropdown';
66
import type BasicDropdownWormholeComponent from './components/basic-dropdown-wormhole';
7+
import type BasicDropdownContentTrigger from './components/basic-dropdown-trigger';
8+
import type BasicDropdownContentComponent from './components/basic-dropdown-content';
79
import type DropdownTriggerModifier from './modifiers/basic-dropdown-trigger';
810

911
export default interface Registry {
1012
BasicDropdown: typeof BasicDropdownComponent;
1113
BasicDropdownWormhole: typeof BasicDropdownWormholeComponent;
14+
BasicDropdownTrigger: typeof BasicDropdownContentTrigger;
15+
BasicDropdownContent: typeof BasicDropdownContentComponent;
1216
'basic-dropdown-trigger': typeof DropdownTriggerModifier;
1317
}
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
import templateOnly from '@ember/component/template-only';
2+
import type { BasicDropdownContentSignature } from 'ember-basic-dropdown/components/basic-dropdown-content';
23

3-
export interface MyCustomContentSignature {
4-
Element: Element;
5-
}
6-
7-
export default templateOnly<MyCustomContentSignature>();
4+
export default templateOnly<BasicDropdownContentSignature>();
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
import templateOnly from '@ember/component/template-only';
2+
import type { BasicDropdownTriggerSignature } from 'ember-basic-dropdown/components/basic-dropdown-trigger';
23

3-
export interface MyCustomTriggerSignature {
4-
Element: Element;
5-
}
6-
7-
export default templateOnly<MyCustomTriggerSignature>();
4+
export default templateOnly<BasicDropdownTriggerSignature>();

test-app/app/components/shadow.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,9 @@ export default class ShadowComponent extends Component<{
2525
},
2626
);
2727
}
28+
29+
declare module '@glint/environment-ember-loose/registry' {
30+
export default interface Registry {
31+
Shadow: typeof ShadowComponent;
32+
}
33+
}

test-app/app/config/environment.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ declare const config: {
99
locationType: 'history' | 'hash' | 'none';
1010
rootURL: string;
1111
APP: Record<string, unknown>;
12+
'ember-basic-dropdown': Record<string, unknown>;
1213
};
1314

1415
export default config;

test-app/app/controllers/application.js

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import type ApplicationInstance from '@ember/application/instance';
2+
import Controller from '@ember/controller';
3+
import type Owner from '@ember/owner';
4+
import type environment from 'test-app/config/environment';
5+
import { getOwner } from '@ember/owner';
6+
7+
// @ts-expect-error Cannot find name 'FastBoot'.
8+
const isFastBoot = typeof FastBoot !== 'undefined';
9+
10+
export default class extends Controller {
11+
shadowDom = false;
12+
13+
constructor(owner: Owner) {
14+
super(owner);
15+
16+
const config = (getOwner(this) as ApplicationInstance).resolveRegistration(
17+
'config:environment',
18+
) as typeof environment;
19+
20+
this.shadowDom = (config.APP['shadowDom'] as boolean) ?? false;
21+
22+
if (!this.shadowDom || isFastBoot) {
23+
return;
24+
}
25+
26+
customElements.define(
27+
'shadow-root',
28+
class extends HTMLElement {
29+
connectedCallback() {
30+
this.attachShadow({ mode: 'open' });
31+
}
32+
},
33+
);
34+
}
35+
}

test-app/app/instance-initializers/shadow-root.js renamed to test-app/app/instance-initializers/shadow-root.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
1+
import type ApplicationInstance from '@ember/application/instance';
12
import config from 'test-app/config/environment';
23

34
// @ts-expect-error Public property 'isFastBoot' of exported class
45
const isFastBoot = typeof FastBoot !== 'undefined';
56

6-
export function initialize(appInstance) {
7-
if (config.environment !== 'test' || isFastBoot || !config.APP.shadowDom) {
7+
export function initialize(appInstance: ApplicationInstance) {
8+
if (config.environment !== 'test' || isFastBoot || !config.APP['shadowDom']) {
89
return;
910
}
1011

11-
let appRootElement = appInstance.rootElement;
12+
let appRootElement = appInstance.rootElement as HTMLElement | null;
1213

1314
if (typeof appRootElement === 'string') {
14-
appRootElement = document.querySelector(appRootElement);
15+
appRootElement = document.querySelector(
16+
appRootElement,
17+
) as HTMLElement | null;
1518
}
1619
const targetElement =
1720
appRootElement || document.getElementsByTagName('body')[0];
@@ -23,11 +26,11 @@ export function initialize(appInstance) {
2326
const wormhole = document.createElement('div');
2427
wormhole.id = 'ember-basic-dropdown-wormhole';
2528

26-
hostElement.shadowRoot.appendChild(wormhole);
27-
hostElement.shadowRoot.appendChild(rootElement);
28-
targetElement.appendChild(hostElement);
29+
hostElement.shadowRoot?.appendChild(wormhole);
30+
hostElement.shadowRoot?.appendChild(rootElement);
31+
targetElement?.appendChild(hostElement);
2932

30-
config.APP.rootElement = '#ember-basic-dropdown-wormhole';
33+
config.APP['rootElement'] = '#ember-basic-dropdown-wormhole';
3134
appInstance.set('rootElement', rootElement);
3235
}
3336

0 commit comments

Comments
 (0)