Skip to content

Commit 9cf35c8

Browse files
authored
Remove deprecations and require setConfig to be called (#1044)
* Remove deprecations and add exception when setConfig was never called * Fix setConfig in app.ts
1 parent 5c06b1b commit 9cf35c8

File tree

4 files changed

+27
-119
lines changed

4 files changed

+27
-119
lines changed

docs/app/app.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if (macroCondition(isDevelopingApp())) {
1212
}
1313

1414
setConfig({
15-
rootElement: config.APP['rootElement'] as string | undefined,
15+
rootElement: config.APP['rootElement'] as string,
1616
});
1717

1818
export default class App extends Application {

src/components/basic-dropdown-wormhole.gts

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,13 @@
11
import Component from '@glimmer/component';
2-
import { getOwner } from '@ember/owner';
3-
import { config as utilConfig, _configSet, type Config } from '../config.ts';
4-
import { deprecate } from '@ember/debug';
2+
import { getConfig } from '../config.ts';
53

64
export interface BasicDropdownWormholeSignature {
75
Element: HTMLElement;
86
}
97

108
export default class BasicDropdownWormholeComponent extends Component<BasicDropdownWormholeSignature> {
119
get getDestinationId(): string {
12-
let config = utilConfig;
13-
14-
if (!_configSet) {
15-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
16-
// @ts-ignore
17-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
18-
const configEnvironment = getOwner(this).resolveRegistration(
19-
'config:environment',
20-
) as {
21-
'ember-basic-dropdown'?: Config;
22-
};
23-
24-
if (configEnvironment['ember-basic-dropdown']) {
25-
const legacyConfigString = JSON.stringify(
26-
configEnvironment['ember-basic-dropdown'],
27-
);
28-
deprecate(
29-
`You have configured \`ember-basic-dropdown\` in \`ember-cli-build.js\`. Remove that configuration and instead use \`import { setConfig } from 'ember-basic-dropdown/config'; setConfig(${legacyConfigString});`,
30-
false,
31-
{
32-
for: 'ember-basic-dropdown',
33-
id: 'ember-basic-dropdown.config-environment',
34-
since: {
35-
enabled: '8.9',
36-
available: '8.9',
37-
},
38-
until: '9.0.0',
39-
},
40-
);
41-
42-
config = configEnvironment['ember-basic-dropdown'];
43-
}
44-
}
10+
const config = getConfig();
4511

4612
return config.destination || 'ember-basic-dropdown-wormhole';
4713
}

src/components/basic-dropdown.gts

Lines changed: 3 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@ import { tracked } from '@glimmer/tracking';
33
import { action } from '@ember/object';
44
import { guidFor } from '@ember/object/internals';
55
import calculatePosition from '../utils/calculate-position.ts';
6-
import { getOwner } from '@ember/owner';
76
import { schedule } from '@ember/runloop';
87
import { hash } from '@ember/helper';
98
import BasicDropdownTrigger from './basic-dropdown-trigger.gts';
109
import BasicDropdownContent from './basic-dropdown-content.gts';
1110
import { or } from 'ember-truth-helpers';
12-
import { deprecate } from '@ember/debug';
1311
import { isTesting } from '@embroider/macros';
14-
import { config as utilConfig, _configSet, type Config } from '../config.ts';
12+
import { getConfig } from '../config.ts';
1513
import type Owner from '@ember/owner';
1614
import type { ComponentLike } from '@glint/template';
1715
import type {
@@ -97,7 +95,6 @@ export interface BasicDropdownArgs<
9795
destination?: string;
9896
destinationElement?: HTMLElement;
9997
disabled?: boolean;
100-
dropdownId?: string;
10198
rootEventType?: TRootEventType;
10299
preventScroll?: boolean;
103100
matchTriggerWidth?: boolean;
@@ -137,8 +134,7 @@ export default class BasicDropdown<
137134
private dropdownElement: HTMLElement | null = null;
138135

139136
private _uid = guidFor(this);
140-
private _dropdownId: string =
141-
this.args.dropdownId || `ember-basic-dropdown-content-${this._uid}`;
137+
private _dropdownId: string = `ember-basic-dropdown-content-${this._uid}`;
142138
private _previousDisabled = UNINITIALIZED;
143139
private _actions: DropdownActions = {
144140
open: this.open.bind(this),
@@ -228,22 +224,6 @@ export default class BasicDropdown<
228224
if (this.args.registerAPI) {
229225
this.args.registerAPI(this.publicAPI);
230226
}
231-
232-
if (this.args.dropdownId !== undefined) {
233-
deprecate(
234-
'You have passed `@dropdownId` into `ember-basic-dropdown`. This property does not work correctly without custom modifiers and is undocumented. Remove this parameter and use the `uniqueId` property from the public API instead.',
235-
false,
236-
{
237-
for: 'ember-basic-dropdown',
238-
id: 'ember-basic-dropdown.deprecate-arg-dropdown-id',
239-
since: {
240-
enabled: '8.8',
241-
available: '8.8',
242-
},
243-
until: '9.0.0',
244-
},
245-
);
246-
}
247227
}
248228

249229
override willDestroy(): void {
@@ -436,60 +416,7 @@ export default class BasicDropdown<
436416
}
437417

438418
_getDestinationId(): string {
439-
let config = utilConfig;
440-
441-
if (!_configSet) {
442-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
443-
// @ts-ignore
444-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
445-
const configEnvironment = getOwner(this).resolveRegistration(
446-
'config:environment',
447-
) as {
448-
APP: {
449-
rootElement: string;
450-
};
451-
'ember-basic-dropdown': Config;
452-
};
453-
454-
if (configEnvironment['ember-basic-dropdown']) {
455-
const legacyConfigString = JSON.stringify(
456-
configEnvironment['ember-basic-dropdown'],
457-
);
458-
deprecate(
459-
`You have configured \`ember-basic-dropdown\` in \`ember-cli-build.js\`. Remove that configuration and instead use \`import { setConfig } from 'ember-basic-dropdown/config'; setConfig(${legacyConfigString});`,
460-
false,
461-
{
462-
for: 'ember-basic-dropdown',
463-
id: 'ember-basic-dropdown.config-environment',
464-
since: {
465-
enabled: '8.9',
466-
available: '8.9',
467-
},
468-
until: '9.0.0',
469-
},
470-
);
471-
472-
config = configEnvironment['ember-basic-dropdown'];
473-
}
474-
475-
if (configEnvironment['APP']?.rootElement) {
476-
deprecate(
477-
`ember-basic-dropdown received the \`APP.rootElement\` value from \`ember-cli-build.js\`. You now need to pass this value using \`import { setConfig } from 'ember-basic-dropdown/config'; setConfig({rootElement: config.APP['rootElement']});`,
478-
false,
479-
{
480-
for: 'ember-basic-dropdown',
481-
id: 'ember-basic-dropdown.config-environment',
482-
since: {
483-
enabled: '8.9',
484-
available: '8.9',
485-
},
486-
until: '9.0.0',
487-
},
488-
);
489-
490-
config.rootElement = configEnvironment['APP']?.rootElement;
491-
}
492-
}
419+
const config = getConfig();
493420

494421
if (isTesting()) {
495422
// document doesn't exist in fastboot apps, for this reason we need this check

src/config.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,31 @@
11
export interface Config {
22
destination?: string;
3-
rootElement?: string;
3+
rootElement: string;
44
}
55

6-
let _config: Config = {};
6+
let _config: Config = {
7+
rootElement: '',
8+
};
79

8-
// This will be removed in next major, don't use this outside the package!
9-
let _configSet = false;
10+
let configSet = false;
1011

1112
export function setConfig(config: Config) {
13+
if (!config.rootElement) {
14+
throw new Error(
15+
"ember-basic-dropdown: 'rootElement' is required in the config. See installation instructions for more details.",
16+
);
17+
}
18+
1219
_config = config;
13-
_configSet = true;
20+
configSet = true;
1421
}
1522

16-
export { _config as config, _configSet };
23+
export function getConfig(): Config {
24+
if (!configSet) {
25+
throw new Error(
26+
'ember-basic-dropdown: setConfig was not called before accessing config. See installation instructions for more details.',
27+
);
28+
}
29+
30+
return _config;
31+
}

0 commit comments

Comments
 (0)