From 3f737b0b1dd46182e411fa3a4a4ddec7c085f4a8 Mon Sep 17 00:00:00 2001 From: Arpit Date: Fri, 10 Nov 2023 16:55:43 +0530 Subject: [PATCH 1/3] [hotfix] fixes: should have the new color value with fx option (#8131) * fixes: should have the new color value with fx option * fixes: default value for fx * fixes: component meta data mutates on drop * version bumped to v2.24.1 --- .version | 2 +- frontend/.version | 2 +- frontend/src/Editor/Container.jsx | 4 ++- frontend/src/Editor/Inspector/Inspector.jsx | 2 +- frontend/src/Editor/SubContainer.jsx | 6 ++-- frontend/src/_helpers/appUtils.js | 40 +++++++-------------- frontend/src/_stores/utils.js | 4 ++- server/.version | 2 +- server/src/services/components.service.ts | 10 +++--- 9 files changed, 33 insertions(+), 39 deletions(-) diff --git a/.version b/.version index ad2261920c..0f5dfbe876 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.24.0 +2.24.1 diff --git a/frontend/.version b/frontend/.version index ad2261920c..0f5dfbe876 100644 --- a/frontend/.version +++ b/frontend/.version @@ -1 +1 @@ -2.24.0 +2.24.1 diff --git a/frontend/src/Editor/Container.jsx b/frontend/src/Editor/Container.jsx index 501b6c923d..1bfa5e3c26 100644 --- a/frontend/src/Editor/Container.jsx +++ b/frontend/src/Editor/Container.jsx @@ -277,7 +277,9 @@ export const Container = ({ } const canvasBoundingRect = document.getElementsByClassName('real-canvas')[0].getBoundingClientRect(); - const componentMeta = componentTypes.find((component) => component.component === item.component.component); + const componentMeta = _.cloneDeep( + componentTypes.find((component) => component.component === item.component.component) + ); console.log('adding new component'); const newComponent = addNewWidgetToTheEditor( componentMeta, diff --git a/frontend/src/Editor/Inspector/Inspector.jsx b/frontend/src/Editor/Inspector/Inspector.jsx index b98ae05050..86f1897930 100644 --- a/frontend/src/Editor/Inspector/Inspector.jsx +++ b/frontend/src/Editor/Inspector/Inspector.jsx @@ -91,7 +91,7 @@ export const Inspector = ({ }); useHotkeys('escape', () => switchSidebarTab(2)); - const componentMeta = componentTypes.find((comp) => component.component.component === comp.component); + const componentMeta = _.cloneDeep(componentTypes.find((comp) => component.component.component === comp.component)); const isMounted = useMounted(); diff --git a/frontend/src/Editor/SubContainer.jsx b/frontend/src/Editor/SubContainer.jsx index 06f8d0758d..a756e0fb83 100644 --- a/frontend/src/Editor/SubContainer.jsx +++ b/frontend/src/Editor/SubContainer.jsx @@ -140,7 +140,7 @@ export const SubContainer = ({ defaultChildren.forEach((child) => { const { componentName, layout, incrementWidth, properties, accessorKey, tab, defaultValue, styles } = child; - const componentMeta = componentTypes.find((component) => component.component === componentName); + const componentMeta = _.cloneDeep(componentTypes.find((component) => component.component === componentName)); const componentData = JSON.parse(JSON.stringify(componentMeta)); const width = layout.width ? layout.width : (componentMeta.defaultSize.width * 100) / NO_OF_GRIDS; @@ -308,7 +308,9 @@ export const SubContainer = ({ () => ({ accept: ItemTypes.BOX, drop(item, monitor) { - const componentMeta = componentTypes.find((component) => component.component === item.component.component); + const componentMeta = _.cloneDeep( + componentTypes.find((component) => component.component === item.component.component) + ); const canvasBoundingRect = parentRef.current.getElementsByClassName('real-canvas')[0].getBoundingClientRect(); const parentComp = parentComponent?.component === 'Kanban' diff --git a/frontend/src/_helpers/appUtils.js b/frontend/src/_helpers/appUtils.js index 2ce5c10812..ffcf49857b 100644 --- a/frontend/src/_helpers/appUtils.js +++ b/frontend/src/_helpers/appUtils.js @@ -1199,7 +1199,7 @@ export function computeComponentState(components = {}) { if (!components[key]) return; const { component } = components[key]; - const componentMeta = componentTypes.find((comp) => component.component === comp.component); + const componentMeta = _.cloneDeep(componentTypes.find((comp) => component.component === comp.component)); const existingComponentName = Object.keys(currentComponents).find((comp) => currentComponents[comp].id === key); const existingValues = currentComponents[existingComponentName]; @@ -1816,36 +1816,22 @@ export const buildComponentMetaDefinition = (components = {}) => { for (const componentId in components) { const currentComponentData = components[componentId]; - const componentMeta = componentTypes.find((comp) => currentComponentData.component.component === comp.component); + const componentMeta = _.cloneDeep( + componentTypes.find((comp) => currentComponentData.component.component === comp.component) + ); const mergedDefinition = { ...componentMeta.definition, - properties: { - ...componentMeta.definition.properties, - ...currentComponentData?.component.definition.properties, - }, - - styles: { - ...componentMeta.definition.styles, - ...currentComponentData?.component.definition.styles, - }, - generalStyles: { - ...componentMeta.definition.generalStyles, - ...currentComponentData?.component.definition.generalStyles, - }, - validation: { - ...componentMeta.definition.validation, - ...currentComponentData?.component.definition.validation, - }, - others: { - ...componentMeta.definition.others, - ...currentComponentData?.component.definition.others, - }, - general: { - ...componentMeta.definition.general, - ...currentComponentData?.component.definition.general, - }, + properties: _.merge(componentMeta.definition.properties, currentComponentData?.component.definition.properties), + styles: _.merge(componentMeta.definition.styles, currentComponentData?.component.definition.styles), + generalStyles: _.merge( + componentMeta.definition.generalStyles, + currentComponentData?.component.definition.generalStyles + ), + validation: _.merge(componentMeta.definition.validation, currentComponentData?.component.definition.validation), + others: _.merge(componentMeta.definition.others, currentComponentData?.component.definition.others), + general: _.merge(componentMeta.definition.general, currentComponentData?.component.definition.general), }; const mergedComponent = { diff --git a/frontend/src/_stores/utils.js b/frontend/src/_stores/utils.js index db72f51d60..f5d6bfbcf8 100644 --- a/frontend/src/_stores/utils.js +++ b/frontend/src/_stores/utils.js @@ -237,7 +237,9 @@ const computeComponentDiff = (appDiff, currentPageId, opts, currentLayout) => { return result; } - const componentMeta = componentTypes.find((comp) => comp.component === component.component.component); + const componentMeta = _.cloneDeep( + componentTypes.find((comp) => comp.component === component.component.component) + ); if (!componentMeta) { return result; diff --git a/server/.version b/server/.version index ad2261920c..0f5dfbe876 100644 --- a/server/.version +++ b/server/.version @@ -1 +1 @@ -2.24.0 +2.24.1 diff --git a/server/src/services/components.service.ts b/server/src/services/components.service.ts index 713a885f81..b69ca7f15b 100644 --- a/server/src/services/components.service.ts +++ b/server/src/services/components.service.ts @@ -9,6 +9,8 @@ import { dbTransactionForAppVersionAssociationsUpdate, dbTransactionWrap } from import { EventsService } from './events_handler.service'; import { LayoutData } from '@dto/component.dto'; +const _ = require('lodash'); + @Injectable() export class ComponentsService { constructor( @@ -85,10 +87,10 @@ export class ComponentsService { const columnsUpdated = Object.keys(updatedDefinition); const newComponentsData = columnsUpdated.reduce((acc, column) => { - const newColumnData = { - ...componentData[column], - ...updatedDefinition[column], - }; + const newColumnData = _.merge( + componentData[column === 'others' ? 'displayPreferences' : column], + updatedDefinition[column] + ); if (column === 'others') { acc['displayPreferences'] = newColumnData; From 84026a25ec6cdc3ed3b6934aaaaae3b8ea89155c Mon Sep 17 00:00:00 2001 From: Arpit Date: Fri, 17 Nov 2023 15:53:56 +0530 Subject: [PATCH 2/3] Hotfix : Import/export apps with tabs (#8162) * fixes: tab children should be correctly mapped on imprted app from older versions * fixes: event mapping for import/export * fixes: run queries on page load is not available untill manually run once * Sort event getting fired only when sorting is applied in the table (#8165) * bug fixed : sort event getting fired on each render * removed then * bumping version to v2.24.2 --------- Co-authored-by: Manish Kushare <37823141+manishkushare@users.noreply.github.com> --- .version | 2 +- frontend/.version | 2 +- .../src/Editor/Components/Table/Table.jsx | 6 +- frontend/src/_stores/dataQueriesStore.js | 12 +++- server/.version | 2 +- .../src/services/app_import_export.service.ts | 58 +++++++++++-------- 6 files changed, 52 insertions(+), 30 deletions(-) diff --git a/.version b/.version index 0f5dfbe876..5827d9bfd7 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.24.1 +2.24.2 diff --git a/frontend/.version b/frontend/.version index 0f5dfbe876..5827d9bfd7 100644 --- a/frontend/.version +++ b/frontend/.version @@ -1 +1 @@ -2.24.1 +2.24.2 diff --git a/frontend/src/Editor/Components/Table/Table.jsx b/frontend/src/Editor/Components/Table/Table.jsx index 1592999222..927f974c86 100644 --- a/frontend/src/Editor/Components/Table/Table.jsx +++ b/frontend/src/Editor/Components/Table/Table.jsx @@ -653,8 +653,10 @@ export function Table({ if (!sortOptions) { setExposedVariable('sortApplied', []); } - if (mounted) setExposedVariable('sortApplied', sortOptions); - fireEvent('onSort'); + if (mounted) { + setExposedVariable('sortApplied', sortOptions); + fireEvent('onSort'); + } }, [JSON.stringify(sortOptions)]); useEffect(() => { diff --git a/frontend/src/_stores/dataQueriesStore.js b/frontend/src/_stores/dataQueriesStore.js index 72f4e22c99..d8767b8dca 100644 --- a/frontend/src/_stores/dataQueriesStore.js +++ b/frontend/src/_stores/dataQueriesStore.js @@ -8,8 +8,9 @@ import { useAppVersionStore } from '@/_stores/appVersionStore'; import { runQueries } from '@/_helpers/appUtils'; import { v4 as uuidv4 } from 'uuid'; import { toast } from 'react-hot-toast'; -import { isEmpty, throttle } from 'lodash'; +import _, { isEmpty, throttle } from 'lodash'; import { useEditorStore } from './editorStore'; +import { useCurrentStateStore } from './currentStateStore'; const initialState = { dataQueries: [], @@ -41,7 +42,11 @@ export const useDataQueriesStore = create( if (data.data_queries.length !== 0) { const queryConfirmationList = []; + const updatedQueries = {}; + const currentQueries = useCurrentStateStore.getState().queries; + data.data_queries.forEach(({ id, name, options }) => { + updatedQueries[name] = _.merge(currentQueries[name], { id: id }); if (options && options?.requestConfirmation && options?.runOnPageLoad) { queryConfirmationList.push({ queryId: id, queryName: name }); } @@ -50,6 +55,11 @@ export const useDataQueriesStore = create( if (queryConfirmationList.length !== 0) { useEditorStore.getState().actions.updateQueryConfirmationList(queryConfirmationList); } + + useCurrentStateStore.getState().actions.setCurrentState({ + ...useCurrentStateStore.getState(), + queries: updatedQueries, + }); } // Compute query state to be added in the current state diff --git a/server/.version b/server/.version index 0f5dfbe876..5827d9bfd7 100644 --- a/server/.version +++ b/server/.version @@ -1 +1 @@ -2.24.1 +2.24.2 diff --git a/server/src/services/app_import_export.service.ts b/server/src/services/app_import_export.service.ts index aed78b38a9..4ba42c298e 100644 --- a/server/src/services/app_import_export.service.ts +++ b/server/src/services/app_import_export.service.ts @@ -398,7 +398,8 @@ export class AppImportExportService { const mappedComponents = transformComponentData( pageComponents, componentEvents, - appResourceMappings.componentsMapping + appResourceMappings.componentsMapping, + isNormalizedAppDefinitionSchema ); const componentLayouts = []; @@ -544,21 +545,6 @@ export class AppImportExportService { } } - if (isNormalizedAppDefinitionSchema) { - const appVersionIds = Object.values(appResourceMappings.appVersionMapping); - - for (const appVersionId of appVersionIds) { - await this.updateEventActionsForNewVersionWithNewMappingIds( - manager, - appVersionId, - appResourceMappings.dataQueryMapping, - appResourceMappings.componentsMapping, - appResourceMappings.pagesMapping, - isNormalizedAppDefinitionSchema - ); - } - } - await this.setEditingVersionAsLatestVersion(manager, appResourceMappings.appVersionMapping, importingAppVersions); return appResourceMappings; @@ -707,7 +693,7 @@ export class AppImportExportService { let parentId = component.parent ? component.parent : null; - const isParentTabOrCalendar = isChildOfTabsOrCalendar(component, pageComponents, parentId); + const isParentTabOrCalendar = isChildOfTabsOrCalendar(component, pageComponents, parentId, true); if (isParentTabOrCalendar) { const childTabId = component.parent.split('-')[component.parent.split('-').length - 1]; @@ -852,6 +838,19 @@ export class AppImportExportService { ); } + const appVersionIds = Object.values(appResourceMappings.appVersionMapping); + + for (const appVersionId of appVersionIds) { + await this.updateEventActionsForNewVersionWithNewMappingIds( + manager, + appVersionId, + appResourceMappings.dataQueryMapping, + appResourceMappings.componentsMapping, + appResourceMappings.pagesMapping, + true + ); + } + return appResourceMappings; } @@ -1561,7 +1560,8 @@ function convertSinglePageSchemaToMultiPageSchema(appParams: any) { function transformComponentData( data: object, componentEvents: any[], - componentsMapping: Record + componentsMapping: Record, + isNormalizedAppDefinitionSchema = true ): Component[] { const transformedComponents: Component[] = []; @@ -1581,7 +1581,12 @@ function transformComponentData( let parentId = component.parent ? component.parent : null; - const isParentTabOrCalendar = isChildOfTabsOrCalendar(component, allComponents, parentId); + const isParentTabOrCalendar = isChildOfTabsOrCalendar( + component, + allComponents, + parentId, + isNormalizedAppDefinitionSchema + ); if (isParentTabOrCalendar) { const childTabId = component.parent.split('-')[component.parent.split('-').length - 1]; @@ -1618,20 +1623,25 @@ function transformComponentData( } } - // if (skippedComponents.length) { - - // } - return transformedComponents; } -const isChildOfTabsOrCalendar = (component, allComponents = [], componentParentId = undefined) => { +const isChildOfTabsOrCalendar = ( + component, + allComponents = [], + componentParentId = undefined, + isNormalizedAppDefinitionSchema: boolean +) => { if (componentParentId) { const parentId = component?.parent?.split('-').slice(0, -1).join('-'); const parentComponent = allComponents.find((comp) => comp.id === parentId); if (parentComponent) { + if (!isNormalizedAppDefinitionSchema) { + return parentComponent.component.component === 'Tabs' || parentComponent.component.component === 'Calendar'; + } + return parentComponent.type === 'Tabs' || parentComponent.type === 'Calendar'; } } From 1fd94df62ec191f73f5d6db09dfcd41a639347ce Mon Sep 17 00:00:00 2001 From: Manish Kushare <37823141+manishkushare@users.noreply.github.com> Date: Wed, 29 Nov 2023 16:38:47 +0530 Subject: [PATCH 3/3] Page change event is getting triggered in the table component (#8221) * Page change event was not getting triggered * bump version * When client side is toggled , event is getting firedf twice : fixed --- .version | 2 +- frontend/.version | 2 +- frontend/src/Editor/Components/Table/Pagination.jsx | 2 -- frontend/src/Editor/Components/Table/Table.jsx | 2 +- server/.version | 2 +- 5 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.version b/.version index 5827d9bfd7..29690d10f0 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.24.2 +2.24.3 diff --git a/frontend/.version b/frontend/.version index 5827d9bfd7..29690d10f0 100644 --- a/frontend/.version +++ b/frontend/.version @@ -1 +1 @@ -2.24.2 +2.24.3 diff --git a/frontend/src/Editor/Components/Table/Pagination.jsx b/frontend/src/Editor/Components/Table/Pagination.jsx index 123e19a414..0de949c4d9 100644 --- a/frontend/src/Editor/Components/Table/Pagination.jsx +++ b/frontend/src/Editor/Components/Table/Pagination.jsx @@ -30,8 +30,6 @@ export const Pagination = function Pagination({ setPageCount(lastActivePageIndex); } else if (serverSide || lastActivePageIndex === 0) { setPageIndex(1); - } else { - gotoPage(lastActivePageIndex + 1); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [serverSide, lastActivePageIndex]); diff --git a/frontend/src/Editor/Components/Table/Table.jsx b/frontend/src/Editor/Components/Table/Table.jsx index 927f974c86..70c9de37df 100644 --- a/frontend/src/Editor/Components/Table/Table.jsx +++ b/frontend/src/Editor/Components/Table/Table.jsx @@ -337,7 +337,7 @@ export function Table({ function onPageIndexChanged(page) { onComponentOptionChanged(component, 'pageIndex', page).then(() => { - onEvent('onPageChanged', { component, data: {} }); + onEvent('onPageChanged', tableEvents, { component }); }); } diff --git a/server/.version b/server/.version index 5827d9bfd7..29690d10f0 100644 --- a/server/.version +++ b/server/.version @@ -1 +1 @@ -2.24.2 +2.24.3