aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_external/src/actions/inlineStorageCheckAction.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_external/src/actions/inlineStorageCheckAction.ts')
-rw-r--r--apps/files_external/src/actions/inlineStorageCheckAction.ts72
1 files changed, 39 insertions, 33 deletions
diff --git a/apps/files_external/src/actions/inlineStorageCheckAction.ts b/apps/files_external/src/actions/inlineStorageCheckAction.ts
index 42b1d5b3718..27c9b0bcabb 100644
--- a/apps/files_external/src/actions/inlineStorageCheckAction.ts
+++ b/apps/files_external/src/actions/inlineStorageCheckAction.ts
@@ -6,6 +6,7 @@
import type { AxiosError } from '@nextcloud/axios'
import type { Node } from '@nextcloud/files'
+import { FileAction } from '@nextcloud/files'
import { showWarning } from '@nextcloud/dialogs'
import { translate as t } from '@nextcloud/l10n'
import AlertSvg from '@mdi/svg/svg/alert-circle.svg?raw'
@@ -15,7 +16,6 @@ import '../css/fileEntryStatus.scss'
import { getStatus, type StorageConfig } from '../services/externalStorage'
import { isMissingAuthConfig, STORAGE_STATUS } from '../utils/credentialsUtils'
import { isNodeExternalStorage } from '../utils/externalStorageUtils'
-import { FileAction } from '@nextcloud/files'
export const action = new FileAction({
id: 'check-external-storage',
@@ -34,45 +34,51 @@ export const action = new FileAction({
* @param node The node to render inline
*/
async renderInline(node: Node) {
+ const span = document.createElement('span')
+ span.className = 'files-list__row-status'
+ span.innerHTML = t('files_external', 'Checking storage …')
+
let config = null as unknown as StorageConfig
- try {
- const response = await getStatus(node.attributes.id, node.attributes.scope === 'system')
- config = response.data
- Vue.set(node.attributes, 'config', config)
+ getStatus(node.attributes.id, node.attributes.scope === 'system')
+ .then(response => {
+
+ config = response.data
+ Vue.set(node.attributes, 'config', config)
+
+ if (config.status !== STORAGE_STATUS.SUCCESS) {
+ throw new Error(config?.statusMessage || t('files_external', 'There was an error with this external storage.'))
+ }
- if (config.status !== STORAGE_STATUS.SUCCESS) {
- throw new Error(config?.statusMessage || t('files_external', 'There was an error with this external storage.'))
- }
+ span.remove()
+ })
+ .catch(error => {
+ // If axios failed or if something else prevented
+ // us from getting the config
+ if ((error as AxiosError).response && !config) {
+ showWarning(t('files_external', 'We were unable to check the external storage {basename}', {
+ basename: node.basename,
+ }))
+ }
- return null
- } catch (error) {
- // If axios failed or if something else prevented
- // us from getting the config
- if ((error as AxiosError).response && !config) {
- showWarning(t('files_external', 'We were unable to check the external storage {basename}', {
- basename: node.basename,
- }))
- return null
- }
+ // Reset inline status
+ span.innerHTML = ''
- // Checking if we really have an error
- const isWarning = isMissingAuthConfig(config)
- const overlay = document.createElement('span')
- overlay.classList.add(`files-list__row-status--${isWarning ? 'warning' : 'error'}`)
+ // Checking if we really have an error
+ const isWarning = !config ? false : isMissingAuthConfig(config)
+ const overlay = document.createElement('span')
+ overlay.classList.add(`files-list__row-status--${isWarning ? 'warning' : 'error'}`)
- const span = document.createElement('span')
- span.className = 'files-list__row-status'
+ // Only show an icon for errors, warning like missing credentials
+ // have a dedicated inline action button
+ if (!isWarning) {
+ span.innerHTML = AlertSvg
+ span.title = (error as Error).message
+ }
- // Only show an icon for errors, warning like missing credentials
- // have a dedicated inline action button
- if (!isWarning) {
- span.innerHTML = AlertSvg
- span.title = (error as Error).message
- }
+ span.prepend(overlay)
+ })
- span.prepend(overlay)
- return span
- }
+ return span
},
order: 10,