diff --git a/frontend/src/Editor/EditorFunc.jsx b/frontend/src/Editor/EditorFunc.jsx index e77496e483..b9781d3dc6 100644 --- a/frontend/src/Editor/EditorFunc.jsx +++ b/frontend/src/Editor/EditorFunc.jsx @@ -1469,7 +1469,6 @@ const EditorComponent = (props) => { {
{ const { t } = useTranslation(); - const { hideHeader, canvasMaxWidth, canvasMaxWidthType, canvasBackgroundColor, backgroundFxQuery } = globalSettings; - const [showPicker, setShowPicker] = React.useState(false); - const currentState = useCurrentState(); - const [forceCodeBox, setForceCodeBox] = React.useState(true); - const [realState, setRealState] = React.useState(currentState); - const [showConfirmation, setConfirmationShow] = React.useState(false); - const [show, setShow] = React.useState(''); + const { hideHeader, canvasMaxWidth, canvasMaxWidthType, canvasBackgroundColor } = globalSettings; + const [showPicker, setShowPicker] = useState(false); + const [forceCodeBox, setForceCodeBox] = useState(true); + const [showConfirmation, setConfirmationShow] = useState(false); + const [isExportingApp, setIsExportingApp] = React.useState(false); const { isVersionReleased } = useAppVersionStore( (state) => ({ isVersionReleased: state.isVersionReleased, @@ -44,180 +44,18 @@ export const GlobalSettings = ({ left: '0px', }; - React.useEffect(() => { - setRealState(currentState); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [currentState.components]); - - const popoverContent = ( -
-
- - - -
-
-
- - {t('leftSidebar.Settings.hideHeader', 'Hide header for launched apps')} - -
- globalSettingsChanged({ hideHeader: e.target.checked })} - /> -
-
-
- - {t('leftSidebar.Settings.maintenanceMode', 'Maintenance mode')} - -
- setConfirmationShow(true)} - /> -
-
-
- - {t('leftSidebar.Settings.maxWidthOfCanvas', 'Max width of canvas')} - -
-
- { - const width = e.target.value; - if (!Number.isNaN(width) && width >= 0) globalSettingsChanged({ canvasMaxWidth: width }); - }} - value={canvasMaxWidth} - /> - -
-
-
- -
- - {t('leftSidebar.Settings.backgroundColorOfCanvas', 'Background color of canvas')} - -
- {showPicker && ( -
-
setShowPicker(false)} /> - setShowPicker(true)} - color={canvasBackgroundColor} - onChangeComplete={(color) => { - const options = { - canvasBackgroundColor: [color.hex, color.rgb], - backgroundFxQuery: color.hex, - }; - - globalSettingsChanged(options); - }} - /> -
- )} - {forceCodeBox && ( -
setShowPicker(true)} - > -
-
{canvasBackgroundColor}
-
- )} -
- {!forceCodeBox && ( - { - const options = { - canvasBackgroundColor: resolveReferences(color, realState), - backgroundFxQuery: color, - }; - - globalSettingsChanged(options); - }} - /> - )} -
- { - setForceCodeBox(!forceCodeBox); - }} - /> -
-
-
-
-
-
-
-
- ); - + const outerStyles = { + width: '142px', + height: '32px', + borderRadius: ' 6px', + display: 'flex', + paddingLeft: '4px', + alignItems: 'center', + gap: '4px', + background: showPicker && 'var(--indigo2)', + outline: showPicker && '1px solid var(--indigo9)', + boxShadow: showPicker && '0px 0px 0px 1px #C6D4F9', + }; return ( <> setConfirmationShow(false)} darkMode={darkMode} /> - { - if (show) setShow('settings'); - else { - setShow(''); - setShowPicker(false); - } - }} - popoverContentClassName="p-0 sidebar-h-100-popover global-settings-popover-content" - side="bottom" - popoverContent={popoverContent} - popoverContentHeight="auto" - > - { + setIsExportingApp(false); + }} + customClassName="modal-version-lists" + title={'Select a version to export'} + app={app} + darkMode={darkMode} /> - + )} +
+
+ + + +
+
+
+ + {t('leftSidebar.Settings.hideHeader', 'Hide header for launched apps')} + +
+ globalSettingsChanged({ hideHeader: e.target.checked })} + /> +
+
+
+ + {t('leftSidebar.Settings.maintenanceMode', 'Maintenance mode')} + +
+ setConfirmationShow(true)} + /> +
+
+
+ + {t('leftSidebar.Settings.maxWidthOfCanvas', 'Max width of canvas')} + +
+
+ { + const width = e.target.value; + if (!Number.isNaN(width) && width >= 0) globalSettingsChanged({ canvasMaxWidth: width }); + }} + value={canvasMaxWidth} + /> + +
+
+
+ +
+ + {t('leftSidebar.Settings.backgroundColorOfCanvas', 'Canvas bavkground')} + +
+ {showPicker && ( +
+
setShowPicker(false)} /> + setShowPicker(true)} + color={canvasBackgroundColor} + onChangeComplete={(color) => { + const options = { + canvasBackgroundColor: [color.hex, color.rgb], + backgroundFxQuery: color.hex, + }; + + globalSettingsChanged(options); + }} + /> +
+ )} + {forceCodeBox && ( +
setShowPicker(true)} + style={outerStyles} + > +
+
+ {canvasBackgroundColor} +
+
+ )} +
+ {!forceCodeBox && ( + { + const options = { + canvasBackgroundColor: resolveReferences(color, realState), + backgroundFxQuery: color, + }; + + globalSettingsChanged(options); + }} + /> + )} +
+ { + setForceCodeBox(!forceCodeBox); + }} + /> +
+
+
+
+ +
+

Export app

+
+ { + setIsExportingApp(true); + document.getElementById('maintenance-app-modal').click(); + }} + fill={`var(--indigo9)`} + leftIcon="fileupload" + iconWidth="16" + data-cy="button-user-status-change" + > + Export this app + +
+
+
+
+
+
); }; diff --git a/frontend/src/Editor/LeftSidebar/index.jsx b/frontend/src/Editor/LeftSidebar/index.jsx index f61edece6b..e501ce2ae7 100644 --- a/frontend/src/Editor/LeftSidebar/index.jsx +++ b/frontend/src/Editor/LeftSidebar/index.jsx @@ -54,7 +54,6 @@ export const LeftSidebar = forwardRef((props, ref) => { disableEnablePage, isMaintenanceOn, } = props; - // const { isMaintenanceOn } = app; const dataSources = useDataSources(); const prevSelectedSidebarItem = localStorage.getItem('selectedSidebarItem'); @@ -214,7 +213,6 @@ export const LeftSidebar = forwardRef((props, ref) => { globalSettings={appDefinition.globalSettings} darkMode={darkMode} toggleAppMaintenance={toggleAppMaintenance} - // is_maintenance_on={is_maintenance_on} isMaintenanceOn={isMaintenanceOn} app={app} /> diff --git a/server/src/services/apps.service.ts b/server/src/services/apps.service.ts index feb583b010..7a6965a5c0 100644 --- a/server/src/services/apps.service.ts +++ b/server/src/services/apps.service.ts @@ -840,12 +840,19 @@ export class AppsService { async updateAppVersion(version: AppVersion, body: AppVersionUpdateDto) { const editableParams = {}; - if (body?.homePageId) { + const { globalSettings, homePageId } = await this.appVersionsRepository.findOne({ + where: { id: version.id }, + }); + + if (body?.homePageId && homePageId !== body.homePageId) { editableParams['homePageId'] = body.homePageId; } if (body?.globalSettings) { - editableParams['globalSettings'] = body.globalSettings; + editableParams['globalSettings'] = { + ...globalSettings, + ...body.globalSettings, + }; } return await this.appVersionsRepository.update(version.id, editableParams);