DashboardModal.svelte 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <script lang="ts" generics="M extends import('@uppy/utils/lib/UppyFile').Meta, B extends import('@uppy/utils/lib/UppyFile').Body">
  2. import { onMount, onDestroy } from 'svelte'
  3. import type { Uppy } from '@uppy/core';
  4. import DashboardPlugin from '@uppy/dashboard'
  5. let container: HTMLElement;
  6. let plugin: DashboardPlugin<M, B>;
  7. export let uppy: Uppy<M, B>;
  8. export let props: Object | undefined = {};
  9. export let open: boolean;
  10. let lastOpen: boolean = open;
  11. export let plugins: string[] = [];
  12. const installPlugin = () => {
  13. const options = {
  14. id: 'svelte:DashboardModal',
  15. plugins,
  16. ...props,
  17. target: container
  18. }
  19. uppy.use(DashboardPlugin, options);
  20. plugin = uppy.getPlugin(options.id) as DashboardPlugin<M, B>;
  21. if(open) plugin.openModal();
  22. }
  23. const uninstallPlugin = (uppyInstance: Uppy<M, B> = uppy) => {
  24. uppyInstance.removePlugin(plugin);
  25. }
  26. onMount(() => installPlugin())
  27. onDestroy(() => uninstallPlugin())
  28. $: {
  29. const options = {
  30. id: 'svelte:DashboardModal',
  31. plugins,
  32. ...props,
  33. target: container
  34. }
  35. uppy.setOptions(options)
  36. }
  37. $: {
  38. if(open && !lastOpen) {
  39. plugin.openModal()
  40. }
  41. if (!open && lastOpen) {
  42. plugin.closeModal()
  43. }
  44. lastOpen = open;
  45. }
  46. </script>
  47. <div class="uppy-Container" bind:this={container} />