From c67a3a804b1a417e28dbb4eb3f7714a1cd61571f Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Thu, 20 Jun 2024 12:36:26 +0400 Subject: [PATCH] Add isRoot to getSymbolInfo --- src/dom_components/index.ts | 10 +++++++++- src/dom_components/model/Component.ts | 4 ++-- src/dom_components/model/SymbolUtils.ts | 6 +++--- src/dom_components/types.ts | 1 + test/specs/dom_components/model/Symbols.ts | 9 +++++++-- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/dom_components/index.ts b/src/dom_components/index.ts index 49bf280f5..259f759e6 100644 --- a/src/dom_components/index.ts +++ b/src/dom_components/index.ts @@ -109,6 +109,7 @@ import { isSymbolMain, isSymbolInstance, detachSymbolInstance, + isSymbolRoot, } from './model/SymbolUtils'; import { SymbolInfo } from './types'; import Symbols from './model/Symbols'; @@ -710,6 +711,10 @@ export default class ComponentManager extends ItemManagerModule { // @ts-ignore attr.traits = []; - if (isSymbolTop(this)) { + if (isSymbolRoot(this)) { opt.symbol = true; } diff --git a/src/dom_components/model/SymbolUtils.ts b/src/dom_components/model/SymbolUtils.ts index 2d3a591f2..830482c6b 100644 --- a/src/dom_components/model/SymbolUtils.ts +++ b/src/dom_components/model/SymbolUtils.ts @@ -10,7 +10,7 @@ export const isSymbolInstance = (cmp: Component) => !!cmp.get(keySymbol); export const isSymbol = (cmp: Component) => !!(isSymbolMain(cmp) || isSymbolInstance(cmp)); -export const isSymbolTop = (symbol: Component) => { +export const isSymbolRoot = (symbol: Component) => { const parent = symbol.parent(); return isSymbol(symbol) && (!parent || !isSymbol(parent)); }; @@ -236,12 +236,12 @@ export const updateSymbolComps = (symbol: Component, m: Component, c: Components ); // Propagate remove only if the component is an inner symbol - if (!isSymbolTop(m)) { + if (!isSymbolRoot(m)) { const changed = 'components:remove'; const { index } = o; const parent = m.parent(); const opts = { fromInstance: m, ...o }; - const isSymbNested = isSymbolTop(m); + const isSymbNested = isSymbolRoot(m); let toUpFn = (symb: Component) => { const symbPrnt = symb.parent(); symbPrnt && !isSymbolOverride(symbPrnt, changed) && symb.remove(opts); diff --git a/src/dom_components/types.ts b/src/dom_components/types.ts index ef69efcd6..3f4e3ee14 100644 --- a/src/dom_components/types.ts +++ b/src/dom_components/types.ts @@ -10,6 +10,7 @@ export interface SymbolInfo { isSymbol: boolean; isMain: boolean; isInstance: boolean; + isRoot: boolean; main?: Component; instances: Component[]; relatives: Component[]; diff --git a/test/specs/dom_components/model/Symbols.ts b/test/specs/dom_components/model/Symbols.ts index a66c17e00..c83609950 100644 --- a/test/specs/dom_components/model/Symbols.ts +++ b/test/specs/dom_components/model/Symbols.ts @@ -10,11 +10,16 @@ describe('Symbols', () => { const getSymbols = () => cmps.getSymbols(); - const createSymbol = (component: Component) => cmps.addSymbol(component); + const createSymbol = (component: Component) => cmps.addSymbol(component)!; const detachSymbol = (component: Component) => cmps.detachSymbol(component); - const getSymbolInfo = ((comp, opts) => cmps.getSymbolInfo(comp, opts)) as Editor['Components']['getSymbolInfo']; + const getSymbolInfo = ((comp, opts) => { + const result = cmps.getSymbolInfo(comp, opts); + // @ts-ignore skip for now from check + delete result.isRoot; + return result; + }) as Editor['Components']['getSymbolInfo']; const setSymbolOverride = (comp: Component, value: Parameters[0]) => { comp.setSymbolOverride(value);