Merged PR 212: Optimize FindChildrenById from O(n) to O(1)
Optimize FindChildrenById from O(n) to O(1): - Deprecate FindContainerByIdDFS - Container: Replace Children to string[] - Add HashMap to IHistoryState that contains all containers To access a container by id now cost O(1) without any additional cost + Implement CICD for SVGLibs
This commit is contained in:
parent
466ef2b08b
commit
c256a76e01
45 changed files with 775 additions and 450 deletions
|
@ -21,7 +21,7 @@ export function GetAction(
|
|||
): (target: HTMLElement) => void {
|
||||
return (target: HTMLElement) => {
|
||||
const id = target.id;
|
||||
const container = FindContainerById(currentState.mainContainer, id);
|
||||
const container = FindContainerById(currentState.containers, id);
|
||||
|
||||
if (container === undefined) {
|
||||
Swal.fire({
|
||||
|
@ -33,7 +33,7 @@ export function GetAction(
|
|||
}
|
||||
|
||||
/* eslint-disable @typescript-eslint/naming-convention */
|
||||
const { prev, next } = GetPreviousAndNextSiblings(container);
|
||||
const { prev, next } = GetPreviousAndNextSiblings(currentState.containers, container);
|
||||
|
||||
const request: ISetContainerListRequest = {
|
||||
Container: container,
|
||||
|
@ -59,18 +59,18 @@ export function GetAction(
|
|||
};
|
||||
}
|
||||
|
||||
function GetPreviousAndNextSiblings(container: IContainerModel): { prev: IContainerModel | undefined, next: IContainerModel | undefined } {
|
||||
function GetPreviousAndNextSiblings(containers: Map<string, IContainerModel>, container: IContainerModel): { prev: IContainerModel | undefined, next: IContainerModel | undefined } {
|
||||
let prev;
|
||||
let next;
|
||||
if (container.parent !== undefined &&
|
||||
container.parent !== null &&
|
||||
container.parent.children.length > 1) {
|
||||
const index = container.parent.children.indexOf(container);
|
||||
const index = container.parent.children.indexOf(container.properties.id);
|
||||
if (index > 0) {
|
||||
prev = container.parent.children[index - 1];
|
||||
prev = FindContainerById(containers, container.parent.children[index - 1]);
|
||||
}
|
||||
if (index < container.parent.children.length - 1) {
|
||||
next = container.parent.children[index + 1];
|
||||
next = FindContainerById(containers, container.parent.children[index + 1]);
|
||||
}
|
||||
}
|
||||
return { prev, next };
|
||||
|
@ -144,7 +144,7 @@ function HandleReplace(
|
|||
throw new Error('[ReplaceContainer] Cannot replace a container that does not exists');
|
||||
}
|
||||
|
||||
const index = selectedContainer.parent.children.indexOf(selectedContainer);
|
||||
const index = selectedContainer.parent.children.indexOf(selectedContainer.properties.id);
|
||||
|
||||
const newHistoryAfterDelete = DeleteContainer(
|
||||
selectedContainer.properties.id,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue