Преглед изворни кода

Fix broken image source on select uploaded logo without logo

https://youtrack.weseek.co.jp/issue/GW-7808
- Remove isDefaultLogo on delete logo from state
- Add uploadedLogoSrc and isUploadedLogo
- Add isUploadedLogo and isDefaultLogo checking
- Add isUploadedLogo to local config
- Store and retrieve uploadedLogoSrc and isUploadedLogo
I Komang Mudana пре 3 година
родитељ
комит
62aba10f45

+ 5 - 2
packages/app/src/client/services/AdminCustomizeContainer.js

@@ -113,7 +113,7 @@ export default class AdminCustomizeContainer extends Container {
       // search style name from object for display
       this.setState({ currentHighlightJsStyleName: this.state.highlightJsCssSelectorOptions[customizeParams.styleName].name });
       if (customizeParams.attachmentId == null) {
-        this.setState({ isDefaultLogo: true, uploadedLogoSrc: DEFAULT_LOGO, isUploadedLogo: false });
+        this.setState({ uploadedLogoSrc: DEFAULT_LOGO, isUploadedLogo: false });
       }
 
     }
@@ -456,7 +456,6 @@ export default class AdminCustomizeContainer extends Container {
         isUploadedLogo: false,
         uploadedLogoSrc: DEFAULT_LOGO,
         attachmentId: null,
-        isDefaultLogo: true,
       });
 
     }
@@ -498,11 +497,15 @@ export default class AdminCustomizeContainer extends Container {
       const response = await this.appContainer.apiv3.put('/customize-setting/customize-logo', {
         isDefaultLogo: this.state.isDefaultLogo,
         attachmentId: this.state.attachmentId,
+        uploadedLogoSrc: this.state.uploadedLogoSrc,
+        isUploadedLogo: this.state.isUploadedLogo,
       });
       const { customizedParams } = response.data;
       this.setState({
         isDefaultLogo: customizedParams.isDefaultLogo,
         attachmentId:  customizedParams.attachmentId,
+        uploadedLogoSrc: customizedParams.uploadedLogoSrc,
+        isUploadedLogo: customizedParams.isUploaded,
       });
     }
     catch (err) {

+ 2 - 2
packages/app/src/components/Navbar/GrowiNavbar.tsx

@@ -102,11 +102,11 @@ const GrowiNavbar = (props) => {
   const { appContainer } = props;
   const { currentUser } = appContainer;
   const {
-    crowi, isSearchServiceConfigured, isDefaultLogo, uploadedLogoSrc,
+    crowi, isSearchServiceConfigured, isDefaultLogo, isUploadedLogo, uploadedLogoSrc,
   } = appContainer.config;
   const { data: isDeviceSmallerThanMd } = useIsDeviceSmallerThanMd();
   const { data: isSearchPage } = useIsSearchPage();
-  const logoSrc = !isDefaultLogo ? uploadedLogoSrc : null;
+  const logoSrc = (isUploadedLogo && !isDefaultLogo) ? uploadedLogoSrc : null;
   return (
     <>
       {/* Brand Logo  */}

+ 2 - 0
packages/app/src/server/models/config.ts

@@ -137,6 +137,7 @@ export const defaultCrowiConfigs: { [key: string]: any } = {
   'customize:isSearchScopeChildrenAsDefault': false,
   'customize:isDefaultLogo': true,
   'customize:uploadedLogoSrc': undefined,
+  'customize:isUploadedLogo': false,
 
   'notification:owner-page:isEnabled': false,
   'notification:group-page:isEnabled': false,
@@ -246,6 +247,7 @@ schema.statics.getLocalconfig = function(crowi) {
     pageLimitationXL: crowi.configManager.getConfig('crowi', 'customize:showPageLimitationXL'),
     isDefaultLogo:  crowi.configManager.getConfig('crowi', 'customize:isDefaultLogo'),
     uploadedLogoSrc: crowi.configManager.getConfig('crowi', 'customize:uploadedLogoSrc'),
+    isUploadedLogo: crowi.configManager.getConfig('crowi', 'customize:isUploadedLogo'),
   };
 
   return localConfig;

+ 8 - 1
packages/app/src/server/routes/apiv3/customize-setting.js

@@ -185,6 +185,7 @@ module.exports = (crowi) => {
       attachmentId: await crowi.configManager.getConfig('crowi', 'customize:attachmentId'),
       isDefaultLogo: await crowi.configManager.getConfig('crowi', 'customize:isDefaultLogo'),
       uploadedLogoSrc: await crowi.configManager.getConfig('crowi', 'customize:uploadedLogoSrc'),
+      isUploadedLogo: await crowi.configManager.getConfig('crowi', 'customize:isUploadedLogo'),
     };
 
     return res.apiv3({ customizeParams });
@@ -619,17 +620,23 @@ module.exports = (crowi) => {
 
   router.put('/customize-logo', loginRequiredStrictly, adminRequired, csrf, validator.logo, apiV3FormValidator, async(req, res) => {
 
-    const { isDefaultLogo, attachmentId } = req.body;
+    const {
+      isDefaultLogo, attachmentId, uploadedLogoSrc, isUploadedLogo,
+    } = req.body;
 
     const requestParams = {
       'customize:attachmentId': attachmentId,
       'customize:isDefaultLogo': isDefaultLogo,
+      'customize:uploadedLogoSrc': uploadedLogoSrc,
+      'customize:isUploadedLogo': isUploadedLogo,
     };
     try {
       await crowi.configManager.updateConfigsInTheSameNamespace('crowi', requestParams);
       const customizedParams = {
         attachmentId: await crowi.configManager.getConfig('crowi', 'customize:attachmentId'),
         isDefaultLogo: await crowi.configManager.getConfig('crowi', 'customize:isDefaultLogo'),
+        uploadedLogoSrc: await crowi.configManager.getConfig('crowi', 'customize:uploadedLogoSrc'),
+        isUploadedLogo: await crowi.configManager.getConfig('crowi', 'customize:isUploadedLogo'),
       };
       return res.apiv3({ customizedParams });
     }