Dashboard.svelte 1.1 KB

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