UNPKG

@keycloakify/keycloak-admin-ui

Version:

<p align="center"> <img src="https://github.com/user-attachments/assets/a6aaebbd-8f59-474d-9827-c282f4527aca"> </p> <p align="center"> <i>Repackaged Keycloak Admin UI</i> <br> <br> <a href="https://github.com/keycloakify/keycloak-adm

154 lines (132 loc) 4.16 kB
/* eslint-disable */ // @ts-nocheck import type AuthenticationExecutionInfoRepresentation from "@keycloak/keycloak-admin-client/lib/defs/authenticationExecutionInfoRepresentation"; export type ExpandableExecution = AuthenticationExecutionInfoRepresentation & { executionList?: ExpandableExecution[]; isCollapsed: boolean; }; export class IndexChange { oldIndex: number; newIndex: number; constructor(oldIndex: number, newIndex: number) { this.oldIndex = oldIndex; this.newIndex = newIndex; } } export class LevelChange extends IndexChange { parent?: ExpandableExecution; constructor( oldIndex: number, newIndex: number, parent?: ExpandableExecution, ) { super(oldIndex, newIndex); this.parent = parent; } } export class ExecutionList { #list: ExpandableExecution[]; expandableList: ExpandableExecution[]; constructor(list: AuthenticationExecutionInfoRepresentation[]) { this.#list = list as ExpandableExecution[]; const exList = { executionList: [], isCollapsed: false, }; this.#transformToExpandableList(0, -1, exList); this.expandableList = exList.executionList; } #transformToExpandableList( currentIndex: number, currentLevel: number, execution: ExpandableExecution, ) { for (let index = currentIndex; index < this.#list.length; index++) { const ex = this.#list[index]; const level = ex.level || 0; if (level <= currentLevel) { return index - 1; } const nextRowLevel = this.#list[index + 1]?.level || 0; const hasChild = level < nextRowLevel; if (hasChild) { const subLevel = { ...ex, executionList: [], isCollapsed: false }; index = this.#transformToExpandableList(index + 1, level, subLevel); execution.executionList?.push(subLevel); } else { execution.executionList?.push(ex); } } return this.#list.length; } order(list?: ExpandableExecution[]) { let result: ExpandableExecution[] = []; for (const row of list || this.expandableList) { result.push(row); if (row.executionList && !row.isCollapsed) { result = result.concat(this.order(row.executionList)); } } return result; } findExecution( index: number, current: { index: number } = { index: 0 }, list?: ExpandableExecution[], ): ExpandableExecution | undefined { const l = list || this.expandableList; for (let i = 0; i < l.length; i++) { const ex = l[i]; if (current.index === index) { return ex; } current.index++; if (ex.executionList && !ex.isCollapsed) { const found = this.findExecution(index, current, ex.executionList); if (found) { return found; } } } return undefined; } #getParentNodes(level: number, index: number) { let parent = undefined; for (let i = 0; i < index; i++) { const ex = this.#list[i]; if (level - 1 === ex.level) { parent = ex; } } return parent; } getChange( changed: AuthenticationExecutionInfoRepresentation, order: string[], ) { const currentOrder = this.order(); const newLocIndex = order.findIndex((id) => id === changed.id); const oldLocIndex = currentOrder.findIndex((ex) => ex.id === changed.id); const oldLocation = currentOrder[oldLocIndex]; const newLocation = currentOrder[newLocIndex]; const currentParent = this.#getParentNodes(oldLocation.level!, oldLocIndex); const parent = this.#getParentNodes(newLocation.level!, newLocIndex); if (currentParent?.id !== parent?.id) { if (newLocation.level! > 0) { return new LevelChange( parent?.executionList?.length || 0, newLocation.index!, parent, ); } return new LevelChange(this.expandableList.length, newLocation.index!); } return new IndexChange(oldLocation.index!, newLocation.index!); } clone() { const newList = new ExecutionList([]); newList.#list = this.#list; newList.expandableList = this.expandableList; return newList; } }