Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add deprecation for Route#render method #19442

Merged
merged 2 commits into from Mar 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -222,10 +222,13 @@ if (ENV._DEBUG_RENDER_TREE) {
}

renderTemplate(_: Controller, { showHeader }: Model): void {
this.render();
expectDeprecation(() => this.render(), /Usage of `render` is deprecated/);

if (showHeader) {
this.render('header', { outlet: 'header' });
expectDeprecation(
() => this.render('header', { outlet: 'header' }),
/Usage of `render` is deprecated/
);
} else {
expectDeprecation(
() => this.disconnectOutlet('header'),
Expand Down
Expand Up @@ -464,11 +464,13 @@ moduleFor(
'route:application',
Route.extend({
renderTemplate() {
this.render();
this.render('nav', {
into: 'application',
outlet: 'nav',
});
expectDeprecation(() => {
this.render();
this.render('nav', {
into: 'application',
outlet: 'nav',
});
}, /Usage of `render` is deprecated/);
},
})
);
Expand Down Expand Up @@ -613,7 +615,10 @@ moduleFor(
},

renderTemplate(controller, model) {
this.render({ controller: model.color, model });
expectDeprecation(
() => this.render({ controller: model.color, model }),
/Usage of `render` is deprecated/
);
},
})
);
Expand Down Expand Up @@ -659,7 +664,10 @@ moduleFor(
},

renderTemplate(controller, model) {
this.render('common', { controller: 'common', model });
expectDeprecation(
() => this.render('common', { controller: 'common', model }),
/Usage of `render` is deprecated/
);
},
})
);
Expand All @@ -672,7 +680,10 @@ moduleFor(
},

renderTemplate(controller, model) {
this.render('common', { controller: 'common', model });
expectDeprecation(
() => this.render('common', { controller: 'common', model }),
/Usage of `render` is deprecated/
);
},
})
);
Expand Down
41 changes: 36 additions & 5 deletions packages/@ember/-internals/routing/lib/system/route.ts
Expand Up @@ -20,7 +20,7 @@ import {
Object as EmberObject,
typeOf,
} from '@ember/-internals/runtime';
import { isProxy, lookupDescriptor } from '@ember/-internals/utils';
import { isProxy, lookupDescriptor, symbol } from '@ember/-internals/utils';
import Controller from '@ember/controller';
import { assert, deprecate, info, isTesting } from '@ember/debug';
import { ROUTER_EVENTS } from '@ember/deprecated-features';
Expand Down Expand Up @@ -49,6 +49,7 @@ import generateController from './generate_controller';
import EmberRouter, { QueryParam } from './router';

export const ROUTE_CONNECTIONS = new WeakMap();
const RENDER = symbol('render') as string;

export function defaultSerialize(
model: {},
Expand Down Expand Up @@ -1485,6 +1486,29 @@ class Route extends EmberObject implements IRoute {
return route && route.currentModel;
}

/**
`this[RENDER]` is used to render a template into a region of another template
(indicated by an `{{outlet}}`).

@method this[RENDER]
@param {String} name the name of the template to render
@param {Object} [options] the options
@param {String} [options.into] the template to render into,
referenced by name. Defaults to the parent template
@param {String} [options.outlet] the outlet inside `options.into` to render into.
Defaults to 'main'
@param {String|Object} [options.controller] the controller to use for this template,
referenced by name or as a controller instance. Defaults to the Route's paired controller
@param {Object} [options.model] the model object to set on `options.controller`.
Defaults to the return value of the Route's model hook
@private
*/
[RENDER](name?: string, options?: PartialRenderOptions) {
let renderOptions = buildRenderOptions(this, name, options);
ROUTE_CONNECTIONS.get(this).push(renderOptions);
once(this._router, '_setOutlets');
}

/**
A hook you can use to render the template for the current route.

Expand Down Expand Up @@ -1521,7 +1545,7 @@ class Route extends EmberObject implements IRoute {
*/
renderTemplate(_controller: any, _model: {}) {
// eslint-disable-line no-unused-vars
this.render();
this[RENDER]();
}

/**
Expand Down Expand Up @@ -1652,9 +1676,16 @@ class Route extends EmberObject implements IRoute {
@public
*/
render(name?: string, options?: PartialRenderOptions) {
let renderOptions = buildRenderOptions(this, name, options);
ROUTE_CONNECTIONS.get(this).push(renderOptions);
once(this._router, '_setOutlets');
deprecate(`Usage of \`render\` is deprecated. Route: \`${this.routeName}\``, false, {
id: 'route-render-template',
until: '4.0.0',
url: 'https://deprecations.emberjs.com/v3.x/#toc_route-render-template',
for: 'ember-source',
since: {
enabled: '3.27.0',
},
});
this[RENDER](name, options);
}

/**
Expand Down
5 changes: 4 additions & 1 deletion packages/ember/tests/routing/model_loading_test.js
Expand Up @@ -214,7 +214,10 @@ moduleFor(
Route.extend({
controllerName: 'myController',
renderTemplate() {
this.render('alternative_home');
expectDeprecation(
() => this.render('alternative_home'),
/Usage of `render` is deprecated/
);
},
})
);
Expand Down