diff --git a/packages/@uppy/box/src/Box.tsx b/packages/@uppy/box/src/Box.tsx index 655e03a06..914684106 100644 --- a/packages/@uppy/box/src/Box.tsx +++ b/packages/@uppy/box/src/Box.tsx @@ -97,8 +97,11 @@ export default class Box extends UIPlugin< this.unmount() } - onFirstRender(): void { - Promise.all([this.provider.fetchPreAuthToken(), this.view.getFolder()]) + async onFirstRender(): Promise { + await Promise.all([ + this.provider.fetchPreAuthToken(), + this.view.getFolder(), + ]) } render(state: unknown): ComponentChild { diff --git a/packages/@uppy/dropbox/.npmignore b/packages/@uppy/dropbox/.npmignore new file mode 100644 index 000000000..6c816673f --- /dev/null +++ b/packages/@uppy/dropbox/.npmignore @@ -0,0 +1 @@ +tsconfig.* diff --git a/packages/@uppy/dropbox/src/Dropbox.jsx b/packages/@uppy/dropbox/src/Dropbox.jsx deleted file mode 100644 index 00d8c00a3..000000000 --- a/packages/@uppy/dropbox/src/Dropbox.jsx +++ /dev/null @@ -1,71 +0,0 @@ -import { UIPlugin } from '@uppy/core' -import { Provider, tokenStorage, getAllowedHosts } from '@uppy/companion-client' -import { ProviderViews } from '@uppy/provider-views' -import { h } from 'preact' - -import packageJson from '../package.json' -import locale from './locale.js' - -export default class Dropbox extends UIPlugin { - static VERSION = packageJson.version - - constructor (uppy, opts) { - super(uppy, opts) - this.id = this.opts.id || 'Dropbox' - this.type = 'acquirer' - this.storage = this.opts.storage || tokenStorage - this.files = [] - this.icon = () => ( - - ) - - this.opts.companionAllowedHosts = getAllowedHosts(this.opts.companionAllowedHosts, this.opts.companionUrl) - this.provider = new Provider(uppy, { - companionUrl: this.opts.companionUrl, - companionHeaders: this.opts.companionHeaders, - companionKeysParams: this.opts.companionKeysParams, - companionCookiesRule: this.opts.companionCookiesRule, - provider: 'dropbox', - pluginId: this.id, - supportsRefreshToken: true, - }) - - this.defaultLocale = locale - - this.i18nInit() - this.title = this.opts.title || this.i18n('pluginNameDropbox') - - this.onFirstRender = this.onFirstRender.bind(this) - this.render = this.render.bind(this) - } - - install () { - this.view = new ProviderViews(this, { - provider: this.provider, - loadAllFiles: true, - }) - - const { target } = this.opts - if (target) { - this.mount(target, this) - } - } - - uninstall () { - this.view.tearDown() - this.unmount() - } - - onFirstRender () { - return Promise.all([ - this.provider.fetchPreAuthToken(), - this.view.getFolder(), - ]) - } - - render (state) { - return this.view.render(state) - } -} diff --git a/packages/@uppy/dropbox/src/Dropbox.tsx b/packages/@uppy/dropbox/src/Dropbox.tsx new file mode 100644 index 000000000..1e5c2cca7 --- /dev/null +++ b/packages/@uppy/dropbox/src/Dropbox.tsx @@ -0,0 +1,111 @@ +import { + Provider, + getAllowedHosts, + tokenStorage, + type CompanionPluginOptions, +} from '@uppy/companion-client' +import { UIPlugin, Uppy } from '@uppy/core' +import { ProviderViews } from '@uppy/provider-views' +import { h, type ComponentChild } from 'preact' + +import type { UppyFile, Body, Meta } from '@uppy/utils/lib/UppyFile' +import type { UnknownProviderPluginState } from '@uppy/core/lib/Uppy.ts' +import locale from './locale.ts' +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore We don't want TS to generate types for the package.json +import packageJson from '../package.json' + +export type DropboxOptions = CompanionPluginOptions + +export default class Dropbox extends UIPlugin< + DropboxOptions, + M, + B, + UnknownProviderPluginState +> { + static VERSION = packageJson.version + + icon: () => JSX.Element + + provider: Provider + + view: ProviderViews + + storage: typeof tokenStorage + + files: UppyFile[] + + constructor(uppy: Uppy, opts: DropboxOptions) { + super(uppy, opts) + this.id = this.opts.id || 'Dropbox' + this.type = 'acquirer' + this.storage = this.opts.storage || tokenStorage + this.files = [] + this.icon = () => ( + + ) + + this.opts.companionAllowedHosts = getAllowedHosts( + this.opts.companionAllowedHosts, + this.opts.companionUrl, + ) + this.provider = new Provider(uppy, { + companionUrl: this.opts.companionUrl, + companionHeaders: this.opts.companionHeaders, + companionKeysParams: this.opts.companionKeysParams, + companionCookiesRule: this.opts.companionCookiesRule, + provider: 'dropbox', + pluginId: this.id, + supportsRefreshToken: true, + }) + + this.defaultLocale = locale + + this.i18nInit() + this.title = this.opts.title || this.i18n('pluginNameDropbox') + + this.onFirstRender = this.onFirstRender.bind(this) + this.render = this.render.bind(this) + } + + install(): void { + this.view = new ProviderViews(this, { + provider: this.provider, + loadAllFiles: true, + }) + + const { target } = this.opts + if (target) { + this.mount(target, this) + } + } + + uninstall(): void { + this.view.tearDown() + this.unmount() + } + + async onFirstRender(): Promise { + await Promise.all([ + this.provider.fetchPreAuthToken(), + this.view.getFolder(), + ]) + } + + render(state: unknown): ComponentChild { + return this.view.render(state) + } +} diff --git a/packages/@uppy/dropbox/src/index.js b/packages/@uppy/dropbox/src/index.js deleted file mode 100644 index 477d56d48..000000000 --- a/packages/@uppy/dropbox/src/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './Dropbox.jsx' diff --git a/packages/@uppy/dropbox/src/index.ts b/packages/@uppy/dropbox/src/index.ts new file mode 100644 index 000000000..d896f6e29 --- /dev/null +++ b/packages/@uppy/dropbox/src/index.ts @@ -0,0 +1 @@ +export { default } from './Dropbox.tsx' diff --git a/packages/@uppy/dropbox/src/locale.js b/packages/@uppy/dropbox/src/locale.ts similarity index 100% rename from packages/@uppy/dropbox/src/locale.js rename to packages/@uppy/dropbox/src/locale.ts diff --git a/packages/@uppy/dropbox/tsconfig.build.json b/packages/@uppy/dropbox/tsconfig.build.json new file mode 100644 index 000000000..99aaf378d --- /dev/null +++ b/packages/@uppy/dropbox/tsconfig.build.json @@ -0,0 +1,35 @@ +{ + "extends": "../../../tsconfig.shared", + "compilerOptions": { + "noImplicitAny": false, + "outDir": "./lib", + "paths": { + "@uppy/companion-client": ["../companion-client/src/index.js"], + "@uppy/companion-client/lib/*": ["../companion-client/src/*"], + "@uppy/provider-views": ["../provider-views/src/index.js"], + "@uppy/provider-views/lib/*": ["../provider-views/src/*"], + "@uppy/utils/lib/*": ["../utils/src/*"], + "@uppy/core": ["../core/src/index.js"], + "@uppy/core/lib/*": ["../core/src/*"] + }, + "resolveJsonModule": false, + "rootDir": "./src", + "skipLibCheck": true + }, + "include": ["./src/**/*.*"], + "exclude": ["./src/**/*.test.ts"], + "references": [ + { + "path": "../companion-client/tsconfig.build.json" + }, + { + "path": "../provider-views/tsconfig.build.json" + }, + { + "path": "../utils/tsconfig.build.json" + }, + { + "path": "../core/tsconfig.build.json" + } + ] +} diff --git a/packages/@uppy/dropbox/tsconfig.json b/packages/@uppy/dropbox/tsconfig.json new file mode 100644 index 000000000..e5220fb5a --- /dev/null +++ b/packages/@uppy/dropbox/tsconfig.json @@ -0,0 +1,31 @@ +{ + "extends": "../../../tsconfig.shared", + "compilerOptions": { + "emitDeclarationOnly": false, + "noEmit": true, + "paths": { + "@uppy/companion-client": ["../companion-client/src/index.js"], + "@uppy/companion-client/lib/*": ["../companion-client/src/*"], + "@uppy/provider-views": ["../provider-views/src/index.js"], + "@uppy/provider-views/lib/*": ["../provider-views/src/*"], + "@uppy/utils/lib/*": ["../utils/src/*"], + "@uppy/core": ["../core/src/index.js"], + "@uppy/core/lib/*": ["../core/src/*"], + }, + }, + "include": ["./package.json", "./src/**/*.*"], + "references": [ + { + "path": "../companion-client/tsconfig.build.json", + }, + { + "path": "../provider-views/tsconfig.build.json", + }, + { + "path": "../utils/tsconfig.build.json", + }, + { + "path": "../core/tsconfig.build.json", + }, + ], +}