admin-plugins.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import useSWR, { SWRResponse } from 'swr';
  2. import { apiv3Get } from '~/client/util/apiv3-client';
  3. import { useStaticSWR } from '~/stores/use-static-swr';
  4. import type { IGrowiPluginHasId } from '../../interfaces';
  5. type Plugins = {
  6. plugins: IGrowiPluginHasId[]
  7. }
  8. export const useSWRxAdminPlugins = (): SWRResponse<Plugins, Error> => {
  9. return useSWR(
  10. '/plugins',
  11. async(endpoint) => {
  12. try {
  13. const res = await apiv3Get<Plugins>(endpoint);
  14. return res.data;
  15. }
  16. catch (err) {
  17. throw new Error(err);
  18. }
  19. },
  20. );
  21. };
  22. /*
  23. * PluginDeleteModal
  24. */
  25. type PluginDeleteModalStatus = {
  26. isOpen: boolean,
  27. id: string,
  28. name: string,
  29. url: string,
  30. }
  31. type PluginDeleteModalUtils = {
  32. open(plugin: IGrowiPluginHasId): Promise<void>,
  33. close(): Promise<void>,
  34. }
  35. export const usePluginDeleteModal = (): SWRResponse<PluginDeleteModalStatus, Error> & PluginDeleteModalUtils => {
  36. const initialStatus: PluginDeleteModalStatus = {
  37. isOpen: false,
  38. id: '',
  39. name: '',
  40. url: '',
  41. };
  42. const swrResponse = useStaticSWR<PluginDeleteModalStatus, Error>('pluginDeleteModal', undefined, { fallbackData: initialStatus });
  43. const { mutate } = swrResponse;
  44. const open = async(plugin) => {
  45. mutate({
  46. isOpen: true,
  47. id: plugin._id,
  48. name: plugin.meta.name,
  49. url: plugin.origin.url,
  50. });
  51. };
  52. const close = async() => {
  53. mutate(initialStatus);
  54. };
  55. return {
  56. ...swrResponse,
  57. open,
  58. close,
  59. };
  60. };