From 3feae9367b9a959731c20619d22bab79064054f7 Mon Sep 17 00:00:00 2001 From: Eric NGUYEN Date: Wed, 31 Aug 2022 11:32:19 +0200 Subject: [PATCH] Fix symbol behavior not imposing its position when anchor is enabled --- src/Components/Editor/Behaviors/Behaviors.ts | 10 ++--- .../Editor/Behaviors/FlexBehaviors.ts | 45 ++++++++++++++++--- vite.config.ts | 4 +- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/Components/Editor/Behaviors/Behaviors.ts b/src/Components/Editor/Behaviors/Behaviors.ts index 4dac2de..c35a37f 100644 --- a/src/Components/Editor/Behaviors/Behaviors.ts +++ b/src/Components/Editor/Behaviors/Behaviors.ts @@ -14,6 +14,11 @@ import { ApplySymbol } from './SymbolBehaviors'; */ export function ApplyBehaviors(container: IContainerModel, symbols: Map): IContainerModel { try { + const symbol = symbols.get(container.properties.linkedSymbolId); + if (container.properties.linkedSymbolId !== '' && symbol !== undefined) { + ApplySymbol(container, symbol); + } + if (container.properties.isAnchor) { ApplyAnchor(container); } @@ -22,11 +27,6 @@ export function ApplyBehaviors(container: IContainerModel, symbols: Map sibling.properties.isFlex); + const { + flexibleContainers, + nonFlexibleContainers + } = SeparateFlexibleContainers(children); const minWidths = flexibleContainers .map(sibling => sibling.properties.minWidth); - const fixedWidth = children - .filter(sibling => !sibling.properties.isFlex) + const fixedWidth = nonFlexibleContainers .map(sibling => sibling.properties.width) - .reduce((partialSum, a) => partialSum + a, 0); + .reduce((widthSum, a) => widthSum + a, 0); const requiredMaxWidth = flexibleGroup.size - fixedWidth; + const minimumPossibleWidth = minWidths.reduce((widthSum, a) => widthSum + a, 0); // sum(minWidths) - const minimumPossibleWidth = minWidths.reduce((partialSum, a) => partialSum + a, 0); - if (minimumPossibleWidth > requiredMaxWidth) { + const checkSumMinWidthsIsFitting = minimumPossibleWidth > requiredMaxWidth; + if (checkSumMinWidthsIsFitting) { // Swal.fire({ // icon: 'error', // title: 'Cannot fit!', @@ -87,6 +94,30 @@ function FlexGroup(flexibleGroup: IFlexibleGroup): void { } } +function SeparateFlexibleContainers( + containers: IContainerModel[] +): { flexibleContainers: IContainerModel[], nonFlexibleContainers: IContainerModel[] } { + const flexibleContainers: IContainerModel[] = []; + const nonFlexibleContainers: IContainerModel[] = []; + containers.forEach((container) => { + if (container.properties.isFlex) { + flexibleContainers.push(container); + return; + } + + nonFlexibleContainers.push(container); + }); + return { + flexibleContainers, + nonFlexibleContainers + }; +} + +/** + * Returns a list of groups of flexible containers + * @param parent Parent in which the flexible children will be set in groups + * @returns a list of groups of flexible containers + */ export function GetFlexibleGroups(parent: IContainerModel): IFlexibleGroup[] { const flexibleGroups: IFlexibleGroup[] = []; let group: IContainerModel[] = []; diff --git a/vite.config.ts b/vite.config.ts index 6549182..f4b4d95 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,5 +3,7 @@ import react from '@vitejs/plugin-react'; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()] + plugins: [ + react() + ] });