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

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

@@ -4,7 +4,6 @@ import Link from 'next/link';
 
 import { apiv3Delete, apiv3Put } from '~/client/util/apiv3-client';
 import { toastSuccess, toastError } from '~/client/util/toastr';
-import { useSWRxPlugin } from '~/stores/plugin';
 
 import styles from './PluginCard.module.scss';
 
@@ -12,23 +11,19 @@ type Props = {
   id: string,
   name: string,
   url: string,
+  isEnalbed: boolean,
+  mutate: () => void,
   desc?: string,
 }
 
 export const PluginCard = (props: Props): JSX.Element => {
 
   const {
-    id, name, url, desc,
+    id, name, url, isEnalbed, desc, mutate,
   } = props;
 
-  const { data, mutate } = useSWRxPlugin(id);
-
-  if (data == null) {
-    return <></>;
-  }
-
   const PluginCardButton = (): JSX.Element => {
-    const [isEnabled, setState] = useState<boolean>(data.plugin.isEnabled);
+    const [isEnabled, setState] = useState<boolean>(isEnalbed);
 
     const onChangeHandler = async() => {
       try {
@@ -48,9 +43,6 @@ export const PluginCard = (props: Props): JSX.Element => {
       catch (err) {
         toastError('pluginIsEnabled', err);
       }
-      finally {
-        mutate();
-      }
     };
 
     return (

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

@@ -45,6 +45,7 @@ export const PluginsExtensionPageContents = (): JSX.Element => {
                   const pluginId = plugin._id;
                   const pluginName = plugin.meta.name;
                   const pluginUrl = plugin.origin.url;
+                  const pluginIsEnabled = plugin.isEnabled;
                   const pluginDiscription = plugin.meta.desc;
                   return (
                     <PluginCard
@@ -52,7 +53,9 @@ export const PluginsExtensionPageContents = (): JSX.Element => {
                       id={pluginId}
                       name={pluginName}
                       url={pluginUrl}
+                      isEnalbed={pluginIsEnabled}
                       desc={pluginDiscription}
+                      mutate={mutate}
                     />
                   );
                 })}

+ 7 - 8
packages/app/src/server/models/growi-plugin.ts

@@ -14,9 +14,9 @@ export interface GrowiPluginDocument extends GrowiPlugin, Document {
 export interface GrowiPluginModel extends Model<GrowiPluginDocument> {
   findEnabledPlugins(): Promise<GrowiPlugin[]>
   findEnabledPluginsIncludingAnyTypes(includingTypes: GrowiPluginResourceType[]): Promise<GrowiPlugin[]>
-  getPlugin(id: Types.ObjectId): Promise<GrowiPlugin | null>
-  activateStatus(id: Types.ObjectId): Promise<void>
-  deactivateStatus(id: Types.ObjectId): Promise<void>
+  findPlugins(): Promise<GrowiPlugin[]>
+  activatePlugin(id: Types.ObjectId): Promise<void>
+  deactivatePlugin(id: Types.ObjectId): Promise<void>
 }
 
 const growiThemeMetadataSchema = new Schema<GrowiThemeMetadata>({
@@ -69,16 +69,15 @@ growiPluginSchema.statics.findEnabledPluginsIncludingAnyTypes = async function(t
   });
 };
 
-growiPluginSchema.statics.getPlugin = async function(id: Types.ObjectId): Promise<GrowiPlugin | null> {
-  const growiPlugin = await this.findOne({ _id: id });
-  return growiPlugin;
+growiPluginSchema.statics.findPlugins = async function(): Promise<GrowiPlugin[]> {
+  return this.find({});
 };
 
-growiPluginSchema.statics.activateStatus = async function(id: Types.ObjectId): Promise<void> {
+growiPluginSchema.statics.activatePlugin = async function(id: Types.ObjectId): Promise<void> {
   await this.findOneAndUpdate({ _id: id }, { isEnabled: true });
 };
 
-growiPluginSchema.statics.deactivateStatus = async function(id: Types.ObjectId): Promise<void> {
+growiPluginSchema.statics.deactivatePlugin = async function(id: Types.ObjectId): Promise<void> {
   await this.findOneAndUpdate({ _id: id }, { isEnabled: false });
 };
 

+ 6 - 26
packages/app/src/server/routes/apiv3/plugins.ts

@@ -33,30 +33,10 @@ module.exports = (crowi: Crowi): Router => {
       return res.apiv3Err('\'pluginService\' is not set up', 500);
     }
 
-    try {
-      const data = await pluginService.getPlugins();
-      return res.apiv3({ plugins: data });
-    }
-    catch (err) {
-      return res.apiv3Err(err);
-    }
-  });
-
-  router.get('/:id', loginRequiredStrictly, adminRequired, validator.pluginIdisRequired, async(req: Request, res: ApiV3Response) => {
-    if (pluginService == null) {
-      return res.apiv3Err('\'pluginService\' is not set up', 500);
-    }
-
-    const { id } = req.params;
-    const pluginId = new ObjectID(id);
-
     try {
       const GrowiPluginModel = mongoose.model('GrowiPlugin') as GrowiPluginModel;
-      const growiPlugin = await GrowiPluginModel.getPlugin(pluginId);
-      if (growiPlugin == null) {
-        return res.apiv3Err('GROWI Plugin is not found.', 400);
-      }
-      return res.apiv3({ plugin: growiPlugin });
+      const data = await GrowiPluginModel.findPlugins();
+      return res.apiv3({ plugins: data });
     }
     catch (err) {
       return res.apiv3Err(err);
@@ -88,8 +68,8 @@ module.exports = (crowi: Crowi): Router => {
 
     try {
       const GrowiPluginModel = mongoose.model('GrowiPlugin') as GrowiPluginModel;
-      await GrowiPluginModel.activateStatus(pluginId);
-      return res.apiv3({});
+      await GrowiPluginModel.activatePlugin(pluginId);
+      return res.apiv3();
     }
     catch (err) {
       return res.apiv3Err(err);
@@ -106,8 +86,8 @@ module.exports = (crowi: Crowi): Router => {
 
     try {
       const GrowiPluginModel = mongoose.model('GrowiPlugin') as GrowiPluginModel;
-      await GrowiPluginModel.deactivateStatus(pluginId);
-      return res.apiv3({});
+      await GrowiPluginModel.deactivatePlugin(pluginId);
+      return res.apiv3();
     }
     catch (err) {
       return res.apiv3Err(err);

+ 0 - 16
packages/app/src/server/service/plugin.ts

@@ -250,22 +250,6 @@ export class PluginService implements IPluginService {
     return [];
   }
 
-  /**
-   * Get all downloaded plugins
-   */
-  async getPlugins(): Promise<GrowiPlugin[]> {
-    const entries: GrowiPlugin[] = [];
-
-    const GrowiPlugin = mongoose.model<GrowiPlugin>('GrowiPlugin');
-    const growiPlugins = await GrowiPlugin.find({});
-
-    growiPlugins.forEach(async(growiPlugin) => {
-      entries.push(growiPlugin);
-    });
-
-    return entries;
-  }
-
   /**
    * Delete plugin
    */

+ 0 - 24
packages/app/src/stores/plugin.tsx

@@ -1,18 +1,12 @@
-
 import useSWR, { SWRResponse } from 'swr';
 
 import { apiv3Get } from '~/client/util/apiv3-client';
 import { GrowiPluginHasId } from '~/interfaces/plugin';
 
-// TODO: Check types
 type Plugins = {
   plugins: GrowiPluginHasId[]
 }
 
-type Plugin = {
-  plugin: GrowiPluginHasId
-}
-
 const pluginsFetcher = () => {
   return async() => {
     const reqUrl = '/plugins';
@@ -30,21 +24,3 @@ const pluginsFetcher = () => {
 export const useSWRxPlugins = (): SWRResponse<Plugins, Error> => {
   return useSWR('/plugins', pluginsFetcher());
 };
-
-const pluginFetcher = (id: string) => {
-  return async() => {
-    const reqUrl = `/plugins/${id}`;
-
-    try {
-      const res = await apiv3Get(reqUrl);
-      return res.data;
-    }
-    catch (err) {
-      throw new Error(err);
-    }
-  };
-};
-
-export const useSWRxPlugin = (_id: string): SWRResponse<Plugin, Error> => {
-  return useSWR(`/plugin-${_id}`, pluginFetcher(_id));
-};