39 lines
1.2 KiB
JavaScript
39 lines
1.2 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2021 Google LLC
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
import { nothing } from '../lit-html.js';
|
|
import { directive, Directive, } from '../directive.js';
|
|
import { setCommittedValue } from '../directive-helpers.js';
|
|
class Keyed extends Directive {
|
|
constructor() {
|
|
super(...arguments);
|
|
this.key = nothing;
|
|
}
|
|
render(k, v) {
|
|
this.key = k;
|
|
return v;
|
|
}
|
|
update(part, [k, v]) {
|
|
if (k !== this.key) {
|
|
// Clear the part before returning a value. The one-arg form of
|
|
// setCommittedValue sets the value to a sentinel which forces a
|
|
// commit the next render.
|
|
setCommittedValue(part);
|
|
this.key = k;
|
|
}
|
|
return v;
|
|
}
|
|
}
|
|
/**
|
|
* Associates a renderable value with a unique key. When the key changes, the
|
|
* previous DOM is removed and disposed before rendering the next value, even
|
|
* if the value - such as a template - is the same.
|
|
*
|
|
* This is useful for forcing re-renders of stateful components, or working
|
|
* with code that expects new data to generate new HTML elements, such as some
|
|
* animation techniques.
|
|
*/
|
|
export const keyed = directive(Keyed);
|
|
//# sourceMappingURL=keyed.js.map
|