浏览代码

Fix minor issues (Dark mode button, Default ports for proxy, Installed apps list)

Nicolas Meienberger 3 年之前
父节点
当前提交
ed3f103231

+ 2 - 2
docker-compose.rc.yml

@@ -6,8 +6,8 @@ services:
     image: traefik:v2.6
     image: traefik:v2.6
     restart: always
     restart: always
     ports:
     ports:
-      - ${NGINX_PORT}:80
-      - ${PROXY_PORT}:8080
+      - ${NGINX_PORT-80}:80
+      - ${PROXY_PORT-8080}:8080
     command: --api.insecure=true --providers.docker
     command: --api.insecure=true --providers.docker
     volumes:
     volumes:
       - /var/run/docker.sock:/var/run/docker.sock:ro
       - /var/run/docker.sock:/var/run/docker.sock:ro

+ 2 - 2
docker-compose.yml

@@ -6,8 +6,8 @@ services:
     image: traefik:v2.6
     image: traefik:v2.6
     restart: always
     restart: always
     ports:
     ports:
-      - ${NGINX_PORT}:80
-      - ${PROXY_PORT}:8080
+      - ${NGINX_PORT-80}:80
+      - ${PROXY_PORT-8080}:8080
     command: --api.insecure=true --providers.docker
     command: --api.insecure=true --providers.docker
     volumes:
     volumes:
       - /var/run/docker.sock:/var/run/docker.sock:ro
       - /var/run/docker.sock:/var/run/docker.sock:ro

+ 1 - 1
packages/dashboard/src/components/Layout/SideMenu.tsx

@@ -60,7 +60,7 @@ const SideMenu: React.FC = () => {
           <ListItem className="flex items-center">
           <ListItem className="flex items-center">
             <FaRegMoon size={20} className="mr-3" />
             <FaRegMoon size={20} className="mr-3" />
             <p className="flex-1">Dark mode</p>
             <p className="flex-1">Dark mode</p>
-            <Switch checked={colorMode === 'dark'} onChange={(event) => handleChangeColorMode(event.target.checked)} />
+            <Switch isChecked={colorMode === 'dark'} onChange={(event) => handleChangeColorMode(event.target.checked)} />
           </ListItem>
           </ListItem>
         </div>
         </div>
       </List>
       </List>

+ 1 - 1
packages/system-api/src/modules/apps/__tests__/apps.service.test.ts

@@ -80,7 +80,7 @@ describe('Install app', () => {
 
 
     const stateFile = JSON.parse(fs.readFileSync(`${config.ROOT_FOLDER}/state/apps.json`).toString());
     const stateFile = JSON.parse(fs.readFileSync(`${config.ROOT_FOLDER}/state/apps.json`).toString());
 
 
-    expect(stateFile.installed).toBe(' test-app');
+    expect(stateFile.installed).toBe('test-app');
   });
   });
 
 
   it('Should correctly run app script', async () => {
   it('Should correctly run app script', async () => {

+ 3 - 2
packages/system-api/src/modules/apps/apps.helpers.ts

@@ -93,14 +93,15 @@ export const ensureAppState = (appName: string, installed: boolean) => {
   if (installed) {
   if (installed) {
     if (state.installed.indexOf(appName) === -1) {
     if (state.installed.indexOf(appName) === -1) {
       state.installed += ` ${appName}`;
       state.installed += ` ${appName}`;
-      writeFile('/state/apps.json', JSON.stringify(state));
     }
     }
   } else {
   } else {
     if (state.installed.indexOf(appName) !== -1) {
     if (state.installed.indexOf(appName) !== -1) {
       state.installed = state.installed.replace(`${appName}`, '');
       state.installed = state.installed.replace(`${appName}`, '');
-      writeFile('/state/apps.json', JSON.stringify(state));
     }
     }
   }
   }
+
+  state.installed = state.installed.replace(/\s+/g, ' ').trim();
+  writeFile('/state/apps.json', JSON.stringify(state));
 };
 };
 
 
 export const generateEnvFile = (appName: string, form: Record<string, string>) => {
 export const generateEnvFile = (appName: string, form: Record<string, string>) => {

+ 12 - 8
packages/system-api/src/modules/system/system.controller.ts

@@ -66,18 +66,22 @@ const getMemoryInfo = async (_req: Request, res: Response<MemoryData>) => {
 };
 };
 
 
 const getVersion = async (_req: Request, res: Response<{ current: string; latest?: string }>) => {
 const getVersion = async (_req: Request, res: Response<{ current: string; latest?: string }>) => {
-  let version = TipiCache.get<string>('latestVersion');
+  try {
+    let version = TipiCache.get<string>('latestVersion');
 
 
-  if (!version) {
-    const { data } = await axios.get('https://api.github.com/repos/meienberger/runtipi/releases/latest');
+    if (!version) {
+      const { data } = await axios.get('https://api.github.com/repos/meienberger/runtipi/releases/latest');
 
 
-    TipiCache.set('latestVersion', data.name);
-    version = data.name.replace('v', '');
-  }
+      TipiCache.set('latestVersion', data.name);
+      version = data.name.replace('v', '');
+    }
 
 
-  TipiCache.set('latestVersion', version?.replace('v', ''));
+    TipiCache.set('latestVersion', version?.replace('v', ''));
 
 
-  res.status(200).send({ current: config.VERSION, latest: version?.replace('v', '') });
+    res.status(200).send({ current: config.VERSION, latest: version?.replace('v', '') });
+  } catch (e) {
+    res.status(500).send({ current: config.VERSION, latest: undefined });
+  }
 };
 };
 
 
 export default { getCpuInfo, getDiskInfo, getMemoryInfo, getVersion };
 export default { getCpuInfo, getDiskInfo, getMemoryInfo, getVersion };