Skip to content
This repository was archived by the owner on Jul 30, 2018. It is now read-only.
This repository was archived by the owner on Jul 30, 2018. It is now read-only.

[Projector#merge] Existing CSS classes are not preserved when topmost render toggles rendering #923

@jcfranco

Description

@jcfranco

Bug

When using Projector#merge, if the topmost render toggles rendering (returns valid VDOM or undefined between renders), existing CSS classes are not preserved on subsequent renders:

Package Version: 2.0.0

Code

<!DOCTYPE html>
<html lang="en">
<head>
	<title>Preserve CSS classes when merging</title>
</head>
<body>
	<div id="target" class="preserve-me" />
</body>
</html>
import { ProjectorMixin } from '@dojo/widget-core/mixins/Projector';
import App from './widgets/App';

let visible = true;
const Projector = ProjectorMixin(App);
const projector = new Projector();
projector.setProperties({ visible });
projector.merge(document.getElementById('target')!);

setInterval(() => {
	visible = !visible;
	projector.setProperties({ visible });
}, 1000);
export default class App extends WidgetBase<AppProperties> {
	protected render() {
		const { visible } = this.properties;

		return visible ?
				v('div', { classes: css.app }, [
					v('div', [
						'hello'
					])
				]) :
				null;
	}
}

Demo

Expected behavior:

preserve-me class is preserved whenever the app is rendered.

Actual behavior:

preserve-me class is dropped when the app is re-rendered (1st render is 👌).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions