jam411 3 лет назад
Родитель
Сommit
6a979bd044

+ 1 - 1
packages/app/src/components/Admin/PluginsExtension/PluginCard.tsx

@@ -28,7 +28,7 @@ export const PluginCard = (props: Props): JSX.Element => {
   }
 
   const PluginCardButton = (): JSX.Element => {
-    const [isEnabled, setState] = useState<boolean>(data.isEnabled);
+    const [isEnabled, setState] = useState<boolean>(data.plugin.isEnabled);
 
     const onChangeHandler = async() => {
       try {

+ 5 - 5
packages/app/src/components/Admin/PluginsExtension/PluginsExtensionPageContents.tsx

@@ -34,7 +34,7 @@ export const PluginsExtensionPageContents = (): JSX.Element => {
               <i className="icon icon-reload"></i>
             </button>
           </h2>
-          {data == null
+          {data?.plugins == null
             ? <Loading />
             : (
               <div className="d-grid gap-5">
@@ -42,10 +42,10 @@ export const PluginsExtensionPageContents = (): JSX.Element => {
                   <div>Plugin is not installed</div>
                 )}
                 { data.plugins.map((plugin) => {
-                  const pluginId = plugin[0]._id;
-                  const pluginName = plugin[0].meta.name;
-                  const pluginUrl = plugin[0].origin.url;
-                  const pluginDiscription = plugin[0].meta.desc;
+                  const pluginId = plugin._id;
+                  const pluginName = plugin.meta.name;
+                  const pluginUrl = plugin.origin.url;
+                  const pluginDiscription = plugin.meta.desc;
                   return (
                     <PluginCard
                       key={pluginId}

+ 2 - 3
packages/app/src/server/routes/apiv3/plugins.ts

@@ -6,7 +6,6 @@ import Crowi from '../../crowi';
 
 import { ApiV3Response } from './interfaces/apiv3-response';
 
-
 const ObjectID = mongoose.Types.ObjectId;
 
 /*
@@ -51,8 +50,8 @@ module.exports = (crowi: Crowi): Router => {
     const pluginId = new ObjectID(id);
 
     try {
-      const data = await pluginService.getPluginIsEnabled(pluginId);
-      return res.apiv3({ isEnabled: data });
+      const data = await pluginService.getPlugin(pluginId);
+      return res.apiv3({ plugin: data });
     }
     catch (err) {
       return res.apiv3Err(err);

+ 22 - 23
packages/app/src/server/service/plugin.ts

@@ -135,23 +135,6 @@ export class PluginService implements IPluginService {
     await GrowiPlugin.insertMany(plugins);
   }
 
-
-  async getPlugins(): Promise<any> {
-    type GrowiPluginManifestEntries = [growiPlugin: GrowiPlugin, manifest: any][];
-    const entries: GrowiPluginManifestEntries = [];
-
-    const GrowiPlugin = mongoose.model<GrowiPlugin>('GrowiPlugin');
-    const growiPlugins = await GrowiPlugin.find({});
-
-    growiPlugins.forEach(async(growiPlugin) => {
-      const manifestPath = resolveFromRoot(path.join('tmp/plugins', growiPlugin.installedPath, 'dist/manifest.json'));
-      const customManifestStr: string = readFileSync(manifestPath, 'utf-8');
-      entries.push([growiPlugin, JSON.parse(customManifestStr)]);
-    });
-
-    return JSON.parse(JSON.stringify(entries));
-  }
-
   // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
   private static async detectPlugins(origin: GrowiPluginOrigin, installedPath: string, parentPackageJson?: any): Promise<GrowiPlugin[]> {
     const packageJsonPath = path.resolve(pluginStoringPath, installedPath, 'package.json');
@@ -211,17 +194,33 @@ export class PluginService implements IPluginService {
   }
 
   /**
-   * Get plugin isEnabled
+   * Get all downloaded plugins
    */
-  async getPluginIsEnabled(pluginId: mongoose.Types.ObjectId): Promise<boolean> {
+  async getPlugins(): Promise<any> {
+    const entries: GrowiPlugin[] = [];
+
     const GrowiPlugin = mongoose.model<GrowiPlugin>('GrowiPlugin');
-    const growiPlugins = await GrowiPlugin.findById(pluginId);
+    const growiPlugins = await GrowiPlugin.find({});
 
-    if (growiPlugins == null) {
+    growiPlugins.forEach(async(growiPlugin) => {
+      entries.push(growiPlugin);
+    });
+
+    return JSON.parse(JSON.stringify(entries));
+  }
+
+  /**
+   * Get plugin data
+   */
+  async getPlugin(pluginId: mongoose.Types.ObjectId): Promise<boolean> {
+    const GrowiPlugin = mongoose.model<GrowiPlugin>('GrowiPlugin');
+    const growiPlugin = await GrowiPlugin.findById(pluginId);
+
+    if (growiPlugin == null) {
       throw new Error('No plugin found for this ID.');
     }
 
-    return growiPlugins.isEnabled;
+    return JSON.parse(JSON.stringify(growiPlugin as GrowiPlugin));
   }
 
   /**
@@ -248,7 +247,7 @@ export class PluginService implements IPluginService {
   /**
    * Delete plugin
    */
-  async pluginDelete(pluginId: mongoose.Types.ObjectId): Promise<void> {
+  async deletePlugin(pluginId: mongoose.Types.ObjectId): Promise<void> {
     const deleteFolder = (path: fs.PathLike): Promise<void> => {
       return fs.promises.rmdir(path, { recursive: true });
     };

+ 6 - 6
packages/app/src/stores/plugin.tsx

@@ -4,12 +4,12 @@ import useSWR, { SWRResponse } from 'swr';
 import { apiv3Get } from '~/client/util/apiv3-client';
 import { GrowiPluginHasId } from '~/interfaces/plugin';
 
-type plugins = {
-  plugins: GrowiPluginHasId[][]
+type Plugins = {
+  plugins: GrowiPluginHasId[]
 }
 
-type pluginIsEnalbed = {
-  isEnabled: boolean
+type Plugin = {
+  plugin: GrowiPluginHasId
 }
 
 const pluginsFetcher = () => {
@@ -26,7 +26,7 @@ const pluginsFetcher = () => {
   };
 };
 
-export const useSWRxPlugins = (): SWRResponse<plugins | null, Error> => {
+export const useSWRxPlugins = (): SWRResponse<Plugins | null, Error> => {
   return useSWR('/plugins', pluginsFetcher());
 };
 
@@ -44,6 +44,6 @@ const pluginFetcher = (id: string) => {
   };
 };
 
-export const useSWRxPlugin = (_id: string): SWRResponse<pluginIsEnalbed | null, Error> => {
+export const useSWRxPlugin = (_id: string): SWRResponse<Plugin | null, Error> => {
   return useSWR(`/plugin-${_id}`, pluginFetcher(_id));
 };