diff --git a/addon/components/link/component.ts b/addon/components/link/component.ts index 75350c0b..8ba6ad4c 100644 --- a/addon/components/link/component.ts +++ b/addon/components/link/component.ts @@ -4,7 +4,6 @@ import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { reads } from '@ember/object/computed'; import Component from '@glimmer/component'; -import { assert } from '@ember/debug'; function isQueryParams( maybeQueryParam: any @@ -20,7 +19,7 @@ type RouteModel = object | string | number; type QueryParams = Record; -interface LinkArgs { +export interface LinkArgs { /** * The target route name. */ @@ -60,29 +59,6 @@ export default class LinkComponent extends Component { // @ts-ignore private currentURL!: string; - didUpdate() { - super.didUpdate(); - - assert( - `You provided '@queryParams', but the argument you mean is just '@query'.`, - !('queryParams' in this.args) - ); - assert( - `You provided '@routeName', but the argument you mean is just '@route'.`, - !('routeName' in this.args) - ); - assert( - `'@route' needs to be a valid route name.`, - typeof this.args.route === 'string' - ); - assert( - `You cannot use both '@model' ('${this.args.model}') and '@models' ('${ - this.args.models - }') at the same time.`, - !(this.args.model && this.args.models) - ); - } - private get modelsAndQueryParams(): [RouteModel[], null | QueryParams] { const { model, models, query } = this.args; if (models) { diff --git a/addon/components/link/template.hbs b/addon/components/link/template.hbs index a6a6336d..b852aaa9 100644 --- a/addon/components/link/template.hbs +++ b/addon/components/link/template.hbs @@ -1,4 +1,6 @@ -{{yield +{{~ember-link/validate-args this.args~}} + +{{~yield (hash href=this.href isActive=this.isActive @@ -7,4 +9,4 @@ transitionTo=this.transitionTo replaceWith=this.replaceWith ) -}} \ No newline at end of file +~}} \ No newline at end of file diff --git a/addon/helpers/ember-link/validate-args.ts b/addon/helpers/ember-link/validate-args.ts new file mode 100644 index 00000000..4be28817 --- /dev/null +++ b/addon/helpers/ember-link/validate-args.ts @@ -0,0 +1,26 @@ +import { helper } from '@ember/component/helper'; +import { assert } from '@ember/debug'; +import { LinkArgs } from 'ember-link/components/link/component'; + +export function emberLinkValidateArgs([args]: [LinkArgs]): void { + assert( + `You provided '@queryParams', but the argument you mean is just '@query'.`, + !('queryParams' in args) + ); + assert( + `You provided '@routeName', but the argument you mean is just '@route'.`, + !('routeName' in args) + ); + assert( + `'@route' needs to be a valid route name.`, + typeof args.route === 'string' + ); + assert( + `You cannot use both '@model' ('${args.model}') and '@models' ('${ + args.models + }') at the same time.`, + !(args.model && args.models) + ); +} + +export default helper(emberLinkValidateArgs); diff --git a/app/helpers/ember-link/validate-args.js b/app/helpers/ember-link/validate-args.js new file mode 100644 index 00000000..7d88b840 --- /dev/null +++ b/app/helpers/ember-link/validate-args.js @@ -0,0 +1,4 @@ +export { + default, + emberLinkValidateArgs +} from 'ember-link/helpers/ember-link/validate-args';