Skip to content

Commit 7c5c1fa

Browse files
pkozlowski-opensourcematsko
authored andcommitted
refactor(ivy): move around logic of getting render parent (angular#28455)
PR Close angular#28455
1 parent 89eac70 commit 7c5c1fa

File tree

3 files changed

+25
-21
lines changed

3 files changed

+25
-21
lines changed

packages/core/src/render3/i18n.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {SRCSET_ATTRS, URI_ATTRS, VALID_ATTRS, VALID_ELEMENTS, getTemplateContent
1010
import {InertBodyHelper} from '../sanitization/inert_body';
1111
import {_sanitizeUrl, sanitizeSrcset} from '../sanitization/url_sanitizer';
1212
import {assertDefined, assertEqual, assertGreaterThan} from '../util/assert';
13+
1314
import {attachPatchData} from './context_discovery';
1415
import {allocExpando, createNodeAtIndex, elementAttribute, load, textBinding} from './instructions';
1516
import {LContainer, NATIVE} from './interfaces/container';
@@ -19,7 +20,7 @@ import {RComment, RElement} from './interfaces/renderer';
1920
import {SanitizerFn} from './interfaces/sanitization';
2021
import {StylingContext} from './interfaces/styling';
2122
import {BINDING_INDEX, HEADER_OFFSET, HOST_NODE, LView, RENDERER, TVIEW, TView} from './interfaces/view';
22-
import {appendChild, createTextNode, removeNode as removeRNode} from './node_manipulation';
23+
import {appendChild, createTextNode, nativeRemoveNode} from './node_manipulation';
2324
import {getIsParent, getLView, getPreviousOrParentTNode, setIsParent, setPreviousOrParentTNode} from './state';
2425
import {NO_CHANGE} from './tokens';
2526
import {addAllToArray, getNativeByIndex, getNativeByTNode, getTNode, isLContainer, renderStringify} from './util';
@@ -830,7 +831,7 @@ function removeNode(index: number, viewData: LView) {
830831
const removedPhTNode = getTNode(index, viewData);
831832
const removedPhRNode = getNativeByIndex(index, viewData);
832833
if (removedPhRNode) {
833-
removeRNode(removedPhTNode, removedPhRNode, viewData);
834+
nativeRemoveNode(viewData[RENDERER], removedPhRNode);
834835
}
835836

836837
removedPhTNode.detached = true;
@@ -840,7 +841,7 @@ function removeNode(index: number, viewData: LView) {
840841
if (isLContainer(slotValue)) {
841842
const lContainer = slotValue as LContainer;
842843
if (removedPhTNode.type !== TNodeType.Container) {
843-
removeRNode(removedPhTNode, lContainer[NATIVE], viewData);
844+
nativeRemoveNode(viewData[RENDERER], lContainer[NATIVE]);
844845
}
845846
}
846847
}

packages/core/src/render3/node_manipulation.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {attachPatchData} from './context_discovery';
1111
import {callHooks} from './hooks';
1212
import {LContainer, NATIVE, VIEWS, unusedValueExportToPlacateAjd as unused1} from './interfaces/container';
1313
import {ComponentDef} from './interfaces/definition';
14-
import {TContainerNode, TElementContainerNode, TElementNode, TNode, TNodeFlags, TNodeType, TProjectionNode, TViewNode, unusedValueExportToPlacateAjd as unused2} from './interfaces/node';
14+
import {TContainerNode, TElementContainerNode, TElementNode, TNode, TNodeFlags, TNodeType, TViewNode, unusedValueExportToPlacateAjd as unused2} from './interfaces/node';
1515
import {unusedValueExportToPlacateAjd as unused3} from './interfaces/projection';
1616
import {ProceduralRenderer3, RComment, RElement, RNode, RText, Renderer3, isProceduralRenderer, unusedValueExportToPlacateAjd as unused4} from './interfaces/renderer';
1717
import {CLEANUP, CONTAINER_INDEX, FLAGS, HEADER_OFFSET, HOST_NODE, HookData, LView, LViewFlags, NEXT, PARENT, QUERIES, RENDERER, TVIEW, unusedValueExportToPlacateAjd as unused5} from './interfaces/view';
@@ -181,7 +181,7 @@ function executeNodeAction(
181181
if (action === WalkTNodeTreeAction.Insert) {
182182
nativeInsertBefore(renderer, parent !, node, beforeNode || null);
183183
} else if (action === WalkTNodeTreeAction.Detach) {
184-
nativeRemoveChild(renderer, node, isComponent(tNode));
184+
nativeRemoveNode(renderer, node, isComponent(tNode));
185185
} else if (action === WalkTNodeTreeAction.Destroy) {
186186
ngDevMode && ngDevMode.rendererDestroyNode++;
187187
(renderer as ProceduralRenderer3).destroyNode !(node);
@@ -593,18 +593,13 @@ function nativeAppendOrInsertBefore(
593593
}
594594
}
595595

596-
/** Removes a node from the DOM. */
597-
export function nativeRemoveChild(
598-
renderer: Renderer3, child: RNode, isHostElement?: boolean): void {
596+
/** Removes a node from the DOM given its native parent. */
597+
function nativeRemoveChild(
598+
renderer: Renderer3, parent: RElement, child: RNode, isHostElement?: boolean): void {
599599
if (isProceduralRenderer(renderer)) {
600-
const renderParent = renderer.parentNode(child);
601-
if (renderParent) {
602-
renderer.removeChild(renderParent, child, isHostElement);
603-
}
600+
renderer.removeChild(parent, child, isHostElement);
604601
} else {
605-
// We intentionally don't use the given parent node since it may no longer
606-
// match the state of the DOM (if the child node has been manually moved).
607-
child.parentNode && child.parentNode.removeChild(child);
602+
parent.removeChild(child);
608603
}
609604
}
610605

@@ -693,14 +688,19 @@ export function getBeforeNodeForView(index: number, views: LView[], containerNat
693688
}
694689

695690
/**
696-
* Removes the `child` element from the DOM if not in view and not projected.
691+
* Removes a native node itself using a given renderer. To remove the node we are looking up its
692+
* parent from the native tree as not all platforms / browsers support the equivalent of
693+
* node.remove().
697694
*
698-
* @param childTNode The TNode of the child to remove
699-
* @param childEl The child that should be removed
700-
* @param currentView The current LView
695+
* @param renderer A renderer to be used
696+
* @param rNode The native node that should be removed
697+
* @param isHostElement A flag indicating if a node to be removed is a host of a component.
701698
*/
702-
export function removeNode(childTNode: TNode, childEl: RNode, currentView: LView): void {
703-
nativeRemoveChild(currentView[RENDERER], childEl);
699+
export function nativeRemoveNode(renderer: Renderer3, rNode: RNode, isHostElement?: boolean): void {
700+
const nativeParent = nativeParentNode(renderer, rNode);
701+
if (nativeParent) {
702+
nativeRemoveChild(renderer, nativeParent, rNode, isHostElement);
703+
}
704704
}
705705

706706
/**

packages/core/test/bundling/todo/bundle.golden_symbols.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,6 +1022,9 @@
10221022
{
10231023
"name": "nativeRemoveChild"
10241024
},
1025+
{
1026+
"name": "nativeRemoveNode"
1027+
},
10251028
{
10261029
"name": "nextContext"
10271030
},

0 commit comments

Comments
 (0)