diff options
40 files changed, 284 insertions, 146 deletions
diff --git a/3rdparty b/3rdparty -Subproject a5d796d02631b21546accdafc09021f96787bb8 +Subproject 2d3ffebfcfb22af6d999d575b53e8f41cdfb4e9 diff --git a/apps/files_trashbin/l10n/de_DE.js b/apps/files_trashbin/l10n/de_DE.js index 2541ebf7aff..e15ca0c0359 100644 --- a/apps/files_trashbin/l10n/de_DE.js +++ b/apps/files_trashbin/l10n/de_DE.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Deleted files" : "Gelöschte Dateien", "restored" : "Wiederhergestellt", - "Deleted files and folders in the trash bin (may expire during export if you are low on storage space)" : "Gelöschte Dateien und Ordner im Papierkorb (können während des Exports gelöscht werden, wenn Sie wenig Speicherplatz haben)", + "Deleted files and folders in the trash bin (may expire during export if you are low on storage space)" : "Gelöschte Dateien und Ordner im Papierkorb (können während des Exports gelöscht werden, wenn der Speicherplatz knapp wird)", "This application enables users to restore files that were deleted from the system." : "Diese App ermöglicht es Benutzern Dateien die vom System gelöscht wurden wiederherzustellen.", "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Diese Anwendung ermöglicht es Benutzern, gelöschte Dateien wieder herzustellen. In der Web-Oberfläche wird eine Liste mit allen gelöschten Dateien angezeigt. Es besteht die Möglichkeit die Datein im Dateiverzeichnisse des Benutzers wieder herzustelle, oder diese endgültig zu löschen. Bei der Wiederherstellung einer Datei werden, sofern die Versions Anwendung aktiviert ist, die dazugehörigen Dateiversionen ebenfalls wieder hergestellt. Falls eine geteilte Datei gelöscht wurde, kann diese ebenfals wieder hergestellt werden, jedoch ist diese danach nicht mehr geteilt. Normalerweise verbleiben gelöschte Dateien für 30 Tage im Papierkorb .\nUm zu verhindern, dass einem Benutzer der Speicherplatz ausgeht, nutzt die Anwendung maximal 50% des verfügbaren freien Kontingents für gelöschte Dateien. Sofern die gelöschten Dateien dieses Limit überschreiten, werden zunächst die ältesten Dateien gelöscht, bis das Limit unterschritten wird. Mehr Informationen sind in der Dokumentation verfügbar.", "Restore" : "Wiederherstellen", diff --git a/apps/files_trashbin/l10n/de_DE.json b/apps/files_trashbin/l10n/de_DE.json index c4db2c9240c..87cdd4ec9fe 100644 --- a/apps/files_trashbin/l10n/de_DE.json +++ b/apps/files_trashbin/l10n/de_DE.json @@ -1,7 +1,7 @@ { "translations": { "Deleted files" : "Gelöschte Dateien", "restored" : "Wiederhergestellt", - "Deleted files and folders in the trash bin (may expire during export if you are low on storage space)" : "Gelöschte Dateien und Ordner im Papierkorb (können während des Exports gelöscht werden, wenn Sie wenig Speicherplatz haben)", + "Deleted files and folders in the trash bin (may expire during export if you are low on storage space)" : "Gelöschte Dateien und Ordner im Papierkorb (können während des Exports gelöscht werden, wenn der Speicherplatz knapp wird)", "This application enables users to restore files that were deleted from the system." : "Diese App ermöglicht es Benutzern Dateien die vom System gelöscht wurden wiederherzustellen.", "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Diese Anwendung ermöglicht es Benutzern, gelöschte Dateien wieder herzustellen. In der Web-Oberfläche wird eine Liste mit allen gelöschten Dateien angezeigt. Es besteht die Möglichkeit die Datein im Dateiverzeichnisse des Benutzers wieder herzustelle, oder diese endgültig zu löschen. Bei der Wiederherstellung einer Datei werden, sofern die Versions Anwendung aktiviert ist, die dazugehörigen Dateiversionen ebenfalls wieder hergestellt. Falls eine geteilte Datei gelöscht wurde, kann diese ebenfals wieder hergestellt werden, jedoch ist diese danach nicht mehr geteilt. Normalerweise verbleiben gelöschte Dateien für 30 Tage im Papierkorb .\nUm zu verhindern, dass einem Benutzer der Speicherplatz ausgeht, nutzt die Anwendung maximal 50% des verfügbaren freien Kontingents für gelöschte Dateien. Sofern die gelöschten Dateien dieses Limit überschreiten, werden zunächst die ältesten Dateien gelöscht, bis das Limit unterschritten wird. Mehr Informationen sind in der Dokumentation verfügbar.", "Restore" : "Wiederherstellen", diff --git a/apps/files_trashbin/lib/Command/RestoreAllFiles.php b/apps/files_trashbin/lib/Command/RestoreAllFiles.php index 43e9363327b..748ead798d8 100644 --- a/apps/files_trashbin/lib/Command/RestoreAllFiles.php +++ b/apps/files_trashbin/lib/Command/RestoreAllFiles.php @@ -129,7 +129,11 @@ class RestoreAllFiles extends Base { \OC_Util::setupFS($uid); \OC_User::setUserId($uid); - $filesInTrash = Helper::getTrashFiles('/', $uid, 'mtime'); + // Sort by most recently deleted first + // (Restoring in order of most recently deleted preserves nested file paths. + // See https://github.com/nextcloud/server/issues/31200#issuecomment-1130358549) + $filesInTrash = Helper::getTrashFiles('/', $uid, 'mtime', true); + $trashCount = count($filesInTrash); if ($trashCount == 0) { $output->writeln("User has no deleted files in the trashbin"); diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js index 71d6a6319eb..b2fb929b923 100644 --- a/apps/settings/l10n/de.js +++ b/apps/settings/l10n/de.js @@ -60,6 +60,7 @@ OC.L10N.register( "Unable to change personal password" : "Das persönliche Passwort konnte nicht geändert werden", "Saved" : "Gespeichert", "No user supplied" : "Kein Benutzer angegeben", + "Unable to change password. Password too long." : "Passwort konnte nicht geändert werden. Passwort ist zu lang.", "Authentication error" : "Authentifizierungsfehler", "Please provide an admin recovery password; otherwise, all user data will be lost." : "Bitte gib ein Wiederherstellungspasswort für das Administratorkonto an, da sonst alle Benutzerdaten verlorengehen.", "Wrong admin recovery password. Please check the password and try again." : "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfe das Passwort und versuche es erneut.", @@ -137,6 +138,7 @@ OC.L10N.register( "The old server-side-encryption format is enabled. We recommend disabling this." : "Das alte serverseitige Verschlüsselungsformat ist aktiviert. Wir empfehlen, es zu deaktivieren.", "MariaDB version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MariaDB 10.2 or higher." : "MariaDB Version \"%s\" wird verwendet. Nextcloud 21 und neuer unterstützen diese Version nicht und benötigen MariaDB 10.2 oder neuer.", "Profile information" : "Profilinformation", + "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Profilbild, vollständiger Name, E-Mail-Adresse, Telefonnummer, Adresse, Webseite, Twitter, Organisation, Rolle, Überschrift, Biografie und ob Dein Profil aktiviert ist", "Nextcloud settings" : "Nextcloud-Einstellungen", "Administration privileges" : "Administratorrechte", "Here you can decide which group can access certain sections of the administration settings." : "Hier kannst Du festlegen, welche Gruppe auf bestimmte Bereiche der Administrationseinstellungen zugreifen kann.", diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json index 94ed4c15ef5..9ebfc404cb1 100644 --- a/apps/settings/l10n/de.json +++ b/apps/settings/l10n/de.json @@ -58,6 +58,7 @@ "Unable to change personal password" : "Das persönliche Passwort konnte nicht geändert werden", "Saved" : "Gespeichert", "No user supplied" : "Kein Benutzer angegeben", + "Unable to change password. Password too long." : "Passwort konnte nicht geändert werden. Passwort ist zu lang.", "Authentication error" : "Authentifizierungsfehler", "Please provide an admin recovery password; otherwise, all user data will be lost." : "Bitte gib ein Wiederherstellungspasswort für das Administratorkonto an, da sonst alle Benutzerdaten verlorengehen.", "Wrong admin recovery password. Please check the password and try again." : "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfe das Passwort und versuche es erneut.", @@ -135,6 +136,7 @@ "The old server-side-encryption format is enabled. We recommend disabling this." : "Das alte serverseitige Verschlüsselungsformat ist aktiviert. Wir empfehlen, es zu deaktivieren.", "MariaDB version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MariaDB 10.2 or higher." : "MariaDB Version \"%s\" wird verwendet. Nextcloud 21 und neuer unterstützen diese Version nicht und benötigen MariaDB 10.2 oder neuer.", "Profile information" : "Profilinformation", + "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Profilbild, vollständiger Name, E-Mail-Adresse, Telefonnummer, Adresse, Webseite, Twitter, Organisation, Rolle, Überschrift, Biografie und ob Dein Profil aktiviert ist", "Nextcloud settings" : "Nextcloud-Einstellungen", "Administration privileges" : "Administratorrechte", "Here you can decide which group can access certain sections of the administration settings." : "Hier kannst Du festlegen, welche Gruppe auf bestimmte Bereiche der Administrationseinstellungen zugreifen kann.", diff --git a/apps/settings/l10n/eu.js b/apps/settings/l10n/eu.js index 2ae4ccae66e..3d0b9eb8edd 100644 --- a/apps/settings/l10n/eu.js +++ b/apps/settings/l10n/eu.js @@ -289,6 +289,7 @@ OC.L10N.register( "Unable to update visibility of {displayId}" : "Ezin izan da {displayId}(r)en ikusgarritasuna eguneratu", "Your role" : "Zure rola", "Unable to update role" : "Ezin izan da rola eguneratu", + "Change scope level of {accountProperty}, current scope is {scope}" : "Aldatu {accountProperty}-(r)en esparru-maila, unekoa {scope} esparru-maila da", "Unable to update federation scope of the primary {accountProperty}" : "Ezin da eguneratu lehen mailako {accountProperty}-ren federazio-esparrua", "Unable to update federation scope of additional {accountProperty}" : "Ezin da eguneratu {accountProperty} gehigarriaren federazio-esparrua", "Add additional email" : "Gehitu e-posta gehigarria", @@ -531,6 +532,6 @@ OC.L10N.register( "Change privacy level of full name" : "Aldatu izen osoaren pribatutasun maila", "No display name set" : "Ez da bistaratze izena ezarri", "The maximum number of OPcache keys is nearly exceeded. To assure that all scripts can be hold in cache, it is recommended to apply <code>opcache.max_accelerated_files</code> to your PHP configuration with a value higher than <code>%s</code>." : "OPcache gakoen gehienezko kopurua ia gainditzen da. Script guztiak cachean gorde daitezkeela ziurtatzeko, gomendatzen da <code>opcache.max_accelerated_files </code> aplikatzea zure PHP konfigurazioan <code> %s</code> baino balio handiagoarekin.", - "Change scope level of {accountProperty}" : "Aldatu {accountProperty}-ren esparru-maila" + "Change scope level of {accountProperty}" : "Aldatu {accountProperty}-(r)en esparru-maila" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/settings/l10n/eu.json b/apps/settings/l10n/eu.json index c8122dfdf83..02cf8672de2 100644 --- a/apps/settings/l10n/eu.json +++ b/apps/settings/l10n/eu.json @@ -287,6 +287,7 @@ "Unable to update visibility of {displayId}" : "Ezin izan da {displayId}(r)en ikusgarritasuna eguneratu", "Your role" : "Zure rola", "Unable to update role" : "Ezin izan da rola eguneratu", + "Change scope level of {accountProperty}, current scope is {scope}" : "Aldatu {accountProperty}-(r)en esparru-maila, unekoa {scope} esparru-maila da", "Unable to update federation scope of the primary {accountProperty}" : "Ezin da eguneratu lehen mailako {accountProperty}-ren federazio-esparrua", "Unable to update federation scope of additional {accountProperty}" : "Ezin da eguneratu {accountProperty} gehigarriaren federazio-esparrua", "Add additional email" : "Gehitu e-posta gehigarria", @@ -529,6 +530,6 @@ "Change privacy level of full name" : "Aldatu izen osoaren pribatutasun maila", "No display name set" : "Ez da bistaratze izena ezarri", "The maximum number of OPcache keys is nearly exceeded. To assure that all scripts can be hold in cache, it is recommended to apply <code>opcache.max_accelerated_files</code> to your PHP configuration with a value higher than <code>%s</code>." : "OPcache gakoen gehienezko kopurua ia gainditzen da. Script guztiak cachean gorde daitezkeela ziurtatzeko, gomendatzen da <code>opcache.max_accelerated_files </code> aplikatzea zure PHP konfigurazioan <code> %s</code> baino balio handiagoarekin.", - "Change scope level of {accountProperty}" : "Aldatu {accountProperty}-ren esparru-maila" + "Change scope level of {accountProperty}" : "Aldatu {accountProperty}-(r)en esparru-maila" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/settings/l10n/pl.js b/apps/settings/l10n/pl.js index 78fbe3d865f..6f9cd73e9b2 100644 --- a/apps/settings/l10n/pl.js +++ b/apps/settings/l10n/pl.js @@ -60,6 +60,7 @@ OC.L10N.register( "Unable to change personal password" : "Nie można zmienić osobistego hasła", "Saved" : "Zapisano", "No user supplied" : "Brak użytkownika", + "Unable to change password. Password too long." : "Nie można zmienić hasła. Hasło jest za długie.", "Authentication error" : "Błąd uwierzytelniania", "Please provide an admin recovery password; otherwise, all user data will be lost." : "Podaj hasło odzyskiwania administratora; w przeciwnym razie wszystkie dane użytkownika zostaną utracone.", "Wrong admin recovery password. Please check the password and try again." : "Błędne hasło odzyskiwania administratora. Sprawdź hasło i spróbuj ponownie.", @@ -288,6 +289,7 @@ OC.L10N.register( "Unable to update visibility of {displayId}" : "Nie można zaktualizować widoczności {displayId}", "Your role" : "Twoja rola społeczna", "Unable to update role" : "Nie można zaktualizować roli społecznej", + "Change scope level of {accountProperty}, current scope is {scope}" : "Zmień poziom zakresu {accountProperty}, obecny zakres to {scope}", "Unable to update federation scope of the primary {accountProperty}" : "Nie można zaktualizować zakresu federacji podstawowego {accountProperty}", "Unable to update federation scope of additional {accountProperty}" : "Nie można zaktualizować zakresu federacji dodatkowego {accountProperty}", "Add additional email" : "Dodaj dodatkowy e-mail", diff --git a/apps/settings/l10n/pl.json b/apps/settings/l10n/pl.json index 7dba1cec2b4..b56d1861229 100644 --- a/apps/settings/l10n/pl.json +++ b/apps/settings/l10n/pl.json @@ -58,6 +58,7 @@ "Unable to change personal password" : "Nie można zmienić osobistego hasła", "Saved" : "Zapisano", "No user supplied" : "Brak użytkownika", + "Unable to change password. Password too long." : "Nie można zmienić hasła. Hasło jest za długie.", "Authentication error" : "Błąd uwierzytelniania", "Please provide an admin recovery password; otherwise, all user data will be lost." : "Podaj hasło odzyskiwania administratora; w przeciwnym razie wszystkie dane użytkownika zostaną utracone.", "Wrong admin recovery password. Please check the password and try again." : "Błędne hasło odzyskiwania administratora. Sprawdź hasło i spróbuj ponownie.", @@ -286,6 +287,7 @@ "Unable to update visibility of {displayId}" : "Nie można zaktualizować widoczności {displayId}", "Your role" : "Twoja rola społeczna", "Unable to update role" : "Nie można zaktualizować roli społecznej", + "Change scope level of {accountProperty}, current scope is {scope}" : "Zmień poziom zakresu {accountProperty}, obecny zakres to {scope}", "Unable to update federation scope of the primary {accountProperty}" : "Nie można zaktualizować zakresu federacji podstawowego {accountProperty}", "Unable to update federation scope of additional {accountProperty}" : "Nie można zaktualizować zakresu federacji dodatkowego {accountProperty}", "Add additional email" : "Dodaj dodatkowy e-mail", diff --git a/apps/settings/l10n/pt_BR.js b/apps/settings/l10n/pt_BR.js index c70614c0693..fed12848651 100644 --- a/apps/settings/l10n/pt_BR.js +++ b/apps/settings/l10n/pt_BR.js @@ -60,6 +60,7 @@ OC.L10N.register( "Unable to change personal password" : "Não foi possível alterar a senha pessoal", "Saved" : "Salvo", "No user supplied" : "Nenhum usuário fornecido", + "Unable to change password. Password too long." : "Não foi possível alterar a senha. Senha muito longa.", "Authentication error" : "Erro de autenticação", "Please provide an admin recovery password; otherwise, all user data will be lost." : "Por favor, forneça uma senha de recuperação do administrador, caso contrário todos os dados serão perdidos.", "Wrong admin recovery password. Please check the password and try again." : "Senha de recuperação do administrador incorreta. Verifique a senha e tente novamente.", @@ -288,6 +289,7 @@ OC.L10N.register( "Unable to update visibility of {displayId}" : "Não foi possível atualizar a visibilidade de {displayId}", "Your role" : "Seu papel", "Unable to update role" : "Incapaz de atualizar a função ", + "Change scope level of {accountProperty}, current scope is {scope}" : "Altere o nível de escopo de {accountProperty}, o escopo atual é {scope}", "Unable to update federation scope of the primary {accountProperty}" : "Não é possível atualizar o escopo da federação do {accountProperty} principal ", "Unable to update federation scope of additional {accountProperty}" : "Não é possível atualizar o escopo da federação de {accountProperty} adicional ", "Add additional email" : "Adicionar e-mail adicional", diff --git a/apps/settings/l10n/pt_BR.json b/apps/settings/l10n/pt_BR.json index a69c868b461..97c51916e40 100644 --- a/apps/settings/l10n/pt_BR.json +++ b/apps/settings/l10n/pt_BR.json @@ -58,6 +58,7 @@ "Unable to change personal password" : "Não foi possível alterar a senha pessoal", "Saved" : "Salvo", "No user supplied" : "Nenhum usuário fornecido", + "Unable to change password. Password too long." : "Não foi possível alterar a senha. Senha muito longa.", "Authentication error" : "Erro de autenticação", "Please provide an admin recovery password; otherwise, all user data will be lost." : "Por favor, forneça uma senha de recuperação do administrador, caso contrário todos os dados serão perdidos.", "Wrong admin recovery password. Please check the password and try again." : "Senha de recuperação do administrador incorreta. Verifique a senha e tente novamente.", @@ -286,6 +287,7 @@ "Unable to update visibility of {displayId}" : "Não foi possível atualizar a visibilidade de {displayId}", "Your role" : "Seu papel", "Unable to update role" : "Incapaz de atualizar a função ", + "Change scope level of {accountProperty}, current scope is {scope}" : "Altere o nível de escopo de {accountProperty}, o escopo atual é {scope}", "Unable to update federation scope of the primary {accountProperty}" : "Não é possível atualizar o escopo da federação do {accountProperty} principal ", "Unable to update federation scope of additional {accountProperty}" : "Não é possível atualizar o escopo da federação de {accountProperty} adicional ", "Add additional email" : "Adicionar e-mail adicional", diff --git a/apps/workflowengine/l10n/eu.js b/apps/workflowengine/l10n/eu.js index 0eafda106a3..18a54649689 100644 --- a/apps/workflowengine/l10n/eu.js +++ b/apps/workflowengine/l10n/eu.js @@ -54,7 +54,8 @@ OC.L10N.register( "Images" : "Irudiak", "Office documents" : "Office dokumentuak", "PDF documents" : "PDF dokumentuak", - "Custom mimetype" : "Mimemota pertsonalizatua", + "Custom MIME type" : "MIME mota pertsonalizatua", + "Custom mimetype" : "Mime mota pertsonalizatua", "Select a tag" : "Hautatu etiketa bat", "No results" : "Emaitzarik ez", "%s (invisible)" : "%s (ikusezina)", diff --git a/apps/workflowengine/l10n/eu.json b/apps/workflowengine/l10n/eu.json index c9965c42235..f04a6d5a3b2 100644 --- a/apps/workflowengine/l10n/eu.json +++ b/apps/workflowengine/l10n/eu.json @@ -52,7 +52,8 @@ "Images" : "Irudiak", "Office documents" : "Office dokumentuak", "PDF documents" : "PDF dokumentuak", - "Custom mimetype" : "Mimemota pertsonalizatua", + "Custom MIME type" : "MIME mota pertsonalizatua", + "Custom mimetype" : "Mime mota pertsonalizatua", "Select a tag" : "Hautatu etiketa bat", "No results" : "Emaitzarik ez", "%s (invisible)" : "%s (ikusezina)", diff --git a/apps/workflowengine/l10n/pl.js b/apps/workflowengine/l10n/pl.js index 6f085b974ce..95654611801 100644 --- a/apps/workflowengine/l10n/pl.js +++ b/apps/workflowengine/l10n/pl.js @@ -54,6 +54,7 @@ OC.L10N.register( "Images" : "Obrazy", "Office documents" : "Dokumenty biurowe", "PDF documents" : "Dokumenty PDF", + "Custom MIME type" : "Niestandardowy typ MIME", "Custom mimetype" : "Niestandardowy typ MIME", "Select a tag" : "Wybierz etykietę", "No results" : "Brak wyników", diff --git a/apps/workflowengine/l10n/pl.json b/apps/workflowengine/l10n/pl.json index 0921cbad163..e18a092a55a 100644 --- a/apps/workflowengine/l10n/pl.json +++ b/apps/workflowengine/l10n/pl.json @@ -52,6 +52,7 @@ "Images" : "Obrazy", "Office documents" : "Dokumenty biurowe", "PDF documents" : "Dokumenty PDF", + "Custom MIME type" : "Niestandardowy typ MIME", "Custom mimetype" : "Niestandardowy typ MIME", "Select a tag" : "Wybierz etykietę", "No results" : "Brak wyników", diff --git a/apps/workflowengine/l10n/pt_BR.js b/apps/workflowengine/l10n/pt_BR.js index 58614061b6b..74e8346af39 100644 --- a/apps/workflowengine/l10n/pt_BR.js +++ b/apps/workflowengine/l10n/pt_BR.js @@ -54,6 +54,7 @@ OC.L10N.register( "Images" : "Imagens", "Office documents" : "Documentos Office", "PDF documents" : "Documentos PDF", + "Custom MIME type" : "Tipo MIME personalizado", "Custom mimetype" : "Mimetype personalizado", "Select a tag" : "Selecione uma etiqueta", "No results" : "Nenhum resultado", diff --git a/apps/workflowengine/l10n/pt_BR.json b/apps/workflowengine/l10n/pt_BR.json index 7f71f9580fb..a2bfb72cc44 100644 --- a/apps/workflowengine/l10n/pt_BR.json +++ b/apps/workflowengine/l10n/pt_BR.json @@ -52,6 +52,7 @@ "Images" : "Imagens", "Office documents" : "Documentos Office", "PDF documents" : "Documentos PDF", + "Custom MIME type" : "Tipo MIME personalizado", "Custom mimetype" : "Mimetype personalizado", "Select a tag" : "Selecione uma etiqueta", "No results" : "Nenhum resultado", diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml index 12e3ca72e7a..f8192736826 100644 --- a/build/psalm-baseline.xml +++ b/build/psalm-baseline.xml @@ -2455,11 +2455,6 @@ <file src="lib/private/Authentication/WebAuthn/CredentialRepository.php"> <InvalidCatch occurrences="2"/> </file> - <file src="lib/private/BackgroundJob/JobList.php"> - <InvalidScalarArgument occurrences="1"> - <code>$job->getId()</code> - </InvalidScalarArgument> - </file> <file src="lib/private/BackgroundJob/QueuedJob.php"> <MoreSpecificImplementedParamType occurrences="1"> <code>$jobList</code> @@ -2501,9 +2496,6 @@ <InvalidDocblock occurrences="1"> <code>public function getForObjectSince(</code> </InvalidDocblock> - <NullArgument occurrences="1"> - <code>null</code> - </NullArgument> </file> <file src="lib/private/Config.php"> <InvalidOperand occurrences="2"> diff --git a/core/Command/Background/Job.php b/core/Command/Background/Job.php index 742bdd4329e..823498cf8ca 100644 --- a/core/Command/Background/Job.php +++ b/core/Command/Background/Job.php @@ -85,10 +85,14 @@ class Job extends Command { } $job = $this->jobList->getById($jobId); + if ($job === null) { + $output->writeln('<error>Something went wrong when trying to retrieve Job with ID ' . $jobId . ' from database</error>'); + return 1; + } $job->execute($this->jobList, $this->logger); $job = $this->jobList->getById($jobId); - if ($lastRun !== $job->getLastRun()) { + if (($job === null) || ($lastRun !== $job->getLastRun())) { $output->writeln('<info>Job executed!</info>'); $output->writeln(''); diff --git a/core/Command/Background/ListCommand.php b/core/Command/Background/ListCommand.php new file mode 100644 index 00000000000..bdd45f3a25f --- /dev/null +++ b/core/Command/Background/ListCommand.php @@ -0,0 +1,86 @@ +<?php + +declare(strict_types=1); +/** + * @copyright Copyright (c) 2022, Côme Chilliet <come.chilliet@nextcloud.com> + * + * @author Côme Chilliet <come.chilliet@nextcloud.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Core\Command\Background; + +use OC\Core\Command\Base; +use OCP\BackgroundJob\IJobList; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class ListCommand extends Base { + protected IJobList $jobList; + + public function __construct(IJobList $jobList) { + parent::__construct(); + $this->jobList = $jobList; + } + + protected function configure(): void { + $this + ->setName('background-job:list') + ->setDescription('List background jobs') + ->addOption( + 'class', + 'c', + InputOption::VALUE_OPTIONAL, + 'Job class to search for', + null + )->addOption( + 'limit', + 'l', + InputOption::VALUE_OPTIONAL, + 'Number of jobs to retrieve', + '10' + )->addOption( + 'offset', + 'o', + InputOption::VALUE_OPTIONAL, + 'Offset for retrieving jobs', + '0' + ) + ; + parent::configure(); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $jobs = $this->jobList->getJobs($input->getOption('class'), (int)$input->getOption('limit'), (int)$input->getOption('offset')); + $this->writeTableInOutputFormat($input, $output, $this->formatJobs($jobs)); + return 0; + } + + protected function formatJobs(array $jobs): array { + return array_map( + fn ($job) => [ + 'id' => $job->getId(), + 'class' => get_class($job), + 'last_run' => date(DATE_ATOM, $job->getLastRun()), + 'argument' => json_encode($job->getArgument()), + ], + $jobs + ); + } +} diff --git a/core/Command/Base.php b/core/Command/Base.php index d228e362447..abf9f95773a 100644 --- a/core/Command/Base.php +++ b/core/Command/Base.php @@ -26,9 +26,10 @@ namespace OC\Core\Command; use OC\Core\Command\User\ListCommand; -use Stecman\Component\Symfony\Console\BashCompletion\Completion\CompletionAwareInterface; use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext; +use Stecman\Component\Symfony\Console\BashCompletion\Completion\CompletionAwareInterface; use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -54,7 +55,7 @@ class Base extends Command implements CompletionAwareInterface { ; } - protected function writeArrayInOutputFormat(InputInterface $input, OutputInterface $output, array $items, string $prefix = ' - ') { + protected function writeArrayInOutputFormat(InputInterface $input, OutputInterface $output, array $items, string $prefix = ' - '): void { switch ($input->getOption('output')) { case self::OUTPUT_FORMAT_JSON: $output->writeln(json_encode($items)); @@ -84,6 +85,26 @@ class Base extends Command implements CompletionAwareInterface { } } + protected function writeTableInOutputFormat(InputInterface $input, OutputInterface $output, array $items): void { + switch ($input->getOption('output')) { + case self::OUTPUT_FORMAT_JSON: + $output->writeln(json_encode($items)); + break; + case self::OUTPUT_FORMAT_JSON_PRETTY: + $output->writeln(json_encode($items, JSON_PRETTY_PRINT)); + break; + default: + $table = new Table($output); + $table->setRows($items); + if (!empty($items) && is_string(array_key_first(reset($items)))) { + $table->setHeaders(array_keys(reset($items))); + } + $table->render(); + break; + } + } + + /** * @param mixed $item */ diff --git a/core/l10n/fr.js b/core/l10n/fr.js index 0165a9002b7..57c80e614e1 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -144,6 +144,7 @@ OC.L10N.register( "Username or email" : "Utilisateur ou e-mail", "Password" : "Mot de passe", "Show password" : "Afficher le mot de passe", + "Hide password" : "Masquer le mot de passe", "Wrong username or password." : "Utilisateur ou mot de passe incorrect.", "User disabled" : "Utilisateur désactivé", "We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "Nous avons détecté plusieurs tentatives de connexion invalides depuis votre adresse IP. C'est pourquoi votre prochaine connexion sera retardée de 30 secondes.", @@ -333,6 +334,7 @@ OC.L10N.register( "Get your own free account" : "Obtenez votre compte personnel gratuit", "Skip to main content" : "Passer au contenu principal", "Skip to navigation of app" : "Passer à la navigation d'application", + "%s's homepage" : "Page personnelle de %s", "More apps" : "Plus d'applications", "More" : "Plus", "More apps menu" : "Menu des autres applications", @@ -347,11 +349,13 @@ OC.L10N.register( "Grant access" : "Autoriser l'accès", "Alternative log in using app token" : "Authentification alternative en utilisant un jeton d'application", "Account access" : "Accès au compte", + "Currently logged in as %1$s (%2$s)." : "Connecté en tant que %1$s (%2$s).", "You are about to grant %1$s access to your %2$s account." : "Vous êtes sur le point d'accorder à \"%1$s\" l'accès à votre compte \"%2$s\".", "Account connected" : "Compte connecté", "Your client should now be connected!" : "Votre client devrait maintenant être connecté !", "You can close this window." : "Vous pouvez fermer cette fenêtre.", "This share is password-protected" : "Ce partage est protégé par mot de passe", + "The password is wrong or expired. Please try again or request a new one." : "Le mot de passe est incorrect ou expiré. Ré-essayez ou demandez-en un nouveau.", "Please type in your email address to request a temporary password" : "Veuillez saisir votre adresse courriel pour recevoir un mot de passe temporaire", "Email address" : "Adresse e-mail", "Password sent!" : "Mot de passe envoyé !", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 9c9f7ac978c..b7909166a53 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -142,6 +142,7 @@ "Username or email" : "Utilisateur ou e-mail", "Password" : "Mot de passe", "Show password" : "Afficher le mot de passe", + "Hide password" : "Masquer le mot de passe", "Wrong username or password." : "Utilisateur ou mot de passe incorrect.", "User disabled" : "Utilisateur désactivé", "We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "Nous avons détecté plusieurs tentatives de connexion invalides depuis votre adresse IP. C'est pourquoi votre prochaine connexion sera retardée de 30 secondes.", @@ -331,6 +332,7 @@ "Get your own free account" : "Obtenez votre compte personnel gratuit", "Skip to main content" : "Passer au contenu principal", "Skip to navigation of app" : "Passer à la navigation d'application", + "%s's homepage" : "Page personnelle de %s", "More apps" : "Plus d'applications", "More" : "Plus", "More apps menu" : "Menu des autres applications", @@ -345,11 +347,13 @@ "Grant access" : "Autoriser l'accès", "Alternative log in using app token" : "Authentification alternative en utilisant un jeton d'application", "Account access" : "Accès au compte", + "Currently logged in as %1$s (%2$s)." : "Connecté en tant que %1$s (%2$s).", "You are about to grant %1$s access to your %2$s account." : "Vous êtes sur le point d'accorder à \"%1$s\" l'accès à votre compte \"%2$s\".", "Account connected" : "Compte connecté", "Your client should now be connected!" : "Votre client devrait maintenant être connecté !", "You can close this window." : "Vous pouvez fermer cette fenêtre.", "This share is password-protected" : "Ce partage est protégé par mot de passe", + "The password is wrong or expired. Please try again or request a new one." : "Le mot de passe est incorrect ou expiré. Ré-essayez ou demandez-en un nouveau.", "Please type in your email address to request a temporary password" : "Veuillez saisir votre adresse courriel pour recevoir un mot de passe temporaire", "Email address" : "Adresse e-mail", "Password sent!" : "Mot de passe envoyé !", diff --git a/core/l10n/uk.js b/core/l10n/uk.js index d69ad725d76..352ba36a4ce 100644 --- a/core/l10n/uk.js +++ b/core/l10n/uk.js @@ -290,7 +290,7 @@ OC.L10N.register( "Please use the command line updater because you have a big instance with more than 50 users." : "Будь ласка, скористайтеся оновленням з командного рядка, оскільки у вас є більш ніж 50 користувачів.", "For help, see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentation</a>." : "Щоб отримати допомогу, перегляньте <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">документацію</a>.", "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Я знаю, що, якщо я продовжую виконувати оновлення через вебінтерфейс, існує ризик того, що запит завершиться по тайм-ауту, що може призвести до втрати даних, але я маю резервну копію та знаю, як відновити мій екземпляр у випадку невдачі.", - "Upgrade via web on my own risk" : "Оновитися через вебінтерфейс на свій страх та ризик", + "Upgrade via web on my own risk" : "Оновлення через веб-інтерфейс на свій страх і ризик", "Maintenance mode" : "Режим технічного обслуговування", "This %s instance is currently in maintenance mode, which may take a while." : "Цей сервер %s перебуває в режимі технічного обслуговування, що може зайняти деякий час.", "This page will refresh itself when the instance is available again." : "Ця сторінка оновиться автоматично, коли сервер знову стане доступний.", diff --git a/core/l10n/uk.json b/core/l10n/uk.json index 34444317052..3051e494551 100644 --- a/core/l10n/uk.json +++ b/core/l10n/uk.json @@ -288,7 +288,7 @@ "Please use the command line updater because you have a big instance with more than 50 users." : "Будь ласка, скористайтеся оновленням з командного рядка, оскільки у вас є більш ніж 50 користувачів.", "For help, see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentation</a>." : "Щоб отримати допомогу, перегляньте <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">документацію</a>.", "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Я знаю, що, якщо я продовжую виконувати оновлення через вебінтерфейс, існує ризик того, що запит завершиться по тайм-ауту, що може призвести до втрати даних, але я маю резервну копію та знаю, як відновити мій екземпляр у випадку невдачі.", - "Upgrade via web on my own risk" : "Оновитися через вебінтерфейс на свій страх та ризик", + "Upgrade via web on my own risk" : "Оновлення через веб-інтерфейс на свій страх і ризик", "Maintenance mode" : "Режим технічного обслуговування", "This %s instance is currently in maintenance mode, which may take a while." : "Цей сервер %s перебуває в режимі технічного обслуговування, що може зайняти деякий час.", "This page will refresh itself when the instance is available again." : "Ця сторінка оновиться автоматично, коли сервер знову стане доступний.", diff --git a/core/register_command.php b/core/register_command.php index de04fedf30d..d80465e0906 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -90,6 +90,7 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { $application->add(new OC\Core\Command\Background\WebCron(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Background\Ajax(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Background\Job(\OC::$server->getJobList(), \OC::$server->getLogger())); + $application->add(new OC\Core\Command\Background\ListCommand(\OC::$server->getJobList())); $application->add(\OC::$server->query(\OC\Core\Command\Broadcast\Test::class)); diff --git a/dist/settings-users-8351.js b/dist/settings-users-8351.js index 11f69740430..36c18b6fe07 100644 --- a/dist/settings-users-8351.js +++ b/dist/settings-users-8351.js @@ -1,3 +1,3 @@ /*! For license information please see settings-users-8351.js.LICENSE.txt */ -"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8351],{8353:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".row--menu-opened[data-v-4c932ffd]{z-index:1 !important}.row[data-v-4c932ffd] .multiselect__single{z-index:auto !important}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRow.vue"],names:[],mappings:"AAyqBA,mCACC,oBAAA,CAED,2CACC,uBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Force menu to be above other rows\n.row--menu-opened {\n\tz-index: 1 !important;\n}\n.row::v-deep .multiselect__single {\n\tz-index: auto !important;\n}\n"],sourceRoot:""}]),n.Z=r},6857:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRowSimple.vue"],names:[],mappings:"AA6LC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t.cellText {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n}\n\t.icon-more {\n\t\tbackground-color: var(--color-main-background);\n\t\tborder: 0;\n\t}\n"],sourceRoot:""}]),n.Z=r},36095:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".app-navigation__list #addgroup[data-v-1babbc68] .app-navigation-entry__utils{display:none}","",{version:3,sources:["webpack://./apps/settings/src/views/Users.vue"],names:[],mappings:"AAieA,8EACC,YAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// force hiding the editing action for the add group entry\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\n\tdisplay: none;\n}\n"],sourceRoot:""}]),n.Z=r},89489:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,'\n.modal-wrapper[data-v-672d131f] {\n\tmargin: 2vh 0;\n\talign-items: flex-start;\n}\n.modal__content[data-v-672d131f] {\n\tdisplay: flex;\n\tpadding: 20px;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n}\n.modal__item[data-v-672d131f] {\n\tmargin-bottom: 16px;\n\twidth: 100%;\n}\n.modal__item[data-v-672d131f]:not(:focus):not(:active) {\n\tborder-color: var(--color-border-dark);\n}\n.modal__item[data-v-672d131f] .multiselect {\n\twidth: 100%;\n}\n.user-actions[data-v-672d131f] {\n\tmargin-top: 20px;\n}\n.modal__content[data-v-672d131f] .multiselect__single {\n\ttext-align: left;\n\tbox-sizing: border-box;\n}\n.modal__content[data-v-672d131f] .multiselect__content-wrapper {\n\tbox-sizing: border-box;\n}\n.row[data-v-672d131f] .multiselect__single {\n\tz-index: auto !important;\n}\n\n/* fake input for groups validation */\ninput#newgroups[data-v-672d131f] {\n\tposition: absolute;\n\topacity: 0;\n\t/* The "hidden" input is behind the Multiselect, so in general it does\n\t * not receives clicks. However, with Firefox, after the validation\n\t * fails, it will receive the first click done on it, so its width needs\n\t * to be set to 0 to prevent that ("pointer-events: none" does not\n\t * prevent it). */\n\twidth: 0;\n}\n',"",{version:3,sources:["webpack://./apps/settings/src/components/UserList.vue"],names:[],mappings:";AA+kBA;CACA,aAAA;CACA,uBAAA;AACA;AACA;CACA,aAAA;CACA,aAAA;CACA,sBAAA;CACA,mBAAA;CACA,kBAAA;AACA;AACA;CACA,mBAAA;CACA,WAAA;AACA;AACA;CACA,sCAAA;AACA;AACA;CACA,WAAA;AACA;AACA;CACA,gBAAA;AACA;AACA;CACA,gBAAA;CACA,sBAAA;AACA;AACA;CACA,sBAAA;AACA;AACA;CACA,wBAAA;AACA;;AAEA,qCAAA;AACA;CACA,kBAAA;CACA,UAAA;CACA;;;;kBAIA;CACA,QAAA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div id="app-content" class="user-list-grid" @scroll.passive="onScroll">\n\t\t<Modal v-if="showConfig.showNewUserForm" size="small" @close="closeModal">\n\t\t\t<form id="new-user"\n\t\t\t\t:disabled="loading.all"\n\t\t\t\tclass="modal__content"\n\t\t\t\t@submit.prevent="createUser">\n\t\t\t\t<h2>{{ t(\'settings\',\'New user\') }}</h2>\n\t\t\t\t<input id="newusername"\n\t\t\t\t\tref="newusername"\n\t\t\t\t\tv-model="newUser.id"\n\t\t\t\t\t:disabled="settings.newUserGenerateUserID"\n\t\t\t\t\t:placeholder="settings.newUserGenerateUserID\n\t\t\t\t\t\t? t(\'settings\', \'Will be autogenerated\')\n\t\t\t\t\t\t: t(\'settings\', \'Username\')"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="username"\n\t\t\t\t\tpattern="[a-zA-Z0-9 _\\.@\\-\']+"\n\t\t\t\t\trequired\n\t\t\t\t\ttype="text">\n\t\t\t\t<input id="newdisplayname"\n\t\t\t\t\tv-model="newUser.displayName"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Display name\')"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="displayname"\n\t\t\t\t\ttype="text">\n\t\t\t\t<input id="newuserpassword"\n\t\t\t\t\tref="newuserpassword"\n\t\t\t\t\tv-model="newUser.password"\n\t\t\t\t\t:minlength="minPasswordLength"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Password\')"\n\t\t\t\t\t:required="newUser.mailAddress===\'\'"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="new-password"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="password"\n\t\t\t\t\ttype="password">\n\t\t\t\t<input id="newemail"\n\t\t\t\t\tv-model="newUser.mailAddress"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Email\')"\n\t\t\t\t\t:required="newUser.password===\'\' || settings.newUserRequireEmail"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="email"\n\t\t\t\t\ttype="email">\n\t\t\t\t<div class="groups modal__item">\n\t\t\t\t\t\x3c!-- hidden input trick for vanilla html5 form validation --\x3e\n\t\t\t\t\t<input v-if="!settings.isAdmin"\n\t\t\t\t\t\tid="newgroups"\n\t\t\t\t\t\t:class="{\'icon-loading-small\': loading.groups}"\n\t\t\t\t\t\t:required="!settings.isAdmin"\n\t\t\t\t\t\t:value="newUser.groups"\n\t\t\t\t\t\ttabindex="-1"\n\t\t\t\t\t\ttype="text">\n\t\t\t\t\t<Multiselect v-model="newUser.groups"\n\t\t\t\t\t\t:close-on-select="false"\n\t\t\t\t\t\t:disabled="loading.groups||loading.all"\n\t\t\t\t\t\t:multiple="true"\n\t\t\t\t\t\t:options="canAddGroups"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Add user to group\')"\n\t\t\t\t\t\t:tag-width="60"\n\t\t\t\t\t\t:taggable="true"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttag-placeholder="create"\n\t\t\t\t\t\ttrack-by="id"\n\t\t\t\t\t\t@tag="createGroup">\n\t\t\t\t\t\t\x3c!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\tSubadmins can\'t create users outside their groups\n\t\t\t\t\t\t\tTherefore, empty select is forbidden --\x3e\n\t\t\t\t\t\t<span slot="noResult">{{ t(\'settings\', \'No results\') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div v-if="subAdminsGroups.length>0 && settings.isAdmin"\n\t\t\t\t\tclass="subadmins modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.subAdminsGroups"\n\t\t\t\t\t\t:close-on-select="false"\n\t\t\t\t\t\t:multiple="true"\n\t\t\t\t\t\t:options="subAdminsGroups"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Set user as admin for\')"\n\t\t\t\t\t\t:tag-width="60"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttrack-by="id">\n\t\t\t\t\t\t<span slot="noResult">{{ t(\'settings\', \'No results\') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class="quota modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.quota"\n\t\t\t\t\t\t:allow-empty="false"\n\t\t\t\t\t\t:options="quotaOptions"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Select user quota\')"\n\t\t\t\t\t\t:taggable="true"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="label"\n\t\t\t\t\t\ttrack-by="id"\n\t\t\t\t\t\t@tag="validateQuota" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showLanguages" class="languages modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.language"\n\t\t\t\t\t\t:allow-empty="false"\n\t\t\t\t\t\t:options="languages"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Default language\')"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tgroup-label="label"\n\t\t\t\t\t\tgroup-values="languages"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttrack-by="code" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showStoragePath" class="storageLocation" />\n\t\t\t\t<div v-if="showConfig.showUserBackend" class="userBackend" />\n\t\t\t\t<div v-if="showConfig.showLastLogin" class="lastLogin" />\n\t\t\t\t<div class="user-actions">\n\t\t\t\t\t<Button id="newsubmit"\n\t\t\t\t\t\ttype="primary"\n\t\t\t\t\t\tnative-type="submit"\n\t\t\t\t\t\tvalue="">\n\t\t\t\t\t\t{{ t(\'settings\', \'Add a new user\') }}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Modal>\n\t\t<div id="grid-header"\n\t\t\t:class="{\'sticky\': scrolled && !showConfig.showNewUserForm}"\n\t\t\tclass="row">\n\t\t\t<div id="headerAvatar" class="avatar" />\n\t\t\t<div id="headerName" class="name">\n\t\t\t\t{{ t(\'settings\', \'Username\') }}\n\n\t\t\t\t<div class="subtitle">\n\t\t\t\t\t{{ t(\'settings\', \'Display name\') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id="headerPassword" class="password">\n\t\t\t\t{{ t(\'settings\', \'Password\') }}\n\t\t\t</div>\n\t\t\t<div id="headerAddress" class="mailAddress">\n\t\t\t\t{{ t(\'settings\', \'Email\') }}\n\t\t\t</div>\n\t\t\t<div id="headerGroups" class="groups">\n\t\t\t\t{{ t(\'settings\', \'Groups\') }}\n\t\t\t</div>\n\t\t\t<div v-if="subAdminsGroups.length>0 && settings.isAdmin"\n\t\t\t\tid="headerSubAdmins"\n\t\t\t\tclass="subadmins">\n\t\t\t\t{{ t(\'settings\', \'Group admin for\') }}\n\t\t\t</div>\n\t\t\t<div id="headerQuota" class="quota">\n\t\t\t\t{{ t(\'settings\', \'Quota\') }}\n\t\t\t</div>\n\t\t\t<div v-if="showConfig.showLanguages"\n\t\t\t\tid="headerLanguages"\n\t\t\t\tclass="languages">\n\t\t\t\t{{ t(\'settings\', \'Language\') }}\n\t\t\t</div>\n\n\t\t\t<div v-if="showConfig.showUserBackend || showConfig.showStoragePath"\n\t\t\t\tclass="headerUserBackend userBackend">\n\t\t\t\t<div v-if="showConfig.showUserBackend" class="userBackend">\n\t\t\t\t\t{{ t(\'settings\', \'User backend\') }}\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showStoragePath"\n\t\t\t\t\tclass="subtitle storageLocation">\n\t\t\t\t\t{{ t(\'settings\', \'Storage location\') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if="showConfig.showLastLogin"\n\t\t\t\tclass="headerLastLogin lastLogin">\n\t\t\t\t{{ t(\'settings\', \'Last login\') }}\n\t\t\t</div>\n\n\t\t\t<div class="userActions" />\n\t\t</div>\n\n\t\t<user-row v-for="user in filteredUsers"\n\t\t\t:key="user.id"\n\t\t\t:external-actions="externalActions"\n\t\t\t:groups="groups"\n\t\t\t:languages="languages"\n\t\t\t:quota-options="quotaOptions"\n\t\t\t:settings="settings"\n\t\t\t:show-config="showConfig"\n\t\t\t:sub-admins-groups="subAdminsGroups"\n\t\t\t:user="user" />\n\t\t<InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">\n\t\t\t<div slot="spinner">\n\t\t\t\t<div class="users-icon-loading icon-loading" />\n\t\t\t</div>\n\t\t\t<div slot="no-more">\n\t\t\t\t<div class="users-list-end" />\n\t\t\t</div>\n\t\t\t<div slot="no-results">\n\t\t\t\t<div id="emptycontent">\n\t\t\t\t\t<div class="icon-contacts-dark" />\n\t\t\t\t\t<h2>{{ t(\'settings\', \'No users in here\') }}</h2>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</InfiniteLoading>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from \'@nextcloud/event-bus\'\nimport InfiniteLoading from \'vue-infinite-loading\'\nimport Vue from \'vue\'\nimport Modal from \'@nextcloud/vue/dist/Components/Modal\'\nimport Button from \'@nextcloud/vue/dist/Components/Button\'\nimport Multiselect from \'@nextcloud/vue/dist/Components/Multiselect\'\n\nimport userRow from \'./UserList/UserRow\'\n\nconst unlimitedQuota = {\n\tid: \'none\',\n\tlabel: t(\'settings\', \'Unlimited\'),\n}\nconst defaultQuota = {\n\tid: \'default\',\n\tlabel: t(\'settings\', \'Default quota\'),\n}\nconst newUser = {\n\tid: \'\',\n\tdisplayName: \'\',\n\tpassword: \'\',\n\tmailAddress: \'\',\n\tgroups: [],\n\tsubAdminsGroups: [],\n\tquota: defaultQuota,\n\tlanguage: {\n\t\tcode: \'en\',\n\t\tname: t(\'settings\', \'Default language\'),\n\t},\n}\n\nexport default {\n\tname: \'UserList\',\n\tcomponents: {\n\t\tModal,\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t\tButton,\n\t},\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tunlimitedQuota,\n\t\t\tdefaultQuota,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t},\n\t\t\tscrolled: false,\n\t\t\tsearchQuery: \'\',\n\t\t\tnewUser: Object.assign({}, newUser),\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t\tselectedGroupDecoded() {\n\t\t\treturn decodeURIComponent(this.selectedGroup)\n\t\t},\n\t\tfilteredUsers() {\n\t\t\tif (this.selectedGroup === \'disabled\') {\n\t\t\t\treturn this.users.filter(user => user.enabled === false)\n\t\t\t}\n\t\t\tif (!this.settings.isAdmin) {\n\t\t\t\t// we don\'t want subadmins to edit themselves\n\t\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t\t}\n\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t},\n\t\tgroups() {\n\t\t\t// data provided php side + remove the disabled group\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== \'disabled\')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t\tcanAddGroups() {\n\t\t\t// disabled if no permission to add new users to group\n\t\t\treturn this.groups.map(group => {\n\t\t\t\t// clone object because we don\'t want\n\t\t\t\t// to edit the original groups\n\t\t\t\tgroup = Object.assign({}, group)\n\t\t\t\tgroup.$isDisabled = group.canAdd === false\n\t\t\t\treturn group\n\t\t\t})\n\t\t},\n\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\n\t\t\t\tid: cur,\n\t\t\t\tlabel: cur,\n\t\t\t}), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(this.unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(this.defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\t\tusersCount() {\n\t\t\treturn this.users.length\n\t\t},\n\n\t\t/* LANGUAGES */\n\t\tlanguages() {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: t(\'settings\', \'Common languages\'),\n\t\t\t\t\tlanguages: this.settings.languages.commonLanguages,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t(\'settings\', \'Other languages\'),\n\t\t\t\t\tlanguages: this.settings.languages.otherLanguages,\n\t\t\t\t},\n\t\t\t]\n\t\t},\n\t},\n\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup(val, old) {\n\t\t\t// if selected is the disabled group but it\'s empty\n\t\t\tthis.redirectIfDisabled()\n\t\t\tthis.$store.commit(\'resetUsers\')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\t// make sure the infiniteLoading state is changed if we manually\n\t\t// add/remove data from the store\n\t\tusersCount(val, old) {\n\t\t\t// deleting the last user, reset the list\n\t\t\tif (val === 0 && old === 1) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t// adding the first user, warn the infiniteLoader that\n\t\t\t\t// the list is not empty anymore (we don\'t fetch the newly\n\t\t\t\t// added user as we already have all the info we need)\n\t\t\t} else if (val === 1 && old === 0) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.loaded()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (!this.settings.canChangePassword) {\n\t\t\tOC.Notification.showTemporary(t(\'settings\', \'Password change is disabled because the master key is disabled\'))\n\t\t}\n\n\t\t/**\n\t\t * Reset and init new user form\n\t\t */\n\t\tthis.resetForm()\n\n\t\t/**\n\t\t * Register search\n\t\t */\n\t\tsubscribe(\'nextcloud:unified-search.search\', this.search)\n\t\tsubscribe(\'nextcloud:unified-search.reset\', this.resetSearch)\n\n\t\t/**\n\t\t * If disabled group but empty, redirect\n\t\t */\n\t\tthis.redirectIfDisabled()\n\t},\n\tbeforeDestroy() {\n\t\tunsubscribe(\'nextcloud:unified-search.search\', this.search)\n\t\tunsubscribe(\'nextcloud:unified-search.reset\', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tonScroll(event) {\n\t\t\tthis.scrolled = event.target.scrollTo > 0\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it\'s a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format \'5 GB\'\n\t\t * @return {object}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\tquota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))\n\t\t\t\tthis.newUser.quota = { id: quota, label: quota }\n\t\t\t\treturn this.newUser.quota\n\t\t\t}\n\t\t\t// Default is unlimited\n\t\t\tthis.newUser.quota = this.quotaOptions[0]\n\t\t\treturn this.quotaOptions[0]\n\t\t},\n\n\t\tinfiniteHandler($state) {\n\t\t\tthis.$store.dispatch(\'getUsers\', {\n\t\t\t\toffset: this.usersOffset,\n\t\t\t\tlimit: this.usersLimit,\n\t\t\t\tgroup: this.selectedGroup !== \'disabled\' ? this.selectedGroup : \'\',\n\t\t\t\tsearch: this.searchQuery,\n\t\t\t})\n\t\t\t\t.then((usersCount) => {\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\t$state.loaded()\n\t\t\t\t\t}\n\t\t\t\t\tif (usersCount < this.usersLimit) {\n\t\t\t\t\t\t$state.complete()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/* SEARCH */\n\t\tsearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit(\'resetUsers\')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.search({ query: \'\' })\n\t\t},\n\n\t\tresetForm() {\n\t\t\t// revert form to original state\n\t\t\tthis.newUser = Object.assign({}, newUser)\n\n\t\t\t/**\n\t\t\t * Init default language from server data. The use of this.settings\n\t\t\t * requires a computed variable, which break the v-model binding of the form,\n\t\t\t * this is a much easier solution than getter and setter on a computed var\n\t\t\t */\n\t\t\tif (this.settings.defaultLanguage) {\n\t\t\t\tVue.set(this.newUser.language, \'code\', this.settings.defaultLanguage)\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * In case the user directly loaded the user list within a group\n\t\t\t * the watch won\'t be triggered. We need to initialize it.\n\t\t\t */\n\t\t\tthis.setNewUserDefaultGroup(this.selectedGroup)\n\n\t\t\tthis.loading.all = false\n\t\t},\n\t\tcreateUser() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch(\'addUser\', {\n\t\t\t\tuserid: this.newUser.id,\n\t\t\t\tpassword: this.newUser.password,\n\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.resetForm()\n\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\tthis.closeModal()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\t\tthis.$refs.newuserpassword.focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tsetNewUserDefaultGroup(value) {\n\t\t\tif (value && value.length > 0) {\n\t\t\t\t// setting new user default group to the current selected one\n\t\t\t\tconst currentGroup = this.groups.find(group => group.id === value)\n\t\t\t\tif (currentGroup) {\n\t\t\t\t\tthis.newUser.groups = [currentGroup]\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fallback, empty selected group\n\t\t\tthis.newUser.groups = []\n\t\t},\n\n\t\t/**\n\t\t * Create a new group\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t * @return {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading.groups = true\n\t\t\tthis.$store.dispatch(\'addGroup\', gid)\n\t\t\t\t.then((group) => {\n\t\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\n\t\t},\n\n\t\t/**\n\t\t * If the selected group is the disabled group but the count is 0\n\t\t * redirect to the all users page.\n\t\t * we only check for 0 because we don\'t have the count on ldap\n\t\t * and we therefore set the usercount to -1 in this specific case\n\t\t */\n\t\tredirectIfDisabled() {\n\t\t\tconst allGroups = this.$store.getters.getGroups\n\t\t\tif (this.selectedGroup === \'disabled\'\n\t\t\t\t\t\t&& allGroups.findIndex(group => group.id === \'disabled\' && group.usercount === 0) > -1) {\n\t\t\t\t// disabled group is empty, redirection to all users\n\t\t\t\tthis.$router.push({ name: \'users\' })\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t}\n\t\t},\n\t\tcloseModal() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.modal-wrapper {\n\t\tmargin: 2vh 0;\n\t\talign-items: flex-start;\n\t}\n\t.modal__content {\n\t\tdisplay: flex;\n\t\tpadding: 20px;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\ttext-align: center;\n\t}\n\t.modal__item {\n\t\tmargin-bottom: 16px;\n\t\twidth: 100%;\n\t}\n\t.modal__item:not(:focus):not(:active) {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\t.modal__item::v-deep .multiselect {\n\t\twidth: 100%;\n\t}\n\t.user-actions {\n\t\tmargin-top: 20px;\n\t}\n\t.modal__content::v-deep .multiselect__single {\n\t\ttext-align: left;\n\t\tbox-sizing: border-box;\n\t}\n\t.modal__content::v-deep .multiselect__content-wrapper {\n\t\tbox-sizing: border-box;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n\n\t/* fake input for groups validation */\n\tinput#newgroups {\n\t\tposition: absolute;\n\t\topacity: 0;\n\t\t/* The "hidden" input is behind the Multiselect, so in general it does\n\t\t * not receives clicks. However, with Firefox, after the validation\n\t\t * fails, it will receive the first click done on it, so its width needs\n\t\t * to be set to 0 to prevent that ("pointer-events: none" does not\n\t\t * prevent it). */\n\t\twidth: 0;\n\t}\n</style>\n'],sourceRoot:""}]),n.Z=r},74394:function(n,e,s){s.r(e),s.d(e,{default:function(){return Wt}});var i=s(23068),a=s.n(i),r=s(58908),o=s.n(r),u=s(49169),l=s.n(u),d=s(50753),c=s.n(d),g=s(7612),p=s.n(g),h=s(17578),m=s.n(h),f=s(32353),v=s.n(f),w=s(4820),b=s(9597),A=s.n(b),y=s(79753),C=s(7811),_=s.n(C),U=s(20144),k=s(87369),x=s.n(k),L=s(88408),G=s.n(L),S=s(56286),M=s.n(S),q=s(43337),N=s.n(q);function $(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}var O={name:"GroupListItem",components:{ActionInput:G(),ActionButton:M(),CounterBubble:N(),AppNavigationItem:p()},props:{id:{type:String,required:!0},title:{type:String,required:!0},count:{type:Number,required:!1}},data:function(){return{loadingRenameGroup:!1,openGroupMenu:!1}},computed:{settings:function(){return this.$store.getters.getServerData}},methods:{handleGroupMenuOpen:function(){this.openGroupMenu=!0},renameGroup:function(t){var n,e=this;return(n=regeneratorRuntime.mark((function n(){var s;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(""!==t.trim()){n.next=2;break}return n.abrupt("return");case 2:if(""!==(s=e.$refs.displayNameInput.$el.querySelector('input[type="text"]').value).trim()){n.next=5;break}return n.abrupt("return");case 5:return n.prev=5,e.openGroupMenu=!1,e.loadingRenameGroup=!0,n.next=10,e.$store.dispatch("renameGroup",{groupid:t.trim(),displayName:s.trim()});case 10:e.loadingRenameGroup=!1,n.next=17;break;case 13:n.prev=13,n.t0=n.catch(5),e.openGroupMenu=!0,e.loadingRenameGroup=!1;case 17:case"end":return n.stop()}}),n,null,[[5,13]])})),function(){var t=this,e=arguments;return new Promise((function(s,i){var a=n.apply(t,e);function r(t){$(a,s,i,r,o,"next",t)}function o(t){$(a,s,i,r,o,"throw",t)}r(void 0)}))})()},removeGroup:function(n){var e=this;OC.dialogs.confirm(t("settings","You are about to remove the group {group}. The users will NOT be deleted.",{group:n}),t("settings","Please confirm the group removal "),(function(t){t&&e.$store.dispatch("removeGroup",n)}))}}},P=O,D=s(51900),B=(0,D.Z)(P,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("AppNavigationItem",{key:t.id,attrs:{exact:!0,title:t.title,to:{name:"group",params:{selectedGroup:encodeURIComponent(t.id)}},icon:"icon-group",loading:t.loadingRenameGroup,"menu-open":t.openGroupMenu},on:{"update:menuOpen":t.handleGroupMenuOpen},scopedSlots:t._u([{key:"counter",fn:function(){return[t.count?e("CounterBubble",[t._v("\n\t\t\t"+t._s(t.count)+"\n\t\t")]):t._e()]},proxy:!0},{key:"actions",fn:function(){return["admin"!==t.id&&"disabled"!==t.id&&t.settings.isAdmin?e("ActionInput",{ref:"displayNameInput",attrs:{icon:"icon-edit",type:"text",value:t.title},on:{submit:function(n){return t.renameGroup(t.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Rename group"))+"\n\t\t")]):t._e(),t._v(" "),"admin"!==t.id&&"disabled"!==t.id&&t.settings.isAdmin?e("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(n){return t.removeGroup(t.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Remove group"))+"\n\t\t")]):t._e()]},proxy:!0}])})}),[],!1,null,null,null).exports,R=s(74854),Q=s(30306),z=s.n(Q),I=s(47450),F=s.n(I),T=s(1412),j=s.n(T),E=s(2649),W=s.n(E),Z=s(34741),H=s(33476),Y=s(26533),V=s.n(Y),J=s(79440),K=s.n(J),X=s(22200);function tt(t){return tt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tt(t)}var nt={props:{user:{type:Object,required:!0},settings:{type:Object,default:function(){return{}}},groups:{type:Array,default:function(){return[]}},subAdminsGroups:{type:Array,default:function(){return[]}},quotaOptions:{type:Array,default:function(){return[]}},showConfig:{type:Object,default:function(){return{}}},languages:{type:Array,required:!0},externalActions:{type:Array,default:function(){return[]}}},computed:{userGroups:function(){var t=this;return this.groups.filter((function(n){return t.user.groups.includes(n.id)}))},userSubAdminsGroups:function(){var t=this;return this.subAdminsGroups.filter((function(n){return t.user.subadmin.includes(n.id)}))},availableGroups:function(){var t=this;return this.groups.map((function(n){var e=Object.assign({},n);return e.$isDisabled=!1===n.canAdd&&!t.user.groups.includes(n.id)||!1===n.canRemove&&t.user.groups.includes(n.id),e}))},usedSpace:function(){return this.user.quota.used?t("settings","{size} used",{size:OC.Util.humanFileSize(this.user.quota.used)}):t("settings","{size} used",{size:OC.Util.humanFileSize(0)})},usedQuota:function(){var t=this.user.quota.quota;return t=t>0?Math.min(100,Math.round(this.user.quota.used/t*100)):95*(1-1/(this.user.quota.used/(10*Math.pow(2,30))+1)),isNaN(t)?0:t},userQuota:function(){if(this.user.quota.quota>=0){var t=OC.Util.humanFileSize(this.user.quota.quota);return this.quotaOptions.find((function(n){return n.id===t}))||{id:t,label:t}}return"default"===this.user.quota.quota?this.quotaOptions[0]:this.quotaOptions[1]},minPasswordLength:function(){return this.$store.getters.getPasswordPolicyMinLength},userLanguage:function(){var t=this,n=this.languages[0].languages.concat(this.languages[1].languages).find((function(n){return n.code===t.user.language}));return"object"!==tt(n)&&""!==this.user.language?{code:this.user.language,name:this.user.language}:""!==this.user.language&&n},userLastLoginTooltip:function(){return this.user.lastLogin>0?OC.Util.formatDate(this.user.lastLogin):""},userLastLogin:function(){return this.user.lastLogin>0?OC.Util.relativeModifiedDate(this.user.lastLogin):t("settings","Never")}},methods:{generateAvatar:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32;return(0,y.generateUrl)("/avatar/{user}/{size}?v={version}",{user:t,size:n,version:oc_userconfig.avatar.version})}}},et={name:"UserRowSimple",components:{PopoverMenu:V(),ActionButton:M(),Actions:K()},directives:{ClickOutside:W()},mixins:[nt],props:{user:{type:Object,required:!0},loading:{type:Object,required:!0},showConfig:{type:Object,required:!0},userActions:{type:Array,required:!0},openedMenu:{type:Boolean,required:!0},feedbackMessage:{type:String,required:!0},subAdminsGroups:{type:Array,required:!0},settings:{type:Object,required:!0}},computed:{userGroupsLabels:function(){return this.userGroups.map((function(t){return t.name})).join(", ")},userSubAdminsGroupsLabels:function(){return this.userSubAdminsGroups.map((function(t){return t.name})).join(", ")},usedSpace:function(){return this.user.quota.used?t("settings","{size} used",{size:OC.Util.humanFileSize(this.user.quota.used)}):t("settings","{size} used",{size:OC.Util.humanFileSize(0)})},canEdit:function(){return(0,X.getCurrentUser)().uid!==this.user.id||this.settings.isAdmin},userQuota:function(){var n=this.user.quota.quota;return"default"===n&&"none"!==(n=this.settings.defaultQuota)&&(n=OC.Util.computerFileSize(n)),"none"===n||-3===n?t("settings","Unlimited"):n>=0?OC.Util.humanFileSize(n):OC.Util.humanFileSize(0)}},methods:{toggleMenu:function(){this.$emit("update:openedMenu",!this.openedMenu)},hideMenu:function(){this.$emit("update:openedMenu",!1)},toggleEdit:function(){this.$emit("update:editing",!0)}}},st=s(93379),it=s.n(st),at=s(7795),rt=s.n(at),ot=s(90569),ut=s.n(ot),lt=s(3565),dt=s.n(lt),ct=s(19216),gt=s.n(ct),pt=s(44589),ht=s.n(pt),mt=s(6857),ft={};ft.styleTagTransform=ht(),ft.setAttributes=dt(),ft.insert=ut().bind(null,"head"),ft.domAPI=rt(),ft.insertStyleElement=gt(),it()(mt.Z,ft),mt.Z&&mt.Z.locals&&mt.Z.locals;var vt=(0,D.Z)(et,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"row",class:{disabled:t.loading.delete||t.loading.disable},attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{alt:"",width:"32",height:"32",src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x"}})]),t._v(" "),e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t\t"),e("div",{staticClass:"displayName subtitle"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.displayname.length>20?t.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t\t"+t._s(t.user.displayname)+"\n\t\t\t")])])]),t._v(" "),e("div"),t._v(" "),e("div",{staticClass:"mailAddress"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:null!==t.user.email&&t.user.email.length>20?t.user.email:"",expression:"user.email !== null && user.email.length > 20 ? user.email : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t"+t._s(t.user.email)+"\n\t\t")])]),t._v(" "),e("div",{staticClass:"groups"},[t._v("\n\t\t"+t._s(t.userGroupsLabels)+"\n\t")]),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subAdminsGroups"},[t._v("\n\t\t"+t._s(t.userSubAdminsGroupsLabels)+"\n\t")]):t._e(),t._v(" "),e("div",{staticClass:"userQuota"},[e("div",{staticClass:"quota"},[t._v("\n\t\t\t"+t._s(t.userQuota)+" ("+t._s(t.usedSpace)+")\n\t\t\t"),e("progress",{staticClass:"quota-user-progress",class:{warn:t.usedQuota>80},attrs:{max:"100"},domProps:{value:t.usedQuota}})])]),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages"},[t._v("\n\t\t"+t._s(t.userLanguage.name)+"\n\t")]):t._e(),t._v(" "),t.showConfig.showUserBackend||t.showConfig.showStoragePath?e("div",{staticClass:"userBackend"},[t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"},[t._v("\n\t\t\t"+t._s(t.user.backend)+"\n\t\t")]):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.storageLocation,expression:"user.storageLocation"}],staticClass:"storageLocation subtitle"},[t._v("\n\t\t\t"+t._s(t.user.storageLocation)+"\n\t\t")]):t._e()]):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.userLastLoginTooltip,expression:"userLastLoginTooltip",modifiers:{auto:!0}}],staticClass:"lastLogin"},[t._v("\n\t\t"+t._s(t.userLastLogin)+"\n\t")]):t._e(),t._v(" "),e("div",{staticClass:"userActions"},[t.canEdit&&!t.loading.all?e("div",{staticClass:"toggleUserActions"},[e("Actions",[e("ActionButton",{attrs:{icon:"icon-rename"},on:{click:t.toggleEdit}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Edit User"))+"\n\t\t\t\t")])],1),t._v(" "),e("div",{staticClass:"userPopoverMenuWrapper"},[e("button",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"icon-more",attrs:{"aria-label":t.t("settings","Toggle user actions menu")},on:{click:function(n){return n.preventDefault(),t.toggleMenu.apply(null,arguments)}}}),t._v(" "),e("div",{staticClass:"popovermenu",class:{open:t.openedMenu},attrs:{"aria-expanded":t.openedMenu}},[e("PopoverMenu",{attrs:{menu:t.userActions}})],1)])],1):t._e(),t._v(" "),e("div",{staticClass:"feedback",style:{opacity:""!==t.feedbackMessage?1:0}},[e("div",{staticClass:"icon-checkmark"}),t._v("\n\t\t\t"+t._s(t.feedbackMessage)+"\n\t\t")])])])}),[],!1,null,null,null),wt=vt.exports;function bt(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}function At(t){return function(){var n=this,e=arguments;return new Promise((function(s,i){var a=t.apply(n,e);function r(t){bt(a,s,i,r,o,"next",t)}function o(t){bt(a,s,i,r,o,"throw",t)}r(void 0)}))}}U.default.use(Z.default);var yt={name:"UserRow",components:{UserRowSimple:wt,PopoverMenu:H.PopoverMenu,Actions:H.Actions,ActionButton:H.ActionButton,Multiselect:H.Multiselect},directives:{ClickOutside:W()},mixins:[nt],props:{user:{type:Object,required:!0},settings:{type:Object,default:function(){return{}}},groups:{type:Array,default:function(){return[]}},subAdminsGroups:{type:Array,default:function(){return[]}},quotaOptions:{type:Array,default:function(){return[]}},showConfig:{type:Object,default:function(){return{}}},languages:{type:Array,required:!0},externalActions:{type:Array,default:function(){return[]}}},data:function(){return{rand:parseInt(1e3*Math.random()),openedMenu:!1,feedbackMessage:"",editing:!1,loading:{all:!1,displayName:!1,password:!1,mailAddress:!1,groups:!1,subadmins:!1,quota:!1,delete:!1,disable:!1,languages:!1,wipe:!1}}},computed:{userActions:function(){var n=[{icon:"icon-delete",text:t("settings","Delete user"),action:this.deleteUser},{icon:"icon-delete",text:t("settings","Wipe all devices"),action:this.wipeUserDevices},{icon:this.user.enabled?"icon-close":"icon-add",text:this.user.enabled?t("settings","Disable user"):t("settings","Enable user"),action:this.enableDisableUser}];return null!==this.user.email&&""!==this.user.email&&n.push({icon:"icon-mail",text:t("settings","Resend welcome email"),action:this.sendWelcomeMail}),n.concat(this.externalActions)}},methods:{toggleMenu:function(){this.openedMenu=!this.openedMenu},hideMenu:function(){this.openedMenu=!1},wipeUserDevices:function(){var n=this,e=this.user.id;OC.dialogs.confirmDestructive(t("settings","In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.",{userid:e}),t("settings","Remote wipe of devices"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Wipe {userid}'s devices",{userid:e}),confirmClasses:"error",cancel:t("settings","Cancel")},(function(t){t&&(n.loading.wipe=!0,n.loading.all=!0,n.$store.dispatch("wipeUserDevices",e).then((function(){n.loading.wipe=!1,n.loading.all=!1})))}),!0)},deleteUser:function(){var n=this,e=this.user.id;OC.dialogs.confirmDestructive(t("settings","Fully delete {userid}'s account including all their personal files, app data, etc.",{userid:e}),t("settings","Account deletion"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Delete {userid}'s account",{userid:e}),confirmClasses:"error",cancel:t("settings","Cancel")},(function(t){if(t)return n.loading.delete=!0,n.loading.all=!0,n.$store.dispatch("deleteUser",e).then((function(){n.loading.delete=!1,n.loading.all=!1}))}),!0)},enableDisableUser:function(){var t=this;this.loading.delete=!0,this.loading.all=!0;var n=this.user.id,e=!this.user.enabled;return this.$store.dispatch("enableDisableUser",{userid:n,enabled:e}).then((function(){t.loading.delete=!1,t.loading.all=!1}))},updateDisplayName:function(){var t=this,n=this.$refs.displayName.value;this.loading.displayName=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"displayname",value:n}).then((function(){t.loading.displayName=!1,t.$refs.displayName.value=n}))},updatePassword:function(){var t=this,n=this.$refs.password.value;this.loading.password=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"password",value:n}).then((function(){t.loading.password=!1,t.$refs.password.value=""}))},updateEmail:function(){var t=this,n=this.$refs.mailAddress.value;this.loading.mailAddress=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"email",value:n}).then((function(){t.loading.mailAddress=!1,t.$refs.mailAddress.value=n}))},createGroup:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){var s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading={groups:!0,subadmins:!0},e.prev=1,e.next=4,n.$store.dispatch("addGroup",t);case 4:return s=n.user.id,e.next=7,n.$store.dispatch("addUserGroup",{userid:s,gid:t});case 7:e.next=12;break;case 9:e.prev=9,e.t0=e.catch(1),console.error(e.t0);case 12:return e.prev=12,n.loading={groups:!1,subadmins:!1},e.finish(12);case 15:return e.abrupt("return",n.$store.getters.getGroups[n.groups.length]);case 16:case"end":return e.stop()}}),e,null,[[1,9,12,15]])})))()},addUserGroup:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!1!==t.canAdd){e.next=2;break}return e.abrupt("return",!1);case 2:return n.loading.groups=!0,s=n.user.id,i=t.id,e.prev=5,e.next=8,n.$store.dispatch("addUserGroup",{userid:s,gid:i});case 8:e.next=13;break;case 10:e.prev=10,e.t0=e.catch(5),console.error(e.t0);case 13:return e.prev=13,n.loading.groups=!1,e.finish(13);case 16:case"end":return e.stop()}}),e,null,[[5,10,13,16]])})))()},removeUserGroup:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!1!==t.canRemove){e.next=2;break}return e.abrupt("return",!1);case 2:return n.loading.groups=!0,s=n.user.id,i=t.id,e.prev=5,e.next=8,n.$store.dispatch("removeUserGroup",{userid:s,gid:i});case 8:n.loading.groups=!1,n.$route.params.selectedGroup===i&&n.$store.commit("deleteUser",s),e.next=15;break;case 12:e.prev=12,e.t0=e.catch(5),n.loading.groups=!1;case 15:case"end":return e.stop()}}),e,null,[[5,12]])})))()},addUserSubAdmin:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.subadmins=!0,s=n.user.id,i=t.id,e.prev=3,e.next=6,n.$store.dispatch("addUserSubAdmin",{userid:s,gid:i});case 6:n.loading.subadmins=!1,e.next=12;break;case 9:e.prev=9,e.t0=e.catch(3),console.error(e.t0);case 12:case"end":return e.stop()}}),e,null,[[3,9]])})))()},removeUserSubAdmin:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.subadmins=!0,s=n.user.id,i=t.id,e.prev=3,e.next=6,n.$store.dispatch("removeUserSubAdmin",{userid:s,gid:i});case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error(e.t0);case 11:return e.prev=11,n.loading.subadmins=!1,e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[3,8,11,14]])})))()},setUserQuota:function(){var t=arguments,n=this;return At(regeneratorRuntime.mark((function e(){var s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=t.length>0&&void 0!==t[0]?t[0]:"none",n.loading.quota=!0,s=s.id?s.id:s,e.prev=3,e.next=6,n.$store.dispatch("setUserData",{userid:n.user.id,key:"quota",value:s});case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error(e.t0);case 11:return e.prev=11,n.loading.quota=!1,e.finish(11);case 14:return e.abrupt("return",s);case 15:case"end":return e.stop()}}),e,null,[[3,8,11,14]])})))()},validateQuota:function(t){var n=OC.Util.computerFileSize(t);return null!==n&&n>=0&&this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(t)))},setUserLanguage:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.languages=!0,e.prev=1,e.next=4,n.$store.dispatch("setUserData",{userid:n.user.id,key:"language",value:t.code});case 4:e.next=9;break;case 6:e.prev=6,e.t0=e.catch(1),console.error(e.t0);case 9:return e.prev=9,n.loading.languages=!1,e.finish(9);case 12:return e.abrupt("return",t);case 13:case"end":return e.stop()}}),e,null,[[1,6,9,12]])})))()},sendWelcomeMail:function(){var n=this;this.loading.all=!0,this.$store.dispatch("sendWelcomeMail",this.user.id).then((function(e){e&&(n.feedbackMessage=t("setting","Welcome mail sent!"),setTimeout((function(){n.feedbackMessage=""}),2e3)),n.loading.all=!1}))}}},Ct=yt,_t=s(8353),Ut={};Ut.styleTagTransform=ht(),Ut.setAttributes=dt(),Ut.insert=ut().bind(null,"head"),Ut.domAPI=rt(),Ut.insertStyleElement=gt(),it()(_t.Z,Ut),_t.Z&&_t.Z.locals&&_t.Z.locals;var kt=(0,D.Z)(Ct,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return 1===Object.keys(t.user).length?e("div",{staticClass:"row",attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x",alt:"",height:"32",width:"32"}})]),t._v(" "),e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t")]),t._v(" "),e("div",{staticClass:"obfuscated"},[t._v("\n\t\t"+t._s(t.t("settings","You do not have permissions to see the details of this user"))+"\n\t")])]):t.editing?e("div",{staticClass:"row row--editable",class:{disabled:t.loading.delete||t.loading.disable,"row--menu-opened":t.openedMenu},attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x",alt:"",height:"32",width:"32"}})]),t._v(" "),t.user.backendCapabilities.setDisplayName?e("div",{staticClass:"displayName"},[e("form",{staticClass:"displayName",class:{"icon-loading-small":t.loading.displayName},on:{submit:function(n){return n.preventDefault(),t.updateDisplayName.apply(null,arguments)}}},[e("input",{ref:"displayName",attrs:{id:"displayName"+t.user.id+t.rand,disabled:t.loading.displayName||t.loading.all,autocapitalize:"off",autocomplete:"off",autocorrect:"off",spellcheck:"false",type:"text"},domProps:{value:t.user.displayname}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})])]):e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t\t"),e("div",{staticClass:"displayName subtitle"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.displayname.length>20?t.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t\t"+t._s(t.user.displayname)+"\n\t\t\t")])])]),t._v(" "),t.settings.canChangePassword&&t.user.backendCapabilities.setPassword?e("form",{staticClass:"password",class:{"icon-loading-small":t.loading.password},on:{submit:function(n){return n.preventDefault(),t.updatePassword.apply(null,arguments)}}},[e("input",{ref:"password",attrs:{id:"password"+t.user.id+t.rand,disabled:t.loading.password||t.loading.all,minlength:t.minPasswordLength,placeholder:t.t("settings","Add new password"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",required:"",spellcheck:"false",type:"password",value:""}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]):e("div"),t._v(" "),e("form",{staticClass:"mailAddress",class:{"icon-loading-small":t.loading.mailAddress},on:{submit:function(n){return n.preventDefault(),t.updateEmail.apply(null,arguments)}}},[e("input",{ref:"mailAddress",attrs:{id:"mailAddress"+t.user.id+t.rand,disabled:t.loading.mailAddress||t.loading.all,placeholder:t.t("settings","Add new email address"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",spellcheck:"false",type:"email"},domProps:{value:t.user.email}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]),t._v(" "),e("div",{staticClass:"groups",class:{"icon-loading-small":t.loading.groups}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.groups||t.loading.all,limit:2,multiple:!0,options:t.availableGroups,placeholder:t.t("settings","Add user to group"),"tag-width":60,taggable:t.settings.isAdmin,value:t.userGroups,label:"name","tag-placeholder":"create","track-by":"id"},on:{remove:t.removeUserGroup,select:t.addUserGroup,tag:t.createGroup}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins",class:{"icon-loading-small":t.loading.subadmins}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.subadmins||t.loading.all,limit:2,multiple:!0,options:t.subAdminsGroups,placeholder:t.t("settings","Set user as admin for"),"tag-width":60,value:t.userSubAdminsGroups,label:"name","track-by":"id"},on:{remove:t.removeUserSubAdmin,select:t.addUserSubAdmin}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1):t._e(),t._v(" "),e("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.usedSpace,expression:"usedSpace",modifiers:{auto:!0}}],staticClass:"quota",class:{"icon-loading-small":t.loading.quota}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,disabled:t.loading.quota||t.loading.all,options:t.quotaOptions,placeholder:t.t("settings","Select user quota"),taggable:!0,value:t.userQuota,label:"label","tag-placeholder":"create","track-by":"id"},on:{input:t.setUserQuota,tag:t.validateQuota}})],1),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages",class:{"icon-loading-small":t.loading.languages}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,disabled:t.loading.languages||t.loading.all,options:t.languages,placeholder:t.t("settings","No language set"),value:t.userLanguage,"group-label":"label","group-values":"languages",label:"name","track-by":"code"},on:{input:t.setUserLanguage}})],1):t._e(),t._v(" "),t.showConfig.showStoragePath||t.showConfig.showUserBackend?e("div",{staticClass:"storageLocation"}):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div"):t._e(),t._v(" "),e("div",{staticClass:"userActions"},[t.loading.all?t._e():e("div",{staticClass:"toggleUserActions"},[e("Actions",[e("ActionButton",{attrs:{icon:"icon-checkmark"},on:{click:function(n){t.editing=!1}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Done"))+"\n\t\t\t\t")])],1),t._v(" "),e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"userPopoverMenuWrapper"},[e("button",{staticClass:"icon-more",on:{click:function(n){return n.preventDefault(),t.toggleMenu.apply(null,arguments)}}}),t._v(" "),e("div",{staticClass:"popovermenu",class:{open:t.openedMenu}},[e("PopoverMenu",{attrs:{menu:t.userActions}})],1)])],1),t._v(" "),e("div",{staticClass:"feedback",style:{opacity:""!==t.feedbackMessage?1:0}},[e("div",{staticClass:"icon-checkmark"}),t._v("\n\t\t\t"+t._s(t.feedbackMessage)+"\n\t\t")])])]):e("UserRowSimple",{class:{"row--menu-opened":t.openedMenu},attrs:{editing:t.editing,"feedback-message":t.feedbackMessage,groups:t.groups,languages:t.languages,loading:t.loading,"opened-menu":t.openedMenu,settings:t.settings,"show-config":t.showConfig,"sub-admins-groups":t.subAdminsGroups,"user-actions":t.userActions,user:t.user},on:{"update:editing":function(n){t.editing=n},"update:openedMenu":function(n){t.openedMenu=n},"update:opened-menu":function(n){t.openedMenu=n}}})}),[],!1,null,"4c932ffd",null),xt=kt.exports,Lt={id:"none",label:t("settings","Unlimited")},Gt={id:"default",label:t("settings","Default quota")},St={id:"",displayName:"",password:"",mailAddress:"",groups:[],subAdminsGroups:[],quota:Gt,language:{code:"en",name:t("settings","Default language")}},Mt={name:"UserList",components:{Modal:F(),userRow:xt,Multiselect:_(),InfiniteLoading:z(),Button:j()},props:{users:{type:Array,default:function(){return[]}},showConfig:{type:Object,required:!0},selectedGroup:{type:String,default:null},externalActions:{type:Array,default:function(){return[]}}},data:function(){return{unlimitedQuota:Lt,defaultQuota:Gt,loading:{all:!1,groups:!1},scrolled:!1,searchQuery:"",newUser:Object.assign({},St)}},computed:{settings:function(){return this.$store.getters.getServerData},selectedGroupDecoded:function(){return decodeURIComponent(this.selectedGroup)},filteredUsers:function(){return"disabled"===this.selectedGroup?this.users.filter((function(t){return!1===t.enabled})):(this.settings.isAdmin,this.users.filter((function(t){return!1!==t.enabled})))},groups:function(){return this.$store.getters.getGroups.filter((function(t){return"disabled"!==t.id})).sort((function(t,n){return t.name.localeCompare(n.name)}))},canAddGroups:function(){return this.groups.map((function(t){return(t=Object.assign({},t)).$isDisabled=!1===t.canAdd,t}))},subAdminsGroups:function(){return this.$store.getters.getSubadminGroups},quotaOptions:function(){var t=this.settings.quotaPreset.reduce((function(t,n){return t.concat({id:n,label:n})}),[]);return this.settings.allowUnlimitedQuota&&t.unshift(this.unlimitedQuota),t.unshift(this.defaultQuota),t},minPasswordLength:function(){return this.$store.getters.getPasswordPolicyMinLength},usersOffset:function(){return this.$store.getters.getUsersOffset},usersLimit:function(){return this.$store.getters.getUsersLimit},usersCount:function(){return this.users.length},languages:function(){return[{label:t("settings","Common languages"),languages:this.settings.languages.commonLanguages},{label:t("settings","Other languages"),languages:this.settings.languages.otherLanguages}]}},watch:{selectedGroup:function(t,n){this.redirectIfDisabled(),this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset(),this.setNewUserDefaultGroup(t)},usersCount:function(t,n){0===t&&1===n?this.$refs.infiniteLoading.stateChanger.reset():1===t&&0===n&&this.$refs.infiniteLoading.stateChanger.loaded()}},mounted:function(){this.settings.canChangePassword||OC.Notification.showTemporary(t("settings","Password change is disabled because the master key is disabled")),this.resetForm(),(0,R.subscribe)("nextcloud:unified-search.search",this.search),(0,R.subscribe)("nextcloud:unified-search.reset",this.resetSearch),this.redirectIfDisabled()},beforeDestroy:function(){(0,R.unsubscribe)("nextcloud:unified-search.search",this.search),(0,R.unsubscribe)("nextcloud:unified-search.reset",this.resetSearch)},methods:{onScroll:function(t){this.scrolled=t.target.scrollTo>0},validateQuota:function(t){var n=OC.Util.computerFileSize(t);return null!==n&&n>=0?(t=OC.Util.humanFileSize(OC.Util.computerFileSize(t)),this.newUser.quota={id:t,label:t},this.newUser.quota):(this.newUser.quota=this.quotaOptions[0],this.quotaOptions[0])},infiniteHandler:function(t){var n=this;this.$store.dispatch("getUsers",{offset:this.usersOffset,limit:this.usersLimit,group:"disabled"!==this.selectedGroup?this.selectedGroup:"",search:this.searchQuery}).then((function(e){e>0&&t.loaded(),e<n.usersLimit&&t.complete()}))},search:function(t){var n=t.query;this.searchQuery=n,this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset()},resetSearch:function(){this.search({query:""})},resetForm:function(){this.newUser=Object.assign({},St),this.settings.defaultLanguage&&U.default.set(this.newUser.language,"code",this.settings.defaultLanguage),this.setNewUserDefaultGroup(this.selectedGroup),this.loading.all=!1},createUser:function(){var t=this;this.loading.all=!0,this.$store.dispatch("addUser",{userid:this.newUser.id,password:this.newUser.password,displayName:this.newUser.displayName,email:this.newUser.mailAddress,groups:this.newUser.groups.map((function(t){return t.id})),subadmin:this.newUser.subAdminsGroups.map((function(t){return t.id})),quota:this.newUser.quota.id,language:this.newUser.language.code}).then((function(){t.resetForm(),t.$refs.newusername.focus(),t.closeModal()})).catch((function(n){if(t.loading.all=!1,n.response&&n.response.data&&n.response.data.ocs&&n.response.data.ocs.meta){var e=n.response.data.ocs.meta.statuscode;102===e?t.$refs.newusername.focus():107===e&&t.$refs.newuserpassword.focus()}}))},setNewUserDefaultGroup:function(t){if(t&&t.length>0){var n=this.groups.find((function(n){return n.id===t}));if(n)return void(this.newUser.groups=[n])}this.newUser.groups=[]},createGroup:function(t){var n=this;return this.loading.groups=!0,this.$store.dispatch("addGroup",t).then((function(e){n.newUser.groups.push(n.groups.find((function(n){return n.id===t}))),n.loading.groups=!1})).catch((function(){n.loading.groups=!1})),this.$store.getters.getGroups[this.groups.length]},redirectIfDisabled:function(){var t=this.$store.getters.getGroups;"disabled"===this.selectedGroup&&t.findIndex((function(t){return"disabled"===t.id&&0===t.usercount}))>-1&&(this.$router.push({name:"users"}),this.$refs.infiniteLoading.stateChanger.reset())},closeModal:function(){this.showConfig.showNewUserForm=!1}}},qt=s(89489),Nt={};Nt.styleTagTransform=ht(),Nt.setAttributes=dt(),Nt.insert=ut().bind(null,"head"),Nt.domAPI=rt(),Nt.insertStyleElement=gt(),it()(qt.Z,Nt),qt.Z&&qt.Z.locals&&qt.Z.locals;var $t=(0,D.Z)(Mt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"user-list-grid",attrs:{id:"app-content"},on:{"&scroll":function(n){return t.onScroll.apply(null,arguments)}}},[t.showConfig.showNewUserForm?e("Modal",{attrs:{size:"small"},on:{close:t.closeModal}},[e("form",{staticClass:"modal__content",attrs:{id:"new-user",disabled:t.loading.all},on:{submit:function(n){return n.preventDefault(),t.createUser.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("settings","New user")))]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.id,expression:"newUser.id"}],ref:"newusername",staticClass:"modal__item",attrs:{id:"newusername",disabled:t.settings.newUserGenerateUserID,placeholder:t.settings.newUserGenerateUserID?t.t("settings","Will be autogenerated"):t.t("settings","Username"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"username",pattern:"[a-zA-Z0-9 _\\.@\\-']+",required:"",type:"text"},domProps:{value:t.newUser.id},on:{input:function(n){n.target.composing||t.$set(t.newUser,"id",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.displayName,expression:"newUser.displayName"}],staticClass:"modal__item",attrs:{id:"newdisplayname",placeholder:t.t("settings","Display name"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"displayname",type:"text"},domProps:{value:t.newUser.displayName},on:{input:function(n){n.target.composing||t.$set(t.newUser,"displayName",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.password,expression:"newUser.password"}],ref:"newuserpassword",staticClass:"modal__item",attrs:{id:"newuserpassword",minlength:t.minPasswordLength,placeholder:t.t("settings","Password"),required:""===t.newUser.mailAddress,autocapitalize:"none",autocomplete:"new-password",autocorrect:"off",name:"password",type:"password"},domProps:{value:t.newUser.password},on:{input:function(n){n.target.composing||t.$set(t.newUser,"password",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.mailAddress,expression:"newUser.mailAddress"}],staticClass:"modal__item",attrs:{id:"newemail",placeholder:t.t("settings","Email"),required:""===t.newUser.password||t.settings.newUserRequireEmail,autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"email",type:"email"},domProps:{value:t.newUser.mailAddress},on:{input:function(n){n.target.composing||t.$set(t.newUser,"mailAddress",n.target.value)}}}),t._v(" "),e("div",{staticClass:"groups modal__item"},[t.settings.isAdmin?t._e():e("input",{class:{"icon-loading-small":t.loading.groups},attrs:{id:"newgroups",required:!t.settings.isAdmin,tabindex:"-1",type:"text"},domProps:{value:t.newUser.groups}}),t._v(" "),e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.groups||t.loading.all,multiple:!0,options:t.canAddGroups,placeholder:t.t("settings","Add user to group"),"tag-width":60,taggable:!0,label:"name","tag-placeholder":"create","track-by":"id"},on:{tag:t.createGroup},model:{value:t.newUser.groups,callback:function(n){t.$set(t.newUser,"groups",n)},expression:"newUser.groups"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,multiple:!0,options:t.subAdminsGroups,placeholder:t.t("settings","Set user as admin for"),"tag-width":60,label:"name","track-by":"id"},model:{value:t.newUser.subAdminsGroups,callback:function(n){t.$set(t.newUser,"subAdminsGroups",n)},expression:"newUser.subAdminsGroups"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1):t._e(),t._v(" "),e("div",{staticClass:"quota modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:t.quotaOptions,placeholder:t.t("settings","Select user quota"),taggable:!0,label:"label","track-by":"id"},on:{tag:t.validateQuota},model:{value:t.newUser.quota,callback:function(n){t.$set(t.newUser,"quota",n)},expression:"newUser.quota"}})],1),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:t.languages,placeholder:t.t("settings","Default language"),"group-label":"label","group-values":"languages",label:"name","track-by":"code"},model:{value:t.newUser.language,callback:function(n){t.$set(t.newUser,"language",n)},expression:"newUser.language"}})],1):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{staticClass:"storageLocation"}):t._e(),t._v(" "),t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"}):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{staticClass:"lastLogin"}):t._e(),t._v(" "),e("div",{staticClass:"user-actions"},[e("Button",{attrs:{id:"newsubmit",type:"primary","native-type":"submit",value:""}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Add a new user"))+"\n\t\t\t\t")])],1)])]):t._e(),t._v(" "),e("div",{staticClass:"row",class:{sticky:t.scrolled&&!t.showConfig.showNewUserForm},attrs:{id:"grid-header"}},[e("div",{staticClass:"avatar",attrs:{id:"headerAvatar"}}),t._v(" "),e("div",{staticClass:"name",attrs:{id:"headerName"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Username"))+"\n\n\t\t\t"),e("div",{staticClass:"subtitle"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Display name"))+"\n\t\t\t")])]),t._v(" "),e("div",{staticClass:"password",attrs:{id:"headerPassword"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Password"))+"\n\t\t")]),t._v(" "),e("div",{staticClass:"mailAddress",attrs:{id:"headerAddress"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Email"))+"\n\t\t")]),t._v(" "),e("div",{staticClass:"groups",attrs:{id:"headerGroups"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Groups"))+"\n\t\t")]),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins",attrs:{id:"headerSubAdmins"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Group admin for"))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"quota",attrs:{id:"headerQuota"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Quota"))+"\n\t\t")]),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages",attrs:{id:"headerLanguages"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Language"))+"\n\t\t")]):t._e(),t._v(" "),t.showConfig.showUserBackend||t.showConfig.showStoragePath?e("div",{staticClass:"headerUserBackend userBackend"},[t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","User backend"))+"\n\t\t\t")]):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{staticClass:"subtitle storageLocation"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Storage location"))+"\n\t\t\t")]):t._e()]):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{staticClass:"headerLastLogin lastLogin"},[t._v("\n\t\t\t"+t._s(t.t("settings","Last login"))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"userActions"})]),t._v(" "),t._l(t.filteredUsers,(function(n){return e("user-row",{key:n.id,attrs:{"external-actions":t.externalActions,groups:t.groups,languages:t.languages,"quota-options":t.quotaOptions,settings:t.settings,"show-config":t.showConfig,"sub-admins-groups":t.subAdminsGroups,user:n}})})),t._v(" "),e("InfiniteLoading",{ref:"infiniteLoading",on:{infinite:t.infiniteHandler}},[e("div",{attrs:{slot:"spinner"},slot:"spinner"},[e("div",{staticClass:"users-icon-loading icon-loading"})]),t._v(" "),e("div",{attrs:{slot:"no-more"},slot:"no-more"},[e("div",{staticClass:"users-list-end"})]),t._v(" "),e("div",{attrs:{slot:"no-results"},slot:"no-results"},[e("div",{attrs:{id:"emptycontent"}},[e("div",{staticClass:"icon-contacts-dark"}),t._v(" "),e("h2",[t._v(t._s(t.t("settings","No users in here")))])])])])],2)}),[],!1,null,"672d131f",null),Ot=$t.exports;function Pt(t){return Pt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Pt(t)}function Dt(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,s)}return e}function Bt(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?Dt(Object(e),!0).forEach((function(n){Rt(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Dt(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function Rt(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function Qt(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}function zt(t){return function(){var n=this,e=arguments;return new Promise((function(s,i){var a=t.apply(n,e);function r(t){Qt(a,s,i,r,o,"next",t)}function o(t){Qt(a,s,i,r,o,"throw",t)}r(void 0)}))}}U.default.use(x());var It={name:"Users",components:{AppContent:a(),AppNavigation:o(),AppNavigationCaption:l(),AppNavigationCounter:c(),AppNavigationItem:p(),AppNavigationNew:m(),AppNavigationSettings:v(),Content:A(),GroupListItem:B,Multiselect:_(),UserList:Ot},props:{selectedGroup:{type:String,default:null}},data:function(){return{unlimitedQuota:{id:"none",label:t("settings","Unlimited")},selectedQuota:!1,externalActions:[],loadingAddGroup:!1,loadingSendMail:!1,showConfig:{showStoragePath:!1,showUserBackend:!1,showLastLogin:!1,showNewUserForm:!1,showLanguages:!1}}},computed:{selectedGroupDecoded:function(){return this.selectedGroup?decodeURIComponent(this.selectedGroup):null},users:function(){return this.$store.getters.getUsers},groups:function(){return this.$store.getters.getGroups},usersOffset:function(){return this.$store.getters.getUsersOffset},usersLimit:function(){return this.$store.getters.getUsersLimit},showLanguages:{get:function(){return this.getLocalstorage("showLanguages")},set:function(t){this.setLocalStorage("showLanguages",t)}},showLastLogin:{get:function(){return this.getLocalstorage("showLastLogin")},set:function(t){this.setLocalStorage("showLastLogin",t)}},showUserBackend:{get:function(){return this.getLocalstorage("showUserBackend")},set:function(t){this.setLocalStorage("showUserBackend",t)}},showStoragePath:{get:function(){return this.getLocalstorage("showStoragePath")},set:function(t){this.setLocalStorage("showStoragePath",t)}},userCount:function(){return this.$store.getters.getUserCount},settings:function(){return this.$store.getters.getServerData},quotaOptions:function(){var t=this.settings.quotaPreset.reduce((function(t,n){return t.concat({id:n,label:n})}),[]);return this.settings.allowUnlimitedQuota&&t.unshift(this.unlimitedQuota),t},defaultQuota:{get:function(){return!1!==this.selectedQuota?this.selectedQuota:this.settings.defaultQuota!==this.unlimitedQuota.id&&OC.Util.computerFileSize(this.settings.defaultQuota)>=0?{id:this.settings.defaultQuota,label:this.settings.defaultQuota}:this.unlimitedQuota},set:function(t){this.selectedQuota=t}},sendWelcomeMail:{get:function(){return this.settings.newUserSendEmail},set:function(t){var n=this;return zt(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n.loadingSendMail=!0,n.$store.commit("setServerData",Bt(Bt({},n.settings),{},{newUserSendEmail:t})),e.next=5,w.default.post((0,y.generateUrl)("/settings/users/preferences/newUser.sendEmail"),{value:t?"yes":"no"});case 5:e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("could not update newUser.sendEmail preference: "+e.t0.message,e.t0);case 10:return e.prev=10,n.loadingSendMail=!1,e.finish(10);case 13:case"end":return e.stop()}}),e,null,[[0,7,10,13]])})))()}},groupList:function(){var t=this;return(Array.isArray(this.groups)?this.groups:[]).filter((function(t){return"disabled"!==t.id&&"admin"!==t.id})).map((function(n){return t.formatGroupMenu(n)}))},adminGroupMenu:function(){return this.formatGroupMenu(this.groups.find((function(t){return"admin"===t.id})))},disabledGroupMenu:function(){return this.formatGroupMenu(this.groups.find((function(t){return"disabled"===t.id})))}},beforeMount:function(){this.$store.commit("initGroups",{groups:this.$store.getters.getServerData.groups,orderBy:this.$store.getters.getServerData.sortGroups,userCount:this.$store.getters.getServerData.userCount}),this.$store.dispatch("getPasswordPolicyMinLength")},created:function(){Object.assign(OCA,{Settings:{UserList:{registerAction:this.registerAction}}})},methods:{showNewUserMenu:function(){this.showConfig.showNewUserForm=!0,this.showConfig.showNewUserForm&&U.default.nextTick((function(){window.newusername.focus()}))},getLocalstorage:function(t){var n=this.$localStorage.get(t);return this.showConfig[t]=null!==n?"true"===n:this.showConfig[t],this.showConfig[t]},setLocalStorage:function(t,n){return this.showConfig[t]=n,this.$localStorage.set(t,n),n},setDefaultQuota:function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";this.$store.dispatch("setAppConfig",{app:"files",key:"default_quota",value:n.id?n.id:n}).then((function(){"object"!==Pt(n)&&(n={id:n,label:n}),t.defaultQuota=n}))},validateQuota:function(t){return null===OC.Util.computerFileSize(t)?this.setDefaultQuota("none"):this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(t)))},registerAction:function(t,n,e){return this.externalActions.push({icon:t,text:n,action:e}),this.externalActions},createGroup:function(t){var n=this;return zt(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(""!==t.trim()){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,n.loadingAddGroup=!0,e.next=6,n.$store.dispatch("addGroup",t.trim());case 6:return n.hideAddGroupForm(),e.next=9,n.$router.push({name:"group",params:{selectedGroup:encodeURIComponent(t.trim())}});case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(2),n.showAddGroupForm();case 14:return e.prev=14,n.loadingAddGroup=!1,e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[2,11,14,17]])})))()},showAddGroupForm:function(){var t=this;this.$refs.addGroup.editingActive=!0,this.$refs.addGroup.onMenuToggle(!1),this.$nextTick((function(){t.$refs.addGroup.$refs.editingInput.focusInput()}))},hideAddGroupForm:function(){this.$refs.addGroup.editingActive=!1,this.$refs.addGroup.editingValue=""},formatGroupMenu:function(t){var n={};return void 0===t?{}:(n.id=t.id,n.title=t.name,n.usercount=t.usercount,t.usercount-t.disabled>0&&(n.count=t.usercount-t.disabled),n)}}},Ft=It,Tt=s(36095),jt={};jt.styleTagTransform=ht(),jt.setAttributes=dt(),jt.insert=ut().bind(null,"head"),jt.domAPI=rt(),jt.insertStyleElement=gt(),it()(Tt.Z,jt),Tt.Z&&Tt.Z.locals&&Tt.Z.locals;var Et=(0,D.Z)(Ft,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("Content",{attrs:{"app-name":"settings","navigation-class":{"icon-loading":t.loadingAddGroup}}},[e("AppNavigation",{scopedSlots:t._u([{key:"list",fn:function(){return[e("AppNavigationItem",{ref:"addGroup",attrs:{id:"addgroup","edit-placeholder":t.t("settings","Enter group name"),editable:!0,loading:t.loadingAddGroup,title:t.t("settings","Add group"),icon:"icon-add"},on:{click:t.showAddGroupForm,"update:title":t.createGroup}}),t._v(" "),e("AppNavigationItem",{attrs:{id:"everyone",exact:!0,title:t.t("settings","Active users"),to:{name:"users"},icon:"icon-contacts-dark"}},[t.userCount>0?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.userCount)+"\n\t\t\t\t")]):t._e()],1),t._v(" "),t.settings.isAdmin?e("AppNavigationItem",{attrs:{id:"admin",exact:!0,title:t.t("settings","Admins"),to:{name:"group",params:{selectedGroup:"admin"}},icon:"icon-user-admin"}},[t.adminGroupMenu.count?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.adminGroupMenu.count)+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.disabledGroupMenu.usercount>0||-1===t.disabledGroupMenu.usercount?e("AppNavigationItem",{attrs:{id:"disabled",exact:!0,title:t.t("settings","Disabled users"),to:{name:"group",params:{selectedGroup:"disabled"}},icon:"icon-disabled-users"}},[t.disabledGroupMenu.usercount>0?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.disabledGroupMenu.usercount)+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.groupList.length>0?e("AppNavigationCaption",{attrs:{title:t.t("settings","Groups")}}):t._e(),t._v(" "),t._l(t.groupList,(function(t){return e("GroupListItem",{key:t.id,attrs:{id:t.id,title:t.title,count:t.count}})}))]},proxy:!0},{key:"footer",fn:function(){return[e("AppNavigationSettings",[e("div",[e("p",[t._v(t._s(t.t("settings","Default quota:")))]),t._v(" "),e("Multiselect",{attrs:{value:t.defaultQuota,options:t.quotaOptions,"tag-placeholder":"create",placeholder:t.t("settings","Select default quota"),label:"label","track-by":"id","allow-empty":!1,taggable:!0},on:{tag:t.validateQuota,input:t.setDefaultQuota}})],1),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showLanguages,expression:"showLanguages"}],staticClass:"checkbox",attrs:{id:"showLanguages",type:"checkbox"},domProps:{checked:Array.isArray(t.showLanguages)?t._i(t.showLanguages,null)>-1:t.showLanguages},on:{change:function(n){var e=t.showLanguages,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showLanguages=e.concat([null])):a>-1&&(t.showLanguages=e.slice(0,a).concat(e.slice(a+1)))}else t.showLanguages=i}}}),t._v(" "),e("label",{attrs:{for:"showLanguages"}},[t._v(t._s(t.t("settings","Show Languages")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showLastLogin,expression:"showLastLogin"}],staticClass:"checkbox",attrs:{id:"showLastLogin",type:"checkbox"},domProps:{checked:Array.isArray(t.showLastLogin)?t._i(t.showLastLogin,null)>-1:t.showLastLogin},on:{change:function(n){var e=t.showLastLogin,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showLastLogin=e.concat([null])):a>-1&&(t.showLastLogin=e.slice(0,a).concat(e.slice(a+1)))}else t.showLastLogin=i}}}),t._v(" "),e("label",{attrs:{for:"showLastLogin"}},[t._v(t._s(t.t("settings","Show last login")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showUserBackend,expression:"showUserBackend"}],staticClass:"checkbox",attrs:{id:"showUserBackend",type:"checkbox"},domProps:{checked:Array.isArray(t.showUserBackend)?t._i(t.showUserBackend,null)>-1:t.showUserBackend},on:{change:function(n){var e=t.showUserBackend,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showUserBackend=e.concat([null])):a>-1&&(t.showUserBackend=e.slice(0,a).concat(e.slice(a+1)))}else t.showUserBackend=i}}}),t._v(" "),e("label",{attrs:{for:"showUserBackend"}},[t._v(t._s(t.t("settings","Show user backend")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showStoragePath,expression:"showStoragePath"}],staticClass:"checkbox",attrs:{id:"showStoragePath",type:"checkbox"},domProps:{checked:Array.isArray(t.showStoragePath)?t._i(t.showStoragePath,null)>-1:t.showStoragePath},on:{change:function(n){var e=t.showStoragePath,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showStoragePath=e.concat([null])):a>-1&&(t.showStoragePath=e.slice(0,a).concat(e.slice(a+1)))}else t.showStoragePath=i}}}),t._v(" "),e("label",{attrs:{for:"showStoragePath"}},[t._v(t._s(t.t("settings","Show storage path")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.sendWelcomeMail,expression:"sendWelcomeMail"}],staticClass:"checkbox",attrs:{id:"sendWelcomeMail",disabled:t.loadingSendMail,type:"checkbox"},domProps:{checked:Array.isArray(t.sendWelcomeMail)?t._i(t.sendWelcomeMail,null)>-1:t.sendWelcomeMail},on:{change:function(n){var e=t.sendWelcomeMail,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.sendWelcomeMail=e.concat([null])):a>-1&&(t.sendWelcomeMail=e.slice(0,a).concat(e.slice(a+1)))}else t.sendWelcomeMail=i}}}),t._v(" "),e("label",{attrs:{for:"sendWelcomeMail"}},[t._v(t._s(t.t("settings","Send email to new user")))])])])]},proxy:!0}])},[e("AppNavigationNew",{attrs:{"button-id":"new-user-button",text:t.t("settings","New user"),"button-class":"icon-add"},on:{click:t.showNewUserMenu,keyup:[function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"enter",13,n.key,"Enter")?null:t.showNewUserMenu.apply(null,arguments)},function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"space",32,n.key,[" ","Spacebar"])?null:t.showNewUserMenu.apply(null,arguments)}]}})],1),t._v(" "),e("AppContent",[e("UserList",{attrs:{users:t.users,"show-config":t.showConfig,"selected-group":t.selectedGroupDecoded,"external-actions":t.externalActions}})],1)],1)}),[],!1,null,"1babbc68",null),Wt=Et.exports}}]); -//# sourceMappingURL=settings-users-8351.js.map?v=602a08575de144a57dfd
\ No newline at end of file +"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8351],{43316:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".row--menu-opened[data-v-c1f088a6]{z-index:1 !important}.row[data-v-c1f088a6] .multiselect__single{z-index:auto !important}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRow.vue"],names:[],mappings:"AA0qBA,mCACC,oBAAA,CAED,2CACC,uBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Force menu to be above other rows\n.row--menu-opened {\n\tz-index: 1 !important;\n}\n.row::v-deep .multiselect__single {\n\tz-index: auto !important;\n}\n"],sourceRoot:""}]),n.Z=r},6857:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRowSimple.vue"],names:[],mappings:"AA6LC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t.cellText {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n}\n\t.icon-more {\n\t\tbackground-color: var(--color-main-background);\n\t\tborder: 0;\n\t}\n"],sourceRoot:""}]),n.Z=r},36095:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".app-navigation__list #addgroup[data-v-1babbc68] .app-navigation-entry__utils{display:none}","",{version:3,sources:["webpack://./apps/settings/src/views/Users.vue"],names:[],mappings:"AAieA,8EACC,YAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// force hiding the editing action for the add group entry\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\n\tdisplay: none;\n}\n"],sourceRoot:""}]),n.Z=r},89489:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,'\n.modal-wrapper[data-v-672d131f] {\n\tmargin: 2vh 0;\n\talign-items: flex-start;\n}\n.modal__content[data-v-672d131f] {\n\tdisplay: flex;\n\tpadding: 20px;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n}\n.modal__item[data-v-672d131f] {\n\tmargin-bottom: 16px;\n\twidth: 100%;\n}\n.modal__item[data-v-672d131f]:not(:focus):not(:active) {\n\tborder-color: var(--color-border-dark);\n}\n.modal__item[data-v-672d131f] .multiselect {\n\twidth: 100%;\n}\n.user-actions[data-v-672d131f] {\n\tmargin-top: 20px;\n}\n.modal__content[data-v-672d131f] .multiselect__single {\n\ttext-align: left;\n\tbox-sizing: border-box;\n}\n.modal__content[data-v-672d131f] .multiselect__content-wrapper {\n\tbox-sizing: border-box;\n}\n.row[data-v-672d131f] .multiselect__single {\n\tz-index: auto !important;\n}\n\n/* fake input for groups validation */\ninput#newgroups[data-v-672d131f] {\n\tposition: absolute;\n\topacity: 0;\n\t/* The "hidden" input is behind the Multiselect, so in general it does\n\t * not receives clicks. However, with Firefox, after the validation\n\t * fails, it will receive the first click done on it, so its width needs\n\t * to be set to 0 to prevent that ("pointer-events: none" does not\n\t * prevent it). */\n\twidth: 0;\n}\n',"",{version:3,sources:["webpack://./apps/settings/src/components/UserList.vue"],names:[],mappings:";AA+kBA;CACA,aAAA;CACA,uBAAA;AACA;AACA;CACA,aAAA;CACA,aAAA;CACA,sBAAA;CACA,mBAAA;CACA,kBAAA;AACA;AACA;CACA,mBAAA;CACA,WAAA;AACA;AACA;CACA,sCAAA;AACA;AACA;CACA,WAAA;AACA;AACA;CACA,gBAAA;AACA;AACA;CACA,gBAAA;CACA,sBAAA;AACA;AACA;CACA,sBAAA;AACA;AACA;CACA,wBAAA;AACA;;AAEA,qCAAA;AACA;CACA,kBAAA;CACA,UAAA;CACA;;;;kBAIA;CACA,QAAA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div id="app-content" class="user-list-grid" @scroll.passive="onScroll">\n\t\t<Modal v-if="showConfig.showNewUserForm" size="small" @close="closeModal">\n\t\t\t<form id="new-user"\n\t\t\t\t:disabled="loading.all"\n\t\t\t\tclass="modal__content"\n\t\t\t\t@submit.prevent="createUser">\n\t\t\t\t<h2>{{ t(\'settings\',\'New user\') }}</h2>\n\t\t\t\t<input id="newusername"\n\t\t\t\t\tref="newusername"\n\t\t\t\t\tv-model="newUser.id"\n\t\t\t\t\t:disabled="settings.newUserGenerateUserID"\n\t\t\t\t\t:placeholder="settings.newUserGenerateUserID\n\t\t\t\t\t\t? t(\'settings\', \'Will be autogenerated\')\n\t\t\t\t\t\t: t(\'settings\', \'Username\')"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="username"\n\t\t\t\t\tpattern="[a-zA-Z0-9 _\\.@\\-\']+"\n\t\t\t\t\trequired\n\t\t\t\t\ttype="text">\n\t\t\t\t<input id="newdisplayname"\n\t\t\t\t\tv-model="newUser.displayName"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Display name\')"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="displayname"\n\t\t\t\t\ttype="text">\n\t\t\t\t<input id="newuserpassword"\n\t\t\t\t\tref="newuserpassword"\n\t\t\t\t\tv-model="newUser.password"\n\t\t\t\t\t:minlength="minPasswordLength"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Password\')"\n\t\t\t\t\t:required="newUser.mailAddress===\'\'"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="new-password"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="password"\n\t\t\t\t\ttype="password">\n\t\t\t\t<input id="newemail"\n\t\t\t\t\tv-model="newUser.mailAddress"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Email\')"\n\t\t\t\t\t:required="newUser.password===\'\' || settings.newUserRequireEmail"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="email"\n\t\t\t\t\ttype="email">\n\t\t\t\t<div class="groups modal__item">\n\t\t\t\t\t\x3c!-- hidden input trick for vanilla html5 form validation --\x3e\n\t\t\t\t\t<input v-if="!settings.isAdmin"\n\t\t\t\t\t\tid="newgroups"\n\t\t\t\t\t\t:class="{\'icon-loading-small\': loading.groups}"\n\t\t\t\t\t\t:required="!settings.isAdmin"\n\t\t\t\t\t\t:value="newUser.groups"\n\t\t\t\t\t\ttabindex="-1"\n\t\t\t\t\t\ttype="text">\n\t\t\t\t\t<Multiselect v-model="newUser.groups"\n\t\t\t\t\t\t:close-on-select="false"\n\t\t\t\t\t\t:disabled="loading.groups||loading.all"\n\t\t\t\t\t\t:multiple="true"\n\t\t\t\t\t\t:options="canAddGroups"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Add user to group\')"\n\t\t\t\t\t\t:tag-width="60"\n\t\t\t\t\t\t:taggable="true"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttag-placeholder="create"\n\t\t\t\t\t\ttrack-by="id"\n\t\t\t\t\t\t@tag="createGroup">\n\t\t\t\t\t\t\x3c!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\tSubadmins can\'t create users outside their groups\n\t\t\t\t\t\t\tTherefore, empty select is forbidden --\x3e\n\t\t\t\t\t\t<span slot="noResult">{{ t(\'settings\', \'No results\') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div v-if="subAdminsGroups.length>0 && settings.isAdmin"\n\t\t\t\t\tclass="subadmins modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.subAdminsGroups"\n\t\t\t\t\t\t:close-on-select="false"\n\t\t\t\t\t\t:multiple="true"\n\t\t\t\t\t\t:options="subAdminsGroups"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Set user as admin for\')"\n\t\t\t\t\t\t:tag-width="60"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttrack-by="id">\n\t\t\t\t\t\t<span slot="noResult">{{ t(\'settings\', \'No results\') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class="quota modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.quota"\n\t\t\t\t\t\t:allow-empty="false"\n\t\t\t\t\t\t:options="quotaOptions"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Select user quota\')"\n\t\t\t\t\t\t:taggable="true"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="label"\n\t\t\t\t\t\ttrack-by="id"\n\t\t\t\t\t\t@tag="validateQuota" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showLanguages" class="languages modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.language"\n\t\t\t\t\t\t:allow-empty="false"\n\t\t\t\t\t\t:options="languages"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Default language\')"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tgroup-label="label"\n\t\t\t\t\t\tgroup-values="languages"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttrack-by="code" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showStoragePath" class="storageLocation" />\n\t\t\t\t<div v-if="showConfig.showUserBackend" class="userBackend" />\n\t\t\t\t<div v-if="showConfig.showLastLogin" class="lastLogin" />\n\t\t\t\t<div class="user-actions">\n\t\t\t\t\t<Button id="newsubmit"\n\t\t\t\t\t\ttype="primary"\n\t\t\t\t\t\tnative-type="submit"\n\t\t\t\t\t\tvalue="">\n\t\t\t\t\t\t{{ t(\'settings\', \'Add a new user\') }}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Modal>\n\t\t<div id="grid-header"\n\t\t\t:class="{\'sticky\': scrolled && !showConfig.showNewUserForm}"\n\t\t\tclass="row">\n\t\t\t<div id="headerAvatar" class="avatar" />\n\t\t\t<div id="headerName" class="name">\n\t\t\t\t{{ t(\'settings\', \'Username\') }}\n\n\t\t\t\t<div class="subtitle">\n\t\t\t\t\t{{ t(\'settings\', \'Display name\') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id="headerPassword" class="password">\n\t\t\t\t{{ t(\'settings\', \'Password\') }}\n\t\t\t</div>\n\t\t\t<div id="headerAddress" class="mailAddress">\n\t\t\t\t{{ t(\'settings\', \'Email\') }}\n\t\t\t</div>\n\t\t\t<div id="headerGroups" class="groups">\n\t\t\t\t{{ t(\'settings\', \'Groups\') }}\n\t\t\t</div>\n\t\t\t<div v-if="subAdminsGroups.length>0 && settings.isAdmin"\n\t\t\t\tid="headerSubAdmins"\n\t\t\t\tclass="subadmins">\n\t\t\t\t{{ t(\'settings\', \'Group admin for\') }}\n\t\t\t</div>\n\t\t\t<div id="headerQuota" class="quota">\n\t\t\t\t{{ t(\'settings\', \'Quota\') }}\n\t\t\t</div>\n\t\t\t<div v-if="showConfig.showLanguages"\n\t\t\t\tid="headerLanguages"\n\t\t\t\tclass="languages">\n\t\t\t\t{{ t(\'settings\', \'Language\') }}\n\t\t\t</div>\n\n\t\t\t<div v-if="showConfig.showUserBackend || showConfig.showStoragePath"\n\t\t\t\tclass="headerUserBackend userBackend">\n\t\t\t\t<div v-if="showConfig.showUserBackend" class="userBackend">\n\t\t\t\t\t{{ t(\'settings\', \'User backend\') }}\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showStoragePath"\n\t\t\t\t\tclass="subtitle storageLocation">\n\t\t\t\t\t{{ t(\'settings\', \'Storage location\') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if="showConfig.showLastLogin"\n\t\t\t\tclass="headerLastLogin lastLogin">\n\t\t\t\t{{ t(\'settings\', \'Last login\') }}\n\t\t\t</div>\n\n\t\t\t<div class="userActions" />\n\t\t</div>\n\n\t\t<user-row v-for="user in filteredUsers"\n\t\t\t:key="user.id"\n\t\t\t:external-actions="externalActions"\n\t\t\t:groups="groups"\n\t\t\t:languages="languages"\n\t\t\t:quota-options="quotaOptions"\n\t\t\t:settings="settings"\n\t\t\t:show-config="showConfig"\n\t\t\t:sub-admins-groups="subAdminsGroups"\n\t\t\t:user="user" />\n\t\t<InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">\n\t\t\t<div slot="spinner">\n\t\t\t\t<div class="users-icon-loading icon-loading" />\n\t\t\t</div>\n\t\t\t<div slot="no-more">\n\t\t\t\t<div class="users-list-end" />\n\t\t\t</div>\n\t\t\t<div slot="no-results">\n\t\t\t\t<div id="emptycontent">\n\t\t\t\t\t<div class="icon-contacts-dark" />\n\t\t\t\t\t<h2>{{ t(\'settings\', \'No users in here\') }}</h2>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</InfiniteLoading>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from \'@nextcloud/event-bus\'\nimport InfiniteLoading from \'vue-infinite-loading\'\nimport Vue from \'vue\'\nimport Modal from \'@nextcloud/vue/dist/Components/Modal\'\nimport Button from \'@nextcloud/vue/dist/Components/Button\'\nimport Multiselect from \'@nextcloud/vue/dist/Components/Multiselect\'\n\nimport userRow from \'./UserList/UserRow\'\n\nconst unlimitedQuota = {\n\tid: \'none\',\n\tlabel: t(\'settings\', \'Unlimited\'),\n}\nconst defaultQuota = {\n\tid: \'default\',\n\tlabel: t(\'settings\', \'Default quota\'),\n}\nconst newUser = {\n\tid: \'\',\n\tdisplayName: \'\',\n\tpassword: \'\',\n\tmailAddress: \'\',\n\tgroups: [],\n\tsubAdminsGroups: [],\n\tquota: defaultQuota,\n\tlanguage: {\n\t\tcode: \'en\',\n\t\tname: t(\'settings\', \'Default language\'),\n\t},\n}\n\nexport default {\n\tname: \'UserList\',\n\tcomponents: {\n\t\tModal,\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t\tButton,\n\t},\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tunlimitedQuota,\n\t\t\tdefaultQuota,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t},\n\t\t\tscrolled: false,\n\t\t\tsearchQuery: \'\',\n\t\t\tnewUser: Object.assign({}, newUser),\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t\tselectedGroupDecoded() {\n\t\t\treturn decodeURIComponent(this.selectedGroup)\n\t\t},\n\t\tfilteredUsers() {\n\t\t\tif (this.selectedGroup === \'disabled\') {\n\t\t\t\treturn this.users.filter(user => user.enabled === false)\n\t\t\t}\n\t\t\tif (!this.settings.isAdmin) {\n\t\t\t\t// we don\'t want subadmins to edit themselves\n\t\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t\t}\n\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t},\n\t\tgroups() {\n\t\t\t// data provided php side + remove the disabled group\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== \'disabled\')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t\tcanAddGroups() {\n\t\t\t// disabled if no permission to add new users to group\n\t\t\treturn this.groups.map(group => {\n\t\t\t\t// clone object because we don\'t want\n\t\t\t\t// to edit the original groups\n\t\t\t\tgroup = Object.assign({}, group)\n\t\t\t\tgroup.$isDisabled = group.canAdd === false\n\t\t\t\treturn group\n\t\t\t})\n\t\t},\n\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\n\t\t\t\tid: cur,\n\t\t\t\tlabel: cur,\n\t\t\t}), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(this.unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(this.defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\t\tusersCount() {\n\t\t\treturn this.users.length\n\t\t},\n\n\t\t/* LANGUAGES */\n\t\tlanguages() {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: t(\'settings\', \'Common languages\'),\n\t\t\t\t\tlanguages: this.settings.languages.commonLanguages,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t(\'settings\', \'Other languages\'),\n\t\t\t\t\tlanguages: this.settings.languages.otherLanguages,\n\t\t\t\t},\n\t\t\t]\n\t\t},\n\t},\n\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup(val, old) {\n\t\t\t// if selected is the disabled group but it\'s empty\n\t\t\tthis.redirectIfDisabled()\n\t\t\tthis.$store.commit(\'resetUsers\')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\t// make sure the infiniteLoading state is changed if we manually\n\t\t// add/remove data from the store\n\t\tusersCount(val, old) {\n\t\t\t// deleting the last user, reset the list\n\t\t\tif (val === 0 && old === 1) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t// adding the first user, warn the infiniteLoader that\n\t\t\t\t// the list is not empty anymore (we don\'t fetch the newly\n\t\t\t\t// added user as we already have all the info we need)\n\t\t\t} else if (val === 1 && old === 0) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.loaded()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (!this.settings.canChangePassword) {\n\t\t\tOC.Notification.showTemporary(t(\'settings\', \'Password change is disabled because the master key is disabled\'))\n\t\t}\n\n\t\t/**\n\t\t * Reset and init new user form\n\t\t */\n\t\tthis.resetForm()\n\n\t\t/**\n\t\t * Register search\n\t\t */\n\t\tsubscribe(\'nextcloud:unified-search.search\', this.search)\n\t\tsubscribe(\'nextcloud:unified-search.reset\', this.resetSearch)\n\n\t\t/**\n\t\t * If disabled group but empty, redirect\n\t\t */\n\t\tthis.redirectIfDisabled()\n\t},\n\tbeforeDestroy() {\n\t\tunsubscribe(\'nextcloud:unified-search.search\', this.search)\n\t\tunsubscribe(\'nextcloud:unified-search.reset\', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tonScroll(event) {\n\t\t\tthis.scrolled = event.target.scrollTo > 0\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it\'s a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format \'5 GB\'\n\t\t * @return {object}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\tquota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))\n\t\t\t\tthis.newUser.quota = { id: quota, label: quota }\n\t\t\t\treturn this.newUser.quota\n\t\t\t}\n\t\t\t// Default is unlimited\n\t\t\tthis.newUser.quota = this.quotaOptions[0]\n\t\t\treturn this.quotaOptions[0]\n\t\t},\n\n\t\tinfiniteHandler($state) {\n\t\t\tthis.$store.dispatch(\'getUsers\', {\n\t\t\t\toffset: this.usersOffset,\n\t\t\t\tlimit: this.usersLimit,\n\t\t\t\tgroup: this.selectedGroup !== \'disabled\' ? this.selectedGroup : \'\',\n\t\t\t\tsearch: this.searchQuery,\n\t\t\t})\n\t\t\t\t.then((usersCount) => {\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\t$state.loaded()\n\t\t\t\t\t}\n\t\t\t\t\tif (usersCount < this.usersLimit) {\n\t\t\t\t\t\t$state.complete()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/* SEARCH */\n\t\tsearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit(\'resetUsers\')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.search({ query: \'\' })\n\t\t},\n\n\t\tresetForm() {\n\t\t\t// revert form to original state\n\t\t\tthis.newUser = Object.assign({}, newUser)\n\n\t\t\t/**\n\t\t\t * Init default language from server data. The use of this.settings\n\t\t\t * requires a computed variable, which break the v-model binding of the form,\n\t\t\t * this is a much easier solution than getter and setter on a computed var\n\t\t\t */\n\t\t\tif (this.settings.defaultLanguage) {\n\t\t\t\tVue.set(this.newUser.language, \'code\', this.settings.defaultLanguage)\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * In case the user directly loaded the user list within a group\n\t\t\t * the watch won\'t be triggered. We need to initialize it.\n\t\t\t */\n\t\t\tthis.setNewUserDefaultGroup(this.selectedGroup)\n\n\t\t\tthis.loading.all = false\n\t\t},\n\t\tcreateUser() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch(\'addUser\', {\n\t\t\t\tuserid: this.newUser.id,\n\t\t\t\tpassword: this.newUser.password,\n\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.resetForm()\n\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\tthis.closeModal()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\t\tthis.$refs.newuserpassword.focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tsetNewUserDefaultGroup(value) {\n\t\t\tif (value && value.length > 0) {\n\t\t\t\t// setting new user default group to the current selected one\n\t\t\t\tconst currentGroup = this.groups.find(group => group.id === value)\n\t\t\t\tif (currentGroup) {\n\t\t\t\t\tthis.newUser.groups = [currentGroup]\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fallback, empty selected group\n\t\t\tthis.newUser.groups = []\n\t\t},\n\n\t\t/**\n\t\t * Create a new group\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t * @return {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading.groups = true\n\t\t\tthis.$store.dispatch(\'addGroup\', gid)\n\t\t\t\t.then((group) => {\n\t\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\n\t\t},\n\n\t\t/**\n\t\t * If the selected group is the disabled group but the count is 0\n\t\t * redirect to the all users page.\n\t\t * we only check for 0 because we don\'t have the count on ldap\n\t\t * and we therefore set the usercount to -1 in this specific case\n\t\t */\n\t\tredirectIfDisabled() {\n\t\t\tconst allGroups = this.$store.getters.getGroups\n\t\t\tif (this.selectedGroup === \'disabled\'\n\t\t\t\t\t\t&& allGroups.findIndex(group => group.id === \'disabled\' && group.usercount === 0) > -1) {\n\t\t\t\t// disabled group is empty, redirection to all users\n\t\t\t\tthis.$router.push({ name: \'users\' })\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t}\n\t\t},\n\t\tcloseModal() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.modal-wrapper {\n\t\tmargin: 2vh 0;\n\t\talign-items: flex-start;\n\t}\n\t.modal__content {\n\t\tdisplay: flex;\n\t\tpadding: 20px;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\ttext-align: center;\n\t}\n\t.modal__item {\n\t\tmargin-bottom: 16px;\n\t\twidth: 100%;\n\t}\n\t.modal__item:not(:focus):not(:active) {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\t.modal__item::v-deep .multiselect {\n\t\twidth: 100%;\n\t}\n\t.user-actions {\n\t\tmargin-top: 20px;\n\t}\n\t.modal__content::v-deep .multiselect__single {\n\t\ttext-align: left;\n\t\tbox-sizing: border-box;\n\t}\n\t.modal__content::v-deep .multiselect__content-wrapper {\n\t\tbox-sizing: border-box;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n\n\t/* fake input for groups validation */\n\tinput#newgroups {\n\t\tposition: absolute;\n\t\topacity: 0;\n\t\t/* The "hidden" input is behind the Multiselect, so in general it does\n\t\t * not receives clicks. However, with Firefox, after the validation\n\t\t * fails, it will receive the first click done on it, so its width needs\n\t\t * to be set to 0 to prevent that ("pointer-events: none" does not\n\t\t * prevent it). */\n\t\twidth: 0;\n\t}\n</style>\n'],sourceRoot:""}]),n.Z=r},69455:function(n,e,s){s.r(e),s.d(e,{default:function(){return Wt}});var i=s(23068),a=s.n(i),r=s(58908),o=s.n(r),u=s(49169),l=s.n(u),d=s(50753),c=s.n(d),g=s(7612),p=s.n(g),h=s(17578),m=s.n(h),f=s(32353),v=s.n(f),w=s(4820),b=s(9597),A=s.n(b),y=s(79753),C=s(7811),_=s.n(C),U=s(20144),k=s(87369),x=s.n(k),L=s(88408),G=s.n(L),S=s(56286),M=s.n(S),q=s(43337),N=s.n(q);function $(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}var O={name:"GroupListItem",components:{ActionInput:G(),ActionButton:M(),CounterBubble:N(),AppNavigationItem:p()},props:{id:{type:String,required:!0},title:{type:String,required:!0},count:{type:Number,required:!1}},data:function(){return{loadingRenameGroup:!1,openGroupMenu:!1}},computed:{settings:function(){return this.$store.getters.getServerData}},methods:{handleGroupMenuOpen:function(){this.openGroupMenu=!0},renameGroup:function(t){var n,e=this;return(n=regeneratorRuntime.mark((function n(){var s;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(""!==t.trim()){n.next=2;break}return n.abrupt("return");case 2:if(""!==(s=e.$refs.displayNameInput.$el.querySelector('input[type="text"]').value).trim()){n.next=5;break}return n.abrupt("return");case 5:return n.prev=5,e.openGroupMenu=!1,e.loadingRenameGroup=!0,n.next=10,e.$store.dispatch("renameGroup",{groupid:t.trim(),displayName:s.trim()});case 10:e.loadingRenameGroup=!1,n.next=17;break;case 13:n.prev=13,n.t0=n.catch(5),e.openGroupMenu=!0,e.loadingRenameGroup=!1;case 17:case"end":return n.stop()}}),n,null,[[5,13]])})),function(){var t=this,e=arguments;return new Promise((function(s,i){var a=n.apply(t,e);function r(t){$(a,s,i,r,o,"next",t)}function o(t){$(a,s,i,r,o,"throw",t)}r(void 0)}))})()},removeGroup:function(n){var e=this;OC.dialogs.confirm(t("settings","You are about to remove the group {group}. The users will NOT be deleted.",{group:n}),t("settings","Please confirm the group removal "),(function(t){t&&e.$store.dispatch("removeGroup",n)}))}}},P=O,D=s(51900),B=(0,D.Z)(P,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("AppNavigationItem",{key:t.id,attrs:{exact:!0,title:t.title,to:{name:"group",params:{selectedGroup:encodeURIComponent(t.id)}},icon:"icon-group",loading:t.loadingRenameGroup,"menu-open":t.openGroupMenu},on:{"update:menuOpen":t.handleGroupMenuOpen},scopedSlots:t._u([{key:"counter",fn:function(){return[t.count?e("CounterBubble",[t._v("\n\t\t\t"+t._s(t.count)+"\n\t\t")]):t._e()]},proxy:!0},{key:"actions",fn:function(){return["admin"!==t.id&&"disabled"!==t.id&&t.settings.isAdmin?e("ActionInput",{ref:"displayNameInput",attrs:{icon:"icon-edit",type:"text",value:t.title},on:{submit:function(n){return t.renameGroup(t.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Rename group"))+"\n\t\t")]):t._e(),t._v(" "),"admin"!==t.id&&"disabled"!==t.id&&t.settings.isAdmin?e("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(n){return t.removeGroup(t.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Remove group"))+"\n\t\t")]):t._e()]},proxy:!0}])})}),[],!1,null,null,null).exports,R=s(74854),Q=s(30306),z=s.n(Q),I=s(47450),F=s.n(I),T=s(1412),j=s.n(T),E=s(2649),W=s.n(E),Z=s(34741),H=s(33476),Y=s(26533),V=s.n(Y),J=s(79440),K=s.n(J),X=s(22200);function tt(t){return tt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tt(t)}var nt={props:{user:{type:Object,required:!0},settings:{type:Object,default:function(){return{}}},groups:{type:Array,default:function(){return[]}},subAdminsGroups:{type:Array,default:function(){return[]}},quotaOptions:{type:Array,default:function(){return[]}},showConfig:{type:Object,default:function(){return{}}},languages:{type:Array,required:!0},externalActions:{type:Array,default:function(){return[]}}},computed:{userGroups:function(){var t=this;return this.groups.filter((function(n){return t.user.groups.includes(n.id)}))},userSubAdminsGroups:function(){var t=this;return this.subAdminsGroups.filter((function(n){return t.user.subadmin.includes(n.id)}))},availableGroups:function(){var t=this;return this.groups.map((function(n){var e=Object.assign({},n);return e.$isDisabled=!1===n.canAdd&&!t.user.groups.includes(n.id)||!1===n.canRemove&&t.user.groups.includes(n.id),e}))},usedSpace:function(){return this.user.quota.used?t("settings","{size} used",{size:OC.Util.humanFileSize(this.user.quota.used)}):t("settings","{size} used",{size:OC.Util.humanFileSize(0)})},usedQuota:function(){var t=this.user.quota.quota;return t=t>0?Math.min(100,Math.round(this.user.quota.used/t*100)):95*(1-1/(this.user.quota.used/(10*Math.pow(2,30))+1)),isNaN(t)?0:t},userQuota:function(){if(this.user.quota.quota>=0){var t=OC.Util.humanFileSize(this.user.quota.quota);return this.quotaOptions.find((function(n){return n.id===t}))||{id:t,label:t}}return"default"===this.user.quota.quota?this.quotaOptions[0]:this.quotaOptions[1]},minPasswordLength:function(){return this.$store.getters.getPasswordPolicyMinLength},userLanguage:function(){var t=this,n=this.languages[0].languages.concat(this.languages[1].languages).find((function(n){return n.code===t.user.language}));return"object"!==tt(n)&&""!==this.user.language?{code:this.user.language,name:this.user.language}:""!==this.user.language&&n},userLastLoginTooltip:function(){return this.user.lastLogin>0?OC.Util.formatDate(this.user.lastLogin):""},userLastLogin:function(){return this.user.lastLogin>0?OC.Util.relativeModifiedDate(this.user.lastLogin):t("settings","Never")}},methods:{generateAvatar:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32;return(0,y.generateUrl)("/avatar/{user}/{size}?v={version}",{user:t,size:n,version:oc_userconfig.avatar.version})}}},et={name:"UserRowSimple",components:{PopoverMenu:V(),ActionButton:M(),Actions:K()},directives:{ClickOutside:W()},mixins:[nt],props:{user:{type:Object,required:!0},loading:{type:Object,required:!0},showConfig:{type:Object,required:!0},userActions:{type:Array,required:!0},openedMenu:{type:Boolean,required:!0},feedbackMessage:{type:String,required:!0},subAdminsGroups:{type:Array,required:!0},settings:{type:Object,required:!0}},computed:{userGroupsLabels:function(){return this.userGroups.map((function(t){return t.name})).join(", ")},userSubAdminsGroupsLabels:function(){return this.userSubAdminsGroups.map((function(t){return t.name})).join(", ")},usedSpace:function(){return this.user.quota.used?t("settings","{size} used",{size:OC.Util.humanFileSize(this.user.quota.used)}):t("settings","{size} used",{size:OC.Util.humanFileSize(0)})},canEdit:function(){return(0,X.getCurrentUser)().uid!==this.user.id||this.settings.isAdmin},userQuota:function(){var n=this.user.quota.quota;return"default"===n&&"none"!==(n=this.settings.defaultQuota)&&(n=OC.Util.computerFileSize(n)),"none"===n||-3===n?t("settings","Unlimited"):n>=0?OC.Util.humanFileSize(n):OC.Util.humanFileSize(0)}},methods:{toggleMenu:function(){this.$emit("update:openedMenu",!this.openedMenu)},hideMenu:function(){this.$emit("update:openedMenu",!1)},toggleEdit:function(){this.$emit("update:editing",!0)}}},st=s(93379),it=s.n(st),at=s(7795),rt=s.n(at),ot=s(90569),ut=s.n(ot),lt=s(3565),dt=s.n(lt),ct=s(19216),gt=s.n(ct),pt=s(44589),ht=s.n(pt),mt=s(6857),ft={};ft.styleTagTransform=ht(),ft.setAttributes=dt(),ft.insert=ut().bind(null,"head"),ft.domAPI=rt(),ft.insertStyleElement=gt(),it()(mt.Z,ft),mt.Z&&mt.Z.locals&&mt.Z.locals;var vt=(0,D.Z)(et,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"row",class:{disabled:t.loading.delete||t.loading.disable},attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{alt:"",width:"32",height:"32",src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x"}})]),t._v(" "),e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t\t"),e("div",{staticClass:"displayName subtitle"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.displayname.length>20?t.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t\t"+t._s(t.user.displayname)+"\n\t\t\t")])])]),t._v(" "),e("div"),t._v(" "),e("div",{staticClass:"mailAddress"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:null!==t.user.email&&t.user.email.length>20?t.user.email:"",expression:"user.email !== null && user.email.length > 20 ? user.email : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t"+t._s(t.user.email)+"\n\t\t")])]),t._v(" "),e("div",{staticClass:"groups"},[t._v("\n\t\t"+t._s(t.userGroupsLabels)+"\n\t")]),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subAdminsGroups"},[t._v("\n\t\t"+t._s(t.userSubAdminsGroupsLabels)+"\n\t")]):t._e(),t._v(" "),e("div",{staticClass:"userQuota"},[e("div",{staticClass:"quota"},[t._v("\n\t\t\t"+t._s(t.userQuota)+" ("+t._s(t.usedSpace)+")\n\t\t\t"),e("progress",{staticClass:"quota-user-progress",class:{warn:t.usedQuota>80},attrs:{max:"100"},domProps:{value:t.usedQuota}})])]),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages"},[t._v("\n\t\t"+t._s(t.userLanguage.name)+"\n\t")]):t._e(),t._v(" "),t.showConfig.showUserBackend||t.showConfig.showStoragePath?e("div",{staticClass:"userBackend"},[t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"},[t._v("\n\t\t\t"+t._s(t.user.backend)+"\n\t\t")]):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.storageLocation,expression:"user.storageLocation"}],staticClass:"storageLocation subtitle"},[t._v("\n\t\t\t"+t._s(t.user.storageLocation)+"\n\t\t")]):t._e()]):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.userLastLoginTooltip,expression:"userLastLoginTooltip",modifiers:{auto:!0}}],staticClass:"lastLogin"},[t._v("\n\t\t"+t._s(t.userLastLogin)+"\n\t")]):t._e(),t._v(" "),e("div",{staticClass:"userActions"},[t.canEdit&&!t.loading.all?e("div",{staticClass:"toggleUserActions"},[e("Actions",[e("ActionButton",{attrs:{icon:"icon-rename"},on:{click:t.toggleEdit}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Edit User"))+"\n\t\t\t\t")])],1),t._v(" "),e("div",{staticClass:"userPopoverMenuWrapper"},[e("button",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"icon-more",attrs:{"aria-label":t.t("settings","Toggle user actions menu")},on:{click:function(n){return n.preventDefault(),t.toggleMenu.apply(null,arguments)}}}),t._v(" "),e("div",{staticClass:"popovermenu",class:{open:t.openedMenu},attrs:{"aria-expanded":t.openedMenu}},[e("PopoverMenu",{attrs:{menu:t.userActions}})],1)])],1):t._e(),t._v(" "),e("div",{staticClass:"feedback",style:{opacity:""!==t.feedbackMessage?1:0}},[e("div",{staticClass:"icon-checkmark"}),t._v("\n\t\t\t"+t._s(t.feedbackMessage)+"\n\t\t")])])])}),[],!1,null,null,null),wt=vt.exports;function bt(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}function At(t){return function(){var n=this,e=arguments;return new Promise((function(s,i){var a=t.apply(n,e);function r(t){bt(a,s,i,r,o,"next",t)}function o(t){bt(a,s,i,r,o,"throw",t)}r(void 0)}))}}U.default.use(Z.default);var yt={name:"UserRow",components:{UserRowSimple:wt,PopoverMenu:H.PopoverMenu,Actions:H.Actions,ActionButton:H.ActionButton,Multiselect:H.Multiselect},directives:{ClickOutside:W()},mixins:[nt],props:{user:{type:Object,required:!0},settings:{type:Object,default:function(){return{}}},groups:{type:Array,default:function(){return[]}},subAdminsGroups:{type:Array,default:function(){return[]}},quotaOptions:{type:Array,default:function(){return[]}},showConfig:{type:Object,default:function(){return{}}},languages:{type:Array,required:!0},externalActions:{type:Array,default:function(){return[]}}},data:function(){return{rand:parseInt(1e3*Math.random()),openedMenu:!1,feedbackMessage:"",editing:!1,loading:{all:!1,displayName:!1,password:!1,mailAddress:!1,groups:!1,subadmins:!1,quota:!1,delete:!1,disable:!1,languages:!1,wipe:!1}}},computed:{userActions:function(){var n=[{icon:"icon-delete",text:t("settings","Delete user"),action:this.deleteUser},{icon:"icon-delete",text:t("settings","Wipe all devices"),action:this.wipeUserDevices},{icon:this.user.enabled?"icon-close":"icon-add",text:this.user.enabled?t("settings","Disable user"):t("settings","Enable user"),action:this.enableDisableUser}];return null!==this.user.email&&""!==this.user.email&&n.push({icon:"icon-mail",text:t("settings","Resend welcome email"),action:this.sendWelcomeMail}),n.concat(this.externalActions)}},methods:{toggleMenu:function(){this.openedMenu=!this.openedMenu},hideMenu:function(){this.openedMenu=!1},wipeUserDevices:function(){var n=this,e=this.user.id;OC.dialogs.confirmDestructive(t("settings","In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.",{userid:e}),t("settings","Remote wipe of devices"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Wipe {userid}'s devices",{userid:e}),confirmClasses:"error",cancel:t("settings","Cancel")},(function(t){t&&(n.loading.wipe=!0,n.loading.all=!0,n.$store.dispatch("wipeUserDevices",e).then((function(){n.loading.wipe=!1,n.loading.all=!1})))}),!0)},deleteUser:function(){var n=this,e=this.user.id;OC.dialogs.confirmDestructive(t("settings","Fully delete {userid}'s account including all their personal files, app data, etc.",{userid:e}),t("settings","Account deletion"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Delete {userid}'s account",{userid:e}),confirmClasses:"error",cancel:t("settings","Cancel")},(function(t){if(t)return n.loading.delete=!0,n.loading.all=!0,n.$store.dispatch("deleteUser",e).then((function(){n.loading.delete=!1,n.loading.all=!1}))}),!0)},enableDisableUser:function(){var t=this;this.loading.delete=!0,this.loading.all=!0;var n=this.user.id,e=!this.user.enabled;return this.$store.dispatch("enableDisableUser",{userid:n,enabled:e}).then((function(){t.loading.delete=!1,t.loading.all=!1}))},updateDisplayName:function(){var t=this,n=this.$refs.displayName.value;this.loading.displayName=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"displayname",value:n}).then((function(){t.loading.displayName=!1,t.$refs.displayName.value=n}))},updatePassword:function(){var t=this,n=this.$refs.password.value;this.loading.password=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"password",value:n}).then((function(){t.loading.password=!1,t.$refs.password.value=""}))},updateEmail:function(){var t=this,n=this.$refs.mailAddress.value;this.loading.mailAddress=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"email",value:n}).then((function(){t.loading.mailAddress=!1,t.$refs.mailAddress.value=n}))},createGroup:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){var s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading={groups:!0,subadmins:!0},e.prev=1,e.next=4,n.$store.dispatch("addGroup",t);case 4:return s=n.user.id,e.next=7,n.$store.dispatch("addUserGroup",{userid:s,gid:t});case 7:e.next=12;break;case 9:e.prev=9,e.t0=e.catch(1),console.error(e.t0);case 12:return e.prev=12,n.loading={groups:!1,subadmins:!1},e.finish(12);case 15:return e.abrupt("return",n.$store.getters.getGroups[n.groups.length]);case 16:case"end":return e.stop()}}),e,null,[[1,9,12,15]])})))()},addUserGroup:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!1!==t.canAdd){e.next=2;break}return e.abrupt("return",!1);case 2:return n.loading.groups=!0,s=n.user.id,i=t.id,e.prev=5,e.next=8,n.$store.dispatch("addUserGroup",{userid:s,gid:i});case 8:e.next=13;break;case 10:e.prev=10,e.t0=e.catch(5),console.error(e.t0);case 13:return e.prev=13,n.loading.groups=!1,e.finish(13);case 16:case"end":return e.stop()}}),e,null,[[5,10,13,16]])})))()},removeUserGroup:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!1!==t.canRemove){e.next=2;break}return e.abrupt("return",!1);case 2:return n.loading.groups=!0,s=n.user.id,i=t.id,e.prev=5,e.next=8,n.$store.dispatch("removeUserGroup",{userid:s,gid:i});case 8:n.loading.groups=!1,n.$route.params.selectedGroup===i&&n.$store.commit("deleteUser",s),e.next=15;break;case 12:e.prev=12,e.t0=e.catch(5),n.loading.groups=!1;case 15:case"end":return e.stop()}}),e,null,[[5,12]])})))()},addUserSubAdmin:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.subadmins=!0,s=n.user.id,i=t.id,e.prev=3,e.next=6,n.$store.dispatch("addUserSubAdmin",{userid:s,gid:i});case 6:n.loading.subadmins=!1,e.next=12;break;case 9:e.prev=9,e.t0=e.catch(3),console.error(e.t0);case 12:case"end":return e.stop()}}),e,null,[[3,9]])})))()},removeUserSubAdmin:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.subadmins=!0,s=n.user.id,i=t.id,e.prev=3,e.next=6,n.$store.dispatch("removeUserSubAdmin",{userid:s,gid:i});case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error(e.t0);case 11:return e.prev=11,n.loading.subadmins=!1,e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[3,8,11,14]])})))()},setUserQuota:function(){var t=arguments,n=this;return At(regeneratorRuntime.mark((function e(){var s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=t.length>0&&void 0!==t[0]?t[0]:"none",n.loading.quota=!0,s=s.id?s.id:s,e.prev=3,e.next=6,n.$store.dispatch("setUserData",{userid:n.user.id,key:"quota",value:s});case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error(e.t0);case 11:return e.prev=11,n.loading.quota=!1,e.finish(11);case 14:return e.abrupt("return",s);case 15:case"end":return e.stop()}}),e,null,[[3,8,11,14]])})))()},validateQuota:function(t){var n=OC.Util.computerFileSize(t);return null!==n&&n>=0&&this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(t)))},setUserLanguage:function(t){var n=this;return At(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.languages=!0,e.prev=1,e.next=4,n.$store.dispatch("setUserData",{userid:n.user.id,key:"language",value:t.code});case 4:e.next=9;break;case 6:e.prev=6,e.t0=e.catch(1),console.error(e.t0);case 9:return e.prev=9,n.loading.languages=!1,e.finish(9);case 12:return e.abrupt("return",t);case 13:case"end":return e.stop()}}),e,null,[[1,6,9,12]])})))()},sendWelcomeMail:function(){var n=this;this.loading.all=!0,this.$store.dispatch("sendWelcomeMail",this.user.id).then((function(e){e&&(n.feedbackMessage=t("setting","Welcome mail sent!"),setTimeout((function(){n.feedbackMessage=""}),2e3)),n.loading.all=!1}))}}},Ct=yt,_t=s(43316),Ut={};Ut.styleTagTransform=ht(),Ut.setAttributes=dt(),Ut.insert=ut().bind(null,"head"),Ut.domAPI=rt(),Ut.insertStyleElement=gt(),it()(_t.Z,Ut),_t.Z&&_t.Z.locals&&_t.Z.locals;var kt=(0,D.Z)(Ct,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return 1===Object.keys(t.user).length?e("div",{staticClass:"row",attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x",alt:"",height:"32",width:"32"}})]),t._v(" "),e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t")]),t._v(" "),e("div",{staticClass:"obfuscated"},[t._v("\n\t\t"+t._s(t.t("settings","You do not have permissions to see the details of this user"))+"\n\t")])]):t.editing?e("div",{staticClass:"row row--editable",class:{disabled:t.loading.delete||t.loading.disable,"row--menu-opened":t.openedMenu},attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x",alt:"",height:"32",width:"32"}})]),t._v(" "),t.user.backendCapabilities.setDisplayName?e("div",{staticClass:"displayName"},[e("form",{staticClass:"displayName",class:{"icon-loading-small":t.loading.displayName},on:{submit:function(n){return n.preventDefault(),t.updateDisplayName.apply(null,arguments)}}},[e("input",{ref:"displayName",attrs:{id:"displayName"+t.user.id+t.rand,disabled:t.loading.displayName||t.loading.all,autocapitalize:"off",autocomplete:"off",autocorrect:"off",spellcheck:"false",type:"text"},domProps:{value:t.user.displayname}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})])]):e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t\t"),e("div",{staticClass:"displayName subtitle"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.displayname.length>20?t.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t\t"+t._s(t.user.displayname)+"\n\t\t\t")])])]),t._v(" "),t.settings.canChangePassword&&t.user.backendCapabilities.setPassword?e("form",{staticClass:"password",class:{"icon-loading-small":t.loading.password},on:{submit:function(n){return n.preventDefault(),t.updatePassword.apply(null,arguments)}}},[e("input",{ref:"password",attrs:{id:"password"+t.user.id+t.rand,disabled:t.loading.password||t.loading.all,minlength:t.minPasswordLength,maxlength:"469",placeholder:t.t("settings","Add new password"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",required:"",spellcheck:"false",type:"password",value:""}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]):e("div"),t._v(" "),e("form",{staticClass:"mailAddress",class:{"icon-loading-small":t.loading.mailAddress},on:{submit:function(n){return n.preventDefault(),t.updateEmail.apply(null,arguments)}}},[e("input",{ref:"mailAddress",attrs:{id:"mailAddress"+t.user.id+t.rand,disabled:t.loading.mailAddress||t.loading.all,placeholder:t.t("settings","Add new email address"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",spellcheck:"false",type:"email"},domProps:{value:t.user.email}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]),t._v(" "),e("div",{staticClass:"groups",class:{"icon-loading-small":t.loading.groups}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.groups||t.loading.all,limit:2,multiple:!0,options:t.availableGroups,placeholder:t.t("settings","Add user to group"),"tag-width":60,taggable:t.settings.isAdmin,value:t.userGroups,label:"name","tag-placeholder":"create","track-by":"id"},on:{remove:t.removeUserGroup,select:t.addUserGroup,tag:t.createGroup}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins",class:{"icon-loading-small":t.loading.subadmins}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.subadmins||t.loading.all,limit:2,multiple:!0,options:t.subAdminsGroups,placeholder:t.t("settings","Set user as admin for"),"tag-width":60,value:t.userSubAdminsGroups,label:"name","track-by":"id"},on:{remove:t.removeUserSubAdmin,select:t.addUserSubAdmin}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1):t._e(),t._v(" "),e("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.usedSpace,expression:"usedSpace",modifiers:{auto:!0}}],staticClass:"quota",class:{"icon-loading-small":t.loading.quota}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,disabled:t.loading.quota||t.loading.all,options:t.quotaOptions,placeholder:t.t("settings","Select user quota"),taggable:!0,value:t.userQuota,label:"label","tag-placeholder":"create","track-by":"id"},on:{input:t.setUserQuota,tag:t.validateQuota}})],1),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages",class:{"icon-loading-small":t.loading.languages}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,disabled:t.loading.languages||t.loading.all,options:t.languages,placeholder:t.t("settings","No language set"),value:t.userLanguage,"group-label":"label","group-values":"languages",label:"name","track-by":"code"},on:{input:t.setUserLanguage}})],1):t._e(),t._v(" "),t.showConfig.showStoragePath||t.showConfig.showUserBackend?e("div",{staticClass:"storageLocation"}):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div"):t._e(),t._v(" "),e("div",{staticClass:"userActions"},[t.loading.all?t._e():e("div",{staticClass:"toggleUserActions"},[e("Actions",[e("ActionButton",{attrs:{icon:"icon-checkmark"},on:{click:function(n){t.editing=!1}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Done"))+"\n\t\t\t\t")])],1),t._v(" "),e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"userPopoverMenuWrapper"},[e("button",{staticClass:"icon-more",on:{click:function(n){return n.preventDefault(),t.toggleMenu.apply(null,arguments)}}}),t._v(" "),e("div",{staticClass:"popovermenu",class:{open:t.openedMenu}},[e("PopoverMenu",{attrs:{menu:t.userActions}})],1)])],1),t._v(" "),e("div",{staticClass:"feedback",style:{opacity:""!==t.feedbackMessage?1:0}},[e("div",{staticClass:"icon-checkmark"}),t._v("\n\t\t\t"+t._s(t.feedbackMessage)+"\n\t\t")])])]):e("UserRowSimple",{class:{"row--menu-opened":t.openedMenu},attrs:{editing:t.editing,"feedback-message":t.feedbackMessage,groups:t.groups,languages:t.languages,loading:t.loading,"opened-menu":t.openedMenu,settings:t.settings,"show-config":t.showConfig,"sub-admins-groups":t.subAdminsGroups,"user-actions":t.userActions,user:t.user},on:{"update:editing":function(n){t.editing=n},"update:openedMenu":function(n){t.openedMenu=n},"update:opened-menu":function(n){t.openedMenu=n}}})}),[],!1,null,"c1f088a6",null),xt=kt.exports,Lt={id:"none",label:t("settings","Unlimited")},Gt={id:"default",label:t("settings","Default quota")},St={id:"",displayName:"",password:"",mailAddress:"",groups:[],subAdminsGroups:[],quota:Gt,language:{code:"en",name:t("settings","Default language")}},Mt={name:"UserList",components:{Modal:F(),userRow:xt,Multiselect:_(),InfiniteLoading:z(),Button:j()},props:{users:{type:Array,default:function(){return[]}},showConfig:{type:Object,required:!0},selectedGroup:{type:String,default:null},externalActions:{type:Array,default:function(){return[]}}},data:function(){return{unlimitedQuota:Lt,defaultQuota:Gt,loading:{all:!1,groups:!1},scrolled:!1,searchQuery:"",newUser:Object.assign({},St)}},computed:{settings:function(){return this.$store.getters.getServerData},selectedGroupDecoded:function(){return decodeURIComponent(this.selectedGroup)},filteredUsers:function(){return"disabled"===this.selectedGroup?this.users.filter((function(t){return!1===t.enabled})):(this.settings.isAdmin,this.users.filter((function(t){return!1!==t.enabled})))},groups:function(){return this.$store.getters.getGroups.filter((function(t){return"disabled"!==t.id})).sort((function(t,n){return t.name.localeCompare(n.name)}))},canAddGroups:function(){return this.groups.map((function(t){return(t=Object.assign({},t)).$isDisabled=!1===t.canAdd,t}))},subAdminsGroups:function(){return this.$store.getters.getSubadminGroups},quotaOptions:function(){var t=this.settings.quotaPreset.reduce((function(t,n){return t.concat({id:n,label:n})}),[]);return this.settings.allowUnlimitedQuota&&t.unshift(this.unlimitedQuota),t.unshift(this.defaultQuota),t},minPasswordLength:function(){return this.$store.getters.getPasswordPolicyMinLength},usersOffset:function(){return this.$store.getters.getUsersOffset},usersLimit:function(){return this.$store.getters.getUsersLimit},usersCount:function(){return this.users.length},languages:function(){return[{label:t("settings","Common languages"),languages:this.settings.languages.commonLanguages},{label:t("settings","Other languages"),languages:this.settings.languages.otherLanguages}]}},watch:{selectedGroup:function(t,n){this.redirectIfDisabled(),this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset(),this.setNewUserDefaultGroup(t)},usersCount:function(t,n){0===t&&1===n?this.$refs.infiniteLoading.stateChanger.reset():1===t&&0===n&&this.$refs.infiniteLoading.stateChanger.loaded()}},mounted:function(){this.settings.canChangePassword||OC.Notification.showTemporary(t("settings","Password change is disabled because the master key is disabled")),this.resetForm(),(0,R.subscribe)("nextcloud:unified-search.search",this.search),(0,R.subscribe)("nextcloud:unified-search.reset",this.resetSearch),this.redirectIfDisabled()},beforeDestroy:function(){(0,R.unsubscribe)("nextcloud:unified-search.search",this.search),(0,R.unsubscribe)("nextcloud:unified-search.reset",this.resetSearch)},methods:{onScroll:function(t){this.scrolled=t.target.scrollTo>0},validateQuota:function(t){var n=OC.Util.computerFileSize(t);return null!==n&&n>=0?(t=OC.Util.humanFileSize(OC.Util.computerFileSize(t)),this.newUser.quota={id:t,label:t},this.newUser.quota):(this.newUser.quota=this.quotaOptions[0],this.quotaOptions[0])},infiniteHandler:function(t){var n=this;this.$store.dispatch("getUsers",{offset:this.usersOffset,limit:this.usersLimit,group:"disabled"!==this.selectedGroup?this.selectedGroup:"",search:this.searchQuery}).then((function(e){e>0&&t.loaded(),e<n.usersLimit&&t.complete()}))},search:function(t){var n=t.query;this.searchQuery=n,this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset()},resetSearch:function(){this.search({query:""})},resetForm:function(){this.newUser=Object.assign({},St),this.settings.defaultLanguage&&U.default.set(this.newUser.language,"code",this.settings.defaultLanguage),this.setNewUserDefaultGroup(this.selectedGroup),this.loading.all=!1},createUser:function(){var t=this;this.loading.all=!0,this.$store.dispatch("addUser",{userid:this.newUser.id,password:this.newUser.password,displayName:this.newUser.displayName,email:this.newUser.mailAddress,groups:this.newUser.groups.map((function(t){return t.id})),subadmin:this.newUser.subAdminsGroups.map((function(t){return t.id})),quota:this.newUser.quota.id,language:this.newUser.language.code}).then((function(){t.resetForm(),t.$refs.newusername.focus(),t.closeModal()})).catch((function(n){if(t.loading.all=!1,n.response&&n.response.data&&n.response.data.ocs&&n.response.data.ocs.meta){var e=n.response.data.ocs.meta.statuscode;102===e?t.$refs.newusername.focus():107===e&&t.$refs.newuserpassword.focus()}}))},setNewUserDefaultGroup:function(t){if(t&&t.length>0){var n=this.groups.find((function(n){return n.id===t}));if(n)return void(this.newUser.groups=[n])}this.newUser.groups=[]},createGroup:function(t){var n=this;return this.loading.groups=!0,this.$store.dispatch("addGroup",t).then((function(e){n.newUser.groups.push(n.groups.find((function(n){return n.id===t}))),n.loading.groups=!1})).catch((function(){n.loading.groups=!1})),this.$store.getters.getGroups[this.groups.length]},redirectIfDisabled:function(){var t=this.$store.getters.getGroups;"disabled"===this.selectedGroup&&t.findIndex((function(t){return"disabled"===t.id&&0===t.usercount}))>-1&&(this.$router.push({name:"users"}),this.$refs.infiniteLoading.stateChanger.reset())},closeModal:function(){this.showConfig.showNewUserForm=!1}}},qt=s(89489),Nt={};Nt.styleTagTransform=ht(),Nt.setAttributes=dt(),Nt.insert=ut().bind(null,"head"),Nt.domAPI=rt(),Nt.insertStyleElement=gt(),it()(qt.Z,Nt),qt.Z&&qt.Z.locals&&qt.Z.locals;var $t=(0,D.Z)(Mt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"user-list-grid",attrs:{id:"app-content"},on:{"&scroll":function(n){return t.onScroll.apply(null,arguments)}}},[t.showConfig.showNewUserForm?e("Modal",{attrs:{size:"small"},on:{close:t.closeModal}},[e("form",{staticClass:"modal__content",attrs:{id:"new-user",disabled:t.loading.all},on:{submit:function(n){return n.preventDefault(),t.createUser.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("settings","New user")))]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.id,expression:"newUser.id"}],ref:"newusername",staticClass:"modal__item",attrs:{id:"newusername",disabled:t.settings.newUserGenerateUserID,placeholder:t.settings.newUserGenerateUserID?t.t("settings","Will be autogenerated"):t.t("settings","Username"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"username",pattern:"[a-zA-Z0-9 _\\.@\\-']+",required:"",type:"text"},domProps:{value:t.newUser.id},on:{input:function(n){n.target.composing||t.$set(t.newUser,"id",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.displayName,expression:"newUser.displayName"}],staticClass:"modal__item",attrs:{id:"newdisplayname",placeholder:t.t("settings","Display name"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"displayname",type:"text"},domProps:{value:t.newUser.displayName},on:{input:function(n){n.target.composing||t.$set(t.newUser,"displayName",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.password,expression:"newUser.password"}],ref:"newuserpassword",staticClass:"modal__item",attrs:{id:"newuserpassword",minlength:t.minPasswordLength,placeholder:t.t("settings","Password"),required:""===t.newUser.mailAddress,autocapitalize:"none",autocomplete:"new-password",autocorrect:"off",name:"password",type:"password"},domProps:{value:t.newUser.password},on:{input:function(n){n.target.composing||t.$set(t.newUser,"password",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.mailAddress,expression:"newUser.mailAddress"}],staticClass:"modal__item",attrs:{id:"newemail",placeholder:t.t("settings","Email"),required:""===t.newUser.password||t.settings.newUserRequireEmail,autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"email",type:"email"},domProps:{value:t.newUser.mailAddress},on:{input:function(n){n.target.composing||t.$set(t.newUser,"mailAddress",n.target.value)}}}),t._v(" "),e("div",{staticClass:"groups modal__item"},[t.settings.isAdmin?t._e():e("input",{class:{"icon-loading-small":t.loading.groups},attrs:{id:"newgroups",required:!t.settings.isAdmin,tabindex:"-1",type:"text"},domProps:{value:t.newUser.groups}}),t._v(" "),e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.groups||t.loading.all,multiple:!0,options:t.canAddGroups,placeholder:t.t("settings","Add user to group"),"tag-width":60,taggable:!0,label:"name","tag-placeholder":"create","track-by":"id"},on:{tag:t.createGroup},model:{value:t.newUser.groups,callback:function(n){t.$set(t.newUser,"groups",n)},expression:"newUser.groups"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,multiple:!0,options:t.subAdminsGroups,placeholder:t.t("settings","Set user as admin for"),"tag-width":60,label:"name","track-by":"id"},model:{value:t.newUser.subAdminsGroups,callback:function(n){t.$set(t.newUser,"subAdminsGroups",n)},expression:"newUser.subAdminsGroups"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1):t._e(),t._v(" "),e("div",{staticClass:"quota modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:t.quotaOptions,placeholder:t.t("settings","Select user quota"),taggable:!0,label:"label","track-by":"id"},on:{tag:t.validateQuota},model:{value:t.newUser.quota,callback:function(n){t.$set(t.newUser,"quota",n)},expression:"newUser.quota"}})],1),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:t.languages,placeholder:t.t("settings","Default language"),"group-label":"label","group-values":"languages",label:"name","track-by":"code"},model:{value:t.newUser.language,callback:function(n){t.$set(t.newUser,"language",n)},expression:"newUser.language"}})],1):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{staticClass:"storageLocation"}):t._e(),t._v(" "),t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"}):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{staticClass:"lastLogin"}):t._e(),t._v(" "),e("div",{staticClass:"user-actions"},[e("Button",{attrs:{id:"newsubmit",type:"primary","native-type":"submit",value:""}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Add a new user"))+"\n\t\t\t\t")])],1)])]):t._e(),t._v(" "),e("div",{staticClass:"row",class:{sticky:t.scrolled&&!t.showConfig.showNewUserForm},attrs:{id:"grid-header"}},[e("div",{staticClass:"avatar",attrs:{id:"headerAvatar"}}),t._v(" "),e("div",{staticClass:"name",attrs:{id:"headerName"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Username"))+"\n\n\t\t\t"),e("div",{staticClass:"subtitle"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Display name"))+"\n\t\t\t")])]),t._v(" "),e("div",{staticClass:"password",attrs:{id:"headerPassword"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Password"))+"\n\t\t")]),t._v(" "),e("div",{staticClass:"mailAddress",attrs:{id:"headerAddress"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Email"))+"\n\t\t")]),t._v(" "),e("div",{staticClass:"groups",attrs:{id:"headerGroups"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Groups"))+"\n\t\t")]),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins",attrs:{id:"headerSubAdmins"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Group admin for"))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"quota",attrs:{id:"headerQuota"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Quota"))+"\n\t\t")]),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages",attrs:{id:"headerLanguages"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Language"))+"\n\t\t")]):t._e(),t._v(" "),t.showConfig.showUserBackend||t.showConfig.showStoragePath?e("div",{staticClass:"headerUserBackend userBackend"},[t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","User backend"))+"\n\t\t\t")]):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{staticClass:"subtitle storageLocation"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Storage location"))+"\n\t\t\t")]):t._e()]):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{staticClass:"headerLastLogin lastLogin"},[t._v("\n\t\t\t"+t._s(t.t("settings","Last login"))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"userActions"})]),t._v(" "),t._l(t.filteredUsers,(function(n){return e("user-row",{key:n.id,attrs:{"external-actions":t.externalActions,groups:t.groups,languages:t.languages,"quota-options":t.quotaOptions,settings:t.settings,"show-config":t.showConfig,"sub-admins-groups":t.subAdminsGroups,user:n}})})),t._v(" "),e("InfiniteLoading",{ref:"infiniteLoading",on:{infinite:t.infiniteHandler}},[e("div",{attrs:{slot:"spinner"},slot:"spinner"},[e("div",{staticClass:"users-icon-loading icon-loading"})]),t._v(" "),e("div",{attrs:{slot:"no-more"},slot:"no-more"},[e("div",{staticClass:"users-list-end"})]),t._v(" "),e("div",{attrs:{slot:"no-results"},slot:"no-results"},[e("div",{attrs:{id:"emptycontent"}},[e("div",{staticClass:"icon-contacts-dark"}),t._v(" "),e("h2",[t._v(t._s(t.t("settings","No users in here")))])])])])],2)}),[],!1,null,"672d131f",null),Ot=$t.exports;function Pt(t){return Pt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Pt(t)}function Dt(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,s)}return e}function Bt(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?Dt(Object(e),!0).forEach((function(n){Rt(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Dt(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function Rt(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function Qt(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}function zt(t){return function(){var n=this,e=arguments;return new Promise((function(s,i){var a=t.apply(n,e);function r(t){Qt(a,s,i,r,o,"next",t)}function o(t){Qt(a,s,i,r,o,"throw",t)}r(void 0)}))}}U.default.use(x());var It={name:"Users",components:{AppContent:a(),AppNavigation:o(),AppNavigationCaption:l(),AppNavigationCounter:c(),AppNavigationItem:p(),AppNavigationNew:m(),AppNavigationSettings:v(),Content:A(),GroupListItem:B,Multiselect:_(),UserList:Ot},props:{selectedGroup:{type:String,default:null}},data:function(){return{unlimitedQuota:{id:"none",label:t("settings","Unlimited")},selectedQuota:!1,externalActions:[],loadingAddGroup:!1,loadingSendMail:!1,showConfig:{showStoragePath:!1,showUserBackend:!1,showLastLogin:!1,showNewUserForm:!1,showLanguages:!1}}},computed:{selectedGroupDecoded:function(){return this.selectedGroup?decodeURIComponent(this.selectedGroup):null},users:function(){return this.$store.getters.getUsers},groups:function(){return this.$store.getters.getGroups},usersOffset:function(){return this.$store.getters.getUsersOffset},usersLimit:function(){return this.$store.getters.getUsersLimit},showLanguages:{get:function(){return this.getLocalstorage("showLanguages")},set:function(t){this.setLocalStorage("showLanguages",t)}},showLastLogin:{get:function(){return this.getLocalstorage("showLastLogin")},set:function(t){this.setLocalStorage("showLastLogin",t)}},showUserBackend:{get:function(){return this.getLocalstorage("showUserBackend")},set:function(t){this.setLocalStorage("showUserBackend",t)}},showStoragePath:{get:function(){return this.getLocalstorage("showStoragePath")},set:function(t){this.setLocalStorage("showStoragePath",t)}},userCount:function(){return this.$store.getters.getUserCount},settings:function(){return this.$store.getters.getServerData},quotaOptions:function(){var t=this.settings.quotaPreset.reduce((function(t,n){return t.concat({id:n,label:n})}),[]);return this.settings.allowUnlimitedQuota&&t.unshift(this.unlimitedQuota),t},defaultQuota:{get:function(){return!1!==this.selectedQuota?this.selectedQuota:this.settings.defaultQuota!==this.unlimitedQuota.id&&OC.Util.computerFileSize(this.settings.defaultQuota)>=0?{id:this.settings.defaultQuota,label:this.settings.defaultQuota}:this.unlimitedQuota},set:function(t){this.selectedQuota=t}},sendWelcomeMail:{get:function(){return this.settings.newUserSendEmail},set:function(t){var n=this;return zt(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n.loadingSendMail=!0,n.$store.commit("setServerData",Bt(Bt({},n.settings),{},{newUserSendEmail:t})),e.next=5,w.default.post((0,y.generateUrl)("/settings/users/preferences/newUser.sendEmail"),{value:t?"yes":"no"});case 5:e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("could not update newUser.sendEmail preference: "+e.t0.message,e.t0);case 10:return e.prev=10,n.loadingSendMail=!1,e.finish(10);case 13:case"end":return e.stop()}}),e,null,[[0,7,10,13]])})))()}},groupList:function(){var t=this;return(Array.isArray(this.groups)?this.groups:[]).filter((function(t){return"disabled"!==t.id&&"admin"!==t.id})).map((function(n){return t.formatGroupMenu(n)}))},adminGroupMenu:function(){return this.formatGroupMenu(this.groups.find((function(t){return"admin"===t.id})))},disabledGroupMenu:function(){return this.formatGroupMenu(this.groups.find((function(t){return"disabled"===t.id})))}},beforeMount:function(){this.$store.commit("initGroups",{groups:this.$store.getters.getServerData.groups,orderBy:this.$store.getters.getServerData.sortGroups,userCount:this.$store.getters.getServerData.userCount}),this.$store.dispatch("getPasswordPolicyMinLength")},created:function(){Object.assign(OCA,{Settings:{UserList:{registerAction:this.registerAction}}})},methods:{showNewUserMenu:function(){this.showConfig.showNewUserForm=!0,this.showConfig.showNewUserForm&&U.default.nextTick((function(){window.newusername.focus()}))},getLocalstorage:function(t){var n=this.$localStorage.get(t);return this.showConfig[t]=null!==n?"true"===n:this.showConfig[t],this.showConfig[t]},setLocalStorage:function(t,n){return this.showConfig[t]=n,this.$localStorage.set(t,n),n},setDefaultQuota:function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";this.$store.dispatch("setAppConfig",{app:"files",key:"default_quota",value:n.id?n.id:n}).then((function(){"object"!==Pt(n)&&(n={id:n,label:n}),t.defaultQuota=n}))},validateQuota:function(t){return null===OC.Util.computerFileSize(t)?this.setDefaultQuota("none"):this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(t)))},registerAction:function(t,n,e){return this.externalActions.push({icon:t,text:n,action:e}),this.externalActions},createGroup:function(t){var n=this;return zt(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(""!==t.trim()){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,n.loadingAddGroup=!0,e.next=6,n.$store.dispatch("addGroup",t.trim());case 6:return n.hideAddGroupForm(),e.next=9,n.$router.push({name:"group",params:{selectedGroup:encodeURIComponent(t.trim())}});case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(2),n.showAddGroupForm();case 14:return e.prev=14,n.loadingAddGroup=!1,e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[2,11,14,17]])})))()},showAddGroupForm:function(){var t=this;this.$refs.addGroup.editingActive=!0,this.$refs.addGroup.onMenuToggle(!1),this.$nextTick((function(){t.$refs.addGroup.$refs.editingInput.focusInput()}))},hideAddGroupForm:function(){this.$refs.addGroup.editingActive=!1,this.$refs.addGroup.editingValue=""},formatGroupMenu:function(t){var n={};return void 0===t?{}:(n.id=t.id,n.title=t.name,n.usercount=t.usercount,t.usercount-t.disabled>0&&(n.count=t.usercount-t.disabled),n)}}},Ft=It,Tt=s(36095),jt={};jt.styleTagTransform=ht(),jt.setAttributes=dt(),jt.insert=ut().bind(null,"head"),jt.domAPI=rt(),jt.insertStyleElement=gt(),it()(Tt.Z,jt),Tt.Z&&Tt.Z.locals&&Tt.Z.locals;var Et=(0,D.Z)(Ft,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("Content",{attrs:{"app-name":"settings","navigation-class":{"icon-loading":t.loadingAddGroup}}},[e("AppNavigation",{scopedSlots:t._u([{key:"list",fn:function(){return[e("AppNavigationItem",{ref:"addGroup",attrs:{id:"addgroup","edit-placeholder":t.t("settings","Enter group name"),editable:!0,loading:t.loadingAddGroup,title:t.t("settings","Add group"),icon:"icon-add"},on:{click:t.showAddGroupForm,"update:title":t.createGroup}}),t._v(" "),e("AppNavigationItem",{attrs:{id:"everyone",exact:!0,title:t.t("settings","Active users"),to:{name:"users"},icon:"icon-contacts-dark"}},[t.userCount>0?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.userCount)+"\n\t\t\t\t")]):t._e()],1),t._v(" "),t.settings.isAdmin?e("AppNavigationItem",{attrs:{id:"admin",exact:!0,title:t.t("settings","Admins"),to:{name:"group",params:{selectedGroup:"admin"}},icon:"icon-user-admin"}},[t.adminGroupMenu.count?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.adminGroupMenu.count)+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.disabledGroupMenu.usercount>0||-1===t.disabledGroupMenu.usercount?e("AppNavigationItem",{attrs:{id:"disabled",exact:!0,title:t.t("settings","Disabled users"),to:{name:"group",params:{selectedGroup:"disabled"}},icon:"icon-disabled-users"}},[t.disabledGroupMenu.usercount>0?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.disabledGroupMenu.usercount)+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.groupList.length>0?e("AppNavigationCaption",{attrs:{title:t.t("settings","Groups")}}):t._e(),t._v(" "),t._l(t.groupList,(function(t){return e("GroupListItem",{key:t.id,attrs:{id:t.id,title:t.title,count:t.count}})}))]},proxy:!0},{key:"footer",fn:function(){return[e("AppNavigationSettings",[e("div",[e("p",[t._v(t._s(t.t("settings","Default quota:")))]),t._v(" "),e("Multiselect",{attrs:{value:t.defaultQuota,options:t.quotaOptions,"tag-placeholder":"create",placeholder:t.t("settings","Select default quota"),label:"label","track-by":"id","allow-empty":!1,taggable:!0},on:{tag:t.validateQuota,input:t.setDefaultQuota}})],1),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showLanguages,expression:"showLanguages"}],staticClass:"checkbox",attrs:{id:"showLanguages",type:"checkbox"},domProps:{checked:Array.isArray(t.showLanguages)?t._i(t.showLanguages,null)>-1:t.showLanguages},on:{change:function(n){var e=t.showLanguages,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showLanguages=e.concat([null])):a>-1&&(t.showLanguages=e.slice(0,a).concat(e.slice(a+1)))}else t.showLanguages=i}}}),t._v(" "),e("label",{attrs:{for:"showLanguages"}},[t._v(t._s(t.t("settings","Show Languages")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showLastLogin,expression:"showLastLogin"}],staticClass:"checkbox",attrs:{id:"showLastLogin",type:"checkbox"},domProps:{checked:Array.isArray(t.showLastLogin)?t._i(t.showLastLogin,null)>-1:t.showLastLogin},on:{change:function(n){var e=t.showLastLogin,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showLastLogin=e.concat([null])):a>-1&&(t.showLastLogin=e.slice(0,a).concat(e.slice(a+1)))}else t.showLastLogin=i}}}),t._v(" "),e("label",{attrs:{for:"showLastLogin"}},[t._v(t._s(t.t("settings","Show last login")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showUserBackend,expression:"showUserBackend"}],staticClass:"checkbox",attrs:{id:"showUserBackend",type:"checkbox"},domProps:{checked:Array.isArray(t.showUserBackend)?t._i(t.showUserBackend,null)>-1:t.showUserBackend},on:{change:function(n){var e=t.showUserBackend,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showUserBackend=e.concat([null])):a>-1&&(t.showUserBackend=e.slice(0,a).concat(e.slice(a+1)))}else t.showUserBackend=i}}}),t._v(" "),e("label",{attrs:{for:"showUserBackend"}},[t._v(t._s(t.t("settings","Show user backend")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showStoragePath,expression:"showStoragePath"}],staticClass:"checkbox",attrs:{id:"showStoragePath",type:"checkbox"},domProps:{checked:Array.isArray(t.showStoragePath)?t._i(t.showStoragePath,null)>-1:t.showStoragePath},on:{change:function(n){var e=t.showStoragePath,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showStoragePath=e.concat([null])):a>-1&&(t.showStoragePath=e.slice(0,a).concat(e.slice(a+1)))}else t.showStoragePath=i}}}),t._v(" "),e("label",{attrs:{for:"showStoragePath"}},[t._v(t._s(t.t("settings","Show storage path")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.sendWelcomeMail,expression:"sendWelcomeMail"}],staticClass:"checkbox",attrs:{id:"sendWelcomeMail",disabled:t.loadingSendMail,type:"checkbox"},domProps:{checked:Array.isArray(t.sendWelcomeMail)?t._i(t.sendWelcomeMail,null)>-1:t.sendWelcomeMail},on:{change:function(n){var e=t.sendWelcomeMail,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.sendWelcomeMail=e.concat([null])):a>-1&&(t.sendWelcomeMail=e.slice(0,a).concat(e.slice(a+1)))}else t.sendWelcomeMail=i}}}),t._v(" "),e("label",{attrs:{for:"sendWelcomeMail"}},[t._v(t._s(t.t("settings","Send email to new user")))])])])]},proxy:!0}])},[e("AppNavigationNew",{attrs:{"button-id":"new-user-button",text:t.t("settings","New user"),"button-class":"icon-add"},on:{click:t.showNewUserMenu,keyup:[function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"enter",13,n.key,"Enter")?null:t.showNewUserMenu.apply(null,arguments)},function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"space",32,n.key,[" ","Spacebar"])?null:t.showNewUserMenu.apply(null,arguments)}]}})],1),t._v(" "),e("AppContent",[e("UserList",{attrs:{users:t.users,"show-config":t.showConfig,"selected-group":t.selectedGroupDecoded,"external-actions":t.externalActions}})],1)],1)}),[],!1,null,"1babbc68",null),Wt=Et.exports}}]); +//# sourceMappingURL=settings-users-8351.js.map?v=04e1d33f947711080615
\ No newline at end of file diff --git a/dist/settings-users-8351.js.map b/dist/settings-users-8351.js.map index 73e80b40e60..9a324b46128 100644 --- a/dist/settings-users-8351.js.map +++ b/dist/settings-users-8351.js.map @@ -1 +1 @@ -{"version":3,"file":"settings-users-8351.js?v=602a08575de144a57dfd","mappings":";+IAGIA,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,8HAA+H,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iEAAiE,MAAQ,GAAG,SAAW,sCAAsC,eAAiB,CAAC,i/CAAi/C,WAAa,MAEh1D,+DCJIH,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,yIAA0I,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uEAAuE,MAAQ,GAAG,SAAW,kEAAkE,eAAiB,CAAC,yjBAAyjB,WAAa,MAEr8B,gECJIH,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,8FAA+F,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iDAAiD,MAAQ,GAAG,SAAW,mBAAmB,eAAiB,CAAC,6lCAA6lC,WAAa,MAEz3C,gECJIH,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,ovCAAyvC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,yDAAyD,MAAQ,GAAG,SAAW,6UAA6U,eAAiB,CAAC,iwoBAAi3oB,WAAa,MAEzmsB,2ECPA,8ZC4DA,OACA,qBACA,YACA,gBACA,iBACA,kBACA,uBAEA,OACA,IACA,YACA,aAEA,OACA,YACA,aAEA,OACA,YACA,cAGA,KAtBA,WAuBA,OACA,sBACA,mBAGA,UACA,SADA,WAEA,2CAGA,SACA,oBADA,WAEA,uBAEA,YAJA,SAIA,wJAEA,cAFA,oDASA,MAHA,0EAGA,OATA,iEAcA,mBACA,wBAfA,UAgBA,iCACA,iBACA,uBAlBA,QAqBA,wBArBA,kDAuBA,mBACA,wBAxBA,2OA2BA,YA/BA,SA+BA,GACA,WAEA,mBACA,oGACA,mDACA,YACA,GACA,yCCpI0L,eCkB1L,GAXgB,OACd,GCRW,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,oBAAoB,CAACE,IAAIN,EAAID,GAAGQ,MAAM,CAAC,OAAQ,EAAK,MAAQP,EAAIQ,MAAM,GAAK,CAAEC,KAAM,QAASC,OAAQ,CAAEC,cAAeC,mBAAmBZ,EAAID,MAAQ,KAAO,aAAa,QAAUC,EAAIa,mBAAmB,YAAYb,EAAIc,eAAeC,GAAG,CAAC,kBAAkBf,EAAIgB,qBAAqBC,YAAYjB,EAAIkB,GAAG,CAAC,CAACZ,IAAI,UAAUa,GAAG,WAAW,MAAO,CAAEnB,EAAS,MAAEI,EAAG,gBAAgB,CAACJ,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAIsB,OAAO,YAAYtB,EAAIuB,OAAOC,OAAM,GAAM,CAAClB,IAAI,UAAUa,GAAG,WAAW,MAAO,CAAa,UAAXnB,EAAID,IAA6B,aAAXC,EAAID,IAAqBC,EAAIyB,SAASC,QAAStB,EAAG,cAAc,CAACuB,IAAI,mBAAmBpB,MAAM,CAAC,KAAO,YAAY,KAAO,OAAO,MAAQP,EAAIQ,OAAOO,GAAG,CAAC,OAAS,SAASa,GAAQ,OAAO5B,EAAI6B,YAAY7B,EAAID,OAAO,CAACC,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,iBAAiB,YAAY9B,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAiB,UAAXpB,EAAID,IAA6B,aAAXC,EAAID,IAAqBC,EAAIyB,SAASC,QAAStB,EAAG,eAAe,CAACG,MAAM,CAAC,KAAO,eAAeQ,GAAG,CAAC,MAAQ,SAASa,GAAQ,OAAO5B,EAAI+B,YAAY/B,EAAID,OAAO,CAACC,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,iBAAiB,YAAY9B,EAAIuB,OAAOC,OAAM,SAChoC,IDUpB,EACA,KACA,KACA,MAI8B,mZEQhC,QACCQ,MAAO,CACNC,KAAM,CACLC,KAAMC,OACNC,UAAU,GAEXX,SAAU,CACTS,KAAMC,OACNE,QAAS,iBAAO,KAEjBC,OAAQ,CACPJ,KAAMK,MACNF,QAAS,iBAAM,KAEhBG,gBAAiB,CAChBN,KAAMK,MACNF,QAAS,iBAAM,KAEhBI,aAAc,CACbP,KAAMK,MACNF,QAAS,iBAAM,KAEhBK,WAAY,CACXR,KAAMC,OACNE,QAAS,iBAAO,KAEjBM,UAAW,CACVT,KAAMK,MACNH,UAAU,GAEXQ,gBAAiB,CAChBV,KAAMK,MACNF,QAAS,iBAAM,MAGjBQ,SAAU,CAETC,WAFS,WAEI,WAEZ,OADmB7C,KAAKqC,OAAOS,QAAO,SAAAC,GAAK,OAAI,EAAKf,KAAKK,OAAOW,SAASD,EAAMjD,QAGhFmD,oBANS,WAMa,WAErB,OAD4BjD,KAAKuC,gBAAgBO,QAAO,SAAAC,GAAK,OAAI,EAAKf,KAAKkB,SAASF,SAASD,EAAMjD,QAGpGqD,gBAVS,WAUS,WACjB,OAAOnD,KAAKqC,OAAOe,KAAI,SAACL,GAGvB,IAAMM,EAAanB,OAAOoB,OAAO,GAAIP,GAUrC,OALAM,EAAWE,aACU,IAAjBR,EAAMS,SACJ,EAAKxB,KAAKK,OAAOW,SAASD,EAAMjD,MACb,IAApBiD,EAAMU,WACN,EAAKzB,KAAKK,OAAOW,SAASD,EAAMjD,IAC9BuD,MAKTK,UA7BS,WA8BR,OAAI1D,KAAKgC,KAAK2B,MAAMC,KACZ/B,EAAE,WAAY,cAAe,CAAEgC,KAAMC,GAAGC,KAAKC,cAAchE,KAAKgC,KAAK2B,MAAMC,QAE5E/B,EAAE,WAAY,cAAe,CAAEgC,KAAMC,GAAGC,KAAKC,cAAc,MAEnEC,UAnCS,WAoCR,IAAIN,EAAQ3D,KAAKgC,KAAK2B,MAAMA,MAQ5B,OANCA,EADGA,EAAQ,EACHO,KAAKC,IAAI,IAAKD,KAAKE,MAAMpE,KAAKgC,KAAK2B,MAAMC,KAAOD,EAAQ,MAIxD,IAAM,EAAK,GAFF3D,KAAKgC,KAAK2B,MAAMC,MAAQ,GAAKM,KAAKG,IAAI,EAAG,KAEvB,IAE7BC,MAAMX,GAAS,EAAIA,GAG3BY,UA/CS,WAgDR,GAAIvE,KAAKgC,KAAK2B,MAAMA,OAAS,EAAG,CAE/B,IAAMa,EAAaV,GAAGC,KAAKC,cAAchE,KAAKgC,KAAK2B,MAAMA,OAEzD,OADkB3D,KAAKwC,aAAaiC,MAAK,SAAAd,GAAK,OAAIA,EAAM7D,KAAO0E,MAC3C,CAAE1E,GAAI0E,EAAYE,MAAOF,GACvC,MAA8B,YAA1BxE,KAAKgC,KAAK2B,MAAMA,MAEnB3D,KAAKwC,aAAa,GAEnBxC,KAAKwC,aAAa,IAI1BmC,kBA7DS,WA8DR,OAAO3E,KAAK4E,OAAOC,QAAQC,4BAI5BC,aAlES,WAkEM,WAERC,EADqBhF,KAAK0C,UAAU,GAAGA,UAAUuC,OAAOjF,KAAK0C,UAAU,GAAGA,WAC5C+B,MAAK,SAAAS,GAAI,OAAIA,EAAKC,OAAS,EAAKnD,KAAKoD,YACzE,MAAwB,WAApB,GAAOJ,IAAgD,KAAvBhF,KAAKgC,KAAKoD,SACtC,CACND,KAAMnF,KAAKgC,KAAKoD,SAChB5E,KAAMR,KAAKgC,KAAKoD,UAEgB,KAAvBpF,KAAKgC,KAAKoD,UAGdJ,GAIRK,qBAjFS,WAkFR,OAAIrF,KAAKgC,KAAKsD,UAAY,EAClBxB,GAAGC,KAAKwB,WAAWvF,KAAKgC,KAAKsD,WAE9B,IAERE,cAvFS,WAwFR,OAAIxF,KAAKgC,KAAKsD,UAAY,EAClBxB,GAAGC,KAAK0B,qBAAqBzF,KAAKgC,KAAKsD,WAExCzD,EAAE,WAAY,WAGvB6D,QAAS,CAQRC,eARQ,SAQO3D,GAAiB,IAAX6B,EAAW,uDAAJ,GAC3B,OAAO+B,EAAAA,EAAAA,aACN,oCACA,CACC5D,KAAAA,EACA6B,KAAAA,EACAgC,QAASC,cAAcC,OAAOF,aCzK6J,GCyFhM,CACA,qBACA,YACA,gBACA,iBACA,aAEA,YACA,kBAEA,YACA,OACA,MACA,YACA,aAEA,SACA,YACA,aAEA,YACA,YACA,aAEA,aACA,WACA,aAEA,YACA,aACA,aAEA,iBACA,YACA,aAEA,iBACA,WACA,aAEA,UACA,YACA,cAGA,UACA,iBADA,WAEA,uBACA,kCACA,YAEA,0BANA,WAOA,gCACA,kCACA,YAEA,UAXA,WAYA,4BACA,+EAEA,6DAEA,QAjBA,WAkBA,wEAEA,UApBA,WAqBA,4BAWA,MATA,eAEA,UADA,gCAGA,+BAKA,mBACA,0BACA,KACA,yBAEA,2BAGA,SACA,WADA,WAEA,kDAEA,SAJA,WAKA,oCAEA,WAPA,WAQA,sLC3KIG,GAAU,GAEdA,GAAQC,kBAAoB,KAC5BD,GAAQE,cAAgB,KAElBF,GAAQG,OAAS,UAAc,KAAM,QAE3CH,GAAQI,OAAS,KACjBJ,GAAQK,mBAAqB,KAEhB,KAAI,KAASL,IAKJ,MAAW,aAAiB,YALlD,ICbI,IAAY,OACd,ICTW,WAAa,IAAIjG,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACmG,YAAY,MAAMC,MAAM,CAAC,SAAYxG,EAAIyG,QAAQC,QAAU1G,EAAIyG,QAAQE,SAASpG,MAAM,CAAC,UAAUP,EAAIiC,KAAKlC,KAAK,CAACK,EAAG,MAAM,CAACmG,YAAY,SAASC,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQC,QAAU1G,EAAIyG,QAAQE,SAAW3G,EAAIyG,QAAQG,OAAO,CAAG5G,EAAIyG,QAAQC,QAAW1G,EAAIyG,QAAQE,SAAY3G,EAAIyG,QAAQG,KAAwM5G,EAAIuB,KAAtMnB,EAAG,MAAM,CAACG,MAAM,CAAC,IAAM,GAAG,MAAQ,KAAK,OAAS,KAAK,IAAMP,EAAI4F,eAAe5F,EAAIiC,KAAKlC,GAAI,IAAI,OAASC,EAAI4F,eAAe5F,EAAIiC,KAAKlC,GAAI,IAAI,QAAQC,EAAI4F,eAAe5F,EAAIiC,KAAKlC,GAAI,KAAK,WAAoBC,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,QAAQ,CAACvG,EAAIoB,GAAG,SAASpB,EAAIqB,GAAGrB,EAAIiC,KAAKlC,IAAI,UAAUK,EAAG,MAAM,CAACmG,YAAY,wBAAwB,CAACnG,EAAG,MAAM,CAACyG,WAAW,CAAC,CAACpG,KAAK,UAAUqG,QAAQ,YAAYC,MAAO/G,EAAIiC,KAAK+E,YAAYC,OAAS,GAAKjH,EAAIiC,KAAK+E,YAAc,GAAIE,WAAW,yDAAyDX,YAAY,YAAY,CAACvG,EAAIoB,GAAG,aAAapB,EAAIqB,GAAGrB,EAAIiC,KAAK+E,aAAa,kBAAkBhH,EAAIoB,GAAG,KAAKhB,EAAG,OAAOJ,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,eAAe,CAACnG,EAAG,MAAM,CAACyG,WAAW,CAAC,CAACpG,KAAK,UAAUqG,QAAQ,YAAYC,MAA0B,OAAnB/G,EAAIiC,KAAKkF,OAAkBnH,EAAIiC,KAAKkF,MAAMF,OAAS,GAAKjH,EAAIiC,KAAKkF,MAAQ,GAAID,WAAW,oEAAoEX,YAAY,YAAY,CAACvG,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAIiC,KAAKkF,OAAO,cAAcnH,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,UAAU,CAACvG,EAAIoB,GAAG,SAASpB,EAAIqB,GAAGrB,EAAIoH,kBAAkB,UAAUpH,EAAIoB,GAAG,KAAMpB,EAAIwC,gBAAgByE,OAAS,GAAKjH,EAAIyB,SAASC,QAAStB,EAAG,MAAM,CAACmG,YAAY,mBAAmB,CAACvG,EAAIoB,GAAG,SAASpB,EAAIqB,GAAGrB,EAAIqH,2BAA2B,UAAUrH,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,aAAa,CAACnG,EAAG,MAAM,CAACmG,YAAY,SAAS,CAACvG,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAIwE,WAAW,KAAKxE,EAAIqB,GAAGrB,EAAI2D,WAAW,aAAavD,EAAG,WAAW,CAACmG,YAAY,sBAAsBC,MAAM,CAAC,KAAQxG,EAAIkE,UAAY,IAAI3D,MAAM,CAAC,IAAM,OAAO+G,SAAS,CAAC,MAAQtH,EAAIkE,iBAAiBlE,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAwB,cAAEtC,EAAG,MAAM,CAACmG,YAAY,aAAa,CAACvG,EAAIoB,GAAG,SAASpB,EAAIqB,GAAGrB,EAAIgF,aAAavE,MAAM,UAAUT,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAW6E,iBAAmBvH,EAAI0C,WAAW8E,gBAAiBpH,EAAG,MAAM,CAACmG,YAAY,eAAe,CAAEvG,EAAI0C,WAA0B,gBAAEtC,EAAG,MAAM,CAACmG,YAAY,eAAe,CAACvG,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAIiC,KAAKwF,SAAS,YAAYzH,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAA0B,gBAAEtC,EAAG,MAAM,CAACyG,WAAW,CAAC,CAACpG,KAAK,UAAUqG,QAAQ,YAAYC,MAAO/G,EAAIiC,KAAoB,gBAAEiF,WAAW,yBAAyBX,YAAY,4BAA4B,CAACvG,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAIiC,KAAKyF,iBAAiB,YAAY1H,EAAIuB,OAAOvB,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAwB,cAAEtC,EAAG,MAAM,CAACyG,WAAW,CAAC,CAACpG,KAAK,UAAUqG,QAAQ,iBAAiBC,MAAO/G,EAAwB,qBAAEkH,WAAW,uBAAuBS,UAAU,CAAC,MAAO,KAAQpB,YAAY,aAAa,CAACvG,EAAIoB,GAAG,SAASpB,EAAIqB,GAAGrB,EAAIyF,eAAe,UAAUzF,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,eAAe,CAAEvG,EAAI4H,UAAY5H,EAAIyG,QAAQoB,IAAKzH,EAAG,MAAM,CAACmG,YAAY,qBAAqB,CAACnG,EAAG,UAAU,CAACA,EAAG,eAAe,CAACG,MAAM,CAAC,KAAO,eAAeQ,GAAG,CAAC,MAAQf,EAAI8H,aAAa,CAAC9H,EAAIoB,GAAG,eAAepB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,cAAc,iBAAiB,GAAG9B,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,0BAA0B,CAACnG,EAAG,SAAS,CAACyG,WAAW,CAAC,CAACpG,KAAK,gBAAgBqG,QAAQ,kBAAkBC,MAAO/G,EAAY,SAAEkH,WAAW,aAAaX,YAAY,YAAYhG,MAAM,CAAC,aAAaP,EAAI8B,EAAE,WAAY,6BAA6Bf,GAAG,CAAC,MAAQ,SAASa,GAAgC,OAAxBA,EAAOmG,iBAAwB/H,EAAIgI,WAAWC,MAAM,KAAMC,eAAelI,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,cAAcC,MAAM,CAAE,KAAQxG,EAAImI,YAAa5H,MAAM,CAAC,gBAAgBP,EAAImI,aAAa,CAAC/H,EAAG,cAAc,CAACG,MAAM,CAAC,KAAOP,EAAIoI,gBAAgB,MAAM,GAAGpI,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,WAAW8B,MAAM,CAAEC,QAAiC,KAAxBtI,EAAIuI,gBAAyB,EAAI,IAAK,CAACnI,EAAG,MAAM,CAACmG,YAAY,mBAAmBvG,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAIuI,iBAAiB,kBACv6H,IDWpB,EACA,KACA,KACA,MAIF,GAAe,GAAiB,wUEuOhC,yBAEA,QACA,eACA,YACA,iBACA,0BACA,kBACA,4BACA,2BAEA,YACA,kBAEA,YACA,OACA,MACA,YACA,aAEA,UACA,YACA,8BAEA,QACA,WACA,8BAEA,iBACA,WACA,8BAEA,cACA,WACA,8BAEA,YACA,YACA,8BAEA,WACA,WACA,aAEA,iBACA,WACA,+BAGA,KA/CA,WAgDA,OACA,iCACA,cACA,mBACA,WACA,SACA,OACA,eACA,YACA,eACA,UACA,aACA,SACA,UACA,WACA,aACA,WAIA,UAEA,YAFA,WAGA,OACA,CACA,mBACA,iCACA,wBAEA,CACA,mBACA,sCACA,6BAEA,CACA,+CACA,gFACA,gCAUA,OAPA,8CACA,QACA,iBACA,0CACA,8BAGA,iCAIA,SAEA,WAFA,WAGA,kCAEA,SALA,WAMA,oBAGA,gBATA,WASA,WACA,eACA,8BACA,6NACA,uCACA,CACA,+BACA,2DACA,uBACA,gCAEA,YACA,IACA,kBACA,iBACA,uCACA,iBACA,kBACA,wBAIA,IAIA,WAnCA,WAmCA,WACA,eACA,8BACA,8GACA,iCACA,CACA,+BACA,6DACA,uBACA,gCAEA,YACA,KAGA,OAFA,oBACA,iBACA,kCACA,iBACA,oBACA,uBAIA,IAIA,kBA7DA,WA6DA,WACA,uBACA,oBACA,mBACA,qBACA,iDACA,SACA,YAEA,iBACA,oBACA,qBASA,kBAjFA,WAiFA,WACA,+BACA,4BACA,oCACA,oBACA,kBACA,UACA,iBACA,yBACA,gCASA,eAnGA,WAmGA,WACA,4BACA,yBACA,oCACA,oBACA,eACA,UACA,iBACA,sBACA,8BASA,YArHA,WAqHA,WACA,+BACA,4BACA,oCACA,oBACA,YACA,UACA,iBACA,yBACA,gCASA,YAvIA,SAuIA,2JACA,mCADA,kBAGA,gCAHA,cAIA,YAJA,SAKA,mDALA,uDAOA,oBAPA,yBASA,mCATA,8CAWA,6CAXA,kEAmBA,aA1JA,SA0JA,0JACA,a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","sources":["webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=4c932ffd&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=style&index=0&id=1babbc68&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=672d131f&scoped=true&lang=css&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=template&id=1babbc68&scoped=true&","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?7b19","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=template&id=24cc1e48&","webpack:///nextcloud/apps/settings/src/mixins/UserRowMixin.js","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6980","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6d7a","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=0b39a53a&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?7d96","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?81d2","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=4c932ffd&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList.vue","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/UserList.vue?a40a","webpack://nextcloud/./apps/settings/src/components/UserList.vue?02a4","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=template&id=672d131f&scoped=true&","webpack:///nextcloud/apps/settings/src/views/Users.vue","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/views/Users.vue?ba65","webpack://nextcloud/./apps/settings/src/views/Users.vue?cf86"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".row--menu-opened[data-v-4c932ffd]{z-index:1 !important}.row[data-v-4c932ffd] .multiselect__single{z-index:auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRow.vue\"],\"names\":[],\"mappings\":\"AAyqBA,mCACC,oBAAA,CAED,2CACC,uBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// Force menu to be above other rows\\n.row--menu-opened {\\n\\tz-index: 1 !important;\\n}\\n.row::v-deep .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRowSimple.vue\"],\"names\":[],\"mappings\":\"AA6LC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\t.cellText {\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\twhite-space: nowrap;\\n}\\n\\t.icon-more {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tborder: 0;\\n\\t}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation__list #addgroup[data-v-1babbc68] .app-navigation-entry__utils{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/Users.vue\"],\"names\":[],\"mappings\":\"AAieA,8EACC,YAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// force hiding the editing action for the add group entry\\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\\n\\tdisplay: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.modal-wrapper[data-v-672d131f] {\\n\\tmargin: 2vh 0;\\n\\talign-items: flex-start;\\n}\\n.modal__content[data-v-672d131f] {\\n\\tdisplay: flex;\\n\\tpadding: 20px;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n\\ttext-align: center;\\n}\\n.modal__item[data-v-672d131f] {\\n\\tmargin-bottom: 16px;\\n\\twidth: 100%;\\n}\\n.modal__item[data-v-672d131f]:not(:focus):not(:active) {\\n\\tborder-color: var(--color-border-dark);\\n}\\n.modal__item[data-v-672d131f] .multiselect {\\n\\twidth: 100%;\\n}\\n.user-actions[data-v-672d131f] {\\n\\tmargin-top: 20px;\\n}\\n.modal__content[data-v-672d131f] .multiselect__single {\\n\\ttext-align: left;\\n\\tbox-sizing: border-box;\\n}\\n.modal__content[data-v-672d131f] .multiselect__content-wrapper {\\n\\tbox-sizing: border-box;\\n}\\n.row[data-v-672d131f] .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\\n/* fake input for groups validation */\\ninput#newgroups[data-v-672d131f] {\\n\\tposition: absolute;\\n\\topacity: 0;\\n\\t/* The \\\"hidden\\\" input is behind the Multiselect, so in general it does\\n\\t * not receives clicks. However, with Firefox, after the validation\\n\\t * fails, it will receive the first click done on it, so its width needs\\n\\t * to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t * prevent it). */\\n\\twidth: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList.vue\"],\"names\":[],\"mappings\":\";AA+kBA;CACA,aAAA;CACA,uBAAA;AACA;AACA;CACA,aAAA;CACA,aAAA;CACA,sBAAA;CACA,mBAAA;CACA,kBAAA;AACA;AACA;CACA,mBAAA;CACA,WAAA;AACA;AACA;CACA,sCAAA;AACA;AACA;CACA,WAAA;AACA;AACA;CACA,gBAAA;AACA;AACA;CACA,gBAAA;CACA,sBAAA;AACA;AACA;CACA,sBAAA;AACA;AACA;CACA,wBAAA;AACA;;AAEA,qCAAA;AACA;CACA,kBAAA;CACA,UAAA;CACA;;;;kBAIA;CACA,QAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\\n -\\n - @author John Molakvoæ <skjnldsv@protonmail.com>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div id=\\\"app-content\\\" class=\\\"user-list-grid\\\" @scroll.passive=\\\"onScroll\\\">\\n\\t\\t<Modal v-if=\\\"showConfig.showNewUserForm\\\" size=\\\"small\\\" @close=\\\"closeModal\\\">\\n\\t\\t\\t<form id=\\\"new-user\\\"\\n\\t\\t\\t\\t:disabled=\\\"loading.all\\\"\\n\\t\\t\\t\\tclass=\\\"modal__content\\\"\\n\\t\\t\\t\\t@submit.prevent=\\\"createUser\\\">\\n\\t\\t\\t\\t<h2>{{ t('settings','New user') }}</h2>\\n\\t\\t\\t\\t<input id=\\\"newusername\\\"\\n\\t\\t\\t\\t\\tref=\\\"newusername\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.id\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"settings.newUserGenerateUserID\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"settings.newUserGenerateUserID\\n\\t\\t\\t\\t\\t\\t? t('settings', 'Will be autogenerated')\\n\\t\\t\\t\\t\\t\\t: t('settings', 'Username')\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"username\\\"\\n\\t\\t\\t\\t\\tpattern=\\\"[a-zA-Z0-9 _\\\\.@\\\\-']+\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t<input id=\\\"newdisplayname\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.displayName\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Display name')\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"displayname\\\"\\n\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t<input id=\\\"newuserpassword\\\"\\n\\t\\t\\t\\t\\tref=\\\"newuserpassword\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.password\\\"\\n\\t\\t\\t\\t\\t:minlength=\\\"minPasswordLength\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Password')\\\"\\n\\t\\t\\t\\t\\t:required=\\\"newUser.mailAddress===''\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"new-password\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"password\\\"\\n\\t\\t\\t\\t\\ttype=\\\"password\\\">\\n\\t\\t\\t\\t<input id=\\\"newemail\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.mailAddress\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Email')\\\"\\n\\t\\t\\t\\t\\t:required=\\\"newUser.password==='' || settings.newUserRequireEmail\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"email\\\"\\n\\t\\t\\t\\t\\ttype=\\\"email\\\">\\n\\t\\t\\t\\t<div class=\\\"groups modal__item\\\">\\n\\t\\t\\t\\t\\t<!-- hidden input trick for vanilla html5 form validation -->\\n\\t\\t\\t\\t\\t<input v-if=\\\"!settings.isAdmin\\\"\\n\\t\\t\\t\\t\\t\\tid=\\\"newgroups\\\"\\n\\t\\t\\t\\t\\t\\t:class=\\\"{'icon-loading-small': loading.groups}\\\"\\n\\t\\t\\t\\t\\t\\t:required=\\\"!settings.isAdmin\\\"\\n\\t\\t\\t\\t\\t\\t:value=\\\"newUser.groups\\\"\\n\\t\\t\\t\\t\\t\\ttabindex=\\\"-1\\\"\\n\\t\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.groups\\\"\\n\\t\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:disabled=\\\"loading.groups||loading.all\\\"\\n\\t\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"canAddGroups\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Add user to group')\\\"\\n\\t\\t\\t\\t\\t\\t:tag-width=\\\"60\\\"\\n\\t\\t\\t\\t\\t\\t:taggable=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttag-placeholder=\\\"create\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t\\t\\t\\t@tag=\\\"createGroup\\\">\\n\\t\\t\\t\\t\\t\\t<!-- If user is not admin, he is a subadmin.\\n\\t\\t\\t\\t\\t\\t\\tSubadmins can't create users outside their groups\\n\\t\\t\\t\\t\\t\\t\\tTherefore, empty select is forbidden -->\\n\\t\\t\\t\\t\\t\\t<span slot=\\\"noResult\\\">{{ t('settings', 'No results') }}</span>\\n\\t\\t\\t\\t\\t</Multiselect>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"subAdminsGroups.length>0 && settings.isAdmin\\\"\\n\\t\\t\\t\\t\\tclass=\\\"subadmins modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.subAdminsGroups\\\"\\n\\t\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"subAdminsGroups\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Set user as admin for')\\\"\\n\\t\\t\\t\\t\\t\\t:tag-width=\\\"60\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\">\\n\\t\\t\\t\\t\\t\\t<span slot=\\\"noResult\\\">{{ t('settings', 'No results') }}</span>\\n\\t\\t\\t\\t\\t</Multiselect>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"quota modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.quota\\\"\\n\\t\\t\\t\\t\\t\\t:allow-empty=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"quotaOptions\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Select user quota')\\\"\\n\\t\\t\\t\\t\\t\\t:taggable=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t\\t\\t\\t@tag=\\\"validateQuota\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showLanguages\\\" class=\\\"languages modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.language\\\"\\n\\t\\t\\t\\t\\t\\t:allow-empty=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"languages\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Default language')\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tgroup-label=\\\"label\\\"\\n\\t\\t\\t\\t\\t\\tgroup-values=\\\"languages\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"code\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showStoragePath\\\" class=\\\"storageLocation\\\" />\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend\\\" class=\\\"userBackend\\\" />\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showLastLogin\\\" class=\\\"lastLogin\\\" />\\n\\t\\t\\t\\t<div class=\\\"user-actions\\\">\\n\\t\\t\\t\\t\\t<Button id=\\\"newsubmit\\\"\\n\\t\\t\\t\\t\\t\\ttype=\\\"primary\\\"\\n\\t\\t\\t\\t\\t\\tnative-type=\\\"submit\\\"\\n\\t\\t\\t\\t\\t\\tvalue=\\\"\\\">\\n\\t\\t\\t\\t\\t\\t{{ t('settings', 'Add a new user') }}\\n\\t\\t\\t\\t\\t</Button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</form>\\n\\t\\t</Modal>\\n\\t\\t<div id=\\\"grid-header\\\"\\n\\t\\t\\t:class=\\\"{'sticky': scrolled && !showConfig.showNewUserForm}\\\"\\n\\t\\t\\tclass=\\\"row\\\">\\n\\t\\t\\t<div id=\\\"headerAvatar\\\" class=\\\"avatar\\\" />\\n\\t\\t\\t<div id=\\\"headerName\\\" class=\\\"name\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Username') }}\\n\\n\\t\\t\\t\\t<div class=\\\"subtitle\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Display name') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerPassword\\\" class=\\\"password\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Password') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerAddress\\\" class=\\\"mailAddress\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Email') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerGroups\\\" class=\\\"groups\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Groups') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"subAdminsGroups.length>0 && settings.isAdmin\\\"\\n\\t\\t\\t\\tid=\\\"headerSubAdmins\\\"\\n\\t\\t\\t\\tclass=\\\"subadmins\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Group admin for') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerQuota\\\" class=\\\"quota\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Quota') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"showConfig.showLanguages\\\"\\n\\t\\t\\t\\tid=\\\"headerLanguages\\\"\\n\\t\\t\\t\\tclass=\\\"languages\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Language') }}\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend || showConfig.showStoragePath\\\"\\n\\t\\t\\t\\tclass=\\\"headerUserBackend userBackend\\\">\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend\\\" class=\\\"userBackend\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'User backend') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showStoragePath\\\"\\n\\t\\t\\t\\t\\tclass=\\\"subtitle storageLocation\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Storage location') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"showConfig.showLastLogin\\\"\\n\\t\\t\\t\\tclass=\\\"headerLastLogin lastLogin\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Last login') }}\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div class=\\\"userActions\\\" />\\n\\t\\t</div>\\n\\n\\t\\t<user-row v-for=\\\"user in filteredUsers\\\"\\n\\t\\t\\t:key=\\\"user.id\\\"\\n\\t\\t\\t:external-actions=\\\"externalActions\\\"\\n\\t\\t\\t:groups=\\\"groups\\\"\\n\\t\\t\\t:languages=\\\"languages\\\"\\n\\t\\t\\t:quota-options=\\\"quotaOptions\\\"\\n\\t\\t\\t:settings=\\\"settings\\\"\\n\\t\\t\\t:show-config=\\\"showConfig\\\"\\n\\t\\t\\t:sub-admins-groups=\\\"subAdminsGroups\\\"\\n\\t\\t\\t:user=\\\"user\\\" />\\n\\t\\t<InfiniteLoading ref=\\\"infiniteLoading\\\" @infinite=\\\"infiniteHandler\\\">\\n\\t\\t\\t<div slot=\\\"spinner\\\">\\n\\t\\t\\t\\t<div class=\\\"users-icon-loading icon-loading\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<div slot=\\\"no-more\\\">\\n\\t\\t\\t\\t<div class=\\\"users-list-end\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<div slot=\\\"no-results\\\">\\n\\t\\t\\t\\t<div id=\\\"emptycontent\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"icon-contacts-dark\\\" />\\n\\t\\t\\t\\t\\t<h2>{{ t('settings', 'No users in here') }}</h2>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</InfiniteLoading>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\\nimport InfiniteLoading from 'vue-infinite-loading'\\nimport Vue from 'vue'\\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\\nimport Button from '@nextcloud/vue/dist/Components/Button'\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\n\\nimport userRow from './UserList/UserRow'\\n\\nconst unlimitedQuota = {\\n\\tid: 'none',\\n\\tlabel: t('settings', 'Unlimited'),\\n}\\nconst defaultQuota = {\\n\\tid: 'default',\\n\\tlabel: t('settings', 'Default quota'),\\n}\\nconst newUser = {\\n\\tid: '',\\n\\tdisplayName: '',\\n\\tpassword: '',\\n\\tmailAddress: '',\\n\\tgroups: [],\\n\\tsubAdminsGroups: [],\\n\\tquota: defaultQuota,\\n\\tlanguage: {\\n\\t\\tcode: 'en',\\n\\t\\tname: t('settings', 'Default language'),\\n\\t},\\n}\\n\\nexport default {\\n\\tname: 'UserList',\\n\\tcomponents: {\\n\\t\\tModal,\\n\\t\\tuserRow,\\n\\t\\tMultiselect,\\n\\t\\tInfiniteLoading,\\n\\t\\tButton,\\n\\t},\\n\\tprops: {\\n\\t\\tusers: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\tdefault: () => [],\\n\\t\\t},\\n\\t\\tshowConfig: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tselectedGroup: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\tdefault: null,\\n\\t\\t},\\n\\t\\texternalActions: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\tdefault: () => [],\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tunlimitedQuota,\\n\\t\\t\\tdefaultQuota,\\n\\t\\t\\tloading: {\\n\\t\\t\\t\\tall: false,\\n\\t\\t\\t\\tgroups: false,\\n\\t\\t\\t},\\n\\t\\t\\tscrolled: false,\\n\\t\\t\\tsearchQuery: '',\\n\\t\\t\\tnewUser: Object.assign({}, newUser),\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tsettings() {\\n\\t\\t\\treturn this.$store.getters.getServerData\\n\\t\\t},\\n\\t\\tselectedGroupDecoded() {\\n\\t\\t\\treturn decodeURIComponent(this.selectedGroup)\\n\\t\\t},\\n\\t\\tfilteredUsers() {\\n\\t\\t\\tif (this.selectedGroup === 'disabled') {\\n\\t\\t\\t\\treturn this.users.filter(user => user.enabled === false)\\n\\t\\t\\t}\\n\\t\\t\\tif (!this.settings.isAdmin) {\\n\\t\\t\\t\\t// we don't want subadmins to edit themselves\\n\\t\\t\\t\\treturn this.users.filter(user => user.enabled !== false)\\n\\t\\t\\t}\\n\\t\\t\\treturn this.users.filter(user => user.enabled !== false)\\n\\t\\t},\\n\\t\\tgroups() {\\n\\t\\t\\t// data provided php side + remove the disabled group\\n\\t\\t\\treturn this.$store.getters.getGroups\\n\\t\\t\\t\\t.filter(group => group.id !== 'disabled')\\n\\t\\t\\t\\t.sort((a, b) => a.name.localeCompare(b.name))\\n\\t\\t},\\n\\t\\tcanAddGroups() {\\n\\t\\t\\t// disabled if no permission to add new users to group\\n\\t\\t\\treturn this.groups.map(group => {\\n\\t\\t\\t\\t// clone object because we don't want\\n\\t\\t\\t\\t// to edit the original groups\\n\\t\\t\\t\\tgroup = Object.assign({}, group)\\n\\t\\t\\t\\tgroup.$isDisabled = group.canAdd === false\\n\\t\\t\\t\\treturn group\\n\\t\\t\\t})\\n\\t\\t},\\n\\t\\tsubAdminsGroups() {\\n\\t\\t\\t// data provided php side\\n\\t\\t\\treturn this.$store.getters.getSubadminGroups\\n\\t\\t},\\n\\t\\tquotaOptions() {\\n\\t\\t\\t// convert the preset array into objects\\n\\t\\t\\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\\n\\t\\t\\t\\tid: cur,\\n\\t\\t\\t\\tlabel: cur,\\n\\t\\t\\t}), [])\\n\\t\\t\\t// add default presets\\n\\t\\t\\tif (this.settings.allowUnlimitedQuota) {\\n\\t\\t\\t\\tquotaPreset.unshift(this.unlimitedQuota)\\n\\t\\t\\t}\\n\\t\\t\\tquotaPreset.unshift(this.defaultQuota)\\n\\t\\t\\treturn quotaPreset\\n\\t\\t},\\n\\t\\tminPasswordLength() {\\n\\t\\t\\treturn this.$store.getters.getPasswordPolicyMinLength\\n\\t\\t},\\n\\t\\tusersOffset() {\\n\\t\\t\\treturn this.$store.getters.getUsersOffset\\n\\t\\t},\\n\\t\\tusersLimit() {\\n\\t\\t\\treturn this.$store.getters.getUsersLimit\\n\\t\\t},\\n\\t\\tusersCount() {\\n\\t\\t\\treturn this.users.length\\n\\t\\t},\\n\\n\\t\\t/* LANGUAGES */\\n\\t\\tlanguages() {\\n\\t\\t\\treturn [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\tlabel: t('settings', 'Common languages'),\\n\\t\\t\\t\\t\\tlanguages: this.settings.languages.commonLanguages,\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\tlabel: t('settings', 'Other languages'),\\n\\t\\t\\t\\t\\tlanguages: this.settings.languages.otherLanguages,\\n\\t\\t\\t\\t},\\n\\t\\t\\t]\\n\\t\\t},\\n\\t},\\n\\twatch: {\\n\\t\\t// watch url change and group select\\n\\t\\tselectedGroup(val, old) {\\n\\t\\t\\t// if selected is the disabled group but it's empty\\n\\t\\t\\tthis.redirectIfDisabled()\\n\\t\\t\\tthis.$store.commit('resetUsers')\\n\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\tthis.setNewUserDefaultGroup(val)\\n\\t\\t},\\n\\n\\t\\t// make sure the infiniteLoading state is changed if we manually\\n\\t\\t// add/remove data from the store\\n\\t\\tusersCount(val, old) {\\n\\t\\t\\t// deleting the last user, reset the list\\n\\t\\t\\tif (val === 0 && old === 1) {\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\t\\t// adding the first user, warn the infiniteLoader that\\n\\t\\t\\t\\t// the list is not empty anymore (we don't fetch the newly\\n\\t\\t\\t\\t// added user as we already have all the info we need)\\n\\t\\t\\t} else if (val === 1 && old === 0) {\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.loaded()\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\n\\tmounted() {\\n\\t\\tif (!this.settings.canChangePassword) {\\n\\t\\t\\tOC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'))\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Reset and init new user form\\n\\t\\t */\\n\\t\\tthis.resetForm()\\n\\n\\t\\t/**\\n\\t\\t * Register search\\n\\t\\t */\\n\\t\\tsubscribe('nextcloud:unified-search.search', this.search)\\n\\t\\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\\n\\n\\t\\t/**\\n\\t\\t * If disabled group but empty, redirect\\n\\t\\t */\\n\\t\\tthis.redirectIfDisabled()\\n\\t},\\n\\tbeforeDestroy() {\\n\\t\\tunsubscribe('nextcloud:unified-search.search', this.search)\\n\\t\\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\\n\\t},\\n\\n\\tmethods: {\\n\\t\\tonScroll(event) {\\n\\t\\t\\tthis.scrolled = event.target.scrollTo > 0\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * Validate quota string to make sure it's a valid human file size\\n\\t\\t *\\n\\t\\t * @param {string} quota Quota in readable format '5 GB'\\n\\t\\t * @return {object}\\n\\t\\t */\\n\\t\\tvalidateQuota(quota) {\\n\\t\\t\\t// only used for new presets sent through @Tag\\n\\t\\t\\tconst validQuota = OC.Util.computerFileSize(quota)\\n\\t\\t\\tif (validQuota !== null && validQuota >= 0) {\\n\\t\\t\\t\\t// unify format output\\n\\t\\t\\t\\tquota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))\\n\\t\\t\\t\\tthis.newUser.quota = { id: quota, label: quota }\\n\\t\\t\\t\\treturn this.newUser.quota\\n\\t\\t\\t}\\n\\t\\t\\t// Default is unlimited\\n\\t\\t\\tthis.newUser.quota = this.quotaOptions[0]\\n\\t\\t\\treturn this.quotaOptions[0]\\n\\t\\t},\\n\\n\\t\\tinfiniteHandler($state) {\\n\\t\\t\\tthis.$store.dispatch('getUsers', {\\n\\t\\t\\t\\toffset: this.usersOffset,\\n\\t\\t\\t\\tlimit: this.usersLimit,\\n\\t\\t\\t\\tgroup: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\\n\\t\\t\\t\\tsearch: this.searchQuery,\\n\\t\\t\\t})\\n\\t\\t\\t\\t.then((usersCount) => {\\n\\t\\t\\t\\t\\tif (usersCount > 0) {\\n\\t\\t\\t\\t\\t\\t$state.loaded()\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (usersCount < this.usersLimit) {\\n\\t\\t\\t\\t\\t\\t$state.complete()\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t},\\n\\n\\t\\t/* SEARCH */\\n\\t\\tsearch({ query }) {\\n\\t\\t\\tthis.searchQuery = query\\n\\t\\t\\tthis.$store.commit('resetUsers')\\n\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t},\\n\\t\\tresetSearch() {\\n\\t\\t\\tthis.search({ query: '' })\\n\\t\\t},\\n\\n\\t\\tresetForm() {\\n\\t\\t\\t// revert form to original state\\n\\t\\t\\tthis.newUser = Object.assign({}, newUser)\\n\\n\\t\\t\\t/**\\n\\t\\t\\t * Init default language from server data. The use of this.settings\\n\\t\\t\\t * requires a computed variable, which break the v-model binding of the form,\\n\\t\\t\\t * this is a much easier solution than getter and setter on a computed var\\n\\t\\t\\t */\\n\\t\\t\\tif (this.settings.defaultLanguage) {\\n\\t\\t\\t\\tVue.set(this.newUser.language, 'code', this.settings.defaultLanguage)\\n\\t\\t\\t}\\n\\n\\t\\t\\t/**\\n\\t\\t\\t * In case the user directly loaded the user list within a group\\n\\t\\t\\t * the watch won't be triggered. We need to initialize it.\\n\\t\\t\\t */\\n\\t\\t\\tthis.setNewUserDefaultGroup(this.selectedGroup)\\n\\n\\t\\t\\tthis.loading.all = false\\n\\t\\t},\\n\\t\\tcreateUser() {\\n\\t\\t\\tthis.loading.all = true\\n\\t\\t\\tthis.$store.dispatch('addUser', {\\n\\t\\t\\t\\tuserid: this.newUser.id,\\n\\t\\t\\t\\tpassword: this.newUser.password,\\n\\t\\t\\t\\tdisplayName: this.newUser.displayName,\\n\\t\\t\\t\\temail: this.newUser.mailAddress,\\n\\t\\t\\t\\tgroups: this.newUser.groups.map(group => group.id),\\n\\t\\t\\t\\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\\n\\t\\t\\t\\tquota: this.newUser.quota.id,\\n\\t\\t\\t\\tlanguage: this.newUser.language.code,\\n\\t\\t\\t})\\n\\t\\t\\t\\t.then(() => {\\n\\t\\t\\t\\t\\tthis.resetForm()\\n\\t\\t\\t\\t\\tthis.$refs.newusername.focus()\\n\\t\\t\\t\\t\\tthis.closeModal()\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch((error) => {\\n\\t\\t\\t\\t\\tthis.loading.all = false\\n\\t\\t\\t\\t\\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\\n\\t\\t\\t\\t\\t\\tconst statuscode = error.response.data.ocs.meta.statuscode\\n\\t\\t\\t\\t\\t\\tif (statuscode === 102) {\\n\\t\\t\\t\\t\\t\\t\\t// wrong username\\n\\t\\t\\t\\t\\t\\t\\tthis.$refs.newusername.focus()\\n\\t\\t\\t\\t\\t\\t} else if (statuscode === 107) {\\n\\t\\t\\t\\t\\t\\t\\t// wrong password\\n\\t\\t\\t\\t\\t\\t\\tthis.$refs.newuserpassword.focus()\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t},\\n\\t\\tsetNewUserDefaultGroup(value) {\\n\\t\\t\\tif (value && value.length > 0) {\\n\\t\\t\\t\\t// setting new user default group to the current selected one\\n\\t\\t\\t\\tconst currentGroup = this.groups.find(group => group.id === value)\\n\\t\\t\\t\\tif (currentGroup) {\\n\\t\\t\\t\\t\\tthis.newUser.groups = [currentGroup]\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// fallback, empty selected group\\n\\t\\t\\tthis.newUser.groups = []\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * Create a new group\\n\\t\\t *\\n\\t\\t * @param {string} gid Group id\\n\\t\\t * @return {Promise}\\n\\t\\t */\\n\\t\\tcreateGroup(gid) {\\n\\t\\t\\tthis.loading.groups = true\\n\\t\\t\\tthis.$store.dispatch('addGroup', gid)\\n\\t\\t\\t\\t.then((group) => {\\n\\t\\t\\t\\t\\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\\n\\t\\t\\t\\t\\tthis.loading.groups = false\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch(() => {\\n\\t\\t\\t\\t\\tthis.loading.groups = false\\n\\t\\t\\t\\t})\\n\\t\\t\\treturn this.$store.getters.getGroups[this.groups.length]\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * If the selected group is the disabled group but the count is 0\\n\\t\\t * redirect to the all users page.\\n\\t\\t * we only check for 0 because we don't have the count on ldap\\n\\t\\t * and we therefore set the usercount to -1 in this specific case\\n\\t\\t */\\n\\t\\tredirectIfDisabled() {\\n\\t\\t\\tconst allGroups = this.$store.getters.getGroups\\n\\t\\t\\tif (this.selectedGroup === 'disabled'\\n\\t\\t\\t\\t\\t\\t&& allGroups.findIndex(group => group.id === 'disabled' && group.usercount === 0) > -1) {\\n\\t\\t\\t\\t// disabled group is empty, redirection to all users\\n\\t\\t\\t\\tthis.$router.push({ name: 'users' })\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcloseModal() {\\n\\t\\t\\t// eslint-disable-next-line vue/no-mutating-props\\n\\t\\t\\tthis.showConfig.showNewUserForm = false\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.modal-wrapper {\\n\\t\\tmargin: 2vh 0;\\n\\t\\talign-items: flex-start;\\n\\t}\\n\\t.modal__content {\\n\\t\\tdisplay: flex;\\n\\t\\tpadding: 20px;\\n\\t\\tflex-direction: column;\\n\\t\\talign-items: center;\\n\\t\\ttext-align: center;\\n\\t}\\n\\t.modal__item {\\n\\t\\tmargin-bottom: 16px;\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.modal__item:not(:focus):not(:active) {\\n\\t\\tborder-color: var(--color-border-dark);\\n\\t}\\n\\t.modal__item::v-deep .multiselect {\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.user-actions {\\n\\t\\tmargin-top: 20px;\\n\\t}\\n\\t.modal__content::v-deep .multiselect__single {\\n\\t\\ttext-align: left;\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t.modal__content::v-deep .multiselect__content-wrapper {\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t.row::v-deep .multiselect__single {\\n\\t\\tz-index: auto !important;\\n\\t}\\n\\n\\t/* fake input for groups validation */\\n\\tinput#newgroups {\\n\\t\\tposition: absolute;\\n\\t\\topacity: 0;\\n\\t\\t/* The \\\"hidden\\\" input is behind the Multiselect, so in general it does\\n\\t\\t * not receives clicks. However, with Firefox, after the validation\\n\\t\\t * fails, it will receive the first click done on it, so its width needs\\n\\t\\t * to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t\\t * prevent it). */\\n\\t\\twidth: 0;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Content',{attrs:{\"app-name\":\"settings\",\"navigation-class\":{ 'icon-loading': _vm.loadingAddGroup }}},[_c('AppNavigation',{scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('AppNavigationItem',{ref:\"addGroup\",attrs:{\"id\":\"addgroup\",\"edit-placeholder\":_vm.t('settings', 'Enter group name'),\"editable\":true,\"loading\":_vm.loadingAddGroup,\"title\":_vm.t('settings', 'Add group'),\"icon\":\"icon-add\"},on:{\"click\":_vm.showAddGroupForm,\"update:title\":_vm.createGroup}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"everyone\",\"exact\":true,\"title\":_vm.t('settings', 'Active users'),\"to\":{ name: 'users' },\"icon\":\"icon-contacts-dark\"}},[(_vm.userCount > 0)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.userCount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),(_vm.settings.isAdmin)?_c('AppNavigationItem',{attrs:{\"id\":\"admin\",\"exact\":true,\"title\":_vm.t('settings', 'Admins'),\"to\":{ name: 'group', params: { selectedGroup: 'admin' } },\"icon\":\"icon-user-admin\"}},[(_vm.adminGroupMenu.count)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.adminGroupMenu.count)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.disabledGroupMenu.usercount > 0 || _vm.disabledGroupMenu.usercount === -1)?_c('AppNavigationItem',{attrs:{\"id\":\"disabled\",\"exact\":true,\"title\":_vm.t('settings', 'Disabled users'),\"to\":{ name: 'group', params: { selectedGroup: 'disabled' } },\"icon\":\"icon-disabled-users\"}},[(_vm.disabledGroupMenu.usercount > 0)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.disabledGroupMenu.usercount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.groupList.length > 0)?_c('AppNavigationCaption',{attrs:{\"title\":_vm.t('settings', 'Groups')}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.groupList),function(group){return _c('GroupListItem',{key:group.id,attrs:{\"id\":group.id,\"title\":group.title,\"count\":group.count}})})]},proxy:true},{key:\"footer\",fn:function(){return [_c('AppNavigationSettings',[_c('div',[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'Default quota:')))]),_vm._v(\" \"),_c('Multiselect',{attrs:{\"value\":_vm.defaultQuota,\"options\":_vm.quotaOptions,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Select default quota'),\"label\":\"label\",\"track-by\":\"id\",\"allow-empty\":false,\"taggable\":true},on:{\"tag\":_vm.validateQuota,\"input\":_vm.setDefaultQuota}})],1),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showLanguages),expression:\"showLanguages\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showLanguages\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showLanguages)?_vm._i(_vm.showLanguages,null)>-1:(_vm.showLanguages)},on:{\"change\":function($event){var $$a=_vm.showLanguages,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showLanguages=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showLanguages=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showLanguages=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showLanguages\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show Languages')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showLastLogin),expression:\"showLastLogin\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showLastLogin\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showLastLogin)?_vm._i(_vm.showLastLogin,null)>-1:(_vm.showLastLogin)},on:{\"change\":function($event){var $$a=_vm.showLastLogin,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showLastLogin=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showLastLogin=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showLastLogin=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showLastLogin\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show last login')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showUserBackend),expression:\"showUserBackend\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showUserBackend\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showUserBackend)?_vm._i(_vm.showUserBackend,null)>-1:(_vm.showUserBackend)},on:{\"change\":function($event){var $$a=_vm.showUserBackend,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showUserBackend=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showUserBackend=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showUserBackend=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showUserBackend\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show user backend')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showStoragePath),expression:\"showStoragePath\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showStoragePath\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showStoragePath)?_vm._i(_vm.showStoragePath,null)>-1:(_vm.showStoragePath)},on:{\"change\":function($event){var $$a=_vm.showStoragePath,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showStoragePath=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showStoragePath=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showStoragePath=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showStoragePath\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show storage path')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.sendWelcomeMail),expression:\"sendWelcomeMail\"}],staticClass:\"checkbox\",attrs:{\"id\":\"sendWelcomeMail\",\"disabled\":_vm.loadingSendMail,\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.sendWelcomeMail)?_vm._i(_vm.sendWelcomeMail,null)>-1:(_vm.sendWelcomeMail)},on:{\"change\":function($event){var $$a=_vm.sendWelcomeMail,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.sendWelcomeMail=$$a.concat([$$v]))}else{$$i>-1&&(_vm.sendWelcomeMail=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.sendWelcomeMail=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"sendWelcomeMail\"}},[_vm._v(_vm._s(_vm.t('settings', 'Send email to new user')))])])])]},proxy:true}])},[_c('AppNavigationNew',{attrs:{\"button-id\":\"new-user-button\",\"text\":_vm.t('settings','New user'),\"button-class\":\"icon-add\"},on:{\"click\":_vm.showNewUserMenu,\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.showNewUserMenu.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.showNewUserMenu.apply(null, arguments)}]}})],1),_vm._v(\" \"),_c('AppContent',[_c('UserList',{attrs:{\"users\":_vm.users,\"show-config\":_vm.showConfig,\"selected-group\":_vm.selectedGroupDecoded,\"external-actions\":_vm.externalActions}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2021 Martin Jänel <spammemore@posteo.de>\n -\n - @author Martin Jänel <spammemore@posteo.de>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<AppNavigationItem :key=\"id\"\n\t\t:exact=\"true\"\n\t\t:title=\"title\"\n\t\t:to=\"{ name: 'group', params: { selectedGroup: encodeURIComponent(id) } }\"\n\t\ticon=\"icon-group\"\n\t\t:loading=\"loadingRenameGroup\"\n\t\t:menu-open=\"openGroupMenu\"\n\t\t@update:menuOpen=\"handleGroupMenuOpen\">\n\t\t<template #counter>\n\t\t\t<CounterBubble v-if=\"count\">\n\t\t\t\t{{ count }}\n\t\t\t</CounterBubble>\n\t\t</template>\n\t\t<template #actions>\n\t\t\t<ActionInput v-if=\"id !== 'admin' && id !== 'disabled' && settings.isAdmin\"\n\t\t\t\tref=\"displayNameInput\"\n\t\t\t\ticon=\"icon-edit\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t:value=\"title\"\n\t\t\t\t@submit=\"renameGroup(id)\">\n\t\t\t\t{{ t('settings', 'Rename group') }}\n\t\t\t</ActionInput>\n\t\t\t<ActionButton v-if=\"id !== 'admin' && id !== 'disabled' && settings.isAdmin\"\n\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t@click=\"removeGroup(id)\">\n\t\t\t\t{{ t('settings', 'Remove group') }}\n\t\t\t</ActionButton>\n\t\t</template>\n\t</AppNavigationItem>\n</template>\n\n<script>\nimport ActionInput from '@nextcloud/vue/dist/Components/ActionInput'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport CounterBubble from '@nextcloud/vue/dist/Components/CounterBubble'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\n\nexport default {\n\tname: 'GroupListItem',\n\tcomponents: {\n\t\tActionInput,\n\t\tActionButton,\n\t\tCounterBubble,\n\t\tAppNavigationItem,\n\t},\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcount: {\n\t\t\ttype: Number,\n\t\t\trequired: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingRenameGroup: false,\n\t\t\topenGroupMenu: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t},\n\tmethods: {\n\t\thandleGroupMenuOpen() {\n\t\t\tthis.openGroupMenu = true\n\t\t},\n\t\tasync renameGroup(gid) {\n\t\t\t// check if group id is valid\n\t\t\tif (gid.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst displayName = this.$refs.displayNameInput.$el.querySelector('input[type=\"text\"]').value\n\n\t\t\t// check if group name is valid\n\t\t\tif (displayName.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.openGroupMenu = false\n\t\t\t\tthis.loadingRenameGroup = true\n\t\t\t\tawait this.$store.dispatch('renameGroup', {\n\t\t\t\t\tgroupid: gid.trim(),\n\t\t\t\t\tdisplayName: displayName.trim(),\n\t\t\t\t})\n\n\t\t\t\tthis.loadingRenameGroup = false\n\t\t\t} catch {\n\t\t\t\tthis.openGroupMenu = true\n\t\t\t\tthis.loadingRenameGroup = false\n\t\t\t}\n\t\t},\n\t\tremoveGroup(groupid) {\n\t\t\tconst self = this\n\t\t\t// TODO migrate to a vue js confirm dialog component\n\t\t\tOC.dialogs.confirm(\n\t\t\t\tt('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', { group: groupid }),\n\t\t\t\tt('settings', 'Please confirm the group removal '),\n\t\t\t\tfunction(success) {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\tself.$store.dispatch('removeGroup', groupid)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GroupListItem.vue?vue&type=template&id=24cc1e48&\"\nimport script from \"./GroupListItem.vue?vue&type=script&lang=js&\"\nexport * from \"./GroupListItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AppNavigationItem',{key:_vm.id,attrs:{\"exact\":true,\"title\":_vm.title,\"to\":{ name: 'group', params: { selectedGroup: encodeURIComponent(_vm.id) } },\"icon\":\"icon-group\",\"loading\":_vm.loadingRenameGroup,\"menu-open\":_vm.openGroupMenu},on:{\"update:menuOpen\":_vm.handleGroupMenuOpen},scopedSlots:_vm._u([{key:\"counter\",fn:function(){return [(_vm.count)?_c('CounterBubble',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.count)+\"\\n\\t\\t\")]):_vm._e()]},proxy:true},{key:\"actions\",fn:function(){return [(_vm.id !== 'admin' && _vm.id !== 'disabled' && _vm.settings.isAdmin)?_c('ActionInput',{ref:\"displayNameInput\",attrs:{\"icon\":\"icon-edit\",\"type\":\"text\",\"value\":_vm.title},on:{\"submit\":function($event){return _vm.renameGroup(_vm.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename group'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.id !== 'admin' && _vm.id !== 'disabled' && _vm.settings.isAdmin)?_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){return _vm.removeGroup(_vm.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Remove group'))+\"\\n\\t\\t\")]):_vm._e()]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Greta Doci <gretadoci@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateUrl } from '@nextcloud/router'\n\nexport default {\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tgroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tquotaOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tlanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tcomputed: {\n\t\t/* GROUPS MANAGEMENT */\n\t\tuserGroups() {\n\t\t\tconst userGroups = this.groups.filter(group => this.user.groups.includes(group.id))\n\t\t\treturn userGroups\n\t\t},\n\t\tuserSubAdminsGroups() {\n\t\t\tconst userSubAdminsGroups = this.subAdminsGroups.filter(group => this.user.subadmin.includes(group.id))\n\t\t\treturn userSubAdminsGroups\n\t\t},\n\t\tavailableGroups() {\n\t\t\treturn this.groups.map((group) => {\n\t\t\t\t// clone object because we don't want\n\t\t\t\t// to edit the original groups\n\t\t\t\tconst groupClone = Object.assign({}, group)\n\n\t\t\t\t// two settings here:\n\t\t\t\t// 1. user NOT in group but no permission to add\n\t\t\t\t// 2. user is in group but no permission to remove\n\t\t\t\tgroupClone.$isDisabled\n\t\t\t\t\t= (group.canAdd === false\n\t\t\t\t\t\t&& !this.user.groups.includes(group.id))\n\t\t\t\t\t|| (group.canRemove === false\n\t\t\t\t\t\t&& this.user.groups.includes(group.id))\n\t\t\t\treturn groupClone\n\t\t\t})\n\t\t},\n\n\t\t/* QUOTA MANAGEMENT */\n\t\tusedSpace() {\n\t\t\tif (this.user.quota.used) {\n\t\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(this.user.quota.used) })\n\t\t\t}\n\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(0) })\n\t\t},\n\t\tusedQuota() {\n\t\t\tlet quota = this.user.quota.quota\n\t\t\tif (quota > 0) {\n\t\t\t\tquota = Math.min(100, Math.round(this.user.quota.used / quota * 100))\n\t\t\t} else {\n\t\t\t\tconst usedInGB = this.user.quota.used / (10 * Math.pow(2, 30))\n\t\t\t\t// asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n\t\t\t\tquota = 95 * (1 - (1 / (usedInGB + 1)))\n\t\t\t}\n\t\t\treturn isNaN(quota) ? 0 : quota\n\t\t},\n\t\t// Mapping saved values to objects\n\t\tuserQuota() {\n\t\t\tif (this.user.quota.quota >= 0) {\n\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\tconst humanQuota = OC.Util.humanFileSize(this.user.quota.quota)\n\t\t\t\tconst userQuota = this.quotaOptions.find(quota => quota.id === humanQuota)\n\t\t\t\treturn userQuota || { id: humanQuota, label: humanQuota }\n\t\t\t} else if (this.user.quota.quota === 'default') {\n\t\t\t\t// default quota is replaced by the proper value on load\n\t\t\t\treturn this.quotaOptions[0]\n\t\t\t}\n\t\t\treturn this.quotaOptions[1] // unlimited\n\t\t},\n\n\t\t/* PASSWORD POLICY? */\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\n\t\t/* LANGUAGE */\n\t\tuserLanguage() {\n\t\t\tconst availableLanguages = this.languages[0].languages.concat(this.languages[1].languages)\n\t\t\tconst userLang = availableLanguages.find(lang => lang.code === this.user.language)\n\t\t\tif (typeof userLang !== 'object' && this.user.language !== '') {\n\t\t\t\treturn {\n\t\t\t\t\tcode: this.user.language,\n\t\t\t\t\tname: this.user.language,\n\t\t\t\t}\n\t\t\t} else if (this.user.language === '') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn userLang\n\t\t},\n\n\t\t/* LAST LOGIN */\n\t\tuserLastLoginTooltip() {\n\t\t\tif (this.user.lastLogin > 0) {\n\t\t\t\treturn OC.Util.formatDate(this.user.lastLogin)\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\t\tuserLastLogin() {\n\t\t\tif (this.user.lastLogin > 0) {\n\t\t\t\treturn OC.Util.relativeModifiedDate(this.user.lastLogin)\n\t\t\t}\n\t\t\treturn t('settings', 'Never')\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Generate avatar url\n\t\t *\n\t\t * @param {string} user The user name\n\t\t * @param {number} size Size integer, default 32\n\t\t * @return {string}\n\t\t */\n\t\tgenerateAvatar(user, size = 32) {\n\t\t\treturn generateUrl(\n\t\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t\t{\n\t\t\t\t\tuser,\n\t\t\t\t\tsize,\n\t\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"row\"\n\t\t:class=\"{'disabled': loading.delete || loading.disable}\"\n\t\t:data-id=\"user.id\">\n\t\t<div class=\"avatar\" :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\talt=\"\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div v-tooltip=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div />\n\t\t<div class=\"mailAddress\">\n\t\t\t<div v-tooltip=\"user.email !== null && user.email.length > 20 ? user.email : ''\" class=\"cellText\">\n\t\t\t\t{{ user.email }}\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"groups\">\n\t\t\t{{ userGroupsLabels }}\n\t\t</div>\n\t\t<div v-if=\"subAdminsGroups.length > 0 && settings.isAdmin\" class=\"subAdminsGroups\">\n\t\t\t{{ userSubAdminsGroupsLabels }}\n\t\t</div>\n\t\t<div class=\"userQuota\">\n\t\t\t<div class=\"quota\">\n\t\t\t\t{{ userQuota }} ({{ usedSpace }})\n\t\t\t\t<progress class=\"quota-user-progress\"\n\t\t\t\t\t:class=\"{'warn': usedQuota > 80}\"\n\t\t\t\t\t:value=\"usedQuota\"\n\t\t\t\t\tmax=\"100\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages\">\n\t\t\t{{ userLanguage.name }}\n\t\t</div>\n\t\t<div v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\" class=\"userBackend\">\n\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t{{ user.backend }}\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showStoragePath\" v-tooltip=\"user.storageLocation\" class=\"storageLocation subtitle\">\n\t\t\t\t{{ user.storageLocation }}\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLastLogin\" v-tooltip.auto=\"userLastLoginTooltip\" class=\"lastLogin\">\n\t\t\t{{ userLastLogin }}\n\t\t</div>\n\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"canEdit && !loading.all\" class=\"toggleUserActions\">\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton icon=\"icon-rename\" @click=\"toggleEdit\">\n\t\t\t\t\t\t{{ t('settings', 'Edit User') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<div class=\"userPopoverMenuWrapper\">\n\t\t\t\t\t<button v-click-outside=\"hideMenu\"\n\t\t\t\t\t\tclass=\"icon-more\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Toggle user actions menu')\"\n\t\t\t\t\t\t@click.prevent=\"toggleMenu\" />\n\t\t\t\t\t<div class=\"popovermenu\" :class=\"{ 'open': openedMenu }\" :aria-expanded=\"openedMenu\">\n\t\t\t\t\t\t<PopoverMenu :menu=\"userActions\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"feedback\" :style=\"{opacity: feedbackMessage !== '' ? 1 : 0}\">\n\t\t\t\t<div class=\"icon-checkmark\" />\n\t\t\t\t{{ feedbackMessage }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport PopoverMenu from '@nextcloud/vue/dist/Components/PopoverMenu'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ClickOutside from 'vue-click-outside'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport UserRowMixin from '../../mixins/UserRowMixin'\nexport default {\n\tname: 'UserRowSimple',\n\tcomponents: {\n\t\tPopoverMenu,\n\t\tActionButton,\n\t\tActions,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tuserActions: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\topenedMenu: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tfeedbackMessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tuserGroupsLabels() {\n\t\t\treturn this.userGroups\n\t\t\t\t.map(group => group.name)\n\t\t\t\t.join(', ')\n\t\t},\n\t\tuserSubAdminsGroupsLabels() {\n\t\t\treturn this.userSubAdminsGroups\n\t\t\t\t.map(group => group.name)\n\t\t\t\t.join(', ')\n\t\t},\n\t\tusedSpace() {\n\t\t\tif (this.user.quota.used) {\n\t\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(this.user.quota.used) })\n\t\t\t}\n\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(0) })\n\t\t},\n\t\tcanEdit() {\n\t\t\treturn getCurrentUser().uid !== this.user.id || this.settings.isAdmin\n\t\t},\n\t\tuserQuota() {\n\t\t\tlet quota = this.user.quota.quota\n\n\t\t\tif (quota === 'default') {\n\t\t\t\tquota = this.settings.defaultQuota\n\t\t\t\tif (quota !== 'none') {\n\t\t\t\t\t// convert to numeric value to match what the server would usually return\n\t\t\t\t\tquota = OC.Util.computerFileSize(quota)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// when the default quota is unlimited, the server returns -3 here, map it to \"none\"\n\t\t\tif (quota === 'none' || quota === -3) {\n\t\t\t\treturn t('settings', 'Unlimited')\n\t\t\t} else if (quota >= 0) {\n\t\t\t\treturn OC.Util.humanFileSize(quota)\n\t\t\t}\n\t\t\treturn OC.Util.humanFileSize(0)\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleMenu() {\n\t\t\tthis.$emit('update:openedMenu', !this.openedMenu)\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.$emit('update:openedMenu', false)\n\t\t},\n\t\ttoggleEdit() {\n\t\t\tthis.$emit('update:editing', true)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n\t.cellText {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n}\n\t.icon-more {\n\t\tbackground-color: var(--color-main-background);\n\t\tborder: 0;\n\t}\n</style>\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=0b39a53a&\"\nimport script from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\",class:{'disabled': _vm.loading.delete || _vm.loading.disable},attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"alt\":\"\",\"width\":\"32\",\"height\":\"32\",\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x'}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.displayname.length > 20 ? _vm.user.displayname : ''),expression:\"user.displayname.length > 20 ? user.displayname : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")])])]),_vm._v(\" \"),_c('div'),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.email !== null && _vm.user.email.length > 20 ? _vm.user.email : ''),expression:\"user.email !== null && user.email.length > 20 ? user.email : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.email)+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"groups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userGroupsLabels)+\"\\n\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subAdminsGroups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userSubAdminsGroupsLabels)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userQuota\"},[_c('div',{staticClass:\"quota\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.userQuota)+\" (\"+_vm._s(_vm.usedSpace)+\")\\n\\t\\t\\t\"),_c('progress',{staticClass:\"quota-user-progress\",class:{'warn': _vm.usedQuota > 80},attrs:{\"max\":\"100\"},domProps:{\"value\":_vm.usedQuota}})])]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLanguage.name)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('div',{staticClass:\"userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.backend)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.storageLocation),expression:\"user.storageLocation\"}],staticClass:\"storageLocation subtitle\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.storageLocation)+\"\\n\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.userLastLoginTooltip),expression:\"userLastLoginTooltip\",modifiers:{\"auto\":true}}],staticClass:\"lastLogin\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLastLogin)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(_vm.canEdit && !_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":_vm.toggleEdit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Edit User'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"userPopoverMenuWrapper\"},[_c('button',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"icon-more\",attrs:{\"aria-label\":_vm.t('settings', 'Toggle user actions menu')},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMenu.apply(null, arguments)}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu },attrs:{\"aria-expanded\":_vm.openedMenu}},[_c('PopoverMenu',{attrs:{\"menu\":_vm.userActions}})],1)])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"feedback\",style:({opacity: _vm.feedbackMessage !== '' ? 1 : 0})},[_c('div',{staticClass:\"icon-checkmark\"}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.feedbackMessage)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<!-- Obfuscated user: Logged in user does not have permissions to see all of the data -->\n\t<div v-if=\"Object.keys(user).length ===1\" :data-id=\"user.id\" class=\"row\">\n\t\t<div :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\"\n\t\t\tclass=\"avatar\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</div>\n\t\t<div class=\"name\">\n\t\t\t{{ user.id }}\n\t\t</div>\n\t\t<div class=\"obfuscated\">\n\t\t\t{{ t('settings','You do not have permissions to see the details of this user') }}\n\t\t</div>\n\t</div>\n\n\t<!-- User full data -->\n\t<UserRowSimple v-else-if=\"!editing\"\n\t\t:editing.sync=\"editing\"\n\t\t:feedback-message=\"feedbackMessage\"\n\t\t:groups=\"groups\"\n\t\t:languages=\"languages\"\n\t\t:loading=\"loading\"\n\t\t:opened-menu.sync=\"openedMenu\"\n\t\t:settings=\"settings\"\n\t\t:show-config=\"showConfig\"\n\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t:user-actions=\"userActions\"\n\t\t:user=\"user\"\n\t\t:class=\"{'row--menu-opened': openedMenu}\" />\n\t<div v-else\n\t\t:class=\"{\n\t\t\t'disabled': loading.delete || loading.disable,\n\t\t\t'row--menu-opened': openedMenu\n\t\t}\"\n\t\t:data-id=\"user.id\"\n\t\tclass=\"row row--editable\">\n\t\t<div :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\"\n\t\t\tclass=\"avatar\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div v-if=\"user.backendCapabilities.setDisplayName\" class=\"displayName\">\n\t\t\t<form :class=\"{'icon-loading-small': loading.displayName}\"\n\t\t\t\tclass=\"displayName\"\n\t\t\t\t@submit.prevent=\"updateDisplayName\">\n\t\t\t\t<input :id=\"'displayName'+user.id+rand\"\n\t\t\t\t\tref=\"displayName\"\n\t\t\t\t\t:disabled=\"loading.displayName||loading.all\"\n\t\t\t\t\t:value=\"user.displayname\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input class=\"icon-confirm\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tvalue=\"\">\n\t\t\t</form>\n\t\t</div>\n\t\t<div v-else class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div v-tooltip=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<form v-if=\"settings.canChangePassword && user.backendCapabilities.setPassword\"\n\t\t\t:class=\"{'icon-loading-small': loading.password}\"\n\t\t\tclass=\"password\"\n\t\t\t@submit.prevent=\"updatePassword\">\n\t\t\t<input :id=\"'password'+user.id+rand\"\n\t\t\t\tref=\"password\"\n\t\t\t\t:disabled=\"loading.password || loading.all\"\n\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t:placeholder=\"t('settings', 'Add new password')\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\trequired\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\ttype=\"password\"\n\t\t\t\tvalue=\"\">\n\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t</form>\n\t\t<div v-else />\n\t\t<form :class=\"{'icon-loading-small': loading.mailAddress}\"\n\t\t\tclass=\"mailAddress\"\n\t\t\t@submit.prevent=\"updateEmail\">\n\t\t\t<input :id=\"'mailAddress'+user.id+rand\"\n\t\t\t\tref=\"mailAddress\"\n\t\t\t\t:disabled=\"loading.mailAddress||loading.all\"\n\t\t\t\t:placeholder=\"t('settings', 'Add new email address')\"\n\t\t\t\t:value=\"user.email\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\ttype=\"email\">\n\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t</form>\n\t\t<div :class=\"{'icon-loading-small': loading.groups}\" class=\"groups\">\n\t\t\t<Multiselect :close-on-select=\"false\"\n\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t:limit=\"2\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:options=\"availableGroups\"\n\t\t\t\t:placeholder=\"t('settings', 'Add user to group')\"\n\t\t\t\t:tag-width=\"60\"\n\t\t\t\t:taggable=\"settings.isAdmin\"\n\t\t\t\t:value=\"userGroups\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@remove=\"removeUserGroup\"\n\t\t\t\t@select=\"addUserGroup\"\n\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</Multiselect>\n\t\t</div>\n\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t:class=\"{'icon-loading-small': loading.subadmins}\"\n\t\t\tclass=\"subadmins\">\n\t\t\t<Multiselect :close-on-select=\"false\"\n\t\t\t\t:disabled=\"loading.subadmins||loading.all\"\n\t\t\t\t:limit=\"2\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t:tag-width=\"60\"\n\t\t\t\t:value=\"userSubAdminsGroups\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@remove=\"removeUserSubAdmin\"\n\t\t\t\t@select=\"addUserSubAdmin\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</Multiselect>\n\t\t</div>\n\t\t<div v-tooltip.auto=\"usedSpace\"\n\t\t\t:class=\"{'icon-loading-small': loading.quota}\"\n\t\t\tclass=\"quota\">\n\t\t\t<Multiselect :allow-empty=\"false\"\n\t\t\t\t:disabled=\"loading.quota||loading.all\"\n\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t:taggable=\"true\"\n\t\t\t\t:value=\"userQuota\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@input=\"setUserQuota\"\n\t\t\t\t@tag=\"validateQuota\" />\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t:class=\"{'icon-loading-small': loading.languages}\"\n\t\t\tclass=\"languages\">\n\t\t\t<Multiselect :allow-empty=\"false\"\n\t\t\t\t:disabled=\"loading.languages||loading.all\"\n\t\t\t\t:options=\"languages\"\n\t\t\t\t:placeholder=\"t('settings', 'No language set')\"\n\t\t\t\t:value=\"userLanguage\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tgroup-label=\"label\"\n\t\t\t\tgroup-values=\"languages\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttrack-by=\"code\"\n\t\t\t\t@input=\"setUserLanguage\" />\n\t\t</div>\n\n\t\t<!-- don't show this on edit mode -->\n\t\t<div v-if=\"showConfig.showStoragePath || showConfig.showUserBackend\"\n\t\t\tclass=\"storageLocation\" />\n\t\t<div v-if=\"showConfig.showLastLogin\" />\n\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"!loading.all\"\n\t\t\t\tclass=\"toggleUserActions\">\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton icon=\"icon-checkmark\"\n\t\t\t\t\t\t@click=\"editing = false\">\n\t\t\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<div v-click-outside=\"hideMenu\" class=\"userPopoverMenuWrapper\">\n\t\t\t\t\t<button class=\"icon-more\"\n\t\t\t\t\t\t@click.prevent=\"toggleMenu\" />\n\t\t\t\t\t<div :class=\"{ 'open': openedMenu }\" class=\"popovermenu\">\n\t\t\t\t\t\t<PopoverMenu :menu=\"userActions\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :style=\"{opacity: feedbackMessage !== '' ? 1 : 0}\"\n\t\t\t\tclass=\"feedback\">\n\t\t\t\t<div class=\"icon-checkmark\" />\n\t\t\t\t{{ feedbackMessage }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport ClickOutside from 'vue-click-outside'\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport {\n\tPopoverMenu,\n\tMultiselect,\n\tActions,\n\tActionButton,\n} from '@nextcloud/vue'\nimport UserRowSimple from './UserRowSimple'\nimport UserRowMixin from '../../mixins/UserRowMixin'\n\nVue.use(VTooltip)\n\nexport default {\n\tname: 'UserRow',\n\tcomponents: {\n\t\tUserRowSimple,\n\t\tPopoverMenu,\n\t\tActions,\n\t\tActionButton,\n\t\tMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tgroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tquotaOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tlanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\trand: parseInt(Math.random() * 1000),\n\t\t\topenedMenu: false,\n\t\t\tfeedbackMessage: '',\n\t\t\tediting: false,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tdisplayName: false,\n\t\t\t\tpassword: false,\n\t\t\t\tmailAddress: false,\n\t\t\t\tgroups: false,\n\t\t\t\tsubadmins: false,\n\t\t\t\tquota: false,\n\t\t\t\tdelete: false,\n\t\t\t\tdisable: false,\n\t\t\t\tlanguages: false,\n\t\t\t\twipe: false,\n\t\t\t},\n\t\t}\n\t},\n\tcomputed: {\n\t\t/* USER POPOVERMENU ACTIONS */\n\t\tuserActions() {\n\t\t\tconst actions = [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\ttext: t('settings', 'Delete user'),\n\t\t\t\t\taction: this.deleteUser,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\ttext: t('settings', 'Wipe all devices'),\n\t\t\t\t\taction: this.wipeUserDevices,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: this.user.enabled ? 'icon-close' : 'icon-add',\n\t\t\t\t\ttext: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),\n\t\t\t\t\taction: this.enableDisableUser,\n\t\t\t\t},\n\t\t\t]\n\t\t\tif (this.user.email !== null && this.user.email !== '') {\n\t\t\t\tactions.push({\n\t\t\t\t\ticon: 'icon-mail',\n\t\t\t\t\ttext: t('settings', 'Resend welcome email'),\n\t\t\t\t\taction: this.sendWelcomeMail,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn actions.concat(this.externalActions)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/* MENU HANDLING */\n\t\ttoggleMenu() {\n\t\t\tthis.openedMenu = !this.openedMenu\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.openedMenu = false\n\t\t},\n\n\t\twipeUserDevices() {\n\t\t\tconst userid = this.user.id\n\t\t\tOC.dialogs.confirmDestructive(\n\t\t\t\tt('settings', 'In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.', { userid }),\n\t\t\t\tt('settings', 'Remote wipe of devices'),\n\t\t\t\t{\n\t\t\t\t\ttype: OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\t\tconfirm: t('settings', 'Wipe {userid}\\'s devices', { userid }),\n\t\t\t\t\tconfirmClasses: 'error',\n\t\t\t\t\tcancel: t('settings', 'Cancel'),\n\t\t\t\t},\n\t\t\t\t(result) => {\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tthis.loading.wipe = true\n\t\t\t\t\t\tthis.loading.all = true\n\t\t\t\t\t\tthis.$store.dispatch('wipeUserDevices', userid)\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tthis.loading.wipe = false\n\t\t\t\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue\n\t\t\t)\n\t\t},\n\n\t\tdeleteUser() {\n\t\t\tconst userid = this.user.id\n\t\t\tOC.dialogs.confirmDestructive(\n\t\t\t\tt('settings', 'Fully delete {userid}\\'s account including all their personal files, app data, etc.', { userid }),\n\t\t\t\tt('settings', 'Account deletion'),\n\t\t\t\t{\n\t\t\t\t\ttype: OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\t\tconfirm: t('settings', 'Delete {userid}\\'s account', { userid }),\n\t\t\t\t\tconfirmClasses: 'error',\n\t\t\t\t\tcancel: t('settings', 'Cancel'),\n\t\t\t\t},\n\t\t\t\t(result) => {\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tthis.loading.delete = true\n\t\t\t\t\t\tthis.loading.all = true\n\t\t\t\t\t\treturn this.$store.dispatch('deleteUser', userid)\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tthis.loading.delete = false\n\t\t\t\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue\n\t\t\t)\n\t\t},\n\n\t\tenableDisableUser() {\n\t\t\tthis.loading.delete = true\n\t\t\tthis.loading.all = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst enabled = !this.user.enabled\n\t\t\treturn this.$store.dispatch('enableDisableUser', {\n\t\t\t\tuserid,\n\t\t\t\tenabled,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading.delete = false\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user displayName\n\t\t *\n\t\t * @param {string} displayName The display name\n\t\t */\n\t\tupdateDisplayName() {\n\t\t\tconst displayName = this.$refs.displayName.value\n\t\t\tthis.loading.displayName = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'displayname',\n\t\t\t\tvalue: displayName,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.displayName = false\n\t\t\t\tthis.$refs.displayName.value = displayName\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user password\n\t\t *\n\t\t * @param {string} password The email adress\n\t\t */\n\t\tupdatePassword() {\n\t\t\tconst password = this.$refs.password.value\n\t\t\tthis.loading.password = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'password',\n\t\t\t\tvalue: password,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.password = false\n\t\t\t\tthis.$refs.password.value = '' // empty & show placeholder\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user mailAddress\n\t\t *\n\t\t * @param {string} mailAddress The email adress\n\t\t */\n\t\tupdateEmail() {\n\t\t\tconst mailAddress = this.$refs.mailAddress.value\n\t\t\tthis.loading.mailAddress = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'email',\n\t\t\t\tvalue: mailAddress,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.mailAddress = false\n\t\t\t\tthis.$refs.mailAddress.value = mailAddress\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Create a new group and add user to it\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t */\n\t\tasync createGroup(gid) {\n\t\t\tthis.loading = { groups: true, subadmins: true }\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addGroup', gid)\n\t\t\t\tconst userid = this.user.id\n\t\t\t\tawait this.$store.dispatch('addUserGroup', { userid, gid })\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = { groups: false, subadmins: false }\n\t\t\t}\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\n\t\t},\n\n\t\t/**\n\t\t * Add user to group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync addUserGroup(group) {\n\t\t\tif (group.canAdd === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.loading.groups = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addUserGroup', { userid, gid })\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.groups = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync removeUserGroup(group) {\n\t\t\tif (group.canRemove === false) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.loading.groups = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('removeUserGroup', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t\tthis.loading.groups = false\n\t\t\t\t// remove user from current list if current list is the removed group\n\t\t\t\tif (this.$route.params.selectedGroup === gid) {\n\t\t\t\t\tthis.$store.commit('deleteUser', userid)\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthis.loading.groups = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add user to group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync addUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addUserSubAdmin', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t\tthis.loading.subadmins = false\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync removeUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('removeUserSubAdmin', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.subadmins = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Dispatch quota set request\n\t\t *\n\t\t * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t * @return {string}\n\t\t */\n\t\tasync setUserQuota(quota = 'none') {\n\t\t\tthis.loading.quota = true\n\t\t\t// ensure we only send the preset id\n\t\t\tquota = quota.id ? quota.id : quota\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'quota',\n\t\t\t\t\tvalue: quota,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.quota = false\n\t\t\t}\n\t\t\treturn quota\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @return {Promise|boolean}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)))\n\t\t\t}\n\t\t\t// if no valid do not change\n\t\t\treturn false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch language set request\n\t\t *\n\t\t * @param {object} lang language object {code:'en', name:'English'}\n\t\t * @return {object}\n\t\t */\n\t\tasync setUserLanguage(lang) {\n\t\t\tthis.loading.languages = true\n\t\t\t// ensure we only send the preset id\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'language',\n\t\t\t\t\tvalue: lang.code,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.languages = false\n\t\t\t}\n\t\t\treturn lang\n\t\t},\n\n\t\t/**\n\t\t * Dispatch new welcome mail request\n\t\t */\n\t\tsendWelcomeMail() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch('sendWelcomeMail', this.user.id)\n\t\t\t\t.then(success => {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\t// Show feedback to indicate the success\n\t\t\t\t\t\tthis.feedbackMessage = t('setting', 'Welcome mail sent!')\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.feedbackMessage = ''\n\t\t\t\t\t\t}, 2000)\n\t\t\t\t\t}\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t})\n\t\t},\n\n\t},\n}\n</script>\n<style scoped lang=\"scss\">\n\t// Force menu to be above other rows\n\t.row--menu-opened {\n\t\tz-index: 1 !important;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=4c932ffd&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=4c932ffd&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=4c932ffd&scoped=true&\"\nimport script from \"./UserRow.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRow.vue?vue&type=style&index=0&id=4c932ffd&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4c932ffd\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (Object.keys(_vm.user).length ===1)?_c('div',{staticClass:\"row\",attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x',\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"obfuscated\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings','You do not have permissions to see the details of this user'))+\"\\n\\t\")])]):(!_vm.editing)?_c('UserRowSimple',{class:{'row--menu-opened': _vm.openedMenu},attrs:{\"editing\":_vm.editing,\"feedback-message\":_vm.feedbackMessage,\"groups\":_vm.groups,\"languages\":_vm.languages,\"loading\":_vm.loading,\"opened-menu\":_vm.openedMenu,\"settings\":_vm.settings,\"show-config\":_vm.showConfig,\"sub-admins-groups\":_vm.subAdminsGroups,\"user-actions\":_vm.userActions,\"user\":_vm.user},on:{\"update:editing\":function($event){_vm.editing=$event},\"update:openedMenu\":function($event){_vm.openedMenu=$event},\"update:opened-menu\":function($event){_vm.openedMenu=$event}}}):_c('div',{staticClass:\"row row--editable\",class:{\n\t\t'disabled': _vm.loading.delete || _vm.loading.disable,\n\t\t'row--menu-opened': _vm.openedMenu\n\t},attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x',\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),(_vm.user.backendCapabilities.setDisplayName)?_c('div',{staticClass:\"displayName\"},[_c('form',{staticClass:\"displayName\",class:{'icon-loading-small': _vm.loading.displayName},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateDisplayName.apply(null, arguments)}}},[_c('input',{ref:\"displayName\",attrs:{\"id\":'displayName'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.displayName||_vm.loading.all,\"autocapitalize\":\"off\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"spellcheck\":\"false\",\"type\":\"text\"},domProps:{\"value\":_vm.user.displayname}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})])]):_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.displayname.length > 20 ? _vm.user.displayname : ''),expression:\"user.displayname.length > 20 ? user.displayname : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")])])]),_vm._v(\" \"),(_vm.settings.canChangePassword && _vm.user.backendCapabilities.setPassword)?_c('form',{staticClass:\"password\",class:{'icon-loading-small': _vm.loading.password},on:{\"submit\":function($event){$event.preventDefault();return _vm.updatePassword.apply(null, arguments)}}},[_c('input',{ref:\"password\",attrs:{\"id\":'password'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.password || _vm.loading.all,\"minlength\":_vm.minPasswordLength,\"placeholder\":_vm.t('settings', 'Add new password'),\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"required\":\"\",\"spellcheck\":\"false\",\"type\":\"password\",\"value\":\"\"}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})]):_c('div'),_vm._v(\" \"),_c('form',{staticClass:\"mailAddress\",class:{'icon-loading-small': _vm.loading.mailAddress},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateEmail.apply(null, arguments)}}},[_c('input',{ref:\"mailAddress\",attrs:{\"id\":'mailAddress'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.mailAddress||_vm.loading.all,\"placeholder\":_vm.t('settings', 'Add new email address'),\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"spellcheck\":\"false\",\"type\":\"email\"},domProps:{\"value\":_vm.user.email}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",class:{'icon-loading-small': _vm.loading.groups}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.groups||_vm.loading.all,\"limit\":2,\"multiple\":true,\"options\":_vm.availableGroups,\"placeholder\":_vm.t('settings', 'Add user to group'),\"tag-width\":60,\"taggable\":_vm.settings.isAdmin,\"value\":_vm.userGroups,\"label\":\"name\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"remove\":_vm.removeUserGroup,\"select\":_vm.addUserGroup,\"tag\":_vm.createGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",class:{'icon-loading-small': _vm.loading.subadmins}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.subadmins||_vm.loading.all,\"limit\":2,\"multiple\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"tag-width\":60,\"value\":_vm.userSubAdminsGroups,\"label\":\"name\",\"track-by\":\"id\"},on:{\"remove\":_vm.removeUserSubAdmin,\"select\":_vm.addUserSubAdmin}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.usedSpace),expression:\"usedSpace\",modifiers:{\"auto\":true}}],staticClass:\"quota\",class:{'icon-loading-small': _vm.loading.quota}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"disabled\":_vm.loading.quota||_vm.loading.all,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"taggable\":true,\"value\":_vm.userQuota,\"label\":\"label\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"input\":_vm.setUserQuota,\"tag\":_vm.validateQuota}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",class:{'icon-loading-small': _vm.loading.languages}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"disabled\":_vm.loading.languages||_vm.loading.all,\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'No language set'),\"value\":_vm.userLanguage,\"group-label\":\"label\",\"group-values\":\"languages\",\"label\":\"name\",\"track-by\":\"code\"},on:{\"input\":_vm.setUserLanguage}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend)?_c('div',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div'):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(!_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-checkmark\"},on:{\"click\":function($event){_vm.editing = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"userPopoverMenuWrapper\"},[_c('button',{staticClass:\"icon-more\",on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMenu.apply(null, arguments)}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu }},[_c('PopoverMenu',{attrs:{\"menu\":_vm.userActions}})],1)])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"feedback\",style:({opacity: _vm.feedbackMessage !== '' ? 1 : 0})},[_c('div',{staticClass:\"icon-checkmark\"}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.feedbackMessage)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div id=\"app-content\" class=\"user-list-grid\" @scroll.passive=\"onScroll\">\n\t\t<Modal v-if=\"showConfig.showNewUserForm\" size=\"small\" @close=\"closeModal\">\n\t\t\t<form id=\"new-user\"\n\t\t\t\t:disabled=\"loading.all\"\n\t\t\t\tclass=\"modal__content\"\n\t\t\t\t@submit.prevent=\"createUser\">\n\t\t\t\t<h2>{{ t('settings','New user') }}</h2>\n\t\t\t\t<input id=\"newusername\"\n\t\t\t\t\tref=\"newusername\"\n\t\t\t\t\tv-model=\"newUser.id\"\n\t\t\t\t\t:disabled=\"settings.newUserGenerateUserID\"\n\t\t\t\t\t:placeholder=\"settings.newUserGenerateUserID\n\t\t\t\t\t\t? t('settings', 'Will be autogenerated')\n\t\t\t\t\t\t: t('settings', 'Username')\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"username\"\n\t\t\t\t\tpattern=\"[a-zA-Z0-9 _\\.@\\-']+\"\n\t\t\t\t\trequired\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input id=\"newdisplayname\"\n\t\t\t\t\tv-model=\"newUser.displayName\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Display name')\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"displayname\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input id=\"newuserpassword\"\n\t\t\t\t\tref=\"newuserpassword\"\n\t\t\t\t\tv-model=\"newUser.password\"\n\t\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Password')\"\n\t\t\t\t\t:required=\"newUser.mailAddress===''\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\ttype=\"password\">\n\t\t\t\t<input id=\"newemail\"\n\t\t\t\t\tv-model=\"newUser.mailAddress\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Email')\"\n\t\t\t\t\t:required=\"newUser.password==='' || settings.newUserRequireEmail\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"email\"\n\t\t\t\t\ttype=\"email\">\n\t\t\t\t<div class=\"groups modal__item\">\n\t\t\t\t\t<!-- hidden input trick for vanilla html5 form validation -->\n\t\t\t\t\t<input v-if=\"!settings.isAdmin\"\n\t\t\t\t\t\tid=\"newgroups\"\n\t\t\t\t\t\t:class=\"{'icon-loading-small': loading.groups}\"\n\t\t\t\t\t\t:required=\"!settings.isAdmin\"\n\t\t\t\t\t\t:value=\"newUser.groups\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\ttype=\"text\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.groups\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:options=\"canAddGroups\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Add user to group')\"\n\t\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t\t\t<!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\tSubadmins can't create users outside their groups\n\t\t\t\t\t\t\tTherefore, empty select is forbidden -->\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\t\tclass=\"subadmins modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.subAdminsGroups\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttrack-by=\"id\">\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"quota modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.quota\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@tag=\"validateQuota\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.language\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:options=\"languages\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Default language')\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tgroup-label=\"label\"\n\t\t\t\t\t\tgroup-values=\"languages\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttrack-by=\"code\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showStoragePath\" class=\"storageLocation\" />\n\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\" />\n\t\t\t\t<div v-if=\"showConfig.showLastLogin\" class=\"lastLogin\" />\n\t\t\t\t<div class=\"user-actions\">\n\t\t\t\t\t<Button id=\"newsubmit\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\tnative-type=\"submit\"\n\t\t\t\t\t\tvalue=\"\">\n\t\t\t\t\t\t{{ t('settings', 'Add a new user') }}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Modal>\n\t\t<div id=\"grid-header\"\n\t\t\t:class=\"{'sticky': scrolled && !showConfig.showNewUserForm}\"\n\t\t\tclass=\"row\">\n\t\t\t<div id=\"headerAvatar\" class=\"avatar\" />\n\t\t\t<div id=\"headerName\" class=\"name\">\n\t\t\t\t{{ t('settings', 'Username') }}\n\n\t\t\t\t<div class=\"subtitle\">\n\t\t\t\t\t{{ t('settings', 'Display name') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"headerPassword\" class=\"password\">\n\t\t\t\t{{ t('settings', 'Password') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerAddress\" class=\"mailAddress\">\n\t\t\t\t{{ t('settings', 'Email') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerGroups\" class=\"groups\">\n\t\t\t\t{{ t('settings', 'Groups') }}\n\t\t\t</div>\n\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\tid=\"headerSubAdmins\"\n\t\t\t\tclass=\"subadmins\">\n\t\t\t\t{{ t('settings', 'Group admin for') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerQuota\" class=\"quota\">\n\t\t\t\t{{ t('settings', 'Quota') }}\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t\tid=\"headerLanguages\"\n\t\t\t\tclass=\"languages\">\n\t\t\t\t{{ t('settings', 'Language') }}\n\t\t\t</div>\n\n\t\t\t<div v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\"\n\t\t\t\tclass=\"headerUserBackend userBackend\">\n\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t\t{{ t('settings', 'User backend') }}\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showStoragePath\"\n\t\t\t\t\tclass=\"subtitle storageLocation\">\n\t\t\t\t\t{{ t('settings', 'Storage location') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLastLogin\"\n\t\t\t\tclass=\"headerLastLogin lastLogin\">\n\t\t\t\t{{ t('settings', 'Last login') }}\n\t\t\t</div>\n\n\t\t\t<div class=\"userActions\" />\n\t\t</div>\n\n\t\t<user-row v-for=\"user in filteredUsers\"\n\t\t\t:key=\"user.id\"\n\t\t\t:external-actions=\"externalActions\"\n\t\t\t:groups=\"groups\"\n\t\t\t:languages=\"languages\"\n\t\t\t:quota-options=\"quotaOptions\"\n\t\t\t:settings=\"settings\"\n\t\t\t:show-config=\"showConfig\"\n\t\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t\t:user=\"user\" />\n\t\t<InfiniteLoading ref=\"infiniteLoading\" @infinite=\"infiniteHandler\">\n\t\t\t<div slot=\"spinner\">\n\t\t\t\t<div class=\"users-icon-loading icon-loading\" />\n\t\t\t</div>\n\t\t\t<div slot=\"no-more\">\n\t\t\t\t<div class=\"users-list-end\" />\n\t\t\t</div>\n\t\t\t<div slot=\"no-results\">\n\t\t\t\t<div id=\"emptycontent\">\n\t\t\t\t\t<div class=\"icon-contacts-dark\" />\n\t\t\t\t\t<h2>{{ t('settings', 'No users in here') }}</h2>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</InfiniteLoading>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport InfiniteLoading from 'vue-infinite-loading'\nimport Vue from 'vue'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\nimport Button from '@nextcloud/vue/dist/Components/Button'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\n\nimport userRow from './UserList/UserRow'\n\nconst unlimitedQuota = {\n\tid: 'none',\n\tlabel: t('settings', 'Unlimited'),\n}\nconst defaultQuota = {\n\tid: 'default',\n\tlabel: t('settings', 'Default quota'),\n}\nconst newUser = {\n\tid: '',\n\tdisplayName: '',\n\tpassword: '',\n\tmailAddress: '',\n\tgroups: [],\n\tsubAdminsGroups: [],\n\tquota: defaultQuota,\n\tlanguage: {\n\t\tcode: 'en',\n\t\tname: t('settings', 'Default language'),\n\t},\n}\n\nexport default {\n\tname: 'UserList',\n\tcomponents: {\n\t\tModal,\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t\tButton,\n\t},\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tunlimitedQuota,\n\t\t\tdefaultQuota,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t},\n\t\t\tscrolled: false,\n\t\t\tsearchQuery: '',\n\t\t\tnewUser: Object.assign({}, newUser),\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t\tselectedGroupDecoded() {\n\t\t\treturn decodeURIComponent(this.selectedGroup)\n\t\t},\n\t\tfilteredUsers() {\n\t\t\tif (this.selectedGroup === 'disabled') {\n\t\t\t\treturn this.users.filter(user => user.enabled === false)\n\t\t\t}\n\t\t\tif (!this.settings.isAdmin) {\n\t\t\t\t// we don't want subadmins to edit themselves\n\t\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t\t}\n\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t},\n\t\tgroups() {\n\t\t\t// data provided php side + remove the disabled group\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t\tcanAddGroups() {\n\t\t\t// disabled if no permission to add new users to group\n\t\t\treturn this.groups.map(group => {\n\t\t\t\t// clone object because we don't want\n\t\t\t\t// to edit the original groups\n\t\t\t\tgroup = Object.assign({}, group)\n\t\t\t\tgroup.$isDisabled = group.canAdd === false\n\t\t\t\treturn group\n\t\t\t})\n\t\t},\n\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\n\t\t\t\tid: cur,\n\t\t\t\tlabel: cur,\n\t\t\t}), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(this.unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(this.defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\t\tusersCount() {\n\t\t\treturn this.users.length\n\t\t},\n\n\t\t/* LANGUAGES */\n\t\tlanguages() {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('settings', 'Common languages'),\n\t\t\t\t\tlanguages: this.settings.languages.commonLanguages,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('settings', 'Other languages'),\n\t\t\t\t\tlanguages: this.settings.languages.otherLanguages,\n\t\t\t\t},\n\t\t\t]\n\t\t},\n\t},\n\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup(val, old) {\n\t\t\t// if selected is the disabled group but it's empty\n\t\t\tthis.redirectIfDisabled()\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\t// make sure the infiniteLoading state is changed if we manually\n\t\t// add/remove data from the store\n\t\tusersCount(val, old) {\n\t\t\t// deleting the last user, reset the list\n\t\t\tif (val === 0 && old === 1) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t// adding the first user, warn the infiniteLoader that\n\t\t\t\t// the list is not empty anymore (we don't fetch the newly\n\t\t\t\t// added user as we already have all the info we need)\n\t\t\t} else if (val === 1 && old === 0) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.loaded()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (!this.settings.canChangePassword) {\n\t\t\tOC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'))\n\t\t}\n\n\t\t/**\n\t\t * Reset and init new user form\n\t\t */\n\t\tthis.resetForm()\n\n\t\t/**\n\t\t * Register search\n\t\t */\n\t\tsubscribe('nextcloud:unified-search.search', this.search)\n\t\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\n\t\t/**\n\t\t * If disabled group but empty, redirect\n\t\t */\n\t\tthis.redirectIfDisabled()\n\t},\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search.search', this.search)\n\t\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tonScroll(event) {\n\t\t\tthis.scrolled = event.target.scrollTo > 0\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @return {object}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\tquota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))\n\t\t\t\tthis.newUser.quota = { id: quota, label: quota }\n\t\t\t\treturn this.newUser.quota\n\t\t\t}\n\t\t\t// Default is unlimited\n\t\t\tthis.newUser.quota = this.quotaOptions[0]\n\t\t\treturn this.quotaOptions[0]\n\t\t},\n\n\t\tinfiniteHandler($state) {\n\t\t\tthis.$store.dispatch('getUsers', {\n\t\t\t\toffset: this.usersOffset,\n\t\t\t\tlimit: this.usersLimit,\n\t\t\t\tgroup: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n\t\t\t\tsearch: this.searchQuery,\n\t\t\t})\n\t\t\t\t.then((usersCount) => {\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\t$state.loaded()\n\t\t\t\t\t}\n\t\t\t\t\tif (usersCount < this.usersLimit) {\n\t\t\t\t\t\t$state.complete()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/* SEARCH */\n\t\tsearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.search({ query: '' })\n\t\t},\n\n\t\tresetForm() {\n\t\t\t// revert form to original state\n\t\t\tthis.newUser = Object.assign({}, newUser)\n\n\t\t\t/**\n\t\t\t * Init default language from server data. The use of this.settings\n\t\t\t * requires a computed variable, which break the v-model binding of the form,\n\t\t\t * this is a much easier solution than getter and setter on a computed var\n\t\t\t */\n\t\t\tif (this.settings.defaultLanguage) {\n\t\t\t\tVue.set(this.newUser.language, 'code', this.settings.defaultLanguage)\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * In case the user directly loaded the user list within a group\n\t\t\t * the watch won't be triggered. We need to initialize it.\n\t\t\t */\n\t\t\tthis.setNewUserDefaultGroup(this.selectedGroup)\n\n\t\t\tthis.loading.all = false\n\t\t},\n\t\tcreateUser() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch('addUser', {\n\t\t\t\tuserid: this.newUser.id,\n\t\t\t\tpassword: this.newUser.password,\n\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.resetForm()\n\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\tthis.closeModal()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\t\tthis.$refs.newuserpassword.focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tsetNewUserDefaultGroup(value) {\n\t\t\tif (value && value.length > 0) {\n\t\t\t\t// setting new user default group to the current selected one\n\t\t\t\tconst currentGroup = this.groups.find(group => group.id === value)\n\t\t\t\tif (currentGroup) {\n\t\t\t\t\tthis.newUser.groups = [currentGroup]\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fallback, empty selected group\n\t\t\tthis.newUser.groups = []\n\t\t},\n\n\t\t/**\n\t\t * Create a new group\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t * @return {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading.groups = true\n\t\t\tthis.$store.dispatch('addGroup', gid)\n\t\t\t\t.then((group) => {\n\t\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\n\t\t},\n\n\t\t/**\n\t\t * If the selected group is the disabled group but the count is 0\n\t\t * redirect to the all users page.\n\t\t * we only check for 0 because we don't have the count on ldap\n\t\t * and we therefore set the usercount to -1 in this specific case\n\t\t */\n\t\tredirectIfDisabled() {\n\t\t\tconst allGroups = this.$store.getters.getGroups\n\t\t\tif (this.selectedGroup === 'disabled'\n\t\t\t\t\t\t&& allGroups.findIndex(group => group.id === 'disabled' && group.usercount === 0) > -1) {\n\t\t\t\t// disabled group is empty, redirection to all users\n\t\t\t\tthis.$router.push({ name: 'users' })\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t}\n\t\t},\n\t\tcloseModal() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.modal-wrapper {\n\t\tmargin: 2vh 0;\n\t\talign-items: flex-start;\n\t}\n\t.modal__content {\n\t\tdisplay: flex;\n\t\tpadding: 20px;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\ttext-align: center;\n\t}\n\t.modal__item {\n\t\tmargin-bottom: 16px;\n\t\twidth: 100%;\n\t}\n\t.modal__item:not(:focus):not(:active) {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\t.modal__item::v-deep .multiselect {\n\t\twidth: 100%;\n\t}\n\t.user-actions {\n\t\tmargin-top: 20px;\n\t}\n\t.modal__content::v-deep .multiselect__single {\n\t\ttext-align: left;\n\t\tbox-sizing: border-box;\n\t}\n\t.modal__content::v-deep .multiselect__content-wrapper {\n\t\tbox-sizing: border-box;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n\n\t/* fake input for groups validation */\n\tinput#newgroups {\n\t\tposition: absolute;\n\t\topacity: 0;\n\t\t/* The \"hidden\" input is behind the Multiselect, so in general it does\n\t\t * not receives clicks. However, with Firefox, after the validation\n\t\t * fails, it will receive the first click done on it, so its width needs\n\t\t * to be set to 0 to prevent that (\"pointer-events: none\" does not\n\t\t * prevent it). */\n\t\twidth: 0;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=672d131f&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=672d131f&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=672d131f&scoped=true&\"\nimport script from \"./UserList.vue?vue&type=script&lang=js&\"\nexport * from \"./UserList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserList.vue?vue&type=style&index=0&id=672d131f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"672d131f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-list-grid\",attrs:{\"id\":\"app-content\"},on:{\"&scroll\":function($event){return _vm.onScroll.apply(null, arguments)}}},[(_vm.showConfig.showNewUserForm)?_c('Modal',{attrs:{\"size\":\"small\"},on:{\"close\":_vm.closeModal}},[_c('form',{staticClass:\"modal__content\",attrs:{\"id\":\"new-user\",\"disabled\":_vm.loading.all},on:{\"submit\":function($event){$event.preventDefault();return _vm.createUser.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings','New user')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.id),expression:\"newUser.id\"}],ref:\"newusername\",staticClass:\"modal__item\",attrs:{\"id\":\"newusername\",\"disabled\":_vm.settings.newUserGenerateUserID,\"placeholder\":_vm.settings.newUserGenerateUserID\n\t\t\t\t\t? _vm.t('settings', 'Will be autogenerated')\n\t\t\t\t\t: _vm.t('settings', 'Username'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"username\",\"pattern\":\"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\"required\":\"\",\"type\":\"text\"},domProps:{\"value\":(_vm.newUser.id)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"id\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.displayName),expression:\"newUser.displayName\"}],staticClass:\"modal__item\",attrs:{\"id\":\"newdisplayname\",\"placeholder\":_vm.t('settings', 'Display name'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"displayname\",\"type\":\"text\"},domProps:{\"value\":(_vm.newUser.displayName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"displayName\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.password),expression:\"newUser.password\"}],ref:\"newuserpassword\",staticClass:\"modal__item\",attrs:{\"id\":\"newuserpassword\",\"minlength\":_vm.minPasswordLength,\"placeholder\":_vm.t('settings', 'Password'),\"required\":_vm.newUser.mailAddress==='',\"autocapitalize\":\"none\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"name\":\"password\",\"type\":\"password\"},domProps:{\"value\":(_vm.newUser.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"password\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.mailAddress),expression:\"newUser.mailAddress\"}],staticClass:\"modal__item\",attrs:{\"id\":\"newemail\",\"placeholder\":_vm.t('settings', 'Email'),\"required\":_vm.newUser.password==='' || _vm.settings.newUserRequireEmail,\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"email\",\"type\":\"email\"},domProps:{\"value\":(_vm.newUser.mailAddress)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"mailAddress\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"groups modal__item\"},[(!_vm.settings.isAdmin)?_c('input',{class:{'icon-loading-small': _vm.loading.groups},attrs:{\"id\":\"newgroups\",\"required\":!_vm.settings.isAdmin,\"tabindex\":\"-1\",\"type\":\"text\"},domProps:{\"value\":_vm.newUser.groups}}):_vm._e(),_vm._v(\" \"),_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.groups||_vm.loading.all,\"multiple\":true,\"options\":_vm.canAddGroups,\"placeholder\":_vm.t('settings', 'Add user to group'),\"tag-width\":60,\"taggable\":true,\"label\":\"name\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"tag\":_vm.createGroup},model:{value:(_vm.newUser.groups),callback:function ($$v) {_vm.$set(_vm.newUser, \"groups\", $$v)},expression:\"newUser.groups\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"multiple\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"tag-width\":60,\"label\":\"name\",\"track-by\":\"id\"},model:{value:(_vm.newUser.subAdminsGroups),callback:function ($$v) {_vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)},expression:\"newUser.subAdminsGroups\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"taggable\":true,\"label\":\"label\",\"track-by\":\"id\"},on:{\"tag\":_vm.validateQuota},model:{value:(_vm.newUser.quota),callback:function ($$v) {_vm.$set(_vm.newUser, \"quota\", $$v)},expression:\"newUser.quota\"}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'Default language'),\"group-label\":\"label\",\"group-values\":\"languages\",\"label\":\"name\",\"track-by\":\"code\"},model:{value:(_vm.newUser.language),callback:function ($$v) {_vm.$set(_vm.newUser, \"language\", $$v)},expression:\"newUser.language\"}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"lastLogin\"}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"user-actions\"},[_c('Button',{attrs:{\"id\":\"newsubmit\",\"type\":\"primary\",\"native-type\":\"submit\",\"value\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Add a new user'))+\"\\n\\t\\t\\t\\t\")])],1)])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"row\",class:{'sticky': _vm.scrolled && !_vm.showConfig.showNewUserForm},attrs:{\"id\":\"grid-header\"}},[_c('div',{staticClass:\"avatar\",attrs:{\"id\":\"headerAvatar\"}}),_vm._v(\" \"),_c('div',{staticClass:\"name\",attrs:{\"id\":\"headerName\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Username'))+\"\\n\\n\\t\\t\\t\"),_c('div',{staticClass:\"subtitle\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Display name'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"password\",attrs:{\"id\":\"headerPassword\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Password'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\",attrs:{\"id\":\"headerAddress\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Email'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",attrs:{\"id\":\"headerGroups\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Groups'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",attrs:{\"id\":\"headerSubAdmins\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Group admin for'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota\",attrs:{\"id\":\"headerQuota\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Quota'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",attrs:{\"id\":\"headerLanguages\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Language'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('div',{staticClass:\"headerUserBackend userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'User backend'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"subtitle storageLocation\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Storage location'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"headerLastLogin lastLogin\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Last login'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"})]),_vm._v(\" \"),_vm._l((_vm.filteredUsers),function(user){return _c('user-row',{key:user.id,attrs:{\"external-actions\":_vm.externalActions,\"groups\":_vm.groups,\"languages\":_vm.languages,\"quota-options\":_vm.quotaOptions,\"settings\":_vm.settings,\"show-config\":_vm.showConfig,\"sub-admins-groups\":_vm.subAdminsGroups,\"user\":user}})}),_vm._v(\" \"),_c('InfiniteLoading',{ref:\"infiniteLoading\",on:{\"infinite\":_vm.infiniteHandler}},[_c('div',{attrs:{\"slot\":\"spinner\"},slot:\"spinner\"},[_c('div',{staticClass:\"users-icon-loading icon-loading\"})]),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_c('div',{staticClass:\"users-list-end\"})]),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"no-results\"},slot:\"no-results\"},[_c('div',{attrs:{\"id\":\"emptycontent\"}},[_c('div',{staticClass:\"icon-contacts-dark\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No users in here')))])])])])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Content app-name=\"settings\" :navigation-class=\"{ 'icon-loading': loadingAddGroup }\">\n\t\t<AppNavigation>\n\t\t\t<AppNavigationNew button-id=\"new-user-button\"\n\t\t\t\t:text=\"t('settings','New user')\"\n\t\t\t\tbutton-class=\"icon-add\"\n\t\t\t\t@click=\"showNewUserMenu\"\n\t\t\t\t@keyup.enter=\"showNewUserMenu\"\n\t\t\t\t@keyup.space=\"showNewUserMenu\" />\n\t\t\t<template #list>\n\t\t\t\t<AppNavigationItem id=\"addgroup\"\n\t\t\t\t\tref=\"addGroup\"\n\t\t\t\t\t:edit-placeholder=\"t('settings', 'Enter group name')\"\n\t\t\t\t\t:editable=\"true\"\n\t\t\t\t\t:loading=\"loadingAddGroup\"\n\t\t\t\t\t:title=\"t('settings', 'Add group')\"\n\t\t\t\t\ticon=\"icon-add\"\n\t\t\t\t\t@click=\"showAddGroupForm\"\n\t\t\t\t\t@update:title=\"createGroup\" />\n\t\t\t\t<AppNavigationItem id=\"everyone\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Active users')\"\n\t\t\t\t\t:to=\"{ name: 'users' }\"\n\t\t\t\t\ticon=\"icon-contacts-dark\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"userCount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ userCount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\t\t\t\t<AppNavigationItem v-if=\"settings.isAdmin\"\n\t\t\t\t\tid=\"admin\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Admins')\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'admin' } }\"\n\t\t\t\t\ticon=\"icon-user-admin\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"adminGroupMenu.count\" slot=\"counter\">\n\t\t\t\t\t\t{{ adminGroupMenu.count }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\n\t\t\t\t<!-- Hide the disabled if none, if we don't have the data (-1) show it -->\n\t\t\t\t<AppNavigationItem v-if=\"disabledGroupMenu.usercount > 0 || disabledGroupMenu.usercount === -1\"\n\t\t\t\t\tid=\"disabled\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Disabled users')\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'disabled' } }\"\n\t\t\t\t\ticon=\"icon-disabled-users\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"disabledGroupMenu.usercount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ disabledGroupMenu.usercount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\n\t\t\t\t<AppNavigationCaption v-if=\"groupList.length > 0\" :title=\"t('settings', 'Groups')\" />\n\t\t\t\t<GroupListItem v-for=\"group in groupList\"\n\t\t\t\t\t:id=\"group.id\"\n\t\t\t\t\t:key=\"group.id\"\n\t\t\t\t\t:title=\"group.title\"\n\t\t\t\t\t:count=\"group.count\" />\n\t\t\t</template>\n\t\t\t<template #footer>\n\t\t\t\t<AppNavigationSettings>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>{{ t('settings', 'Default quota:') }}</p>\n\t\t\t\t\t\t<Multiselect :value=\"defaultQuota\"\n\t\t\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t\t\t:placeholder=\"t('settings', 'Select default quota')\"\n\t\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\t\t@tag=\"validateQuota\"\n\t\t\t\t\t\t\t@input=\"setDefaultQuota\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showLanguages\"\n\t\t\t\t\t\t\tv-model=\"showLanguages\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showLanguages\">{{ t('settings', 'Show Languages') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showLastLogin\"\n\t\t\t\t\t\t\tv-model=\"showLastLogin\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showLastLogin\">{{ t('settings', 'Show last login') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showUserBackend\"\n\t\t\t\t\t\t\tv-model=\"showUserBackend\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showUserBackend\">{{ t('settings', 'Show user backend') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showStoragePath\"\n\t\t\t\t\t\t\tv-model=\"showStoragePath\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showStoragePath\">{{ t('settings', 'Show storage path') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"sendWelcomeMail\"\n\t\t\t\t\t\t\tv-model=\"sendWelcomeMail\"\n\t\t\t\t\t\t\t:disabled=\"loadingSendMail\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"sendWelcomeMail\">{{ t('settings', 'Send email to new user') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t</AppNavigationSettings>\n\t\t\t</template>\n\t\t</AppNavigation>\n\t\t<AppContent>\n\t\t\t<UserList :users=\"users\"\n\t\t\t\t:show-config=\"showConfig\"\n\t\t\t\t:selected-group=\"selectedGroupDecoded\"\n\t\t\t\t:external-actions=\"externalActions\" />\n\t\t</AppContent>\n\t</Content>\n</template>\n\n<script>\nimport AppContent from '@nextcloud/vue/dist/Components/AppContent'\nimport AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation'\nimport AppNavigationCaption from '@nextcloud/vue/dist/Components/AppNavigationCaption'\nimport AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\nimport AppNavigationNew from '@nextcloud/vue/dist/Components/AppNavigationNew'\nimport AppNavigationSettings from '@nextcloud/vue/dist/Components/AppNavigationSettings'\nimport axios from '@nextcloud/axios'\nimport Content from '@nextcloud/vue/dist/Components/Content'\nimport { generateUrl } from '@nextcloud/router'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\n\nimport GroupListItem from '../components/GroupListItem'\nimport UserList from '../components/UserList'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Users',\n\tcomponents: {\n\t\tAppContent,\n\t\tAppNavigation,\n\t\tAppNavigationCaption,\n\t\tAppNavigationCounter,\n\t\tAppNavigationItem,\n\t\tAppNavigationNew,\n\t\tAppNavigationSettings,\n\t\tContent,\n\t\tGroupListItem,\n\t\tMultiselect,\n\t\tUserList,\n\t},\n\tprops: {\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// default quota is set to unlimited\n\t\t\tunlimitedQuota: { id: 'none', label: t('settings', 'Unlimited') },\n\t\t\t// temporary value used for multiselect change\n\t\t\tselectedQuota: false,\n\t\t\texternalActions: [],\n\t\t\tloadingAddGroup: false,\n\t\t\tloadingSendMail: false,\n\t\t\tshowConfig: {\n\t\t\t\tshowStoragePath: false,\n\t\t\t\tshowUserBackend: false,\n\t\t\t\tshowLastLogin: false,\n\t\t\t\tshowNewUserForm: false,\n\t\t\t\tshowLanguages: false,\n\t\t\t},\n\t\t}\n\t},\n\tcomputed: {\n\t\tselectedGroupDecoded() {\n\t\t\treturn this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null\n\t\t},\n\t\tusers() {\n\t\t\treturn this.$store.getters.getUsers\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\n\t\t// Local settings\n\t\tshowLanguages: {\n\t\t\tget() { return this.getLocalstorage('showLanguages') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLanguages', status)\n\t\t\t},\n\t\t},\n\t\tshowLastLogin: {\n\t\t\tget() { return this.getLocalstorage('showLastLogin') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLastLogin', status)\n\t\t\t},\n\t\t},\n\t\tshowUserBackend: {\n\t\t\tget() { return this.getLocalstorage('showUserBackend') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showUserBackend', status)\n\t\t\t},\n\t\t},\n\t\tshowStoragePath: {\n\t\t\tget() { return this.getLocalstorage('showStoragePath') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showStoragePath', status)\n\t\t\t},\n\t\t},\n\n\t\tuserCount() {\n\t\t\treturn this.$store.getters.getUserCount\n\t\t},\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\t// default quota\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({ id: cur, label: cur }), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(this.unlimitedQuota)\n\t\t\t}\n\t\t\treturn quotaPreset\n\t\t},\n\t\t// mapping saved values to objects\n\t\tdefaultQuota: {\n\t\t\tget() {\n\t\t\t\tif (this.selectedQuota !== false) {\n\t\t\t\t\treturn this.selectedQuota\n\t\t\t\t}\n\t\t\t\tif (this.settings.defaultQuota !== this.unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {\n\t\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\t\treturn { id: this.settings.defaultQuota, label: this.settings.defaultQuota }\n\t\t\t\t}\n\t\t\t\treturn this.unlimitedQuota // unlimited\n\t\t\t},\n\t\t\tset(quota) {\n\t\t\t\tthis.selectedQuota = quota\n\t\t\t},\n\n\t\t},\n\n\t\tsendWelcomeMail: {\n\t\t\tget() {\n\t\t\t\treturn this.settings.newUserSendEmail\n\t\t\t},\n\t\t\tasync set(value) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.loadingSendMail = true\n\t\t\t\t\tthis.$store.commit('setServerData', {\n\t\t\t\t\t\t...this.settings,\n\t\t\t\t\t\tnewUserSendEmail: value,\n\t\t\t\t\t})\n\t\t\t\t\tawait axios.post(generateUrl('/settings/users/preferences/newUser.sendEmail'), { value: value ? 'yes' : 'no' })\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error('could not update newUser.sendEmail preference: ' + e.message, e)\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingSendMail = false\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\tgroupList() {\n\t\t\tconst groups = Array.isArray(this.groups) ? this.groups : []\n\n\t\t\treturn groups\n\t\t\t\t// filter out disabled and admin\n\t\t\t\t.filter(group => group.id !== 'disabled' && group.id !== 'admin')\n\t\t\t\t.map(group => this.formatGroupMenu(group))\n\t\t},\n\n\t\tadminGroupMenu() {\n\t\t\treturn this.formatGroupMenu(this.groups.find(group => group.id === 'admin'))\n\t\t},\n\t\tdisabledGroupMenu() {\n\t\t\treturn this.formatGroupMenu(this.groups.find(group => group.id === 'disabled'))\n\t\t},\n\t},\n\tbeforeMount() {\n\t\tthis.$store.commit('initGroups', {\n\t\t\tgroups: this.$store.getters.getServerData.groups,\n\t\t\torderBy: this.$store.getters.getServerData.sortGroups,\n\t\t\tuserCount: this.$store.getters.getServerData.userCount,\n\t\t})\n\t\tthis.$store.dispatch('getPasswordPolicyMinLength')\n\t},\n\tcreated() {\n\t\t// init the OCA.Settings.UserList object\n\t\t// and add the registerAction method\n\t\tObject.assign(OCA, {\n\t\t\tSettings: {\n\t\t\t\tUserList: {\n\t\t\t\t\tregisterAction: this.registerAction,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t},\n\tmethods: {\n\t\tshowNewUserMenu() {\n\t\t\tthis.showConfig.showNewUserForm = true\n\t\t\tif (this.showConfig.showNewUserForm) {\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\twindow.newusername.focus()\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tgetLocalstorage(key) {\n\t\t\t// force initialization\n\t\t\tconst localConfig = this.$localStorage.get(key)\n\t\t\t// if localstorage is null, fallback to original values\n\t\t\tthis.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key]\n\t\t\treturn this.showConfig[key]\n\t\t},\n\t\tsetLocalStorage(key, status) {\n\t\t\tthis.showConfig[key] = status\n\t\t\tthis.$localStorage.set(key, status)\n\t\t\treturn status\n\t\t},\n\n\t\t/**\n\t\t * Dispatch default quota set request\n\t\t *\n\t\t * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t */\n\t\tsetDefaultQuota(quota = 'none') {\n\t\t\tthis.$store.dispatch('setAppConfig', {\n\t\t\t\tapp: 'files',\n\t\t\t\tkey: 'default_quota',\n\t\t\t\t// ensure we only send the preset id\n\t\t\t\tvalue: quota.id ? quota.id : quota,\n\t\t\t}).then(() => {\n\t\t\t\tif (typeof quota !== 'object') {\n\t\t\t\t\tquota = { id: quota, label: quota }\n\t\t\t\t}\n\t\t\t\tthis.defaultQuota = quota\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @return {Promise|boolean}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota === null) {\n\t\t\t\treturn this.setDefaultQuota('none')\n\t\t\t} else {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Register a new action for the user menu\n\t\t *\n\t\t * @param {string} icon the icon class\n\t\t * @param {string} text the text to display\n\t\t * @param {Function} action the function to run\n\t\t * @return {Array}\n\t\t */\n\t\tregisterAction(icon, text, action) {\n\t\t\tthis.externalActions.push({\n\t\t\t\ticon,\n\t\t\t\ttext,\n\t\t\t\taction,\n\t\t\t})\n\t\t\treturn this.externalActions\n\t\t},\n\n\t\t/**\n\t\t * Create a new group\n\t\t *\n\t\t * @param {string} gid The group id\n\t\t */\n\t\tasync createGroup(gid) {\n\t\t\t// group is not valid\n\t\t\tif (gid.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loadingAddGroup = true\n\t\t\t\tawait this.$store.dispatch('addGroup', gid.trim())\n\n\t\t\t\tthis.hideAddGroupForm()\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tselectedGroup: encodeURIComponent(gid.trim()),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch {\n\t\t\t\tthis.showAddGroupForm()\n\t\t\t} finally {\n\t\t\t\tthis.loadingAddGroup = false\n\t\t\t}\n\t\t},\n\n\t\tshowAddGroupForm() {\n\t\t\tthis.$refs.addGroup.editingActive = true\n\t\t\tthis.$refs.addGroup.onMenuToggle(false)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.addGroup.$refs.editingInput.focusInput()\n\t\t\t})\n\t\t},\n\n\t\thideAddGroupForm() {\n\t\t\tthis.$refs.addGroup.editingActive = false\n\t\t\tthis.$refs.addGroup.editingValue = ''\n\t\t},\n\n\t\t/**\n\t\t * Format a group to a menu entry\n\t\t *\n\t\t * @param {object} group the group\n\t\t * @return {object}\n\t\t */\n\t\tformatGroupMenu(group) {\n\t\t\tconst item = {}\n\t\t\tif (typeof group === 'undefined') {\n\t\t\t\treturn {}\n\t\t\t}\n\n\t\t\titem.id = group.id\n\t\t\titem.title = group.name\n\t\t\titem.usercount = group.usercount\n\n\t\t\t// users count for all groups\n\t\t\tif (group.usercount - group.disabled > 0) {\n\t\t\t\titem.count = group.usercount - group.disabled\n\t\t\t}\n\n\t\t\treturn item\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// force hiding the editing action for the add group entry\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=1babbc68&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=1babbc68&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=1babbc68&scoped=true&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Users.vue?vue&type=style&index=0&id=1babbc68&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1babbc68\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","_vm","this","_h","$createElement","_c","_self","key","attrs","title","name","params","selectedGroup","encodeURIComponent","loadingRenameGroup","openGroupMenu","on","handleGroupMenuOpen","scopedSlots","_u","fn","_v","_s","count","_e","proxy","settings","isAdmin","ref","$event","renameGroup","t","removeGroup","props","user","type","Object","required","default","groups","Array","subAdminsGroups","quotaOptions","showConfig","languages","externalActions","computed","userGroups","filter","group","includes","userSubAdminsGroups","subadmin","availableGroups","map","groupClone","assign","$isDisabled","canAdd","canRemove","usedSpace","quota","used","size","OC","Util","humanFileSize","usedQuota","Math","min","round","pow","isNaN","userQuota","humanQuota","find","label","minPasswordLength","$store","getters","getPasswordPolicyMinLength","userLanguage","userLang","concat","lang","code","language","userLastLoginTooltip","lastLogin","formatDate","userLastLogin","relativeModifiedDate","methods","generateAvatar","generateUrl","version","oc_userconfig","avatar","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","staticClass","class","loading","delete","disable","wipe","directives","rawName","value","displayname","length","expression","email","userGroupsLabels","userSubAdminsGroupsLabels","domProps","showUserBackend","showStoragePath","backend","storageLocation","modifiers","canEdit","all","toggleEdit","preventDefault","toggleMenu","apply","arguments","openedMenu","userActions","style","opacity","feedbackMessage","keys","editing","backendCapabilities","displayName","updateDisplayName","rand","canChangePassword","setPassword","password","updatePassword","mailAddress","updateEmail","removeUserGroup","addUserGroup","createGroup","slot","subadmins","removeUserSubAdmin","addUserSubAdmin","setUserQuota","validateQuota","setUserLanguage","onScroll","closeModal","createUser","newUser","newUserGenerateUserID","target","composing","$set","newUserRequireEmail","canAddGroups","model","callback","$$v","scrolled","showNewUserForm","_l","infiniteHandler","loadingAddGroup","showAddGroupForm","userCount","adminGroupMenu","disabledGroupMenu","usercount","groupList","defaultQuota","setDefaultQuota","isArray","showLanguages","_i","$$a","$$el","$$c","checked","$$i","slice","showLastLogin","loadingSendMail","sendWelcomeMail","showNewUserMenu","indexOf","_k","keyCode","users","selectedGroupDecoded"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"settings-users-8351.js?v=04e1d33f947711080615","mappings":"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AAWpB,EAAIqB,GAAGrB,EAAIuI,iBAAiB,kBACv6H,IDWpB,EACA,KACA,KACA,MAIF,GAAe,GAAiB,wUEwOhC,yBAEA,QACA,eACA,YACA,iBACA,0BACA,kBACA,4BACA,2BAEA,YACA,kBAEA,YACA,OACA,MACA,YACA,aAEA,UACA,YACA,8BAEA,QACA,WACA,8BAEA,iBACA,WACA,8BAEA,cACA,WACA,8BAEA,YACA,YACA,8BAEA,WACA,WACA,aAEA,iBACA,WACA,+BAGA,KA/CA,WAgDA,OACA,iCACA,cACA,mBACA,WACA,SACA,OACA,eACA,YACA,eACA,UACA,aACA,SACA,UACA,WACA,aACA,WAIA,UAEA,YAFA,WAGA,OACA,CACA,mBACA,iCACA,wBAEA,CACA,mBACA,sCACA,6BAEA,CACA,+CACA,gFACA,gCAUA,OAPA,8CACA,QACA,iBACA,0CACA,8BAGA,iCAIA,SAEA,WAFA,WAGA,kCAEA,SALA,WAMA,oBAGA,gBATA,WASA,WACA,eACA,8BACA,6NACA,uCACA,CACA,+BACA,2DACA,uBACA,gCAEA,YACA,IACA,kBACA,iBACA,uCACA,iBACA,kBACA,wBAIA,IAIA,WAnCA,WAmCA,WACA,eACA,8BACA,8GACA,iCACA,CACA,+BACA,6DACA,uBACA,gCAEA,YACA,KAGA,OAFA,oBACA,iBACA,kCACA,iBACA,oBACA,uBAIA,IAIA,kBA7DA,WA6DA,WACA,uBACA,oBACA,mBACA,qBACA,iDACA,SACA,YAEA,iBACA,oBACA,qBASA,kBAjFA,WAiFA,WACA,+BACA,4BACA,oCACA,oBACA,kBACA,UACA,iBACA,yBACA,gCASA,eAnGA,WAmGA,WACA,4BACA,yBACA,oCACA,oBACA,eACA,UACA,iBACA,sBACA,8BASA,YArHA,WAqHA,WACA,+BACA,4BACA,oCACA,oBACA,YACA,UACA,iBACA,yBACA,gCASA,YAvIA,SAuIA,2JACA,mCADA,kBAGA,gCAHA,cAIA,YAJA,SAKA,mDALA,uDAOA,oBAPA,yBASA,mCATA,8CAWA,6CAXA,kEAmBA,aA1JA,SA0JA,0JACA,a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","sources":["webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=c1f088a6&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=style&index=0&id=1babbc68&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=672d131f&scoped=true&lang=css&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=template&id=1babbc68&scoped=true&","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?7b19","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=template&id=24cc1e48&","webpack:///nextcloud/apps/settings/src/mixins/UserRowMixin.js","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6980","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6d7a","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=0b39a53a&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?a242","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?81d2","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=c1f088a6&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList.vue","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/UserList.vue?a40a","webpack://nextcloud/./apps/settings/src/components/UserList.vue?02a4","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=template&id=672d131f&scoped=true&","webpack:///nextcloud/apps/settings/src/views/Users.vue","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/views/Users.vue?ba65","webpack://nextcloud/./apps/settings/src/views/Users.vue?cf86"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".row--menu-opened[data-v-c1f088a6]{z-index:1 !important}.row[data-v-c1f088a6] .multiselect__single{z-index:auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRow.vue\"],\"names\":[],\"mappings\":\"AA0qBA,mCACC,oBAAA,CAED,2CACC,uBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// Force menu to be above other rows\\n.row--menu-opened {\\n\\tz-index: 1 !important;\\n}\\n.row::v-deep .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRowSimple.vue\"],\"names\":[],\"mappings\":\"AA6LC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\t.cellText {\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\twhite-space: nowrap;\\n}\\n\\t.icon-more {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tborder: 0;\\n\\t}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation__list #addgroup[data-v-1babbc68] .app-navigation-entry__utils{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/Users.vue\"],\"names\":[],\"mappings\":\"AAieA,8EACC,YAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// force hiding the editing action for the add group entry\\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\\n\\tdisplay: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.modal-wrapper[data-v-672d131f] {\\n\\tmargin: 2vh 0;\\n\\talign-items: flex-start;\\n}\\n.modal__content[data-v-672d131f] {\\n\\tdisplay: flex;\\n\\tpadding: 20px;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n\\ttext-align: center;\\n}\\n.modal__item[data-v-672d131f] {\\n\\tmargin-bottom: 16px;\\n\\twidth: 100%;\\n}\\n.modal__item[data-v-672d131f]:not(:focus):not(:active) {\\n\\tborder-color: var(--color-border-dark);\\n}\\n.modal__item[data-v-672d131f] .multiselect {\\n\\twidth: 100%;\\n}\\n.user-actions[data-v-672d131f] {\\n\\tmargin-top: 20px;\\n}\\n.modal__content[data-v-672d131f] .multiselect__single {\\n\\ttext-align: left;\\n\\tbox-sizing: border-box;\\n}\\n.modal__content[data-v-672d131f] .multiselect__content-wrapper {\\n\\tbox-sizing: border-box;\\n}\\n.row[data-v-672d131f] .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\\n/* fake input for groups validation */\\ninput#newgroups[data-v-672d131f] {\\n\\tposition: absolute;\\n\\topacity: 0;\\n\\t/* The \\\"hidden\\\" input is behind the Multiselect, so in general it does\\n\\t * not receives clicks. However, with Firefox, after the validation\\n\\t * fails, it will receive the first click done on it, so its width needs\\n\\t * to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t * prevent it). */\\n\\twidth: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList.vue\"],\"names\":[],\"mappings\":\";AA+kBA;CACA,aAAA;CACA,uBAAA;AACA;AACA;CACA,aAAA;CACA,aAAA;CACA,sBAAA;CACA,mBAAA;CACA,kBAAA;AACA;AACA;CACA,mBAAA;CACA,WAAA;AACA;AACA;CACA,sCAAA;AACA;AACA;CACA,WAAA;AACA;AACA;CACA,gBAAA;AACA;AACA;CACA,gBAAA;CACA,sBAAA;AACA;AACA;CACA,sBAAA;AACA;AACA;CACA,wBAAA;AACA;;AAEA,qCAAA;AACA;CACA,kBAAA;CACA,UAAA;CACA;;;;kBAIA;CACA,QAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\\n -\\n - @author John Molakvoæ <skjnldsv@protonmail.com>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div id=\\\"app-content\\\" class=\\\"user-list-grid\\\" @scroll.passive=\\\"onScroll\\\">\\n\\t\\t<Modal v-if=\\\"showConfig.showNewUserForm\\\" size=\\\"small\\\" @close=\\\"closeModal\\\">\\n\\t\\t\\t<form id=\\\"new-user\\\"\\n\\t\\t\\t\\t:disabled=\\\"loading.all\\\"\\n\\t\\t\\t\\tclass=\\\"modal__content\\\"\\n\\t\\t\\t\\t@submit.prevent=\\\"createUser\\\">\\n\\t\\t\\t\\t<h2>{{ t('settings','New user') }}</h2>\\n\\t\\t\\t\\t<input id=\\\"newusername\\\"\\n\\t\\t\\t\\t\\tref=\\\"newusername\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.id\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"settings.newUserGenerateUserID\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"settings.newUserGenerateUserID\\n\\t\\t\\t\\t\\t\\t? t('settings', 'Will be autogenerated')\\n\\t\\t\\t\\t\\t\\t: t('settings', 'Username')\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"username\\\"\\n\\t\\t\\t\\t\\tpattern=\\\"[a-zA-Z0-9 _\\\\.@\\\\-']+\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t<input id=\\\"newdisplayname\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.displayName\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Display name')\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"displayname\\\"\\n\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t<input id=\\\"newuserpassword\\\"\\n\\t\\t\\t\\t\\tref=\\\"newuserpassword\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.password\\\"\\n\\t\\t\\t\\t\\t:minlength=\\\"minPasswordLength\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Password')\\\"\\n\\t\\t\\t\\t\\t:required=\\\"newUser.mailAddress===''\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"new-password\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"password\\\"\\n\\t\\t\\t\\t\\ttype=\\\"password\\\">\\n\\t\\t\\t\\t<input id=\\\"newemail\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.mailAddress\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Email')\\\"\\n\\t\\t\\t\\t\\t:required=\\\"newUser.password==='' || settings.newUserRequireEmail\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"email\\\"\\n\\t\\t\\t\\t\\ttype=\\\"email\\\">\\n\\t\\t\\t\\t<div class=\\\"groups modal__item\\\">\\n\\t\\t\\t\\t\\t<!-- hidden input trick for vanilla html5 form validation -->\\n\\t\\t\\t\\t\\t<input v-if=\\\"!settings.isAdmin\\\"\\n\\t\\t\\t\\t\\t\\tid=\\\"newgroups\\\"\\n\\t\\t\\t\\t\\t\\t:class=\\\"{'icon-loading-small': loading.groups}\\\"\\n\\t\\t\\t\\t\\t\\t:required=\\\"!settings.isAdmin\\\"\\n\\t\\t\\t\\t\\t\\t:value=\\\"newUser.groups\\\"\\n\\t\\t\\t\\t\\t\\ttabindex=\\\"-1\\\"\\n\\t\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.groups\\\"\\n\\t\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:disabled=\\\"loading.groups||loading.all\\\"\\n\\t\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"canAddGroups\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Add user to group')\\\"\\n\\t\\t\\t\\t\\t\\t:tag-width=\\\"60\\\"\\n\\t\\t\\t\\t\\t\\t:taggable=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttag-placeholder=\\\"create\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t\\t\\t\\t@tag=\\\"createGroup\\\">\\n\\t\\t\\t\\t\\t\\t<!-- If user is not admin, he is a subadmin.\\n\\t\\t\\t\\t\\t\\t\\tSubadmins can't create users outside their groups\\n\\t\\t\\t\\t\\t\\t\\tTherefore, empty select is forbidden -->\\n\\t\\t\\t\\t\\t\\t<span slot=\\\"noResult\\\">{{ t('settings', 'No results') }}</span>\\n\\t\\t\\t\\t\\t</Multiselect>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"subAdminsGroups.length>0 && settings.isAdmin\\\"\\n\\t\\t\\t\\t\\tclass=\\\"subadmins modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.subAdminsGroups\\\"\\n\\t\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"subAdminsGroups\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Set user as admin for')\\\"\\n\\t\\t\\t\\t\\t\\t:tag-width=\\\"60\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\">\\n\\t\\t\\t\\t\\t\\t<span slot=\\\"noResult\\\">{{ t('settings', 'No results') }}</span>\\n\\t\\t\\t\\t\\t</Multiselect>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"quota modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.quota\\\"\\n\\t\\t\\t\\t\\t\\t:allow-empty=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"quotaOptions\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Select user quota')\\\"\\n\\t\\t\\t\\t\\t\\t:taggable=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t\\t\\t\\t@tag=\\\"validateQuota\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showLanguages\\\" class=\\\"languages modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.language\\\"\\n\\t\\t\\t\\t\\t\\t:allow-empty=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"languages\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Default language')\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tgroup-label=\\\"label\\\"\\n\\t\\t\\t\\t\\t\\tgroup-values=\\\"languages\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"code\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showStoragePath\\\" class=\\\"storageLocation\\\" />\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend\\\" class=\\\"userBackend\\\" />\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showLastLogin\\\" class=\\\"lastLogin\\\" />\\n\\t\\t\\t\\t<div class=\\\"user-actions\\\">\\n\\t\\t\\t\\t\\t<Button id=\\\"newsubmit\\\"\\n\\t\\t\\t\\t\\t\\ttype=\\\"primary\\\"\\n\\t\\t\\t\\t\\t\\tnative-type=\\\"submit\\\"\\n\\t\\t\\t\\t\\t\\tvalue=\\\"\\\">\\n\\t\\t\\t\\t\\t\\t{{ t('settings', 'Add a new user') }}\\n\\t\\t\\t\\t\\t</Button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</form>\\n\\t\\t</Modal>\\n\\t\\t<div id=\\\"grid-header\\\"\\n\\t\\t\\t:class=\\\"{'sticky': scrolled && !showConfig.showNewUserForm}\\\"\\n\\t\\t\\tclass=\\\"row\\\">\\n\\t\\t\\t<div id=\\\"headerAvatar\\\" class=\\\"avatar\\\" />\\n\\t\\t\\t<div id=\\\"headerName\\\" class=\\\"name\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Username') }}\\n\\n\\t\\t\\t\\t<div class=\\\"subtitle\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Display name') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerPassword\\\" class=\\\"password\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Password') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerAddress\\\" class=\\\"mailAddress\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Email') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerGroups\\\" class=\\\"groups\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Groups') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"subAdminsGroups.length>0 && settings.isAdmin\\\"\\n\\t\\t\\t\\tid=\\\"headerSubAdmins\\\"\\n\\t\\t\\t\\tclass=\\\"subadmins\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Group admin for') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerQuota\\\" class=\\\"quota\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Quota') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"showConfig.showLanguages\\\"\\n\\t\\t\\t\\tid=\\\"headerLanguages\\\"\\n\\t\\t\\t\\tclass=\\\"languages\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Language') }}\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend || showConfig.showStoragePath\\\"\\n\\t\\t\\t\\tclass=\\\"headerUserBackend userBackend\\\">\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend\\\" class=\\\"userBackend\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'User backend') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showStoragePath\\\"\\n\\t\\t\\t\\t\\tclass=\\\"subtitle storageLocation\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Storage location') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"showConfig.showLastLogin\\\"\\n\\t\\t\\t\\tclass=\\\"headerLastLogin lastLogin\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Last login') }}\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div class=\\\"userActions\\\" />\\n\\t\\t</div>\\n\\n\\t\\t<user-row v-for=\\\"user in filteredUsers\\\"\\n\\t\\t\\t:key=\\\"user.id\\\"\\n\\t\\t\\t:external-actions=\\\"externalActions\\\"\\n\\t\\t\\t:groups=\\\"groups\\\"\\n\\t\\t\\t:languages=\\\"languages\\\"\\n\\t\\t\\t:quota-options=\\\"quotaOptions\\\"\\n\\t\\t\\t:settings=\\\"settings\\\"\\n\\t\\t\\t:show-config=\\\"showConfig\\\"\\n\\t\\t\\t:sub-admins-groups=\\\"subAdminsGroups\\\"\\n\\t\\t\\t:user=\\\"user\\\" />\\n\\t\\t<InfiniteLoading ref=\\\"infiniteLoading\\\" @infinite=\\\"infiniteHandler\\\">\\n\\t\\t\\t<div slot=\\\"spinner\\\">\\n\\t\\t\\t\\t<div class=\\\"users-icon-loading icon-loading\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<div slot=\\\"no-more\\\">\\n\\t\\t\\t\\t<div class=\\\"users-list-end\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<div slot=\\\"no-results\\\">\\n\\t\\t\\t\\t<div id=\\\"emptycontent\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"icon-contacts-dark\\\" />\\n\\t\\t\\t\\t\\t<h2>{{ t('settings', 'No users in here') }}</h2>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</InfiniteLoading>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\\nimport InfiniteLoading from 'vue-infinite-loading'\\nimport Vue from 'vue'\\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\\nimport Button from '@nextcloud/vue/dist/Components/Button'\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\n\\nimport userRow from './UserList/UserRow'\\n\\nconst unlimitedQuota = {\\n\\tid: 'none',\\n\\tlabel: t('settings', 'Unlimited'),\\n}\\nconst defaultQuota = {\\n\\tid: 'default',\\n\\tlabel: t('settings', 'Default quota'),\\n}\\nconst newUser = {\\n\\tid: '',\\n\\tdisplayName: '',\\n\\tpassword: '',\\n\\tmailAddress: '',\\n\\tgroups: [],\\n\\tsubAdminsGroups: [],\\n\\tquota: defaultQuota,\\n\\tlanguage: {\\n\\t\\tcode: 'en',\\n\\t\\tname: t('settings', 'Default language'),\\n\\t},\\n}\\n\\nexport default {\\n\\tname: 'UserList',\\n\\tcomponents: {\\n\\t\\tModal,\\n\\t\\tuserRow,\\n\\t\\tMultiselect,\\n\\t\\tInfiniteLoading,\\n\\t\\tButton,\\n\\t},\\n\\tprops: {\\n\\t\\tusers: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\tdefault: () => [],\\n\\t\\t},\\n\\t\\tshowConfig: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tselectedGroup: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\tdefault: null,\\n\\t\\t},\\n\\t\\texternalActions: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\tdefault: () => [],\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tunlimitedQuota,\\n\\t\\t\\tdefaultQuota,\\n\\t\\t\\tloading: {\\n\\t\\t\\t\\tall: false,\\n\\t\\t\\t\\tgroups: false,\\n\\t\\t\\t},\\n\\t\\t\\tscrolled: false,\\n\\t\\t\\tsearchQuery: '',\\n\\t\\t\\tnewUser: Object.assign({}, newUser),\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tsettings() {\\n\\t\\t\\treturn this.$store.getters.getServerData\\n\\t\\t},\\n\\t\\tselectedGroupDecoded() {\\n\\t\\t\\treturn decodeURIComponent(this.selectedGroup)\\n\\t\\t},\\n\\t\\tfilteredUsers() {\\n\\t\\t\\tif (this.selectedGroup === 'disabled') {\\n\\t\\t\\t\\treturn this.users.filter(user => user.enabled === false)\\n\\t\\t\\t}\\n\\t\\t\\tif (!this.settings.isAdmin) {\\n\\t\\t\\t\\t// we don't want subadmins to edit themselves\\n\\t\\t\\t\\treturn this.users.filter(user => user.enabled !== false)\\n\\t\\t\\t}\\n\\t\\t\\treturn this.users.filter(user => user.enabled !== false)\\n\\t\\t},\\n\\t\\tgroups() {\\n\\t\\t\\t// data provided php side + remove the disabled group\\n\\t\\t\\treturn this.$store.getters.getGroups\\n\\t\\t\\t\\t.filter(group => group.id !== 'disabled')\\n\\t\\t\\t\\t.sort((a, b) => a.name.localeCompare(b.name))\\n\\t\\t},\\n\\t\\tcanAddGroups() {\\n\\t\\t\\t// disabled if no permission to add new users to group\\n\\t\\t\\treturn this.groups.map(group => {\\n\\t\\t\\t\\t// clone object because we don't want\\n\\t\\t\\t\\t// to edit the original groups\\n\\t\\t\\t\\tgroup = Object.assign({}, group)\\n\\t\\t\\t\\tgroup.$isDisabled = group.canAdd === false\\n\\t\\t\\t\\treturn group\\n\\t\\t\\t})\\n\\t\\t},\\n\\t\\tsubAdminsGroups() {\\n\\t\\t\\t// data provided php side\\n\\t\\t\\treturn this.$store.getters.getSubadminGroups\\n\\t\\t},\\n\\t\\tquotaOptions() {\\n\\t\\t\\t// convert the preset array into objects\\n\\t\\t\\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\\n\\t\\t\\t\\tid: cur,\\n\\t\\t\\t\\tlabel: cur,\\n\\t\\t\\t}), [])\\n\\t\\t\\t// add default presets\\n\\t\\t\\tif (this.settings.allowUnlimitedQuota) {\\n\\t\\t\\t\\tquotaPreset.unshift(this.unlimitedQuota)\\n\\t\\t\\t}\\n\\t\\t\\tquotaPreset.unshift(this.defaultQuota)\\n\\t\\t\\treturn quotaPreset\\n\\t\\t},\\n\\t\\tminPasswordLength() {\\n\\t\\t\\treturn this.$store.getters.getPasswordPolicyMinLength\\n\\t\\t},\\n\\t\\tusersOffset() {\\n\\t\\t\\treturn this.$store.getters.getUsersOffset\\n\\t\\t},\\n\\t\\tusersLimit() {\\n\\t\\t\\treturn this.$store.getters.getUsersLimit\\n\\t\\t},\\n\\t\\tusersCount() {\\n\\t\\t\\treturn this.users.length\\n\\t\\t},\\n\\n\\t\\t/* LANGUAGES */\\n\\t\\tlanguages() {\\n\\t\\t\\treturn [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\tlabel: t('settings', 'Common languages'),\\n\\t\\t\\t\\t\\tlanguages: this.settings.languages.commonLanguages,\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\tlabel: t('settings', 'Other languages'),\\n\\t\\t\\t\\t\\tlanguages: this.settings.languages.otherLanguages,\\n\\t\\t\\t\\t},\\n\\t\\t\\t]\\n\\t\\t},\\n\\t},\\n\\twatch: {\\n\\t\\t// watch url change and group select\\n\\t\\tselectedGroup(val, old) {\\n\\t\\t\\t// if selected is the disabled group but it's empty\\n\\t\\t\\tthis.redirectIfDisabled()\\n\\t\\t\\tthis.$store.commit('resetUsers')\\n\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\tthis.setNewUserDefaultGroup(val)\\n\\t\\t},\\n\\n\\t\\t// make sure the infiniteLoading state is changed if we manually\\n\\t\\t// add/remove data from the store\\n\\t\\tusersCount(val, old) {\\n\\t\\t\\t// deleting the last user, reset the list\\n\\t\\t\\tif (val === 0 && old === 1) {\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\t\\t// adding the first user, warn the infiniteLoader that\\n\\t\\t\\t\\t// the list is not empty anymore (we don't fetch the newly\\n\\t\\t\\t\\t// added user as we already have all the info we need)\\n\\t\\t\\t} else if (val === 1 && old === 0) {\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.loaded()\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\n\\tmounted() {\\n\\t\\tif (!this.settings.canChangePassword) {\\n\\t\\t\\tOC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'))\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Reset and init new user form\\n\\t\\t */\\n\\t\\tthis.resetForm()\\n\\n\\t\\t/**\\n\\t\\t * Register search\\n\\t\\t */\\n\\t\\tsubscribe('nextcloud:unified-search.search', this.search)\\n\\t\\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\\n\\n\\t\\t/**\\n\\t\\t * If disabled group but empty, redirect\\n\\t\\t */\\n\\t\\tthis.redirectIfDisabled()\\n\\t},\\n\\tbeforeDestroy() {\\n\\t\\tunsubscribe('nextcloud:unified-search.search', this.search)\\n\\t\\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\\n\\t},\\n\\n\\tmethods: {\\n\\t\\tonScroll(event) {\\n\\t\\t\\tthis.scrolled = event.target.scrollTo > 0\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * Validate quota string to make sure it's a valid human file size\\n\\t\\t *\\n\\t\\t * @param {string} quota Quota in readable format '5 GB'\\n\\t\\t * @return {object}\\n\\t\\t */\\n\\t\\tvalidateQuota(quota) {\\n\\t\\t\\t// only used for new presets sent through @Tag\\n\\t\\t\\tconst validQuota = OC.Util.computerFileSize(quota)\\n\\t\\t\\tif (validQuota !== null && validQuota >= 0) {\\n\\t\\t\\t\\t// unify format output\\n\\t\\t\\t\\tquota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))\\n\\t\\t\\t\\tthis.newUser.quota = { id: quota, label: quota }\\n\\t\\t\\t\\treturn this.newUser.quota\\n\\t\\t\\t}\\n\\t\\t\\t// Default is unlimited\\n\\t\\t\\tthis.newUser.quota = this.quotaOptions[0]\\n\\t\\t\\treturn this.quotaOptions[0]\\n\\t\\t},\\n\\n\\t\\tinfiniteHandler($state) {\\n\\t\\t\\tthis.$store.dispatch('getUsers', {\\n\\t\\t\\t\\toffset: this.usersOffset,\\n\\t\\t\\t\\tlimit: this.usersLimit,\\n\\t\\t\\t\\tgroup: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\\n\\t\\t\\t\\tsearch: this.searchQuery,\\n\\t\\t\\t})\\n\\t\\t\\t\\t.then((usersCount) => {\\n\\t\\t\\t\\t\\tif (usersCount > 0) {\\n\\t\\t\\t\\t\\t\\t$state.loaded()\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (usersCount < this.usersLimit) {\\n\\t\\t\\t\\t\\t\\t$state.complete()\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t},\\n\\n\\t\\t/* SEARCH */\\n\\t\\tsearch({ query }) {\\n\\t\\t\\tthis.searchQuery = query\\n\\t\\t\\tthis.$store.commit('resetUsers')\\n\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t},\\n\\t\\tresetSearch() {\\n\\t\\t\\tthis.search({ query: '' })\\n\\t\\t},\\n\\n\\t\\tresetForm() {\\n\\t\\t\\t// revert form to original state\\n\\t\\t\\tthis.newUser = Object.assign({}, newUser)\\n\\n\\t\\t\\t/**\\n\\t\\t\\t * Init default language from server data. The use of this.settings\\n\\t\\t\\t * requires a computed variable, which break the v-model binding of the form,\\n\\t\\t\\t * this is a much easier solution than getter and setter on a computed var\\n\\t\\t\\t */\\n\\t\\t\\tif (this.settings.defaultLanguage) {\\n\\t\\t\\t\\tVue.set(this.newUser.language, 'code', this.settings.defaultLanguage)\\n\\t\\t\\t}\\n\\n\\t\\t\\t/**\\n\\t\\t\\t * In case the user directly loaded the user list within a group\\n\\t\\t\\t * the watch won't be triggered. We need to initialize it.\\n\\t\\t\\t */\\n\\t\\t\\tthis.setNewUserDefaultGroup(this.selectedGroup)\\n\\n\\t\\t\\tthis.loading.all = false\\n\\t\\t},\\n\\t\\tcreateUser() {\\n\\t\\t\\tthis.loading.all = true\\n\\t\\t\\tthis.$store.dispatch('addUser', {\\n\\t\\t\\t\\tuserid: this.newUser.id,\\n\\t\\t\\t\\tpassword: this.newUser.password,\\n\\t\\t\\t\\tdisplayName: this.newUser.displayName,\\n\\t\\t\\t\\temail: this.newUser.mailAddress,\\n\\t\\t\\t\\tgroups: this.newUser.groups.map(group => group.id),\\n\\t\\t\\t\\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\\n\\t\\t\\t\\tquota: this.newUser.quota.id,\\n\\t\\t\\t\\tlanguage: this.newUser.language.code,\\n\\t\\t\\t})\\n\\t\\t\\t\\t.then(() => {\\n\\t\\t\\t\\t\\tthis.resetForm()\\n\\t\\t\\t\\t\\tthis.$refs.newusername.focus()\\n\\t\\t\\t\\t\\tthis.closeModal()\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch((error) => {\\n\\t\\t\\t\\t\\tthis.loading.all = false\\n\\t\\t\\t\\t\\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\\n\\t\\t\\t\\t\\t\\tconst statuscode = error.response.data.ocs.meta.statuscode\\n\\t\\t\\t\\t\\t\\tif (statuscode === 102) {\\n\\t\\t\\t\\t\\t\\t\\t// wrong username\\n\\t\\t\\t\\t\\t\\t\\tthis.$refs.newusername.focus()\\n\\t\\t\\t\\t\\t\\t} else if (statuscode === 107) {\\n\\t\\t\\t\\t\\t\\t\\t// wrong password\\n\\t\\t\\t\\t\\t\\t\\tthis.$refs.newuserpassword.focus()\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t},\\n\\t\\tsetNewUserDefaultGroup(value) {\\n\\t\\t\\tif (value && value.length > 0) {\\n\\t\\t\\t\\t// setting new user default group to the current selected one\\n\\t\\t\\t\\tconst currentGroup = this.groups.find(group => group.id === value)\\n\\t\\t\\t\\tif (currentGroup) {\\n\\t\\t\\t\\t\\tthis.newUser.groups = [currentGroup]\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// fallback, empty selected group\\n\\t\\t\\tthis.newUser.groups = []\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * Create a new group\\n\\t\\t *\\n\\t\\t * @param {string} gid Group id\\n\\t\\t * @return {Promise}\\n\\t\\t */\\n\\t\\tcreateGroup(gid) {\\n\\t\\t\\tthis.loading.groups = true\\n\\t\\t\\tthis.$store.dispatch('addGroup', gid)\\n\\t\\t\\t\\t.then((group) => {\\n\\t\\t\\t\\t\\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\\n\\t\\t\\t\\t\\tthis.loading.groups = false\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch(() => {\\n\\t\\t\\t\\t\\tthis.loading.groups = false\\n\\t\\t\\t\\t})\\n\\t\\t\\treturn this.$store.getters.getGroups[this.groups.length]\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * If the selected group is the disabled group but the count is 0\\n\\t\\t * redirect to the all users page.\\n\\t\\t * we only check for 0 because we don't have the count on ldap\\n\\t\\t * and we therefore set the usercount to -1 in this specific case\\n\\t\\t */\\n\\t\\tredirectIfDisabled() {\\n\\t\\t\\tconst allGroups = this.$store.getters.getGroups\\n\\t\\t\\tif (this.selectedGroup === 'disabled'\\n\\t\\t\\t\\t\\t\\t&& allGroups.findIndex(group => group.id === 'disabled' && group.usercount === 0) > -1) {\\n\\t\\t\\t\\t// disabled group is empty, redirection to all users\\n\\t\\t\\t\\tthis.$router.push({ name: 'users' })\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcloseModal() {\\n\\t\\t\\t// eslint-disable-next-line vue/no-mutating-props\\n\\t\\t\\tthis.showConfig.showNewUserForm = false\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.modal-wrapper {\\n\\t\\tmargin: 2vh 0;\\n\\t\\talign-items: flex-start;\\n\\t}\\n\\t.modal__content {\\n\\t\\tdisplay: flex;\\n\\t\\tpadding: 20px;\\n\\t\\tflex-direction: column;\\n\\t\\talign-items: center;\\n\\t\\ttext-align: center;\\n\\t}\\n\\t.modal__item {\\n\\t\\tmargin-bottom: 16px;\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.modal__item:not(:focus):not(:active) {\\n\\t\\tborder-color: var(--color-border-dark);\\n\\t}\\n\\t.modal__item::v-deep .multiselect {\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.user-actions {\\n\\t\\tmargin-top: 20px;\\n\\t}\\n\\t.modal__content::v-deep .multiselect__single {\\n\\t\\ttext-align: left;\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t.modal__content::v-deep .multiselect__content-wrapper {\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t.row::v-deep .multiselect__single {\\n\\t\\tz-index: auto !important;\\n\\t}\\n\\n\\t/* fake input for groups validation */\\n\\tinput#newgroups {\\n\\t\\tposition: absolute;\\n\\t\\topacity: 0;\\n\\t\\t/* The \\\"hidden\\\" input is behind the Multiselect, so in general it does\\n\\t\\t * not receives clicks. However, with Firefox, after the validation\\n\\t\\t * fails, it will receive the first click done on it, so its width needs\\n\\t\\t * to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t\\t * prevent it). */\\n\\t\\twidth: 0;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Content',{attrs:{\"app-name\":\"settings\",\"navigation-class\":{ 'icon-loading': _vm.loadingAddGroup }}},[_c('AppNavigation',{scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('AppNavigationItem',{ref:\"addGroup\",attrs:{\"id\":\"addgroup\",\"edit-placeholder\":_vm.t('settings', 'Enter group name'),\"editable\":true,\"loading\":_vm.loadingAddGroup,\"title\":_vm.t('settings', 'Add group'),\"icon\":\"icon-add\"},on:{\"click\":_vm.showAddGroupForm,\"update:title\":_vm.createGroup}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"everyone\",\"exact\":true,\"title\":_vm.t('settings', 'Active users'),\"to\":{ name: 'users' },\"icon\":\"icon-contacts-dark\"}},[(_vm.userCount > 0)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.userCount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),(_vm.settings.isAdmin)?_c('AppNavigationItem',{attrs:{\"id\":\"admin\",\"exact\":true,\"title\":_vm.t('settings', 'Admins'),\"to\":{ name: 'group', params: { selectedGroup: 'admin' } },\"icon\":\"icon-user-admin\"}},[(_vm.adminGroupMenu.count)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.adminGroupMenu.count)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.disabledGroupMenu.usercount > 0 || _vm.disabledGroupMenu.usercount === -1)?_c('AppNavigationItem',{attrs:{\"id\":\"disabled\",\"exact\":true,\"title\":_vm.t('settings', 'Disabled users'),\"to\":{ name: 'group', params: { selectedGroup: 'disabled' } },\"icon\":\"icon-disabled-users\"}},[(_vm.disabledGroupMenu.usercount > 0)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.disabledGroupMenu.usercount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.groupList.length > 0)?_c('AppNavigationCaption',{attrs:{\"title\":_vm.t('settings', 'Groups')}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.groupList),function(group){return _c('GroupListItem',{key:group.id,attrs:{\"id\":group.id,\"title\":group.title,\"count\":group.count}})})]},proxy:true},{key:\"footer\",fn:function(){return [_c('AppNavigationSettings',[_c('div',[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'Default quota:')))]),_vm._v(\" \"),_c('Multiselect',{attrs:{\"value\":_vm.defaultQuota,\"options\":_vm.quotaOptions,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Select default quota'),\"label\":\"label\",\"track-by\":\"id\",\"allow-empty\":false,\"taggable\":true},on:{\"tag\":_vm.validateQuota,\"input\":_vm.setDefaultQuota}})],1),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showLanguages),expression:\"showLanguages\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showLanguages\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showLanguages)?_vm._i(_vm.showLanguages,null)>-1:(_vm.showLanguages)},on:{\"change\":function($event){var $$a=_vm.showLanguages,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showLanguages=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showLanguages=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showLanguages=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showLanguages\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show Languages')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showLastLogin),expression:\"showLastLogin\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showLastLogin\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showLastLogin)?_vm._i(_vm.showLastLogin,null)>-1:(_vm.showLastLogin)},on:{\"change\":function($event){var $$a=_vm.showLastLogin,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showLastLogin=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showLastLogin=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showLastLogin=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showLastLogin\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show last login')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showUserBackend),expression:\"showUserBackend\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showUserBackend\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showUserBackend)?_vm._i(_vm.showUserBackend,null)>-1:(_vm.showUserBackend)},on:{\"change\":function($event){var $$a=_vm.showUserBackend,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showUserBackend=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showUserBackend=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showUserBackend=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showUserBackend\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show user backend')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showStoragePath),expression:\"showStoragePath\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showStoragePath\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showStoragePath)?_vm._i(_vm.showStoragePath,null)>-1:(_vm.showStoragePath)},on:{\"change\":function($event){var $$a=_vm.showStoragePath,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showStoragePath=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showStoragePath=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showStoragePath=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showStoragePath\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show storage path')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.sendWelcomeMail),expression:\"sendWelcomeMail\"}],staticClass:\"checkbox\",attrs:{\"id\":\"sendWelcomeMail\",\"disabled\":_vm.loadingSendMail,\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.sendWelcomeMail)?_vm._i(_vm.sendWelcomeMail,null)>-1:(_vm.sendWelcomeMail)},on:{\"change\":function($event){var $$a=_vm.sendWelcomeMail,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.sendWelcomeMail=$$a.concat([$$v]))}else{$$i>-1&&(_vm.sendWelcomeMail=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.sendWelcomeMail=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"sendWelcomeMail\"}},[_vm._v(_vm._s(_vm.t('settings', 'Send email to new user')))])])])]},proxy:true}])},[_c('AppNavigationNew',{attrs:{\"button-id\":\"new-user-button\",\"text\":_vm.t('settings','New user'),\"button-class\":\"icon-add\"},on:{\"click\":_vm.showNewUserMenu,\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.showNewUserMenu.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.showNewUserMenu.apply(null, arguments)}]}})],1),_vm._v(\" \"),_c('AppContent',[_c('UserList',{attrs:{\"users\":_vm.users,\"show-config\":_vm.showConfig,\"selected-group\":_vm.selectedGroupDecoded,\"external-actions\":_vm.externalActions}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2021 Martin Jänel <spammemore@posteo.de>\n -\n - @author Martin Jänel <spammemore@posteo.de>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<AppNavigationItem :key=\"id\"\n\t\t:exact=\"true\"\n\t\t:title=\"title\"\n\t\t:to=\"{ name: 'group', params: { selectedGroup: encodeURIComponent(id) } }\"\n\t\ticon=\"icon-group\"\n\t\t:loading=\"loadingRenameGroup\"\n\t\t:menu-open=\"openGroupMenu\"\n\t\t@update:menuOpen=\"handleGroupMenuOpen\">\n\t\t<template #counter>\n\t\t\t<CounterBubble v-if=\"count\">\n\t\t\t\t{{ count }}\n\t\t\t</CounterBubble>\n\t\t</template>\n\t\t<template #actions>\n\t\t\t<ActionInput v-if=\"id !== 'admin' && id !== 'disabled' && settings.isAdmin\"\n\t\t\t\tref=\"displayNameInput\"\n\t\t\t\ticon=\"icon-edit\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t:value=\"title\"\n\t\t\t\t@submit=\"renameGroup(id)\">\n\t\t\t\t{{ t('settings', 'Rename group') }}\n\t\t\t</ActionInput>\n\t\t\t<ActionButton v-if=\"id !== 'admin' && id !== 'disabled' && settings.isAdmin\"\n\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t@click=\"removeGroup(id)\">\n\t\t\t\t{{ t('settings', 'Remove group') }}\n\t\t\t</ActionButton>\n\t\t</template>\n\t</AppNavigationItem>\n</template>\n\n<script>\nimport ActionInput from '@nextcloud/vue/dist/Components/ActionInput'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport CounterBubble from '@nextcloud/vue/dist/Components/CounterBubble'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\n\nexport default {\n\tname: 'GroupListItem',\n\tcomponents: {\n\t\tActionInput,\n\t\tActionButton,\n\t\tCounterBubble,\n\t\tAppNavigationItem,\n\t},\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcount: {\n\t\t\ttype: Number,\n\t\t\trequired: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingRenameGroup: false,\n\t\t\topenGroupMenu: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t},\n\tmethods: {\n\t\thandleGroupMenuOpen() {\n\t\t\tthis.openGroupMenu = true\n\t\t},\n\t\tasync renameGroup(gid) {\n\t\t\t// check if group id is valid\n\t\t\tif (gid.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst displayName = this.$refs.displayNameInput.$el.querySelector('input[type=\"text\"]').value\n\n\t\t\t// check if group name is valid\n\t\t\tif (displayName.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.openGroupMenu = false\n\t\t\t\tthis.loadingRenameGroup = true\n\t\t\t\tawait this.$store.dispatch('renameGroup', {\n\t\t\t\t\tgroupid: gid.trim(),\n\t\t\t\t\tdisplayName: displayName.trim(),\n\t\t\t\t})\n\n\t\t\t\tthis.loadingRenameGroup = false\n\t\t\t} catch {\n\t\t\t\tthis.openGroupMenu = true\n\t\t\t\tthis.loadingRenameGroup = false\n\t\t\t}\n\t\t},\n\t\tremoveGroup(groupid) {\n\t\t\tconst self = this\n\t\t\t// TODO migrate to a vue js confirm dialog component\n\t\t\tOC.dialogs.confirm(\n\t\t\t\tt('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', { group: groupid }),\n\t\t\t\tt('settings', 'Please confirm the group removal '),\n\t\t\t\tfunction(success) {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\tself.$store.dispatch('removeGroup', groupid)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GroupListItem.vue?vue&type=template&id=24cc1e48&\"\nimport script from \"./GroupListItem.vue?vue&type=script&lang=js&\"\nexport * from \"./GroupListItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AppNavigationItem',{key:_vm.id,attrs:{\"exact\":true,\"title\":_vm.title,\"to\":{ name: 'group', params: { selectedGroup: encodeURIComponent(_vm.id) } },\"icon\":\"icon-group\",\"loading\":_vm.loadingRenameGroup,\"menu-open\":_vm.openGroupMenu},on:{\"update:menuOpen\":_vm.handleGroupMenuOpen},scopedSlots:_vm._u([{key:\"counter\",fn:function(){return [(_vm.count)?_c('CounterBubble',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.count)+\"\\n\\t\\t\")]):_vm._e()]},proxy:true},{key:\"actions\",fn:function(){return [(_vm.id !== 'admin' && _vm.id !== 'disabled' && _vm.settings.isAdmin)?_c('ActionInput',{ref:\"displayNameInput\",attrs:{\"icon\":\"icon-edit\",\"type\":\"text\",\"value\":_vm.title},on:{\"submit\":function($event){return _vm.renameGroup(_vm.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename group'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.id !== 'admin' && _vm.id !== 'disabled' && _vm.settings.isAdmin)?_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){return _vm.removeGroup(_vm.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Remove group'))+\"\\n\\t\\t\")]):_vm._e()]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Greta Doci <gretadoci@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateUrl } from '@nextcloud/router'\n\nexport default {\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tgroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tquotaOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tlanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tcomputed: {\n\t\t/* GROUPS MANAGEMENT */\n\t\tuserGroups() {\n\t\t\tconst userGroups = this.groups.filter(group => this.user.groups.includes(group.id))\n\t\t\treturn userGroups\n\t\t},\n\t\tuserSubAdminsGroups() {\n\t\t\tconst userSubAdminsGroups = this.subAdminsGroups.filter(group => this.user.subadmin.includes(group.id))\n\t\t\treturn userSubAdminsGroups\n\t\t},\n\t\tavailableGroups() {\n\t\t\treturn this.groups.map((group) => {\n\t\t\t\t// clone object because we don't want\n\t\t\t\t// to edit the original groups\n\t\t\t\tconst groupClone = Object.assign({}, group)\n\n\t\t\t\t// two settings here:\n\t\t\t\t// 1. user NOT in group but no permission to add\n\t\t\t\t// 2. user is in group but no permission to remove\n\t\t\t\tgroupClone.$isDisabled\n\t\t\t\t\t= (group.canAdd === false\n\t\t\t\t\t\t&& !this.user.groups.includes(group.id))\n\t\t\t\t\t|| (group.canRemove === false\n\t\t\t\t\t\t&& this.user.groups.includes(group.id))\n\t\t\t\treturn groupClone\n\t\t\t})\n\t\t},\n\n\t\t/* QUOTA MANAGEMENT */\n\t\tusedSpace() {\n\t\t\tif (this.user.quota.used) {\n\t\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(this.user.quota.used) })\n\t\t\t}\n\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(0) })\n\t\t},\n\t\tusedQuota() {\n\t\t\tlet quota = this.user.quota.quota\n\t\t\tif (quota > 0) {\n\t\t\t\tquota = Math.min(100, Math.round(this.user.quota.used / quota * 100))\n\t\t\t} else {\n\t\t\t\tconst usedInGB = this.user.quota.used / (10 * Math.pow(2, 30))\n\t\t\t\t// asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n\t\t\t\tquota = 95 * (1 - (1 / (usedInGB + 1)))\n\t\t\t}\n\t\t\treturn isNaN(quota) ? 0 : quota\n\t\t},\n\t\t// Mapping saved values to objects\n\t\tuserQuota() {\n\t\t\tif (this.user.quota.quota >= 0) {\n\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\tconst humanQuota = OC.Util.humanFileSize(this.user.quota.quota)\n\t\t\t\tconst userQuota = this.quotaOptions.find(quota => quota.id === humanQuota)\n\t\t\t\treturn userQuota || { id: humanQuota, label: humanQuota }\n\t\t\t} else if (this.user.quota.quota === 'default') {\n\t\t\t\t// default quota is replaced by the proper value on load\n\t\t\t\treturn this.quotaOptions[0]\n\t\t\t}\n\t\t\treturn this.quotaOptions[1] // unlimited\n\t\t},\n\n\t\t/* PASSWORD POLICY? */\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\n\t\t/* LANGUAGE */\n\t\tuserLanguage() {\n\t\t\tconst availableLanguages = this.languages[0].languages.concat(this.languages[1].languages)\n\t\t\tconst userLang = availableLanguages.find(lang => lang.code === this.user.language)\n\t\t\tif (typeof userLang !== 'object' && this.user.language !== '') {\n\t\t\t\treturn {\n\t\t\t\t\tcode: this.user.language,\n\t\t\t\t\tname: this.user.language,\n\t\t\t\t}\n\t\t\t} else if (this.user.language === '') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn userLang\n\t\t},\n\n\t\t/* LAST LOGIN */\n\t\tuserLastLoginTooltip() {\n\t\t\tif (this.user.lastLogin > 0) {\n\t\t\t\treturn OC.Util.formatDate(this.user.lastLogin)\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\t\tuserLastLogin() {\n\t\t\tif (this.user.lastLogin > 0) {\n\t\t\t\treturn OC.Util.relativeModifiedDate(this.user.lastLogin)\n\t\t\t}\n\t\t\treturn t('settings', 'Never')\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Generate avatar url\n\t\t *\n\t\t * @param {string} user The user name\n\t\t * @param {number} size Size integer, default 32\n\t\t * @return {string}\n\t\t */\n\t\tgenerateAvatar(user, size = 32) {\n\t\t\treturn generateUrl(\n\t\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t\t{\n\t\t\t\t\tuser,\n\t\t\t\t\tsize,\n\t\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"row\"\n\t\t:class=\"{'disabled': loading.delete || loading.disable}\"\n\t\t:data-id=\"user.id\">\n\t\t<div class=\"avatar\" :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\talt=\"\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div v-tooltip=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div />\n\t\t<div class=\"mailAddress\">\n\t\t\t<div v-tooltip=\"user.email !== null && user.email.length > 20 ? user.email : ''\" class=\"cellText\">\n\t\t\t\t{{ user.email }}\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"groups\">\n\t\t\t{{ userGroupsLabels }}\n\t\t</div>\n\t\t<div v-if=\"subAdminsGroups.length > 0 && settings.isAdmin\" class=\"subAdminsGroups\">\n\t\t\t{{ userSubAdminsGroupsLabels }}\n\t\t</div>\n\t\t<div class=\"userQuota\">\n\t\t\t<div class=\"quota\">\n\t\t\t\t{{ userQuota }} ({{ usedSpace }})\n\t\t\t\t<progress class=\"quota-user-progress\"\n\t\t\t\t\t:class=\"{'warn': usedQuota > 80}\"\n\t\t\t\t\t:value=\"usedQuota\"\n\t\t\t\t\tmax=\"100\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages\">\n\t\t\t{{ userLanguage.name }}\n\t\t</div>\n\t\t<div v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\" class=\"userBackend\">\n\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t{{ user.backend }}\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showStoragePath\" v-tooltip=\"user.storageLocation\" class=\"storageLocation subtitle\">\n\t\t\t\t{{ user.storageLocation }}\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLastLogin\" v-tooltip.auto=\"userLastLoginTooltip\" class=\"lastLogin\">\n\t\t\t{{ userLastLogin }}\n\t\t</div>\n\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"canEdit && !loading.all\" class=\"toggleUserActions\">\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton icon=\"icon-rename\" @click=\"toggleEdit\">\n\t\t\t\t\t\t{{ t('settings', 'Edit User') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<div class=\"userPopoverMenuWrapper\">\n\t\t\t\t\t<button v-click-outside=\"hideMenu\"\n\t\t\t\t\t\tclass=\"icon-more\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Toggle user actions menu')\"\n\t\t\t\t\t\t@click.prevent=\"toggleMenu\" />\n\t\t\t\t\t<div class=\"popovermenu\" :class=\"{ 'open': openedMenu }\" :aria-expanded=\"openedMenu\">\n\t\t\t\t\t\t<PopoverMenu :menu=\"userActions\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"feedback\" :style=\"{opacity: feedbackMessage !== '' ? 1 : 0}\">\n\t\t\t\t<div class=\"icon-checkmark\" />\n\t\t\t\t{{ feedbackMessage }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport PopoverMenu from '@nextcloud/vue/dist/Components/PopoverMenu'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ClickOutside from 'vue-click-outside'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport UserRowMixin from '../../mixins/UserRowMixin'\nexport default {\n\tname: 'UserRowSimple',\n\tcomponents: {\n\t\tPopoverMenu,\n\t\tActionButton,\n\t\tActions,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tuserActions: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\topenedMenu: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tfeedbackMessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tuserGroupsLabels() {\n\t\t\treturn this.userGroups\n\t\t\t\t.map(group => group.name)\n\t\t\t\t.join(', ')\n\t\t},\n\t\tuserSubAdminsGroupsLabels() {\n\t\t\treturn this.userSubAdminsGroups\n\t\t\t\t.map(group => group.name)\n\t\t\t\t.join(', ')\n\t\t},\n\t\tusedSpace() {\n\t\t\tif (this.user.quota.used) {\n\t\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(this.user.quota.used) })\n\t\t\t}\n\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(0) })\n\t\t},\n\t\tcanEdit() {\n\t\t\treturn getCurrentUser().uid !== this.user.id || this.settings.isAdmin\n\t\t},\n\t\tuserQuota() {\n\t\t\tlet quota = this.user.quota.quota\n\n\t\t\tif (quota === 'default') {\n\t\t\t\tquota = this.settings.defaultQuota\n\t\t\t\tif (quota !== 'none') {\n\t\t\t\t\t// convert to numeric value to match what the server would usually return\n\t\t\t\t\tquota = OC.Util.computerFileSize(quota)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// when the default quota is unlimited, the server returns -3 here, map it to \"none\"\n\t\t\tif (quota === 'none' || quota === -3) {\n\t\t\t\treturn t('settings', 'Unlimited')\n\t\t\t} else if (quota >= 0) {\n\t\t\t\treturn OC.Util.humanFileSize(quota)\n\t\t\t}\n\t\t\treturn OC.Util.humanFileSize(0)\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleMenu() {\n\t\t\tthis.$emit('update:openedMenu', !this.openedMenu)\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.$emit('update:openedMenu', false)\n\t\t},\n\t\ttoggleEdit() {\n\t\t\tthis.$emit('update:editing', true)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n\t.cellText {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n}\n\t.icon-more {\n\t\tbackground-color: var(--color-main-background);\n\t\tborder: 0;\n\t}\n</style>\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=0b39a53a&\"\nimport script from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\",class:{'disabled': _vm.loading.delete || _vm.loading.disable},attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"alt\":\"\",\"width\":\"32\",\"height\":\"32\",\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x'}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.displayname.length > 20 ? _vm.user.displayname : ''),expression:\"user.displayname.length > 20 ? user.displayname : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")])])]),_vm._v(\" \"),_c('div'),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.email !== null && _vm.user.email.length > 20 ? _vm.user.email : ''),expression:\"user.email !== null && user.email.length > 20 ? user.email : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.email)+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"groups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userGroupsLabels)+\"\\n\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subAdminsGroups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userSubAdminsGroupsLabels)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userQuota\"},[_c('div',{staticClass:\"quota\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.userQuota)+\" (\"+_vm._s(_vm.usedSpace)+\")\\n\\t\\t\\t\"),_c('progress',{staticClass:\"quota-user-progress\",class:{'warn': _vm.usedQuota > 80},attrs:{\"max\":\"100\"},domProps:{\"value\":_vm.usedQuota}})])]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLanguage.name)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('div',{staticClass:\"userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.backend)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.storageLocation),expression:\"user.storageLocation\"}],staticClass:\"storageLocation subtitle\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.storageLocation)+\"\\n\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.userLastLoginTooltip),expression:\"userLastLoginTooltip\",modifiers:{\"auto\":true}}],staticClass:\"lastLogin\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLastLogin)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(_vm.canEdit && !_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":_vm.toggleEdit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Edit User'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"userPopoverMenuWrapper\"},[_c('button',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"icon-more\",attrs:{\"aria-label\":_vm.t('settings', 'Toggle user actions menu')},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMenu.apply(null, arguments)}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu },attrs:{\"aria-expanded\":_vm.openedMenu}},[_c('PopoverMenu',{attrs:{\"menu\":_vm.userActions}})],1)])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"feedback\",style:({opacity: _vm.feedbackMessage !== '' ? 1 : 0})},[_c('div',{staticClass:\"icon-checkmark\"}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.feedbackMessage)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<!-- Obfuscated user: Logged in user does not have permissions to see all of the data -->\n\t<div v-if=\"Object.keys(user).length ===1\" :data-id=\"user.id\" class=\"row\">\n\t\t<div :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\"\n\t\t\tclass=\"avatar\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</div>\n\t\t<div class=\"name\">\n\t\t\t{{ user.id }}\n\t\t</div>\n\t\t<div class=\"obfuscated\">\n\t\t\t{{ t('settings','You do not have permissions to see the details of this user') }}\n\t\t</div>\n\t</div>\n\n\t<!-- User full data -->\n\t<UserRowSimple v-else-if=\"!editing\"\n\t\t:editing.sync=\"editing\"\n\t\t:feedback-message=\"feedbackMessage\"\n\t\t:groups=\"groups\"\n\t\t:languages=\"languages\"\n\t\t:loading=\"loading\"\n\t\t:opened-menu.sync=\"openedMenu\"\n\t\t:settings=\"settings\"\n\t\t:show-config=\"showConfig\"\n\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t:user-actions=\"userActions\"\n\t\t:user=\"user\"\n\t\t:class=\"{'row--menu-opened': openedMenu}\" />\n\t<div v-else\n\t\t:class=\"{\n\t\t\t'disabled': loading.delete || loading.disable,\n\t\t\t'row--menu-opened': openedMenu\n\t\t}\"\n\t\t:data-id=\"user.id\"\n\t\tclass=\"row row--editable\">\n\t\t<div :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\"\n\t\t\tclass=\"avatar\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div v-if=\"user.backendCapabilities.setDisplayName\" class=\"displayName\">\n\t\t\t<form :class=\"{'icon-loading-small': loading.displayName}\"\n\t\t\t\tclass=\"displayName\"\n\t\t\t\t@submit.prevent=\"updateDisplayName\">\n\t\t\t\t<input :id=\"'displayName'+user.id+rand\"\n\t\t\t\t\tref=\"displayName\"\n\t\t\t\t\t:disabled=\"loading.displayName||loading.all\"\n\t\t\t\t\t:value=\"user.displayname\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input class=\"icon-confirm\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tvalue=\"\">\n\t\t\t</form>\n\t\t</div>\n\t\t<div v-else class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div v-tooltip=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<form v-if=\"settings.canChangePassword && user.backendCapabilities.setPassword\"\n\t\t\t:class=\"{'icon-loading-small': loading.password}\"\n\t\t\tclass=\"password\"\n\t\t\t@submit.prevent=\"updatePassword\">\n\t\t\t<input :id=\"'password'+user.id+rand\"\n\t\t\t\tref=\"password\"\n\t\t\t\t:disabled=\"loading.password || loading.all\"\n\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\tmaxlength=\"469\"\n\t\t\t\t:placeholder=\"t('settings', 'Add new password')\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\trequired\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\ttype=\"password\"\n\t\t\t\tvalue=\"\">\n\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t</form>\n\t\t<div v-else />\n\t\t<form :class=\"{'icon-loading-small': loading.mailAddress}\"\n\t\t\tclass=\"mailAddress\"\n\t\t\t@submit.prevent=\"updateEmail\">\n\t\t\t<input :id=\"'mailAddress'+user.id+rand\"\n\t\t\t\tref=\"mailAddress\"\n\t\t\t\t:disabled=\"loading.mailAddress||loading.all\"\n\t\t\t\t:placeholder=\"t('settings', 'Add new email address')\"\n\t\t\t\t:value=\"user.email\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\ttype=\"email\">\n\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t</form>\n\t\t<div :class=\"{'icon-loading-small': loading.groups}\" class=\"groups\">\n\t\t\t<Multiselect :close-on-select=\"false\"\n\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t:limit=\"2\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:options=\"availableGroups\"\n\t\t\t\t:placeholder=\"t('settings', 'Add user to group')\"\n\t\t\t\t:tag-width=\"60\"\n\t\t\t\t:taggable=\"settings.isAdmin\"\n\t\t\t\t:value=\"userGroups\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@remove=\"removeUserGroup\"\n\t\t\t\t@select=\"addUserGroup\"\n\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</Multiselect>\n\t\t</div>\n\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t:class=\"{'icon-loading-small': loading.subadmins}\"\n\t\t\tclass=\"subadmins\">\n\t\t\t<Multiselect :close-on-select=\"false\"\n\t\t\t\t:disabled=\"loading.subadmins||loading.all\"\n\t\t\t\t:limit=\"2\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t:tag-width=\"60\"\n\t\t\t\t:value=\"userSubAdminsGroups\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@remove=\"removeUserSubAdmin\"\n\t\t\t\t@select=\"addUserSubAdmin\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</Multiselect>\n\t\t</div>\n\t\t<div v-tooltip.auto=\"usedSpace\"\n\t\t\t:class=\"{'icon-loading-small': loading.quota}\"\n\t\t\tclass=\"quota\">\n\t\t\t<Multiselect :allow-empty=\"false\"\n\t\t\t\t:disabled=\"loading.quota||loading.all\"\n\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t:taggable=\"true\"\n\t\t\t\t:value=\"userQuota\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@input=\"setUserQuota\"\n\t\t\t\t@tag=\"validateQuota\" />\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t:class=\"{'icon-loading-small': loading.languages}\"\n\t\t\tclass=\"languages\">\n\t\t\t<Multiselect :allow-empty=\"false\"\n\t\t\t\t:disabled=\"loading.languages||loading.all\"\n\t\t\t\t:options=\"languages\"\n\t\t\t\t:placeholder=\"t('settings', 'No language set')\"\n\t\t\t\t:value=\"userLanguage\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tgroup-label=\"label\"\n\t\t\t\tgroup-values=\"languages\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttrack-by=\"code\"\n\t\t\t\t@input=\"setUserLanguage\" />\n\t\t</div>\n\n\t\t<!-- don't show this on edit mode -->\n\t\t<div v-if=\"showConfig.showStoragePath || showConfig.showUserBackend\"\n\t\t\tclass=\"storageLocation\" />\n\t\t<div v-if=\"showConfig.showLastLogin\" />\n\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"!loading.all\"\n\t\t\t\tclass=\"toggleUserActions\">\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton icon=\"icon-checkmark\"\n\t\t\t\t\t\t@click=\"editing = false\">\n\t\t\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<div v-click-outside=\"hideMenu\" class=\"userPopoverMenuWrapper\">\n\t\t\t\t\t<button class=\"icon-more\"\n\t\t\t\t\t\t@click.prevent=\"toggleMenu\" />\n\t\t\t\t\t<div :class=\"{ 'open': openedMenu }\" class=\"popovermenu\">\n\t\t\t\t\t\t<PopoverMenu :menu=\"userActions\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :style=\"{opacity: feedbackMessage !== '' ? 1 : 0}\"\n\t\t\t\tclass=\"feedback\">\n\t\t\t\t<div class=\"icon-checkmark\" />\n\t\t\t\t{{ feedbackMessage }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport ClickOutside from 'vue-click-outside'\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport {\n\tPopoverMenu,\n\tMultiselect,\n\tActions,\n\tActionButton,\n} from '@nextcloud/vue'\nimport UserRowSimple from './UserRowSimple'\nimport UserRowMixin from '../../mixins/UserRowMixin'\n\nVue.use(VTooltip)\n\nexport default {\n\tname: 'UserRow',\n\tcomponents: {\n\t\tUserRowSimple,\n\t\tPopoverMenu,\n\t\tActions,\n\t\tActionButton,\n\t\tMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tgroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tquotaOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tlanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\trand: parseInt(Math.random() * 1000),\n\t\t\topenedMenu: false,\n\t\t\tfeedbackMessage: '',\n\t\t\tediting: false,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tdisplayName: false,\n\t\t\t\tpassword: false,\n\t\t\t\tmailAddress: false,\n\t\t\t\tgroups: false,\n\t\t\t\tsubadmins: false,\n\t\t\t\tquota: false,\n\t\t\t\tdelete: false,\n\t\t\t\tdisable: false,\n\t\t\t\tlanguages: false,\n\t\t\t\twipe: false,\n\t\t\t},\n\t\t}\n\t},\n\tcomputed: {\n\t\t/* USER POPOVERMENU ACTIONS */\n\t\tuserActions() {\n\t\t\tconst actions = [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\ttext: t('settings', 'Delete user'),\n\t\t\t\t\taction: this.deleteUser,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\ttext: t('settings', 'Wipe all devices'),\n\t\t\t\t\taction: this.wipeUserDevices,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: this.user.enabled ? 'icon-close' : 'icon-add',\n\t\t\t\t\ttext: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),\n\t\t\t\t\taction: this.enableDisableUser,\n\t\t\t\t},\n\t\t\t]\n\t\t\tif (this.user.email !== null && this.user.email !== '') {\n\t\t\t\tactions.push({\n\t\t\t\t\ticon: 'icon-mail',\n\t\t\t\t\ttext: t('settings', 'Resend welcome email'),\n\t\t\t\t\taction: this.sendWelcomeMail,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn actions.concat(this.externalActions)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/* MENU HANDLING */\n\t\ttoggleMenu() {\n\t\t\tthis.openedMenu = !this.openedMenu\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.openedMenu = false\n\t\t},\n\n\t\twipeUserDevices() {\n\t\t\tconst userid = this.user.id\n\t\t\tOC.dialogs.confirmDestructive(\n\t\t\t\tt('settings', 'In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.', { userid }),\n\t\t\t\tt('settings', 'Remote wipe of devices'),\n\t\t\t\t{\n\t\t\t\t\ttype: OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\t\tconfirm: t('settings', 'Wipe {userid}\\'s devices', { userid }),\n\t\t\t\t\tconfirmClasses: 'error',\n\t\t\t\t\tcancel: t('settings', 'Cancel'),\n\t\t\t\t},\n\t\t\t\t(result) => {\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tthis.loading.wipe = true\n\t\t\t\t\t\tthis.loading.all = true\n\t\t\t\t\t\tthis.$store.dispatch('wipeUserDevices', userid)\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tthis.loading.wipe = false\n\t\t\t\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue\n\t\t\t)\n\t\t},\n\n\t\tdeleteUser() {\n\t\t\tconst userid = this.user.id\n\t\t\tOC.dialogs.confirmDestructive(\n\t\t\t\tt('settings', 'Fully delete {userid}\\'s account including all their personal files, app data, etc.', { userid }),\n\t\t\t\tt('settings', 'Account deletion'),\n\t\t\t\t{\n\t\t\t\t\ttype: OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\t\tconfirm: t('settings', 'Delete {userid}\\'s account', { userid }),\n\t\t\t\t\tconfirmClasses: 'error',\n\t\t\t\t\tcancel: t('settings', 'Cancel'),\n\t\t\t\t},\n\t\t\t\t(result) => {\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tthis.loading.delete = true\n\t\t\t\t\t\tthis.loading.all = true\n\t\t\t\t\t\treturn this.$store.dispatch('deleteUser', userid)\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tthis.loading.delete = false\n\t\t\t\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue\n\t\t\t)\n\t\t},\n\n\t\tenableDisableUser() {\n\t\t\tthis.loading.delete = true\n\t\t\tthis.loading.all = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst enabled = !this.user.enabled\n\t\t\treturn this.$store.dispatch('enableDisableUser', {\n\t\t\t\tuserid,\n\t\t\t\tenabled,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading.delete = false\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user displayName\n\t\t *\n\t\t * @param {string} displayName The display name\n\t\t */\n\t\tupdateDisplayName() {\n\t\t\tconst displayName = this.$refs.displayName.value\n\t\t\tthis.loading.displayName = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'displayname',\n\t\t\t\tvalue: displayName,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.displayName = false\n\t\t\t\tthis.$refs.displayName.value = displayName\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user password\n\t\t *\n\t\t * @param {string} password The email adress\n\t\t */\n\t\tupdatePassword() {\n\t\t\tconst password = this.$refs.password.value\n\t\t\tthis.loading.password = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'password',\n\t\t\t\tvalue: password,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.password = false\n\t\t\t\tthis.$refs.password.value = '' // empty & show placeholder\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user mailAddress\n\t\t *\n\t\t * @param {string} mailAddress The email adress\n\t\t */\n\t\tupdateEmail() {\n\t\t\tconst mailAddress = this.$refs.mailAddress.value\n\t\t\tthis.loading.mailAddress = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'email',\n\t\t\t\tvalue: mailAddress,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.mailAddress = false\n\t\t\t\tthis.$refs.mailAddress.value = mailAddress\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Create a new group and add user to it\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t */\n\t\tasync createGroup(gid) {\n\t\t\tthis.loading = { groups: true, subadmins: true }\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addGroup', gid)\n\t\t\t\tconst userid = this.user.id\n\t\t\t\tawait this.$store.dispatch('addUserGroup', { userid, gid })\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = { groups: false, subadmins: false }\n\t\t\t}\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\n\t\t},\n\n\t\t/**\n\t\t * Add user to group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync addUserGroup(group) {\n\t\t\tif (group.canAdd === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.loading.groups = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addUserGroup', { userid, gid })\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.groups = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync removeUserGroup(group) {\n\t\t\tif (group.canRemove === false) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.loading.groups = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('removeUserGroup', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t\tthis.loading.groups = false\n\t\t\t\t// remove user from current list if current list is the removed group\n\t\t\t\tif (this.$route.params.selectedGroup === gid) {\n\t\t\t\t\tthis.$store.commit('deleteUser', userid)\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthis.loading.groups = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add user to group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync addUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addUserSubAdmin', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t\tthis.loading.subadmins = false\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync removeUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('removeUserSubAdmin', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.subadmins = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Dispatch quota set request\n\t\t *\n\t\t * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t * @return {string}\n\t\t */\n\t\tasync setUserQuota(quota = 'none') {\n\t\t\tthis.loading.quota = true\n\t\t\t// ensure we only send the preset id\n\t\t\tquota = quota.id ? quota.id : quota\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'quota',\n\t\t\t\t\tvalue: quota,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.quota = false\n\t\t\t}\n\t\t\treturn quota\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @return {Promise|boolean}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)))\n\t\t\t}\n\t\t\t// if no valid do not change\n\t\t\treturn false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch language set request\n\t\t *\n\t\t * @param {object} lang language object {code:'en', name:'English'}\n\t\t * @return {object}\n\t\t */\n\t\tasync setUserLanguage(lang) {\n\t\t\tthis.loading.languages = true\n\t\t\t// ensure we only send the preset id\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'language',\n\t\t\t\t\tvalue: lang.code,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.languages = false\n\t\t\t}\n\t\t\treturn lang\n\t\t},\n\n\t\t/**\n\t\t * Dispatch new welcome mail request\n\t\t */\n\t\tsendWelcomeMail() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch('sendWelcomeMail', this.user.id)\n\t\t\t\t.then(success => {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\t// Show feedback to indicate the success\n\t\t\t\t\t\tthis.feedbackMessage = t('setting', 'Welcome mail sent!')\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.feedbackMessage = ''\n\t\t\t\t\t\t}, 2000)\n\t\t\t\t\t}\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t})\n\t\t},\n\n\t},\n}\n</script>\n<style scoped lang=\"scss\">\n\t// Force menu to be above other rows\n\t.row--menu-opened {\n\t\tz-index: 1 !important;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=c1f088a6&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=c1f088a6&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=c1f088a6&scoped=true&\"\nimport script from \"./UserRow.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRow.vue?vue&type=style&index=0&id=c1f088a6&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c1f088a6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (Object.keys(_vm.user).length ===1)?_c('div',{staticClass:\"row\",attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x',\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"obfuscated\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings','You do not have permissions to see the details of this user'))+\"\\n\\t\")])]):(!_vm.editing)?_c('UserRowSimple',{class:{'row--menu-opened': _vm.openedMenu},attrs:{\"editing\":_vm.editing,\"feedback-message\":_vm.feedbackMessage,\"groups\":_vm.groups,\"languages\":_vm.languages,\"loading\":_vm.loading,\"opened-menu\":_vm.openedMenu,\"settings\":_vm.settings,\"show-config\":_vm.showConfig,\"sub-admins-groups\":_vm.subAdminsGroups,\"user-actions\":_vm.userActions,\"user\":_vm.user},on:{\"update:editing\":function($event){_vm.editing=$event},\"update:openedMenu\":function($event){_vm.openedMenu=$event},\"update:opened-menu\":function($event){_vm.openedMenu=$event}}}):_c('div',{staticClass:\"row row--editable\",class:{\n\t\t'disabled': _vm.loading.delete || _vm.loading.disable,\n\t\t'row--menu-opened': _vm.openedMenu\n\t},attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x',\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),(_vm.user.backendCapabilities.setDisplayName)?_c('div',{staticClass:\"displayName\"},[_c('form',{staticClass:\"displayName\",class:{'icon-loading-small': _vm.loading.displayName},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateDisplayName.apply(null, arguments)}}},[_c('input',{ref:\"displayName\",attrs:{\"id\":'displayName'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.displayName||_vm.loading.all,\"autocapitalize\":\"off\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"spellcheck\":\"false\",\"type\":\"text\"},domProps:{\"value\":_vm.user.displayname}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})])]):_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.displayname.length > 20 ? _vm.user.displayname : ''),expression:\"user.displayname.length > 20 ? user.displayname : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")])])]),_vm._v(\" \"),(_vm.settings.canChangePassword && _vm.user.backendCapabilities.setPassword)?_c('form',{staticClass:\"password\",class:{'icon-loading-small': _vm.loading.password},on:{\"submit\":function($event){$event.preventDefault();return _vm.updatePassword.apply(null, arguments)}}},[_c('input',{ref:\"password\",attrs:{\"id\":'password'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.password || _vm.loading.all,\"minlength\":_vm.minPasswordLength,\"maxlength\":\"469\",\"placeholder\":_vm.t('settings', 'Add new password'),\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"required\":\"\",\"spellcheck\":\"false\",\"type\":\"password\",\"value\":\"\"}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})]):_c('div'),_vm._v(\" \"),_c('form',{staticClass:\"mailAddress\",class:{'icon-loading-small': _vm.loading.mailAddress},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateEmail.apply(null, arguments)}}},[_c('input',{ref:\"mailAddress\",attrs:{\"id\":'mailAddress'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.mailAddress||_vm.loading.all,\"placeholder\":_vm.t('settings', 'Add new email address'),\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"spellcheck\":\"false\",\"type\":\"email\"},domProps:{\"value\":_vm.user.email}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",class:{'icon-loading-small': _vm.loading.groups}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.groups||_vm.loading.all,\"limit\":2,\"multiple\":true,\"options\":_vm.availableGroups,\"placeholder\":_vm.t('settings', 'Add user to group'),\"tag-width\":60,\"taggable\":_vm.settings.isAdmin,\"value\":_vm.userGroups,\"label\":\"name\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"remove\":_vm.removeUserGroup,\"select\":_vm.addUserGroup,\"tag\":_vm.createGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",class:{'icon-loading-small': _vm.loading.subadmins}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.subadmins||_vm.loading.all,\"limit\":2,\"multiple\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"tag-width\":60,\"value\":_vm.userSubAdminsGroups,\"label\":\"name\",\"track-by\":\"id\"},on:{\"remove\":_vm.removeUserSubAdmin,\"select\":_vm.addUserSubAdmin}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.usedSpace),expression:\"usedSpace\",modifiers:{\"auto\":true}}],staticClass:\"quota\",class:{'icon-loading-small': _vm.loading.quota}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"disabled\":_vm.loading.quota||_vm.loading.all,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"taggable\":true,\"value\":_vm.userQuota,\"label\":\"label\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"input\":_vm.setUserQuota,\"tag\":_vm.validateQuota}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",class:{'icon-loading-small': _vm.loading.languages}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"disabled\":_vm.loading.languages||_vm.loading.all,\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'No language set'),\"value\":_vm.userLanguage,\"group-label\":\"label\",\"group-values\":\"languages\",\"label\":\"name\",\"track-by\":\"code\"},on:{\"input\":_vm.setUserLanguage}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend)?_c('div',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div'):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(!_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-checkmark\"},on:{\"click\":function($event){_vm.editing = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"userPopoverMenuWrapper\"},[_c('button',{staticClass:\"icon-more\",on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMenu.apply(null, arguments)}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu }},[_c('PopoverMenu',{attrs:{\"menu\":_vm.userActions}})],1)])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"feedback\",style:({opacity: _vm.feedbackMessage !== '' ? 1 : 0})},[_c('div',{staticClass:\"icon-checkmark\"}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.feedbackMessage)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div id=\"app-content\" class=\"user-list-grid\" @scroll.passive=\"onScroll\">\n\t\t<Modal v-if=\"showConfig.showNewUserForm\" size=\"small\" @close=\"closeModal\">\n\t\t\t<form id=\"new-user\"\n\t\t\t\t:disabled=\"loading.all\"\n\t\t\t\tclass=\"modal__content\"\n\t\t\t\t@submit.prevent=\"createUser\">\n\t\t\t\t<h2>{{ t('settings','New user') }}</h2>\n\t\t\t\t<input id=\"newusername\"\n\t\t\t\t\tref=\"newusername\"\n\t\t\t\t\tv-model=\"newUser.id\"\n\t\t\t\t\t:disabled=\"settings.newUserGenerateUserID\"\n\t\t\t\t\t:placeholder=\"settings.newUserGenerateUserID\n\t\t\t\t\t\t? t('settings', 'Will be autogenerated')\n\t\t\t\t\t\t: t('settings', 'Username')\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"username\"\n\t\t\t\t\tpattern=\"[a-zA-Z0-9 _\\.@\\-']+\"\n\t\t\t\t\trequired\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input id=\"newdisplayname\"\n\t\t\t\t\tv-model=\"newUser.displayName\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Display name')\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"displayname\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input id=\"newuserpassword\"\n\t\t\t\t\tref=\"newuserpassword\"\n\t\t\t\t\tv-model=\"newUser.password\"\n\t\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Password')\"\n\t\t\t\t\t:required=\"newUser.mailAddress===''\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\ttype=\"password\">\n\t\t\t\t<input id=\"newemail\"\n\t\t\t\t\tv-model=\"newUser.mailAddress\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Email')\"\n\t\t\t\t\t:required=\"newUser.password==='' || settings.newUserRequireEmail\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"email\"\n\t\t\t\t\ttype=\"email\">\n\t\t\t\t<div class=\"groups modal__item\">\n\t\t\t\t\t<!-- hidden input trick for vanilla html5 form validation -->\n\t\t\t\t\t<input v-if=\"!settings.isAdmin\"\n\t\t\t\t\t\tid=\"newgroups\"\n\t\t\t\t\t\t:class=\"{'icon-loading-small': loading.groups}\"\n\t\t\t\t\t\t:required=\"!settings.isAdmin\"\n\t\t\t\t\t\t:value=\"newUser.groups\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\ttype=\"text\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.groups\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:options=\"canAddGroups\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Add user to group')\"\n\t\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t\t\t<!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\tSubadmins can't create users outside their groups\n\t\t\t\t\t\t\tTherefore, empty select is forbidden -->\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\t\tclass=\"subadmins modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.subAdminsGroups\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttrack-by=\"id\">\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"quota modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.quota\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@tag=\"validateQuota\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.language\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:options=\"languages\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Default language')\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tgroup-label=\"label\"\n\t\t\t\t\t\tgroup-values=\"languages\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttrack-by=\"code\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showStoragePath\" class=\"storageLocation\" />\n\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\" />\n\t\t\t\t<div v-if=\"showConfig.showLastLogin\" class=\"lastLogin\" />\n\t\t\t\t<div class=\"user-actions\">\n\t\t\t\t\t<Button id=\"newsubmit\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\tnative-type=\"submit\"\n\t\t\t\t\t\tvalue=\"\">\n\t\t\t\t\t\t{{ t('settings', 'Add a new user') }}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Modal>\n\t\t<div id=\"grid-header\"\n\t\t\t:class=\"{'sticky': scrolled && !showConfig.showNewUserForm}\"\n\t\t\tclass=\"row\">\n\t\t\t<div id=\"headerAvatar\" class=\"avatar\" />\n\t\t\t<div id=\"headerName\" class=\"name\">\n\t\t\t\t{{ t('settings', 'Username') }}\n\n\t\t\t\t<div class=\"subtitle\">\n\t\t\t\t\t{{ t('settings', 'Display name') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"headerPassword\" class=\"password\">\n\t\t\t\t{{ t('settings', 'Password') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerAddress\" class=\"mailAddress\">\n\t\t\t\t{{ t('settings', 'Email') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerGroups\" class=\"groups\">\n\t\t\t\t{{ t('settings', 'Groups') }}\n\t\t\t</div>\n\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\tid=\"headerSubAdmins\"\n\t\t\t\tclass=\"subadmins\">\n\t\t\t\t{{ t('settings', 'Group admin for') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerQuota\" class=\"quota\">\n\t\t\t\t{{ t('settings', 'Quota') }}\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t\tid=\"headerLanguages\"\n\t\t\t\tclass=\"languages\">\n\t\t\t\t{{ t('settings', 'Language') }}\n\t\t\t</div>\n\n\t\t\t<div v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\"\n\t\t\t\tclass=\"headerUserBackend userBackend\">\n\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t\t{{ t('settings', 'User backend') }}\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showStoragePath\"\n\t\t\t\t\tclass=\"subtitle storageLocation\">\n\t\t\t\t\t{{ t('settings', 'Storage location') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLastLogin\"\n\t\t\t\tclass=\"headerLastLogin lastLogin\">\n\t\t\t\t{{ t('settings', 'Last login') }}\n\t\t\t</div>\n\n\t\t\t<div class=\"userActions\" />\n\t\t</div>\n\n\t\t<user-row v-for=\"user in filteredUsers\"\n\t\t\t:key=\"user.id\"\n\t\t\t:external-actions=\"externalActions\"\n\t\t\t:groups=\"groups\"\n\t\t\t:languages=\"languages\"\n\t\t\t:quota-options=\"quotaOptions\"\n\t\t\t:settings=\"settings\"\n\t\t\t:show-config=\"showConfig\"\n\t\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t\t:user=\"user\" />\n\t\t<InfiniteLoading ref=\"infiniteLoading\" @infinite=\"infiniteHandler\">\n\t\t\t<div slot=\"spinner\">\n\t\t\t\t<div class=\"users-icon-loading icon-loading\" />\n\t\t\t</div>\n\t\t\t<div slot=\"no-more\">\n\t\t\t\t<div class=\"users-list-end\" />\n\t\t\t</div>\n\t\t\t<div slot=\"no-results\">\n\t\t\t\t<div id=\"emptycontent\">\n\t\t\t\t\t<div class=\"icon-contacts-dark\" />\n\t\t\t\t\t<h2>{{ t('settings', 'No users in here') }}</h2>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</InfiniteLoading>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport InfiniteLoading from 'vue-infinite-loading'\nimport Vue from 'vue'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\nimport Button from '@nextcloud/vue/dist/Components/Button'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\n\nimport userRow from './UserList/UserRow'\n\nconst unlimitedQuota = {\n\tid: 'none',\n\tlabel: t('settings', 'Unlimited'),\n}\nconst defaultQuota = {\n\tid: 'default',\n\tlabel: t('settings', 'Default quota'),\n}\nconst newUser = {\n\tid: '',\n\tdisplayName: '',\n\tpassword: '',\n\tmailAddress: '',\n\tgroups: [],\n\tsubAdminsGroups: [],\n\tquota: defaultQuota,\n\tlanguage: {\n\t\tcode: 'en',\n\t\tname: t('settings', 'Default language'),\n\t},\n}\n\nexport default {\n\tname: 'UserList',\n\tcomponents: {\n\t\tModal,\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t\tButton,\n\t},\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tunlimitedQuota,\n\t\t\tdefaultQuota,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t},\n\t\t\tscrolled: false,\n\t\t\tsearchQuery: '',\n\t\t\tnewUser: Object.assign({}, newUser),\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t\tselectedGroupDecoded() {\n\t\t\treturn decodeURIComponent(this.selectedGroup)\n\t\t},\n\t\tfilteredUsers() {\n\t\t\tif (this.selectedGroup === 'disabled') {\n\t\t\t\treturn this.users.filter(user => user.enabled === false)\n\t\t\t}\n\t\t\tif (!this.settings.isAdmin) {\n\t\t\t\t// we don't want subadmins to edit themselves\n\t\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t\t}\n\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t},\n\t\tgroups() {\n\t\t\t// data provided php side + remove the disabled group\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t\tcanAddGroups() {\n\t\t\t// disabled if no permission to add new users to group\n\t\t\treturn this.groups.map(group => {\n\t\t\t\t// clone object because we don't want\n\t\t\t\t// to edit the original groups\n\t\t\t\tgroup = Object.assign({}, group)\n\t\t\t\tgroup.$isDisabled = group.canAdd === false\n\t\t\t\treturn group\n\t\t\t})\n\t\t},\n\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\n\t\t\t\tid: cur,\n\t\t\t\tlabel: cur,\n\t\t\t}), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(this.unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(this.defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\t\tusersCount() {\n\t\t\treturn this.users.length\n\t\t},\n\n\t\t/* LANGUAGES */\n\t\tlanguages() {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('settings', 'Common languages'),\n\t\t\t\t\tlanguages: this.settings.languages.commonLanguages,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('settings', 'Other languages'),\n\t\t\t\t\tlanguages: this.settings.languages.otherLanguages,\n\t\t\t\t},\n\t\t\t]\n\t\t},\n\t},\n\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup(val, old) {\n\t\t\t// if selected is the disabled group but it's empty\n\t\t\tthis.redirectIfDisabled()\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\t// make sure the infiniteLoading state is changed if we manually\n\t\t// add/remove data from the store\n\t\tusersCount(val, old) {\n\t\t\t// deleting the last user, reset the list\n\t\t\tif (val === 0 && old === 1) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t// adding the first user, warn the infiniteLoader that\n\t\t\t\t// the list is not empty anymore (we don't fetch the newly\n\t\t\t\t// added user as we already have all the info we need)\n\t\t\t} else if (val === 1 && old === 0) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.loaded()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (!this.settings.canChangePassword) {\n\t\t\tOC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'))\n\t\t}\n\n\t\t/**\n\t\t * Reset and init new user form\n\t\t */\n\t\tthis.resetForm()\n\n\t\t/**\n\t\t * Register search\n\t\t */\n\t\tsubscribe('nextcloud:unified-search.search', this.search)\n\t\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\n\t\t/**\n\t\t * If disabled group but empty, redirect\n\t\t */\n\t\tthis.redirectIfDisabled()\n\t},\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search.search', this.search)\n\t\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tonScroll(event) {\n\t\t\tthis.scrolled = event.target.scrollTo > 0\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @return {object}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\tquota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))\n\t\t\t\tthis.newUser.quota = { id: quota, label: quota }\n\t\t\t\treturn this.newUser.quota\n\t\t\t}\n\t\t\t// Default is unlimited\n\t\t\tthis.newUser.quota = this.quotaOptions[0]\n\t\t\treturn this.quotaOptions[0]\n\t\t},\n\n\t\tinfiniteHandler($state) {\n\t\t\tthis.$store.dispatch('getUsers', {\n\t\t\t\toffset: this.usersOffset,\n\t\t\t\tlimit: this.usersLimit,\n\t\t\t\tgroup: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n\t\t\t\tsearch: this.searchQuery,\n\t\t\t})\n\t\t\t\t.then((usersCount) => {\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\t$state.loaded()\n\t\t\t\t\t}\n\t\t\t\t\tif (usersCount < this.usersLimit) {\n\t\t\t\t\t\t$state.complete()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/* SEARCH */\n\t\tsearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.search({ query: '' })\n\t\t},\n\n\t\tresetForm() {\n\t\t\t// revert form to original state\n\t\t\tthis.newUser = Object.assign({}, newUser)\n\n\t\t\t/**\n\t\t\t * Init default language from server data. The use of this.settings\n\t\t\t * requires a computed variable, which break the v-model binding of the form,\n\t\t\t * this is a much easier solution than getter and setter on a computed var\n\t\t\t */\n\t\t\tif (this.settings.defaultLanguage) {\n\t\t\t\tVue.set(this.newUser.language, 'code', this.settings.defaultLanguage)\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * In case the user directly loaded the user list within a group\n\t\t\t * the watch won't be triggered. We need to initialize it.\n\t\t\t */\n\t\t\tthis.setNewUserDefaultGroup(this.selectedGroup)\n\n\t\t\tthis.loading.all = false\n\t\t},\n\t\tcreateUser() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch('addUser', {\n\t\t\t\tuserid: this.newUser.id,\n\t\t\t\tpassword: this.newUser.password,\n\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.resetForm()\n\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\tthis.closeModal()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\t\tthis.$refs.newuserpassword.focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tsetNewUserDefaultGroup(value) {\n\t\t\tif (value && value.length > 0) {\n\t\t\t\t// setting new user default group to the current selected one\n\t\t\t\tconst currentGroup = this.groups.find(group => group.id === value)\n\t\t\t\tif (currentGroup) {\n\t\t\t\t\tthis.newUser.groups = [currentGroup]\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fallback, empty selected group\n\t\t\tthis.newUser.groups = []\n\t\t},\n\n\t\t/**\n\t\t * Create a new group\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t * @return {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading.groups = true\n\t\t\tthis.$store.dispatch('addGroup', gid)\n\t\t\t\t.then((group) => {\n\t\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\n\t\t},\n\n\t\t/**\n\t\t * If the selected group is the disabled group but the count is 0\n\t\t * redirect to the all users page.\n\t\t * we only check for 0 because we don't have the count on ldap\n\t\t * and we therefore set the usercount to -1 in this specific case\n\t\t */\n\t\tredirectIfDisabled() {\n\t\t\tconst allGroups = this.$store.getters.getGroups\n\t\t\tif (this.selectedGroup === 'disabled'\n\t\t\t\t\t\t&& allGroups.findIndex(group => group.id === 'disabled' && group.usercount === 0) > -1) {\n\t\t\t\t// disabled group is empty, redirection to all users\n\t\t\t\tthis.$router.push({ name: 'users' })\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t}\n\t\t},\n\t\tcloseModal() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.modal-wrapper {\n\t\tmargin: 2vh 0;\n\t\talign-items: flex-start;\n\t}\n\t.modal__content {\n\t\tdisplay: flex;\n\t\tpadding: 20px;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\ttext-align: center;\n\t}\n\t.modal__item {\n\t\tmargin-bottom: 16px;\n\t\twidth: 100%;\n\t}\n\t.modal__item:not(:focus):not(:active) {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\t.modal__item::v-deep .multiselect {\n\t\twidth: 100%;\n\t}\n\t.user-actions {\n\t\tmargin-top: 20px;\n\t}\n\t.modal__content::v-deep .multiselect__single {\n\t\ttext-align: left;\n\t\tbox-sizing: border-box;\n\t}\n\t.modal__content::v-deep .multiselect__content-wrapper {\n\t\tbox-sizing: border-box;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n\n\t/* fake input for groups validation */\n\tinput#newgroups {\n\t\tposition: absolute;\n\t\topacity: 0;\n\t\t/* The \"hidden\" input is behind the Multiselect, so in general it does\n\t\t * not receives clicks. However, with Firefox, after the validation\n\t\t * fails, it will receive the first click done on it, so its width needs\n\t\t * to be set to 0 to prevent that (\"pointer-events: none\" does not\n\t\t * prevent it). */\n\t\twidth: 0;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=672d131f&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=672d131f&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=672d131f&scoped=true&\"\nimport script from \"./UserList.vue?vue&type=script&lang=js&\"\nexport * from \"./UserList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserList.vue?vue&type=style&index=0&id=672d131f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"672d131f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-list-grid\",attrs:{\"id\":\"app-content\"},on:{\"&scroll\":function($event){return _vm.onScroll.apply(null, arguments)}}},[(_vm.showConfig.showNewUserForm)?_c('Modal',{attrs:{\"size\":\"small\"},on:{\"close\":_vm.closeModal}},[_c('form',{staticClass:\"modal__content\",attrs:{\"id\":\"new-user\",\"disabled\":_vm.loading.all},on:{\"submit\":function($event){$event.preventDefault();return _vm.createUser.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings','New user')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.id),expression:\"newUser.id\"}],ref:\"newusername\",staticClass:\"modal__item\",attrs:{\"id\":\"newusername\",\"disabled\":_vm.settings.newUserGenerateUserID,\"placeholder\":_vm.settings.newUserGenerateUserID\n\t\t\t\t\t? _vm.t('settings', 'Will be autogenerated')\n\t\t\t\t\t: _vm.t('settings', 'Username'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"username\",\"pattern\":\"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\"required\":\"\",\"type\":\"text\"},domProps:{\"value\":(_vm.newUser.id)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"id\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.displayName),expression:\"newUser.displayName\"}],staticClass:\"modal__item\",attrs:{\"id\":\"newdisplayname\",\"placeholder\":_vm.t('settings', 'Display name'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"displayname\",\"type\":\"text\"},domProps:{\"value\":(_vm.newUser.displayName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"displayName\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.password),expression:\"newUser.password\"}],ref:\"newuserpassword\",staticClass:\"modal__item\",attrs:{\"id\":\"newuserpassword\",\"minlength\":_vm.minPasswordLength,\"placeholder\":_vm.t('settings', 'Password'),\"required\":_vm.newUser.mailAddress==='',\"autocapitalize\":\"none\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"name\":\"password\",\"type\":\"password\"},domProps:{\"value\":(_vm.newUser.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"password\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.mailAddress),expression:\"newUser.mailAddress\"}],staticClass:\"modal__item\",attrs:{\"id\":\"newemail\",\"placeholder\":_vm.t('settings', 'Email'),\"required\":_vm.newUser.password==='' || _vm.settings.newUserRequireEmail,\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"email\",\"type\":\"email\"},domProps:{\"value\":(_vm.newUser.mailAddress)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"mailAddress\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"groups modal__item\"},[(!_vm.settings.isAdmin)?_c('input',{class:{'icon-loading-small': _vm.loading.groups},attrs:{\"id\":\"newgroups\",\"required\":!_vm.settings.isAdmin,\"tabindex\":\"-1\",\"type\":\"text\"},domProps:{\"value\":_vm.newUser.groups}}):_vm._e(),_vm._v(\" \"),_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.groups||_vm.loading.all,\"multiple\":true,\"options\":_vm.canAddGroups,\"placeholder\":_vm.t('settings', 'Add user to group'),\"tag-width\":60,\"taggable\":true,\"label\":\"name\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"tag\":_vm.createGroup},model:{value:(_vm.newUser.groups),callback:function ($$v) {_vm.$set(_vm.newUser, \"groups\", $$v)},expression:\"newUser.groups\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"multiple\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"tag-width\":60,\"label\":\"name\",\"track-by\":\"id\"},model:{value:(_vm.newUser.subAdminsGroups),callback:function ($$v) {_vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)},expression:\"newUser.subAdminsGroups\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"taggable\":true,\"label\":\"label\",\"track-by\":\"id\"},on:{\"tag\":_vm.validateQuota},model:{value:(_vm.newUser.quota),callback:function ($$v) {_vm.$set(_vm.newUser, \"quota\", $$v)},expression:\"newUser.quota\"}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'Default language'),\"group-label\":\"label\",\"group-values\":\"languages\",\"label\":\"name\",\"track-by\":\"code\"},model:{value:(_vm.newUser.language),callback:function ($$v) {_vm.$set(_vm.newUser, \"language\", $$v)},expression:\"newUser.language\"}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"lastLogin\"}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"user-actions\"},[_c('Button',{attrs:{\"id\":\"newsubmit\",\"type\":\"primary\",\"native-type\":\"submit\",\"value\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Add a new user'))+\"\\n\\t\\t\\t\\t\")])],1)])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"row\",class:{'sticky': _vm.scrolled && !_vm.showConfig.showNewUserForm},attrs:{\"id\":\"grid-header\"}},[_c('div',{staticClass:\"avatar\",attrs:{\"id\":\"headerAvatar\"}}),_vm._v(\" \"),_c('div',{staticClass:\"name\",attrs:{\"id\":\"headerName\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Username'))+\"\\n\\n\\t\\t\\t\"),_c('div',{staticClass:\"subtitle\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Display name'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"password\",attrs:{\"id\":\"headerPassword\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Password'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\",attrs:{\"id\":\"headerAddress\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Email'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",attrs:{\"id\":\"headerGroups\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Groups'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",attrs:{\"id\":\"headerSubAdmins\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Group admin for'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota\",attrs:{\"id\":\"headerQuota\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Quota'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",attrs:{\"id\":\"headerLanguages\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Language'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('div',{staticClass:\"headerUserBackend userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'User backend'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"subtitle storageLocation\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Storage location'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"headerLastLogin lastLogin\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Last login'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"})]),_vm._v(\" \"),_vm._l((_vm.filteredUsers),function(user){return _c('user-row',{key:user.id,attrs:{\"external-actions\":_vm.externalActions,\"groups\":_vm.groups,\"languages\":_vm.languages,\"quota-options\":_vm.quotaOptions,\"settings\":_vm.settings,\"show-config\":_vm.showConfig,\"sub-admins-groups\":_vm.subAdminsGroups,\"user\":user}})}),_vm._v(\" \"),_c('InfiniteLoading',{ref:\"infiniteLoading\",on:{\"infinite\":_vm.infiniteHandler}},[_c('div',{attrs:{\"slot\":\"spinner\"},slot:\"spinner\"},[_c('div',{staticClass:\"users-icon-loading icon-loading\"})]),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_c('div',{staticClass:\"users-list-end\"})]),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"no-results\"},slot:\"no-results\"},[_c('div',{attrs:{\"id\":\"emptycontent\"}},[_c('div',{staticClass:\"icon-contacts-dark\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No users in here')))])])])])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Content app-name=\"settings\" :navigation-class=\"{ 'icon-loading': loadingAddGroup }\">\n\t\t<AppNavigation>\n\t\t\t<AppNavigationNew button-id=\"new-user-button\"\n\t\t\t\t:text=\"t('settings','New user')\"\n\t\t\t\tbutton-class=\"icon-add\"\n\t\t\t\t@click=\"showNewUserMenu\"\n\t\t\t\t@keyup.enter=\"showNewUserMenu\"\n\t\t\t\t@keyup.space=\"showNewUserMenu\" />\n\t\t\t<template #list>\n\t\t\t\t<AppNavigationItem id=\"addgroup\"\n\t\t\t\t\tref=\"addGroup\"\n\t\t\t\t\t:edit-placeholder=\"t('settings', 'Enter group name')\"\n\t\t\t\t\t:editable=\"true\"\n\t\t\t\t\t:loading=\"loadingAddGroup\"\n\t\t\t\t\t:title=\"t('settings', 'Add group')\"\n\t\t\t\t\ticon=\"icon-add\"\n\t\t\t\t\t@click=\"showAddGroupForm\"\n\t\t\t\t\t@update:title=\"createGroup\" />\n\t\t\t\t<AppNavigationItem id=\"everyone\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Active users')\"\n\t\t\t\t\t:to=\"{ name: 'users' }\"\n\t\t\t\t\ticon=\"icon-contacts-dark\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"userCount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ userCount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\t\t\t\t<AppNavigationItem v-if=\"settings.isAdmin\"\n\t\t\t\t\tid=\"admin\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Admins')\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'admin' } }\"\n\t\t\t\t\ticon=\"icon-user-admin\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"adminGroupMenu.count\" slot=\"counter\">\n\t\t\t\t\t\t{{ adminGroupMenu.count }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\n\t\t\t\t<!-- Hide the disabled if none, if we don't have the data (-1) show it -->\n\t\t\t\t<AppNavigationItem v-if=\"disabledGroupMenu.usercount > 0 || disabledGroupMenu.usercount === -1\"\n\t\t\t\t\tid=\"disabled\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Disabled users')\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'disabled' } }\"\n\t\t\t\t\ticon=\"icon-disabled-users\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"disabledGroupMenu.usercount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ disabledGroupMenu.usercount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\n\t\t\t\t<AppNavigationCaption v-if=\"groupList.length > 0\" :title=\"t('settings', 'Groups')\" />\n\t\t\t\t<GroupListItem v-for=\"group in groupList\"\n\t\t\t\t\t:id=\"group.id\"\n\t\t\t\t\t:key=\"group.id\"\n\t\t\t\t\t:title=\"group.title\"\n\t\t\t\t\t:count=\"group.count\" />\n\t\t\t</template>\n\t\t\t<template #footer>\n\t\t\t\t<AppNavigationSettings>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>{{ t('settings', 'Default quota:') }}</p>\n\t\t\t\t\t\t<Multiselect :value=\"defaultQuota\"\n\t\t\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t\t\t:placeholder=\"t('settings', 'Select default quota')\"\n\t\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\t\t@tag=\"validateQuota\"\n\t\t\t\t\t\t\t@input=\"setDefaultQuota\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showLanguages\"\n\t\t\t\t\t\t\tv-model=\"showLanguages\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showLanguages\">{{ t('settings', 'Show Languages') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showLastLogin\"\n\t\t\t\t\t\t\tv-model=\"showLastLogin\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showLastLogin\">{{ t('settings', 'Show last login') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showUserBackend\"\n\t\t\t\t\t\t\tv-model=\"showUserBackend\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showUserBackend\">{{ t('settings', 'Show user backend') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showStoragePath\"\n\t\t\t\t\t\t\tv-model=\"showStoragePath\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showStoragePath\">{{ t('settings', 'Show storage path') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"sendWelcomeMail\"\n\t\t\t\t\t\t\tv-model=\"sendWelcomeMail\"\n\t\t\t\t\t\t\t:disabled=\"loadingSendMail\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"sendWelcomeMail\">{{ t('settings', 'Send email to new user') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t</AppNavigationSettings>\n\t\t\t</template>\n\t\t</AppNavigation>\n\t\t<AppContent>\n\t\t\t<UserList :users=\"users\"\n\t\t\t\t:show-config=\"showConfig\"\n\t\t\t\t:selected-group=\"selectedGroupDecoded\"\n\t\t\t\t:external-actions=\"externalActions\" />\n\t\t</AppContent>\n\t</Content>\n</template>\n\n<script>\nimport AppContent from '@nextcloud/vue/dist/Components/AppContent'\nimport AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation'\nimport AppNavigationCaption from '@nextcloud/vue/dist/Components/AppNavigationCaption'\nimport AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\nimport AppNavigationNew from '@nextcloud/vue/dist/Components/AppNavigationNew'\nimport AppNavigationSettings from '@nextcloud/vue/dist/Components/AppNavigationSettings'\nimport axios from '@nextcloud/axios'\nimport Content from '@nextcloud/vue/dist/Components/Content'\nimport { generateUrl } from '@nextcloud/router'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\n\nimport GroupListItem from '../components/GroupListItem'\nimport UserList from '../components/UserList'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Users',\n\tcomponents: {\n\t\tAppContent,\n\t\tAppNavigation,\n\t\tAppNavigationCaption,\n\t\tAppNavigationCounter,\n\t\tAppNavigationItem,\n\t\tAppNavigationNew,\n\t\tAppNavigationSettings,\n\t\tContent,\n\t\tGroupListItem,\n\t\tMultiselect,\n\t\tUserList,\n\t},\n\tprops: {\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// default quota is set to unlimited\n\t\t\tunlimitedQuota: { id: 'none', label: t('settings', 'Unlimited') },\n\t\t\t// temporary value used for multiselect change\n\t\t\tselectedQuota: false,\n\t\t\texternalActions: [],\n\t\t\tloadingAddGroup: false,\n\t\t\tloadingSendMail: false,\n\t\t\tshowConfig: {\n\t\t\t\tshowStoragePath: false,\n\t\t\t\tshowUserBackend: false,\n\t\t\t\tshowLastLogin: false,\n\t\t\t\tshowNewUserForm: false,\n\t\t\t\tshowLanguages: false,\n\t\t\t},\n\t\t}\n\t},\n\tcomputed: {\n\t\tselectedGroupDecoded() {\n\t\t\treturn this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null\n\t\t},\n\t\tusers() {\n\t\t\treturn this.$store.getters.getUsers\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\n\t\t// Local settings\n\t\tshowLanguages: {\n\t\t\tget() { return this.getLocalstorage('showLanguages') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLanguages', status)\n\t\t\t},\n\t\t},\n\t\tshowLastLogin: {\n\t\t\tget() { return this.getLocalstorage('showLastLogin') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLastLogin', status)\n\t\t\t},\n\t\t},\n\t\tshowUserBackend: {\n\t\t\tget() { return this.getLocalstorage('showUserBackend') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showUserBackend', status)\n\t\t\t},\n\t\t},\n\t\tshowStoragePath: {\n\t\t\tget() { return this.getLocalstorage('showStoragePath') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showStoragePath', status)\n\t\t\t},\n\t\t},\n\n\t\tuserCount() {\n\t\t\treturn this.$store.getters.getUserCount\n\t\t},\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\t// default quota\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({ id: cur, label: cur }), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(this.unlimitedQuota)\n\t\t\t}\n\t\t\treturn quotaPreset\n\t\t},\n\t\t// mapping saved values to objects\n\t\tdefaultQuota: {\n\t\t\tget() {\n\t\t\t\tif (this.selectedQuota !== false) {\n\t\t\t\t\treturn this.selectedQuota\n\t\t\t\t}\n\t\t\t\tif (this.settings.defaultQuota !== this.unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {\n\t\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\t\treturn { id: this.settings.defaultQuota, label: this.settings.defaultQuota }\n\t\t\t\t}\n\t\t\t\treturn this.unlimitedQuota // unlimited\n\t\t\t},\n\t\t\tset(quota) {\n\t\t\t\tthis.selectedQuota = quota\n\t\t\t},\n\n\t\t},\n\n\t\tsendWelcomeMail: {\n\t\t\tget() {\n\t\t\t\treturn this.settings.newUserSendEmail\n\t\t\t},\n\t\t\tasync set(value) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.loadingSendMail = true\n\t\t\t\t\tthis.$store.commit('setServerData', {\n\t\t\t\t\t\t...this.settings,\n\t\t\t\t\t\tnewUserSendEmail: value,\n\t\t\t\t\t})\n\t\t\t\t\tawait axios.post(generateUrl('/settings/users/preferences/newUser.sendEmail'), { value: value ? 'yes' : 'no' })\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error('could not update newUser.sendEmail preference: ' + e.message, e)\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingSendMail = false\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\tgroupList() {\n\t\t\tconst groups = Array.isArray(this.groups) ? this.groups : []\n\n\t\t\treturn groups\n\t\t\t\t// filter out disabled and admin\n\t\t\t\t.filter(group => group.id !== 'disabled' && group.id !== 'admin')\n\t\t\t\t.map(group => this.formatGroupMenu(group))\n\t\t},\n\n\t\tadminGroupMenu() {\n\t\t\treturn this.formatGroupMenu(this.groups.find(group => group.id === 'admin'))\n\t\t},\n\t\tdisabledGroupMenu() {\n\t\t\treturn this.formatGroupMenu(this.groups.find(group => group.id === 'disabled'))\n\t\t},\n\t},\n\tbeforeMount() {\n\t\tthis.$store.commit('initGroups', {\n\t\t\tgroups: this.$store.getters.getServerData.groups,\n\t\t\torderBy: this.$store.getters.getServerData.sortGroups,\n\t\t\tuserCount: this.$store.getters.getServerData.userCount,\n\t\t})\n\t\tthis.$store.dispatch('getPasswordPolicyMinLength')\n\t},\n\tcreated() {\n\t\t// init the OCA.Settings.UserList object\n\t\t// and add the registerAction method\n\t\tObject.assign(OCA, {\n\t\t\tSettings: {\n\t\t\t\tUserList: {\n\t\t\t\t\tregisterAction: this.registerAction,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t},\n\tmethods: {\n\t\tshowNewUserMenu() {\n\t\t\tthis.showConfig.showNewUserForm = true\n\t\t\tif (this.showConfig.showNewUserForm) {\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\twindow.newusername.focus()\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tgetLocalstorage(key) {\n\t\t\t// force initialization\n\t\t\tconst localConfig = this.$localStorage.get(key)\n\t\t\t// if localstorage is null, fallback to original values\n\t\t\tthis.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key]\n\t\t\treturn this.showConfig[key]\n\t\t},\n\t\tsetLocalStorage(key, status) {\n\t\t\tthis.showConfig[key] = status\n\t\t\tthis.$localStorage.set(key, status)\n\t\t\treturn status\n\t\t},\n\n\t\t/**\n\t\t * Dispatch default quota set request\n\t\t *\n\t\t * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t */\n\t\tsetDefaultQuota(quota = 'none') {\n\t\t\tthis.$store.dispatch('setAppConfig', {\n\t\t\t\tapp: 'files',\n\t\t\t\tkey: 'default_quota',\n\t\t\t\t// ensure we only send the preset id\n\t\t\t\tvalue: quota.id ? quota.id : quota,\n\t\t\t}).then(() => {\n\t\t\t\tif (typeof quota !== 'object') {\n\t\t\t\t\tquota = { id: quota, label: quota }\n\t\t\t\t}\n\t\t\t\tthis.defaultQuota = quota\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @return {Promise|boolean}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota === null) {\n\t\t\t\treturn this.setDefaultQuota('none')\n\t\t\t} else {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Register a new action for the user menu\n\t\t *\n\t\t * @param {string} icon the icon class\n\t\t * @param {string} text the text to display\n\t\t * @param {Function} action the function to run\n\t\t * @return {Array}\n\t\t */\n\t\tregisterAction(icon, text, action) {\n\t\t\tthis.externalActions.push({\n\t\t\t\ticon,\n\t\t\t\ttext,\n\t\t\t\taction,\n\t\t\t})\n\t\t\treturn this.externalActions\n\t\t},\n\n\t\t/**\n\t\t * Create a new group\n\t\t *\n\t\t * @param {string} gid The group id\n\t\t */\n\t\tasync createGroup(gid) {\n\t\t\t// group is not valid\n\t\t\tif (gid.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loadingAddGroup = true\n\t\t\t\tawait this.$store.dispatch('addGroup', gid.trim())\n\n\t\t\t\tthis.hideAddGroupForm()\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tselectedGroup: encodeURIComponent(gid.trim()),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch {\n\t\t\t\tthis.showAddGroupForm()\n\t\t\t} finally {\n\t\t\t\tthis.loadingAddGroup = false\n\t\t\t}\n\t\t},\n\n\t\tshowAddGroupForm() {\n\t\t\tthis.$refs.addGroup.editingActive = true\n\t\t\tthis.$refs.addGroup.onMenuToggle(false)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.addGroup.$refs.editingInput.focusInput()\n\t\t\t})\n\t\t},\n\n\t\thideAddGroupForm() {\n\t\t\tthis.$refs.addGroup.editingActive = false\n\t\t\tthis.$refs.addGroup.editingValue = ''\n\t\t},\n\n\t\t/**\n\t\t * Format a group to a menu entry\n\t\t *\n\t\t * @param {object} group the group\n\t\t * @return {object}\n\t\t */\n\t\tformatGroupMenu(group) {\n\t\t\tconst item = {}\n\t\t\tif (typeof group === 'undefined') {\n\t\t\t\treturn {}\n\t\t\t}\n\n\t\t\titem.id = group.id\n\t\t\titem.title = group.name\n\t\t\titem.usercount = group.usercount\n\n\t\t\t// users count for all groups\n\t\t\tif (group.usercount - group.disabled > 0) {\n\t\t\t\titem.count = group.usercount - group.disabled\n\t\t\t}\n\n\t\t\treturn item\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// force hiding the editing action for the add group entry\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=1babbc68&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=1babbc68&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=1babbc68&scoped=true&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Users.vue?vue&type=style&index=0&id=1babbc68&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1babbc68\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","_vm","this","_h","$createElement","_c","_self","key","attrs","title","name","params","selectedGroup","encodeURIComponent","loadingRenameGroup","openGroupMenu","on","handleGroupMenuOpen","scopedSlots","_u","fn","_v","_s","count","_e","proxy","settings","isAdmin","ref","$event","renameGroup","t","removeGroup","props","user","type","Object","required","default","groups","Array","subAdminsGroups","quotaOptions","showConfig","languages","externalActions","computed","userGroups","filter","group","includes","userSubAdminsGroups","subadmin","availableGroups","map","groupClone","assign","$isDisabled","canAdd","canRemove","usedSpace","quota","used","size","OC","Util","humanFileSize","usedQuota","Math","min","round","pow","isNaN","userQuota","humanQuota","find","label","minPasswordLength","$store","getters","getPasswordPolicyMinLength","userLanguage","userLang","concat","lang","code","language","userLastLoginTooltip","lastLogin","formatDate","userLastLogin","relativeModifiedDate","methods","generateAvatar","generateUrl","version","oc_userconfig","avatar","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","staticClass","class","loading","delete","disable","wipe","directives","rawName","value","displayname","length","expression","email","userGroupsLabels","userSubAdminsGroupsLabels","domProps","showUserBackend","showStoragePath","backend","storageLocation","modifiers","canEdit","all","toggleEdit","preventDefault","toggleMenu","apply","arguments","openedMenu","userActions","style","opacity","feedbackMessage","keys","editing","backendCapabilities","displayName","updateDisplayName","rand","canChangePassword","setPassword","password","updatePassword","mailAddress","updateEmail","removeUserGroup","addUserGroup","createGroup","slot","subadmins","removeUserSubAdmin","addUserSubAdmin","setUserQuota","validateQuota","setUserLanguage","onScroll","closeModal","createUser","newUser","newUserGenerateUserID","target","composing","$set","newUserRequireEmail","canAddGroups","model","callback","$$v","scrolled","showNewUserForm","_l","infiniteHandler","loadingAddGroup","showAddGroupForm","userCount","adminGroupMenu","disabledGroupMenu","usercount","groupList","defaultQuota","setDefaultQuota","isArray","showLanguages","_i","$$a","$$el","$$c","checked","$$i","slice","showLastLogin","loadingSendMail","sendWelcomeMail","showNewUserMenu","indexOf","_k","keyCode","users","selectedGroupDecoded"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/settings-vue-settings-apps-users-management.js b/dist/settings-vue-settings-apps-users-management.js index 2d86deff5b6..0f5267245af 100644 --- a/dist/settings-vue-settings-apps-users-management.js +++ b/dist/settings-vue-settings-apps-users-management.js @@ -1,3 +1,3 @@ /*! For license information please see settings-vue-settings-apps-users-management.js.LICENSE.txt */ -!function(){"use strict";var e,r,o,i={78778:function(e,r,o){var i=o(20144),u=o(34741),a=o(83678),s={name:"App",beforeMount:function(){null!==document.getElementById("serverData")&&this.$store.commit("setServerData",JSON.parse(document.getElementById("serverData").dataset.server))}},c=(0,o(51900).Z)(s,(function(){var e=this.$createElement;return(this._self._c||e)("router-view")}),[],!1,null,null,null).exports,d=o(78345),p=o(79753),f=function(){return Promise.all([o.e(7874),o.e(8351)]).then(o.bind(o,74394))},l=function(){return Promise.all([o.e(7874),o.e(7418)]).then(o.bind(o,77538))};i.default.use(d.Z);var m=new d.Z({mode:"history",base:(0,p.generateUrl)(""),linkActiveClass:"active",routes:[{path:"/:index(index.php/)?settings/users",component:f,props:!0,name:"users",children:[{path:":selectedGroup",name:"group",component:f}]},{path:"/:index(index.php/)?settings/apps",component:l,props:!0,name:"apps",children:[{path:":category",name:"apps-category",component:l,children:[{path:":id",name:"apps-details",component:l}]}]}]}),g=o(20629),h=o(4820),v=o(10128),A=o.n(v),b=function(e){return e.replace(/\/$/,"")},U=function(){return A()()},I=function(e,t){return h.default.get(b(e),t)},y=function(e,t){return h.default.post(b(e),t)},L=function(e,t){return h.default.put(b(e),t)},P=function(e,t){return h.default.delete(b(e),{params:t})},w=(0,o(17499).IY)().setApp("settings").detectUser().build(),E=function(e,t){return 1===t?e.sort((function(e,t){return e.usercount-e.disabled<t.usercount-t.disabled})):e.sort((function(e,t){return e.name.localeCompare(t.name)}))},O={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},C={appendUsers:function(e,t){var r=e.users.concat(Object.keys(t).map((function(e){return t[e]})));e.usersOffset+=e.usersLimit,e.users=r},setPasswordPolicyMinLength:function(e,t){e.minPasswordLength=""!==t?t:0},initGroups:function(e,t){var r=t.groups,n=t.orderBy,o=t.userCount;e.groups=r.map((function(e){return Object.assign({},O,e)})),e.orderBy=n,e.userCount=o,e.groups=E(e.groups,e.orderBy)},addGroup:function(e,t){var r=t.gid,n=t.displayName;try{if(void 0!==e.groups.find((function(e){return e.id===r})))return;var o=Object.assign({},O,{id:r,name:n});e.groups.push(o),e.groups=E(e.groups,e.orderBy)}catch(e){console.error("Can't create group",e)}},renameGroup:function(e,t){var r=t.gid,n=t.displayName,o=e.groups.findIndex((function(e){return e.id===r}));if(o>=0){var i=e.groups[o];i.name=n,e.groups.splice(o,1,i),e.groups=E(e.groups,e.orderBy)}},removeGroup:function(e,t){var r=e.groups.findIndex((function(e){return e.id===t}));r>=0&&e.groups.splice(r,1)},addUserGroup:function(e,t){var r=t.userid,n=t.gid,o=e.groups.find((function(e){return e.id===n})),i=e.users.find((function(e){return e.id===r}));o&&i.enabled&&e.userCount>0&&o.usercount++,i.groups.push(n),e.groups=E(e.groups,e.orderBy)},removeUserGroup:function(e,t){var r=t.userid,n=t.gid,o=e.groups.find((function(e){return e.id===n})),i=e.users.find((function(e){return e.id===r}));o&&i.enabled&&e.userCount>0&&o.usercount--;var u=i.groups;u.splice(u.indexOf(n),1),e.groups=E(e.groups,e.orderBy)},addUserSubAdmin:function(e,t){var r=t.userid,n=t.gid;e.users.find((function(e){return e.id===r})).subadmin.push(n)},removeUserSubAdmin:function(e,t){var r=t.userid,n=t.gid,o=e.users.find((function(e){return e.id===r})).subadmin;o.splice(o.indexOf(n),1)},deleteUser:function(e,t){var r=e.users.findIndex((function(e){return e.id===t}));this.commit("updateUserCounts",{user:e.users[r],actionType:"remove"}),e.users.splice(r,1)},addUserData:function(e,t){var r=t.data.ocs.data;e.users.push(r),this.commit("updateUserCounts",{user:r,actionType:"create"})},enableDisableUser:function(e,t){var r=t.userid,n=t.enabled,o=e.users.find((function(e){return e.id===r}));o.enabled=n,this.commit("updateUserCounts",{user:o,actionType:n?"enable":"disable"})},updateUserCounts:function(e,t){var r=t.user,n=t.actionType,o=e.groups.find((function(e){return"disabled"===e.id}));switch(n){case"enable":case"disable":o.usercount+=r.enabled?-1:1,e.userCount+=r.enabled?1:-1,r.groups.forEach((function(t){e.groups.find((function(e){return e.id===t})).disabled+=r.enabled?-1:1}));break;case"create":e.userCount++,r.groups.forEach((function(t){e.groups.find((function(e){return e.id===t})).usercount++}));break;case"remove":r.enabled?(e.userCount--,r.groups.forEach((function(t){e.groups.find((function(e){return e.id===t})).usercount--}))):(o.usercount--,r.groups.forEach((function(t){e.groups.find((function(e){return e.id===t})).disabled--})));break;default:w.error("Unknown action type in updateUserCounts: '".concat(n,"'"))}},setUserData:function(e,t){var r=t.userid,n=t.key,o=t.value;if("quota"===n){var i=OC.Util.computerFileSize(o);e.users.find((function(e){return e.id===r}))[n][n]=null!==i?i:o}else e.users.find((function(e){return e.id===r}))[n]=o},resetUsers:function(e){e.users=[],e.usersOffset=0}},_=h.default.CancelToken,R=null,k={state:{users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,userCount:0},mutations:C,getters:{getUsers:function(e){return e.users},getGroups:function(e){return e.groups},getSubadminGroups:function(e){return e.groups.filter((function(e){return"admin"!==e.id&&"disabled"!==e.id}))},getPasswordPolicyMinLength:function(e){return e.minPasswordLength},getUsersOffset:function(e){return e.usersOffset},getUsersLimit:function(e){return e.usersLimit},getUserCount:function(e){return e.userCount}},actions:{getUsers:function(e,t){var r=t.offset,n=t.limit,o=t.search,i=t.group;return R&&R.cancel("Operation canceled by another search request."),R=_.source(),o="string"==typeof o?o:"",""!==(i="string"==typeof i?i:"")?I((0,p.generateOcsUrl)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(i),offset:r,limit:n,search:o}),{cancelToken:R.token}).then((function(t){var r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((function(t){h.default.isCancel(t)||e.commit("API_FAILURE",t)})):I((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o}),{cancelToken:R.token}).then((function(t){var r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((function(t){h.default.isCancel(t)||e.commit("API_FAILURE",t)}))},getGroups:function(e,t){var r=t.offset,n=t.limit,o=t.search;o="string"==typeof o?o:"";var i=-1===n?"":"&limit=".concat(n);return I((0,p.generateOcsUrl)("cloud/groups?offset={offset}&search={search}",{offset:r,search:o})+i).then((function(t){return Object.keys(t.data.ocs.data.groups).length>0&&(t.data.ocs.data.groups.forEach((function(t){e.commit("addGroup",{gid:t,displayName:t})})),!0)})).catch((function(t){return e.commit("API_FAILURE",t)}))},getUsersFromList:function(e,t){var r=t.offset,n=t.limit,o=t.search;return o="string"==typeof o?o:"",I((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).then((function(t){return Object.keys(t.data.ocs.data.users).length>0&&(e.commit("appendUsers",t.data.ocs.data.users),!0)})).catch((function(t){return e.commit("API_FAILURE",t)}))},getUsersFromGroup:function(e,t){var r=t.groupid,n=t.offset,o=t.limit;return I((0,p.generateOcsUrl)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:n,limit:o})).then((function(t){return e.commit("getUsersFromList",t.data.ocs.data.users)})).catch((function(t){return e.commit("API_FAILURE",t)}))},getPasswordPolicyMinLength:function(e){return!(!OC.getCapabilities().password_policy||!OC.getCapabilities().password_policy.minLength)&&(e.commit("setPasswordPolicyMinLength",OC.getCapabilities().password_policy.minLength),OC.getCapabilities().password_policy.minLength)},addGroup:function(e,t){return U().then((function(r){return y((0,p.generateOcsUrl)("cloud/groups"),{groupid:t}).then((function(r){return e.commit("addGroup",{gid:t,displayName:t}),{gid:t,displayName:t}})).catch((function(e){throw e}))})).catch((function(r){throw e.commit("API_FAILURE",{gid:t,error:r}),r}))},renameGroup:function(e,t){var r=t.groupid,n=t.displayName;return U().then((function(t){return L((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:n}).then((function(t){return e.commit("renameGroup",{gid:r,displayName:n}),{groupid:r,displayName:n}})).catch((function(e){throw e}))})).catch((function(t){throw e.commit("API_FAILURE",{groupid:r,error:t}),t}))},removeGroup:function(e,t){return U().then((function(r){return P((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(t)})).then((function(r){return e.commit("removeGroup",t)})).catch((function(e){throw e}))})).catch((function(r){return e.commit("API_FAILURE",{gid:t,error:r})}))},addUserGroup:function(e,t){var r=t.userid,n=t.gid;return U().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(t){return e.commit("addUserGroup",{userid:r,gid:n})})).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{userid:r,error:t})}))},removeUserGroup:function(e,t){var r=t.userid,n=t.gid;return U().then((function(t){return P((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(t){return e.commit("removeUserGroup",{userid:r,gid:n})})).catch((function(e){throw e}))})).catch((function(t){throw e.commit("API_FAILURE",{userid:r,error:t}),t}))},addUserSubAdmin:function(e,t){var r=t.userid,n=t.gid;return U().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(t){return e.commit("addUserSubAdmin",{userid:r,gid:n})})).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{userid:r,error:t})}))},removeUserSubAdmin:function(e,t){var r=t.userid,n=t.gid;return U().then((function(t){return P((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(t){return e.commit("removeUserSubAdmin",{userid:r,gid:n})})).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{userid:r,error:t})}))},wipeUserDevices:function(e,t){return U().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/wipe",{userid:t})).catch((function(e){throw e}))})).catch((function(r){return e.commit("API_FAILURE",{userid:t,error:r})}))},deleteUser:function(e,t){return U().then((function(r){return P((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:t})).then((function(r){return e.commit("deleteUser",t)})).catch((function(e){throw e}))})).catch((function(r){return e.commit("API_FAILURE",{userid:t,error:r})}))},addUser:function(e,t){var r=e.commit,n=e.dispatch,o=t.userid,i=t.password,u=t.displayName,a=t.email,s=t.groups,c=t.subadmin,d=t.quota,f=t.language;return U().then((function(e){return y((0,p.generateOcsUrl)("cloud/users"),{userid:o,password:i,displayName:u,email:a,groups:s,subadmin:c,quota:d,language:f}).then((function(e){return n("addUserData",o||e.data.ocs.data.id)})).catch((function(e){throw e}))})).catch((function(e){throw r("API_FAILURE",{userid:o,error:e}),e}))},addUserData:function(e,t){return U().then((function(r){return I((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:t})).then((function(t){return e.commit("addUserData",t)})).catch((function(e){throw e}))})).catch((function(r){return e.commit("API_FAILURE",{userid:t,error:r})}))},enableDisableUser:function(e,t){var r=t.userid,n=t.enabled,o=void 0===n||n,i=o?"enable":"disable";return U().then((function(t){return L((0,p.generateOcsUrl)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:i})).then((function(t){return e.commit("enableDisableUser",{userid:r,enabled:o})})).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{userid:r,error:t})}))},setUserData:function(e,t){var r=t.userid,n=t.key,o=t.value,i=["email","displayname"];return-1!==["email","language","quota","displayname","password"].indexOf(n)&&"string"==typeof o&&(-1===i.indexOf(n)&&o.length>0||-1!==i.indexOf(n))?U().then((function(t){return L((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:r}),{key:n,value:o}).then((function(t){return e.commit("setUserData",{userid:r,key:n,value:o})})).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{userid:r,error:t})})):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:function(e,t){return U().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/welcome",{userid:t})).then((function(e){return!0})).catch((function(e){throw e}))})).catch((function(r){return e.commit("API_FAILURE",{userid:t,error:r})}))}}},F=o(26932),S=(o(73317),{APPS_API_FAILURE:function(e,r){(0,F.x2)(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{isHTML:!0}),console.error(e,r)},initCategories:function(e,t){var r=t.categories,n=t.updateCount;e.categories=r,e.updateCount=n},setUpdateCount:function(e,t){e.updateCount=t},addCategory:function(e,t){e.categories.push(t)},appendCategories:function(e,t){e.categories=t},setAllApps:function(e,t){e.apps=t},setError:function(e,t){var r=t.appId,n=t.error;Array.isArray(r)||(r=[r]),r.forEach((function(t){e.apps.find((function(e){return e.id===t})).error=n}))},clearError:function(e,t){var r=t.appId;t.error,e.apps.find((function(e){return e.id===r})).error=null},enableApp:function(e,t){var r=t.appId,n=t.groups,o=e.apps.find((function(e){return e.id===r}));o.active=!0,o.groups=n},disableApp:function(e,t){var r=e.apps.find((function(e){return e.id===t}));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp:function(e,t){e.apps.find((function(e){return e.id===t})).active=!1,e.apps.find((function(e){return e.id===t})).groups=[],e.apps.find((function(e){return e.id===t})).needsDownload=!0,e.apps.find((function(e){return e.id===t})).installed=!1,e.apps.find((function(e){return e.id===t})).canUnInstall=!1,e.apps.find((function(e){return e.id===t})).canInstall=!0},updateApp:function(e,t){var r=e.apps.find((function(e){return e.id===t})),n=r.update;r.update=null,r.version=n,e.updateCount--},resetApps:function(e){e.apps=[]},reset:function(e){e.apps=[],e.categories=[],e.updateCount=0},startLoading:function(e,t){Array.isArray(t)?t.forEach((function(t){i.default.set(e.loading,t,!0)})):i.default.set(e.loading,t,!0)},stopLoading:function(e,t){Array.isArray(t)?t.forEach((function(t){i.default.set(e.loading,t,!1)})):i.default.set(e.loading,t,!1)}}),x={enableApp:function(e,r){var n,o=r.appId,i=r.groups;return n=Array.isArray(o)?o:[o],U().then((function(r){return e.commit("startLoading",n),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/enable"),{appIds:n,groups:i}).then((function(r){return e.commit("stopLoading",n),e.commit("stopLoading","install"),n.forEach((function(t){e.commit("enableApp",{appId:t,groups:i})})),I((0,p.generateUrl)("apps/files")).then((function(){r.data.update_required&&((0,F.JQ)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:function(){return window.location.reload()},close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((function(){Array.isArray(o)||e.commit("setError",{appId:n,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")})}))})).catch((function(t){e.commit("stopLoading",n),e.commit("stopLoading","install"),e.commit("setError",{appId:n,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:o,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:o,error:t})}))},forceEnableApp:function(e,t){var r,n=t.appId;return t.groups,r=Array.isArray(n)?n:[n],U().then((function(){return e.commit("startLoading",r),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/force"),{appId:n}).then((function(e){location.reload()})).catch((function(t){e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("setError",{appId:r,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:n,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:n,error:t})}))},disableApp:function(e,t){var r,n=t.appId;return r=Array.isArray(n)?n:[n],U().then((function(t){return e.commit("startLoading",r),y((0,p.generateUrl)("settings/apps/disable"),{appIds:r}).then((function(t){return e.commit("stopLoading",r),r.forEach((function(t){e.commit("disableApp",t)})),!0})).catch((function(t){e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:n,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:n,error:t})}))},uninstallApp:function(e,t){var r=t.appId;return U().then((function(t){return e.commit("startLoading",r),I((0,p.generateUrl)("settings/apps/uninstall/".concat(r))).then((function(t){return e.commit("stopLoading",r),e.commit("uninstallApp",r),!0})).catch((function(t){e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:r,error:t})}))},updateApp:function(e,t){var r=t.appId;return U().then((function(t){return e.commit("startLoading",r),e.commit("startLoading","install"),I((0,p.generateUrl)("settings/apps/update/".concat(r))).then((function(t){return e.commit("stopLoading","install"),e.commit("stopLoading",r),e.commit("updateApp",r),!0})).catch((function(t){e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:r,error:t})}))},getAllApps:function(e){return e.commit("startLoading","list"),I((0,p.generateUrl)("settings/apps/list")).then((function(t){return e.commit("setAllApps",t.data.apps),e.commit("stopLoading","list"),!0})).catch((function(t){return e.commit("API_FAILURE",t)}))},getCategories:function(e){return e.commit("startLoading","categories"),I((0,p.generateUrl)("settings/apps/categories")).then((function(t){return t.data.length>0&&(e.commit("appendCategories",t.data),e.commit("stopLoading","categories"),!0)})).catch((function(t){return e.commit("API_FAILURE",t)}))}},G={state:{apps:[],categories:[],updateCount:0,loading:{},loadingList:!1},mutations:S,getters:{loading:function(e){return function(t){return e.loading[t]}},getCategories:function(e){return e.categories},getAllApps:function(e){return e.apps},getUpdateCount:function(e){return e.updateCount}},actions:x},D={state:{},mutations:{},getters:{},actions:{setAppConfig:function(e,t){var r=t.app,n=t.key,o=t.value;return U().then((function(e){return y((0,p.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:n}),{value:o}).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{app:r,key:n,value:o,error:t})}))}}};i.default.use(g.ZP);var T={API_FAILURE:function(e,r){try{var n=r.error.response.data.ocs.meta.message;(0,F.x2)(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+n,{isHTML:!0})}catch(e){(0,F.x2)(t("settings","An error occured during the request. Unable to proceed."))}console.error(e,r)}},j=new g.yh({modules:{users:k,apps:G,settings:{state:{serverData:{}},mutations:{setServerData:function(e,t){e.serverData=t}},getters:{getServerData:function(e){return e.serverData}},actions:{}},oc:D},strict:!1,mutations:T});i.default.use(u.default,{defaultHtml:!1}),(0,a.Z)(j,m),o.nc=btoa(OC.requestToken),i.default.prototype.t=t,i.default.prototype.n=n,i.default.prototype.OC=OC,i.default.prototype.OCA=OCA,i.default.prototype.oc_userconfig=oc_userconfig,new i.default({router:m,store:j,render:function(e){return e(c)}}).$mount("#content")}},u={};function a(e){var t=u[e];if(void 0!==t)return t.exports;var r=u[e]={id:e,loaded:!1,exports:{}};return i[e].call(r.exports,r,r.exports,a),r.loaded=!0,r.exports}a.m=i,a.amdD=function(){throw new Error("define cannot be used indirect")},a.amdO={},e=[],a.O=function(t,r,n,o){if(!r){var i=1/0;for(d=0;d<e.length;d++){r=e[d][0],n=e[d][1],o=e[d][2];for(var u=!0,s=0;s<r.length;s++)(!1&o||i>=o)&&Object.keys(a.O).every((function(e){return a.O[e](r[s])}))?r.splice(s--,1):(u=!1,o<i&&(i=o));if(u){e.splice(d--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[r,n,o]},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},a.d=function(e,t){for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.f={},a.e=function(e){return Promise.all(Object.keys(a.f).reduce((function(t,r){return a.f[r](e,t),t}),[]))},a.u=function(e){return{7418:"settings-apps-view",8351:"settings-users"}[e]+"-"+e+".js?v="+{7418:"79a434bb85984935c596",8351:"602a08575de144a57dfd"}[e]},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="nextcloud:",a.l=function(e,t,n,i){if(r[e])r[e].push(t);else{var u,s;if(void 0!==n)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var p=c[d];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==o+n){u=p;break}}u||(s=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,a.nc&&u.setAttribute("nonce",a.nc),u.setAttribute("data-webpack",o+n),u.src=e),r[e]=[t];var f=function(t,n){u.onerror=u.onload=null,clearTimeout(l);var o=r[e];if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach((function(e){return e(n)})),t)return t(n)},l=setTimeout(f.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=f.bind(null,u.onerror),u.onload=f.bind(null,u.onload),s&&document.head.appendChild(u)}},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},a.j=8562,function(){var e;a.g.importScripts&&(e=a.g.location+"");var t=a.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");r.length&&(e=r[r.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e}(),function(){a.b=document.baseURI||self.location.href;var e={8562:0};a.f.j=function(t,r){var n=a.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise((function(r,o){n=e[t]=[r,o]}));r.push(n[2]=o);var i=a.p+a.u(t),u=new Error;a.l(i,(function(r){if(a.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;u.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,n[1](u)}}),"chunk-"+t,t)}},a.O.j=function(t){return 0===e[t]};var t=function(t,r){var n,o,i=r[0],u=r[1],s=r[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(n in u)a.o(u,n)&&(a.m[n]=u[n]);if(s)var d=s(a)}for(t&&t(r);c<i.length;c++)o=i[c],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return a.O(d)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))}(),a.nc=void 0;var s=a.O(void 0,[7874],(function(){return a(78778)}));s=a.O(s)}(); -//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=9de66bd9a8adc3f45a4d
\ No newline at end of file +!function(){"use strict";var e,r,o,i={78778:function(e,r,o){var i=o(20144),u=o(34741),a=o(83678),s={name:"App",beforeMount:function(){null!==document.getElementById("serverData")&&this.$store.commit("setServerData",JSON.parse(document.getElementById("serverData").dataset.server))}},c=(0,o(51900).Z)(s,(function(){var e=this.$createElement;return(this._self._c||e)("router-view")}),[],!1,null,null,null).exports,d=o(78345),p=o(79753),f=function(){return Promise.all([o.e(7874),o.e(8351)]).then(o.bind(o,69455))},l=function(){return Promise.all([o.e(7874),o.e(7418)]).then(o.bind(o,77538))};i.default.use(d.Z);var m=new d.Z({mode:"history",base:(0,p.generateUrl)(""),linkActiveClass:"active",routes:[{path:"/:index(index.php/)?settings/users",component:f,props:!0,name:"users",children:[{path:":selectedGroup",name:"group",component:f}]},{path:"/:index(index.php/)?settings/apps",component:l,props:!0,name:"apps",children:[{path:":category",name:"apps-category",component:l,children:[{path:":id",name:"apps-details",component:l}]}]}]}),g=o(20629),h=o(4820),v=o(10128),A=o.n(v),b=function(e){return e.replace(/\/$/,"")},U=function(){return A()()},I=function(e,t){return h.default.get(b(e),t)},y=function(e,t){return h.default.post(b(e),t)},L=function(e,t){return h.default.put(b(e),t)},P=function(e,t){return h.default.delete(b(e),{params:t})},w=(0,o(17499).IY)().setApp("settings").detectUser().build(),E=function(e,t){return 1===t?e.sort((function(e,t){return e.usercount-e.disabled<t.usercount-t.disabled})):e.sort((function(e,t){return e.name.localeCompare(t.name)}))},O={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},C={appendUsers:function(e,t){var r=e.users.concat(Object.keys(t).map((function(e){return t[e]})));e.usersOffset+=e.usersLimit,e.users=r},setPasswordPolicyMinLength:function(e,t){e.minPasswordLength=""!==t?t:0},initGroups:function(e,t){var r=t.groups,n=t.orderBy,o=t.userCount;e.groups=r.map((function(e){return Object.assign({},O,e)})),e.orderBy=n,e.userCount=o,e.groups=E(e.groups,e.orderBy)},addGroup:function(e,t){var r=t.gid,n=t.displayName;try{if(void 0!==e.groups.find((function(e){return e.id===r})))return;var o=Object.assign({},O,{id:r,name:n});e.groups.push(o),e.groups=E(e.groups,e.orderBy)}catch(e){console.error("Can't create group",e)}},renameGroup:function(e,t){var r=t.gid,n=t.displayName,o=e.groups.findIndex((function(e){return e.id===r}));if(o>=0){var i=e.groups[o];i.name=n,e.groups.splice(o,1,i),e.groups=E(e.groups,e.orderBy)}},removeGroup:function(e,t){var r=e.groups.findIndex((function(e){return e.id===t}));r>=0&&e.groups.splice(r,1)},addUserGroup:function(e,t){var r=t.userid,n=t.gid,o=e.groups.find((function(e){return e.id===n})),i=e.users.find((function(e){return e.id===r}));o&&i.enabled&&e.userCount>0&&o.usercount++,i.groups.push(n),e.groups=E(e.groups,e.orderBy)},removeUserGroup:function(e,t){var r=t.userid,n=t.gid,o=e.groups.find((function(e){return e.id===n})),i=e.users.find((function(e){return e.id===r}));o&&i.enabled&&e.userCount>0&&o.usercount--;var u=i.groups;u.splice(u.indexOf(n),1),e.groups=E(e.groups,e.orderBy)},addUserSubAdmin:function(e,t){var r=t.userid,n=t.gid;e.users.find((function(e){return e.id===r})).subadmin.push(n)},removeUserSubAdmin:function(e,t){var r=t.userid,n=t.gid,o=e.users.find((function(e){return e.id===r})).subadmin;o.splice(o.indexOf(n),1)},deleteUser:function(e,t){var r=e.users.findIndex((function(e){return e.id===t}));this.commit("updateUserCounts",{user:e.users[r],actionType:"remove"}),e.users.splice(r,1)},addUserData:function(e,t){var r=t.data.ocs.data;e.users.push(r),this.commit("updateUserCounts",{user:r,actionType:"create"})},enableDisableUser:function(e,t){var r=t.userid,n=t.enabled,o=e.users.find((function(e){return e.id===r}));o.enabled=n,this.commit("updateUserCounts",{user:o,actionType:n?"enable":"disable"})},updateUserCounts:function(e,t){var r=t.user,n=t.actionType,o=e.groups.find((function(e){return"disabled"===e.id}));switch(n){case"enable":case"disable":o.usercount+=r.enabled?-1:1,e.userCount+=r.enabled?1:-1,r.groups.forEach((function(t){e.groups.find((function(e){return e.id===t})).disabled+=r.enabled?-1:1}));break;case"create":e.userCount++,r.groups.forEach((function(t){e.groups.find((function(e){return e.id===t})).usercount++}));break;case"remove":r.enabled?(e.userCount--,r.groups.forEach((function(t){e.groups.find((function(e){return e.id===t})).usercount--}))):(o.usercount--,r.groups.forEach((function(t){e.groups.find((function(e){return e.id===t})).disabled--})));break;default:w.error("Unknown action type in updateUserCounts: '".concat(n,"'"))}},setUserData:function(e,t){var r=t.userid,n=t.key,o=t.value;if("quota"===n){var i=OC.Util.computerFileSize(o);e.users.find((function(e){return e.id===r}))[n][n]=null!==i?i:o}else e.users.find((function(e){return e.id===r}))[n]=o},resetUsers:function(e){e.users=[],e.usersOffset=0}},_=h.default.CancelToken,R=null,k={state:{users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,userCount:0},mutations:C,getters:{getUsers:function(e){return e.users},getGroups:function(e){return e.groups},getSubadminGroups:function(e){return e.groups.filter((function(e){return"admin"!==e.id&&"disabled"!==e.id}))},getPasswordPolicyMinLength:function(e){return e.minPasswordLength},getUsersOffset:function(e){return e.usersOffset},getUsersLimit:function(e){return e.usersLimit},getUserCount:function(e){return e.userCount}},actions:{getUsers:function(e,t){var r=t.offset,n=t.limit,o=t.search,i=t.group;return R&&R.cancel("Operation canceled by another search request."),R=_.source(),o="string"==typeof o?o:"",""!==(i="string"==typeof i?i:"")?I((0,p.generateOcsUrl)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(i),offset:r,limit:n,search:o}),{cancelToken:R.token}).then((function(t){var r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((function(t){h.default.isCancel(t)||e.commit("API_FAILURE",t)})):I((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o}),{cancelToken:R.token}).then((function(t){var r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((function(t){h.default.isCancel(t)||e.commit("API_FAILURE",t)}))},getGroups:function(e,t){var r=t.offset,n=t.limit,o=t.search;o="string"==typeof o?o:"";var i=-1===n?"":"&limit=".concat(n);return I((0,p.generateOcsUrl)("cloud/groups?offset={offset}&search={search}",{offset:r,search:o})+i).then((function(t){return Object.keys(t.data.ocs.data.groups).length>0&&(t.data.ocs.data.groups.forEach((function(t){e.commit("addGroup",{gid:t,displayName:t})})),!0)})).catch((function(t){return e.commit("API_FAILURE",t)}))},getUsersFromList:function(e,t){var r=t.offset,n=t.limit,o=t.search;return o="string"==typeof o?o:"",I((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).then((function(t){return Object.keys(t.data.ocs.data.users).length>0&&(e.commit("appendUsers",t.data.ocs.data.users),!0)})).catch((function(t){return e.commit("API_FAILURE",t)}))},getUsersFromGroup:function(e,t){var r=t.groupid,n=t.offset,o=t.limit;return I((0,p.generateOcsUrl)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:n,limit:o})).then((function(t){return e.commit("getUsersFromList",t.data.ocs.data.users)})).catch((function(t){return e.commit("API_FAILURE",t)}))},getPasswordPolicyMinLength:function(e){return!(!OC.getCapabilities().password_policy||!OC.getCapabilities().password_policy.minLength)&&(e.commit("setPasswordPolicyMinLength",OC.getCapabilities().password_policy.minLength),OC.getCapabilities().password_policy.minLength)},addGroup:function(e,t){return U().then((function(r){return y((0,p.generateOcsUrl)("cloud/groups"),{groupid:t}).then((function(r){return e.commit("addGroup",{gid:t,displayName:t}),{gid:t,displayName:t}})).catch((function(e){throw e}))})).catch((function(r){throw e.commit("API_FAILURE",{gid:t,error:r}),r}))},renameGroup:function(e,t){var r=t.groupid,n=t.displayName;return U().then((function(t){return L((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:n}).then((function(t){return e.commit("renameGroup",{gid:r,displayName:n}),{groupid:r,displayName:n}})).catch((function(e){throw e}))})).catch((function(t){throw e.commit("API_FAILURE",{groupid:r,error:t}),t}))},removeGroup:function(e,t){return U().then((function(r){return P((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(t)})).then((function(r){return e.commit("removeGroup",t)})).catch((function(e){throw e}))})).catch((function(r){return e.commit("API_FAILURE",{gid:t,error:r})}))},addUserGroup:function(e,t){var r=t.userid,n=t.gid;return U().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(t){return e.commit("addUserGroup",{userid:r,gid:n})})).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{userid:r,error:t})}))},removeUserGroup:function(e,t){var r=t.userid,n=t.gid;return U().then((function(t){return P((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(t){return e.commit("removeUserGroup",{userid:r,gid:n})})).catch((function(e){throw e}))})).catch((function(t){throw e.commit("API_FAILURE",{userid:r,error:t}),t}))},addUserSubAdmin:function(e,t){var r=t.userid,n=t.gid;return U().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(t){return e.commit("addUserSubAdmin",{userid:r,gid:n})})).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{userid:r,error:t})}))},removeUserSubAdmin:function(e,t){var r=t.userid,n=t.gid;return U().then((function(t){return P((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(t){return e.commit("removeUserSubAdmin",{userid:r,gid:n})})).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{userid:r,error:t})}))},wipeUserDevices:function(e,t){return U().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/wipe",{userid:t})).catch((function(e){throw e}))})).catch((function(r){return e.commit("API_FAILURE",{userid:t,error:r})}))},deleteUser:function(e,t){return U().then((function(r){return P((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:t})).then((function(r){return e.commit("deleteUser",t)})).catch((function(e){throw e}))})).catch((function(r){return e.commit("API_FAILURE",{userid:t,error:r})}))},addUser:function(e,t){var r=e.commit,n=e.dispatch,o=t.userid,i=t.password,u=t.displayName,a=t.email,s=t.groups,c=t.subadmin,d=t.quota,f=t.language;return U().then((function(e){return y((0,p.generateOcsUrl)("cloud/users"),{userid:o,password:i,displayName:u,email:a,groups:s,subadmin:c,quota:d,language:f}).then((function(e){return n("addUserData",o||e.data.ocs.data.id)})).catch((function(e){throw e}))})).catch((function(e){throw r("API_FAILURE",{userid:o,error:e}),e}))},addUserData:function(e,t){return U().then((function(r){return I((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:t})).then((function(t){return e.commit("addUserData",t)})).catch((function(e){throw e}))})).catch((function(r){return e.commit("API_FAILURE",{userid:t,error:r})}))},enableDisableUser:function(e,t){var r=t.userid,n=t.enabled,o=void 0===n||n,i=o?"enable":"disable";return U().then((function(t){return L((0,p.generateOcsUrl)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:i})).then((function(t){return e.commit("enableDisableUser",{userid:r,enabled:o})})).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{userid:r,error:t})}))},setUserData:function(e,t){var r=t.userid,n=t.key,o=t.value,i=["email","displayname"];return-1!==["email","language","quota","displayname","password"].indexOf(n)&&"string"==typeof o&&(-1===i.indexOf(n)&&o.length>0||-1!==i.indexOf(n))?U().then((function(t){return L((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:r}),{key:n,value:o}).then((function(t){return e.commit("setUserData",{userid:r,key:n,value:o})})).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{userid:r,error:t})})):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:function(e,t){return U().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/welcome",{userid:t})).then((function(e){return!0})).catch((function(e){throw e}))})).catch((function(r){return e.commit("API_FAILURE",{userid:t,error:r})}))}}},F=o(26932),S=(o(73317),{APPS_API_FAILURE:function(e,r){(0,F.x2)(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{isHTML:!0}),console.error(e,r)},initCategories:function(e,t){var r=t.categories,n=t.updateCount;e.categories=r,e.updateCount=n},setUpdateCount:function(e,t){e.updateCount=t},addCategory:function(e,t){e.categories.push(t)},appendCategories:function(e,t){e.categories=t},setAllApps:function(e,t){e.apps=t},setError:function(e,t){var r=t.appId,n=t.error;Array.isArray(r)||(r=[r]),r.forEach((function(t){e.apps.find((function(e){return e.id===t})).error=n}))},clearError:function(e,t){var r=t.appId;t.error,e.apps.find((function(e){return e.id===r})).error=null},enableApp:function(e,t){var r=t.appId,n=t.groups,o=e.apps.find((function(e){return e.id===r}));o.active=!0,o.groups=n},disableApp:function(e,t){var r=e.apps.find((function(e){return e.id===t}));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp:function(e,t){e.apps.find((function(e){return e.id===t})).active=!1,e.apps.find((function(e){return e.id===t})).groups=[],e.apps.find((function(e){return e.id===t})).needsDownload=!0,e.apps.find((function(e){return e.id===t})).installed=!1,e.apps.find((function(e){return e.id===t})).canUnInstall=!1,e.apps.find((function(e){return e.id===t})).canInstall=!0},updateApp:function(e,t){var r=e.apps.find((function(e){return e.id===t})),n=r.update;r.update=null,r.version=n,e.updateCount--},resetApps:function(e){e.apps=[]},reset:function(e){e.apps=[],e.categories=[],e.updateCount=0},startLoading:function(e,t){Array.isArray(t)?t.forEach((function(t){i.default.set(e.loading,t,!0)})):i.default.set(e.loading,t,!0)},stopLoading:function(e,t){Array.isArray(t)?t.forEach((function(t){i.default.set(e.loading,t,!1)})):i.default.set(e.loading,t,!1)}}),x={enableApp:function(e,r){var n,o=r.appId,i=r.groups;return n=Array.isArray(o)?o:[o],U().then((function(r){return e.commit("startLoading",n),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/enable"),{appIds:n,groups:i}).then((function(r){return e.commit("stopLoading",n),e.commit("stopLoading","install"),n.forEach((function(t){e.commit("enableApp",{appId:t,groups:i})})),I((0,p.generateUrl)("apps/files")).then((function(){r.data.update_required&&((0,F.JQ)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:function(){return window.location.reload()},close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((function(){Array.isArray(o)||e.commit("setError",{appId:n,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")})}))})).catch((function(t){e.commit("stopLoading",n),e.commit("stopLoading","install"),e.commit("setError",{appId:n,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:o,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:o,error:t})}))},forceEnableApp:function(e,t){var r,n=t.appId;return t.groups,r=Array.isArray(n)?n:[n],U().then((function(){return e.commit("startLoading",r),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/force"),{appId:n}).then((function(e){location.reload()})).catch((function(t){e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("setError",{appId:r,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:n,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:n,error:t})}))},disableApp:function(e,t){var r,n=t.appId;return r=Array.isArray(n)?n:[n],U().then((function(t){return e.commit("startLoading",r),y((0,p.generateUrl)("settings/apps/disable"),{appIds:r}).then((function(t){return e.commit("stopLoading",r),r.forEach((function(t){e.commit("disableApp",t)})),!0})).catch((function(t){e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:n,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:n,error:t})}))},uninstallApp:function(e,t){var r=t.appId;return U().then((function(t){return e.commit("startLoading",r),I((0,p.generateUrl)("settings/apps/uninstall/".concat(r))).then((function(t){return e.commit("stopLoading",r),e.commit("uninstallApp",r),!0})).catch((function(t){e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:r,error:t})}))},updateApp:function(e,t){var r=t.appId;return U().then((function(t){return e.commit("startLoading",r),e.commit("startLoading","install"),I((0,p.generateUrl)("settings/apps/update/".concat(r))).then((function(t){return e.commit("stopLoading","install"),e.commit("stopLoading",r),e.commit("updateApp",r),!0})).catch((function(t){e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:r,error:t})}))},getAllApps:function(e){return e.commit("startLoading","list"),I((0,p.generateUrl)("settings/apps/list")).then((function(t){return e.commit("setAllApps",t.data.apps),e.commit("stopLoading","list"),!0})).catch((function(t){return e.commit("API_FAILURE",t)}))},getCategories:function(e){return e.commit("startLoading","categories"),I((0,p.generateUrl)("settings/apps/categories")).then((function(t){return t.data.length>0&&(e.commit("appendCategories",t.data),e.commit("stopLoading","categories"),!0)})).catch((function(t){return e.commit("API_FAILURE",t)}))}},G={state:{apps:[],categories:[],updateCount:0,loading:{},loadingList:!1},mutations:S,getters:{loading:function(e){return function(t){return e.loading[t]}},getCategories:function(e){return e.categories},getAllApps:function(e){return e.apps},getUpdateCount:function(e){return e.updateCount}},actions:x},D={state:{},mutations:{},getters:{},actions:{setAppConfig:function(e,t){var r=t.app,n=t.key,o=t.value;return U().then((function(e){return y((0,p.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:n}),{value:o}).catch((function(e){throw e}))})).catch((function(t){return e.commit("API_FAILURE",{app:r,key:n,value:o,error:t})}))}}};i.default.use(g.ZP);var T={API_FAILURE:function(e,r){try{var n=r.error.response.data.ocs.meta.message;(0,F.x2)(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+n,{isHTML:!0})}catch(e){(0,F.x2)(t("settings","An error occured during the request. Unable to proceed."))}console.error(e,r)}},j=new g.yh({modules:{users:k,apps:G,settings:{state:{serverData:{}},mutations:{setServerData:function(e,t){e.serverData=t}},getters:{getServerData:function(e){return e.serverData}},actions:{}},oc:D},strict:!1,mutations:T});i.default.use(u.default,{defaultHtml:!1}),(0,a.Z)(j,m),o.nc=btoa(OC.requestToken),i.default.prototype.t=t,i.default.prototype.n=n,i.default.prototype.OC=OC,i.default.prototype.OCA=OCA,i.default.prototype.oc_userconfig=oc_userconfig,new i.default({router:m,store:j,render:function(e){return e(c)}}).$mount("#content")}},u={};function a(e){var t=u[e];if(void 0!==t)return t.exports;var r=u[e]={id:e,loaded:!1,exports:{}};return i[e].call(r.exports,r,r.exports,a),r.loaded=!0,r.exports}a.m=i,a.amdD=function(){throw new Error("define cannot be used indirect")},a.amdO={},e=[],a.O=function(t,r,n,o){if(!r){var i=1/0;for(d=0;d<e.length;d++){r=e[d][0],n=e[d][1],o=e[d][2];for(var u=!0,s=0;s<r.length;s++)(!1&o||i>=o)&&Object.keys(a.O).every((function(e){return a.O[e](r[s])}))?r.splice(s--,1):(u=!1,o<i&&(i=o));if(u){e.splice(d--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[r,n,o]},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},a.d=function(e,t){for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.f={},a.e=function(e){return Promise.all(Object.keys(a.f).reduce((function(t,r){return a.f[r](e,t),t}),[]))},a.u=function(e){return{7418:"settings-apps-view",8351:"settings-users"}[e]+"-"+e+".js?v="+{7418:"79a434bb85984935c596",8351:"04e1d33f947711080615"}[e]},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="nextcloud:",a.l=function(e,t,n,i){if(r[e])r[e].push(t);else{var u,s;if(void 0!==n)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var p=c[d];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==o+n){u=p;break}}u||(s=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,a.nc&&u.setAttribute("nonce",a.nc),u.setAttribute("data-webpack",o+n),u.src=e),r[e]=[t];var f=function(t,n){u.onerror=u.onload=null,clearTimeout(l);var o=r[e];if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach((function(e){return e(n)})),t)return t(n)},l=setTimeout(f.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=f.bind(null,u.onerror),u.onload=f.bind(null,u.onload),s&&document.head.appendChild(u)}},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},a.j=8562,function(){var e;a.g.importScripts&&(e=a.g.location+"");var t=a.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");r.length&&(e=r[r.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e}(),function(){a.b=document.baseURI||self.location.href;var e={8562:0};a.f.j=function(t,r){var n=a.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise((function(r,o){n=e[t]=[r,o]}));r.push(n[2]=o);var i=a.p+a.u(t),u=new Error;a.l(i,(function(r){if(a.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;u.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,n[1](u)}}),"chunk-"+t,t)}},a.O.j=function(t){return 0===e[t]};var t=function(t,r){var n,o,i=r[0],u=r[1],s=r[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(n in u)a.o(u,n)&&(a.m[n]=u[n]);if(s)var d=s(a)}for(t&&t(r);c<i.length;c++)o=i[c],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return a.O(d)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))}(),a.nc=void 0;var s=a.O(void 0,[7874],(function(){return a(78778)}));s=a.O(s)}(); +//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=1b73d0f7ab2873aaabe7
\ No newline at end of file diff --git a/dist/settings-vue-settings-apps-users-management.js.map b/dist/settings-vue-settings-apps-users-management.js.map index b36fe50454e..1ed674b22d4 100644 --- a/dist/settings-vue-settings-apps-users-management.js.map +++ b/dist/settings-vue-settings-apps-users-management.js.map @@ -1 +1 @@ -{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=9de66bd9a8adc3f45a4d","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/App.vue","webpack://nextcloud/./apps/settings/src/App.vue?536c","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=template&id=50420604&","webpack:///nextcloud/apps/settings/src/router.js","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/logger.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/store/settings.js","webpack:///nextcloud/apps/settings/src/main-apps-users-management.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<router-view />\n</template>\n\n<script>\nexport default {\n\tname: 'App',\n\tbeforeMount() {\n\t\t// importing server data into the store\n\t\tconst serverDataElmt = document.getElementById('serverData')\n\t\tif (serverDataElmt !== null) {\n\t\t\tthis.$store.commit('setServerData', JSON.parse(document.getElementById('serverData').dataset.server))\n\t\t}\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=50420604&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('router-view')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\n\n// Dynamic loading\nconst Users = () => import(/* webpackChunkName: 'settings-users' */'./views/Users')\nconst Apps = () => import(/* webpackChunkName: 'settings-apps-view' */'./views/Apps')\n\nVue.use(Router)\n\n/*\n * This is the list of routes where the vuejs app will\n * take over php to provide data\n * You need to forward the php routing (routes.php) to\n * the settings-vue template, where the vue-router will\n * ensure the proper route.\n * ⚠️ Routes needs to match the php routes.\n */\n\nexport default new Router({\n\tmode: 'history',\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl(''),\n\tlinkActiveClass: 'active',\n\troutes: [\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/users',\n\t\t\tcomponent: Users,\n\t\t\tprops: true,\n\t\t\tname: 'users',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':selectedGroup',\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tcomponent: Users,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/apps',\n\t\t\tcomponent: Apps,\n\t\t\tprops: true,\n\t\t\tname: 'apps',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':category',\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: ':id',\n\t\t\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport confirmPassword from '@nextcloud/password-confirmation'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('settings')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport logger from '../logger'\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tuserCount: 0,\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\t// convert obj to array\n\t\tconst users = state.users.concat(Object.keys(usersObj).map(userid => usersObj[userid]))\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.push(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tthis.commit('updateUserCounts', { user: state.users[userIndex], actionType: 'remove' })\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tconst user = response.data.ocs.data\n\t\tstate.users.push(user)\n\t\tthis.commit('updateUserCounts', { user, actionType: 'create' })\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\tthis.commit('updateUserCounts', { user, actionType: enabled ? 'enable' : 'disable' })\n\t},\n\t// update active/disabled counts, groups counts\n\tupdateUserCounts(state, { user, actionType }) {\n\t\tconst disabledGroup = state.groups.find(group => group.id === 'disabled')\n\t\tswitch (actionType) {\n\t\tcase 'enable':\n\t\tcase 'disable':\n\t\t\tdisabledGroup.usercount += user.enabled ? -1 : 1 // update Disabled Users count\n\t\t\tstate.userCount += user.enabled ? 1 : -1 // update Active Users count\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tgroup.disabled += user.enabled ? -1 : 1 // update group disabled count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'create':\n\t\t\tstate.userCount++ // increment Active Users count\n\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tstate.groups\n\t\t\t\t\t.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t .usercount++ // increment group total count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'remove':\n\t\t\tif (user.enabled) {\n\t\t\t\tstate.userCount-- // decrement Active Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tgroup.usercount-- // decrement group total count\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdisabledGroup.usercount-- // decrement Disabled Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tgroup.disabled-- // decrement group disabled count\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tlogger.error(`Unknown action type in updateUserCounts: '${actionType}'`)\n\t\t\t// not throwing error to interupt execution as this is not fatal\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = OC.Util.computerFileSize(value)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (OC.getCapabilities().password_policy && OC.getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', OC.getCapabilities().password_policy.minLength)\n\t\t\treturn OC.getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {Object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport '@nextcloud/dialogs/styles/toast.scss'\n\nconst state = {\n\tapps: [],\n\tcategories: [],\n\tupdateCount: 0,\n\tloading: {},\n\tloadingList: false,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\t// TODO: find a cleaner solution\n\t\t\t\t\tlocation.reload()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetCategories(context) {\n\t\tcontext.commit('startLoading', 'categories')\n\t\treturn api.get(generateUrl('settings/apps/categories'))\n\t\t\t.then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', response.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users'\nimport apps from './apps'\nimport settings from './settings'\nimport oc from './oc'\nimport { showError } from '@nextcloud/dialogs'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tshowError(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occured during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nexport default new Store({\n\tmodules: {\n\t\tusers,\n\t\tapps,\n\t\tsettings,\n\t\toc,\n\t},\n\tstrict: debug,\n\n\tmutations,\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst state = {\n\tserverData: {},\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport { sync } from 'vuex-router-sync'\n\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\n\nVue.use(VTooltip, { defaultHtml: false })\n\nsync(store, router)\n\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\n// bind to window\nVue.prototype.t = t\nVue.prototype.n = n\nVue.prototype.OC = OC\nVue.prototype.OCA = OCA\n// eslint-disable-next-line camelcase\nVue.prototype.oc_userconfig = oc_userconfig\n\nconst app = new Vue({\n\trouter,\n\tstore,\n\trender: h => h(App),\n}).$mount('#content')\n\nexport { app, router, store }\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + {\"7418\":\"settings-apps-view\",\"8351\":\"settings-users\"}[chunkId] + \"-\" + chunkId + \".js?v=\" + {\"7418\":\"79a434bb85984935c596\",\"8351\":\"602a08575de144a57dfd\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 8562;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t8562: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(78778); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","_h","this","$createElement","_self","_c","Users","Apps","Vue","Router","mode","base","generateUrl","linkActiveClass","routes","path","component","props","name","children","sanitize","url","replace","confirmPassword","options","axios","data","params","getLoggerBuilder","setApp","detectUser","build","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","localeCompare","defaults","id","canAdd","canRemove","mutations","appendUsers","state","usersObj","users","concat","Object","keys","map","userid","usersOffset","usersLimit","setPasswordPolicyMinLength","length","minPasswordLength","initGroups","userCount","group","assign","addGroup","gid","displayName","find","push","e","console","error","renameGroup","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","user","enabled","removeUserGroup","indexOf","addUserSubAdmin","subadmin","removeUserSubAdmin","deleteUser","userIndex","commit","actionType","addUserData","response","ocs","enableDisableUser","updateUserCounts","disabledGroup","forEach","userGroup","logger","setUserData","key","value","humanValue","OC","Util","computerFileSize","resetUsers","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","filter","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getUserCount","actions","context","offset","limit","search","cancel","source","api","generateOcsUrl","encodeURIComponent","cancelToken","token","then","usersCount","catch","limitParam","getUsersFromList","getUsersFromGroup","groupid","groupId","getCapabilities","password_policy","minLength","wipeUserDevices","addUser","dispatch","password","email","quota","language","userStatus","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","t","message","isHTML","initCategories","categories","updateCount","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","canInstall","updateApp","version","update","resetApps","reset","startLoading","loading","stopLoading","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","getAllApps","getCategories","loadingList","getUpdateCount","setAppConfig","Vuex","API_FAILURE","meta","Store","modules","settings","serverData","setServerData","getServerData","oc","strict","process","VTooltip","defaultHtml","sync","store","router","__webpack_nonce__","btoa","requestToken","n","OCA","oc_userconfig","render","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","get","f","chunkId","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","p","baseURI","self","href","installedChunks","installedChunkData","promise","resolve","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=1b73d0f7ab2873aaabe7","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/App.vue","webpack://nextcloud/./apps/settings/src/App.vue?536c","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=template&id=50420604&","webpack:///nextcloud/apps/settings/src/router.js","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/logger.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/store/settings.js","webpack:///nextcloud/apps/settings/src/main-apps-users-management.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<router-view />\n</template>\n\n<script>\nexport default {\n\tname: 'App',\n\tbeforeMount() {\n\t\t// importing server data into the store\n\t\tconst serverDataElmt = document.getElementById('serverData')\n\t\tif (serverDataElmt !== null) {\n\t\t\tthis.$store.commit('setServerData', JSON.parse(document.getElementById('serverData').dataset.server))\n\t\t}\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=50420604&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('router-view')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\n\n// Dynamic loading\nconst Users = () => import(/* webpackChunkName: 'settings-users' */'./views/Users')\nconst Apps = () => import(/* webpackChunkName: 'settings-apps-view' */'./views/Apps')\n\nVue.use(Router)\n\n/*\n * This is the list of routes where the vuejs app will\n * take over php to provide data\n * You need to forward the php routing (routes.php) to\n * the settings-vue template, where the vue-router will\n * ensure the proper route.\n * ⚠️ Routes needs to match the php routes.\n */\n\nexport default new Router({\n\tmode: 'history',\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl(''),\n\tlinkActiveClass: 'active',\n\troutes: [\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/users',\n\t\t\tcomponent: Users,\n\t\t\tprops: true,\n\t\t\tname: 'users',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':selectedGroup',\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tcomponent: Users,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/apps',\n\t\t\tcomponent: Apps,\n\t\t\tprops: true,\n\t\t\tname: 'apps',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':category',\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: ':id',\n\t\t\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport confirmPassword from '@nextcloud/password-confirmation'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('settings')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport logger from '../logger'\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tuserCount: 0,\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\t// convert obj to array\n\t\tconst users = state.users.concat(Object.keys(usersObj).map(userid => usersObj[userid]))\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.push(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tthis.commit('updateUserCounts', { user: state.users[userIndex], actionType: 'remove' })\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tconst user = response.data.ocs.data\n\t\tstate.users.push(user)\n\t\tthis.commit('updateUserCounts', { user, actionType: 'create' })\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\tthis.commit('updateUserCounts', { user, actionType: enabled ? 'enable' : 'disable' })\n\t},\n\t// update active/disabled counts, groups counts\n\tupdateUserCounts(state, { user, actionType }) {\n\t\tconst disabledGroup = state.groups.find(group => group.id === 'disabled')\n\t\tswitch (actionType) {\n\t\tcase 'enable':\n\t\tcase 'disable':\n\t\t\tdisabledGroup.usercount += user.enabled ? -1 : 1 // update Disabled Users count\n\t\t\tstate.userCount += user.enabled ? 1 : -1 // update Active Users count\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tgroup.disabled += user.enabled ? -1 : 1 // update group disabled count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'create':\n\t\t\tstate.userCount++ // increment Active Users count\n\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tstate.groups\n\t\t\t\t\t.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t .usercount++ // increment group total count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'remove':\n\t\t\tif (user.enabled) {\n\t\t\t\tstate.userCount-- // decrement Active Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tgroup.usercount-- // decrement group total count\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdisabledGroup.usercount-- // decrement Disabled Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tgroup.disabled-- // decrement group disabled count\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tlogger.error(`Unknown action type in updateUserCounts: '${actionType}'`)\n\t\t\t// not throwing error to interupt execution as this is not fatal\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = OC.Util.computerFileSize(value)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (OC.getCapabilities().password_policy && OC.getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', OC.getCapabilities().password_policy.minLength)\n\t\t\treturn OC.getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {Object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport '@nextcloud/dialogs/styles/toast.scss'\n\nconst state = {\n\tapps: [],\n\tcategories: [],\n\tupdateCount: 0,\n\tloading: {},\n\tloadingList: false,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\t// TODO: find a cleaner solution\n\t\t\t\t\tlocation.reload()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetCategories(context) {\n\t\tcontext.commit('startLoading', 'categories')\n\t\treturn api.get(generateUrl('settings/apps/categories'))\n\t\t\t.then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', response.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users'\nimport apps from './apps'\nimport settings from './settings'\nimport oc from './oc'\nimport { showError } from '@nextcloud/dialogs'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tshowError(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occured during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nexport default new Store({\n\tmodules: {\n\t\tusers,\n\t\tapps,\n\t\tsettings,\n\t\toc,\n\t},\n\tstrict: debug,\n\n\tmutations,\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst state = {\n\tserverData: {},\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport { sync } from 'vuex-router-sync'\n\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\n\nVue.use(VTooltip, { defaultHtml: false })\n\nsync(store, router)\n\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\n// bind to window\nVue.prototype.t = t\nVue.prototype.n = n\nVue.prototype.OC = OC\nVue.prototype.OCA = OCA\n// eslint-disable-next-line camelcase\nVue.prototype.oc_userconfig = oc_userconfig\n\nconst app = new Vue({\n\trouter,\n\tstore,\n\trender: h => h(App),\n}).$mount('#content')\n\nexport { app, router, store }\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + {\"7418\":\"settings-apps-view\",\"8351\":\"settings-users\"}[chunkId] + \"-\" + chunkId + \".js?v=\" + {\"7418\":\"79a434bb85984935c596\",\"8351\":\"04e1d33f947711080615\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 8562;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t8562: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(78778); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","_h","this","$createElement","_self","_c","Users","Apps","Vue","Router","mode","base","generateUrl","linkActiveClass","routes","path","component","props","name","children","sanitize","url","replace","confirmPassword","options","axios","data","params","getLoggerBuilder","setApp","detectUser","build","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","localeCompare","defaults","id","canAdd","canRemove","mutations","appendUsers","state","usersObj","users","concat","Object","keys","map","userid","usersOffset","usersLimit","setPasswordPolicyMinLength","length","minPasswordLength","initGroups","userCount","group","assign","addGroup","gid","displayName","find","push","e","console","error","renameGroup","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","user","enabled","removeUserGroup","indexOf","addUserSubAdmin","subadmin","removeUserSubAdmin","deleteUser","userIndex","commit","actionType","addUserData","response","ocs","enableDisableUser","updateUserCounts","disabledGroup","forEach","userGroup","logger","setUserData","key","value","humanValue","OC","Util","computerFileSize","resetUsers","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","filter","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getUserCount","actions","context","offset","limit","search","cancel","source","api","generateOcsUrl","encodeURIComponent","cancelToken","token","then","usersCount","catch","limitParam","getUsersFromList","getUsersFromGroup","groupid","groupId","getCapabilities","password_policy","minLength","wipeUserDevices","addUser","dispatch","password","email","quota","language","userStatus","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","t","message","isHTML","initCategories","categories","updateCount","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","canInstall","updateApp","version","update","resetApps","reset","startLoading","loading","stopLoading","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","getAllApps","getCategories","loadingList","getUpdateCount","setAppConfig","Vuex","API_FAILURE","meta","Store","modules","settings","serverData","setServerData","getServerData","oc","strict","process","VTooltip","defaultHtml","sync","store","router","__webpack_nonce__","btoa","requestToken","n","OCA","oc_userconfig","render","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","get","f","chunkId","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","p","baseURI","self","href","installedChunks","installedChunkData","promise","resolve","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/workflowengine-workflowengine.js b/dist/workflowengine-workflowengine.js index 59b5a505ea5..b8d9fd77a30 100644 --- a/dist/workflowengine-workflowengine.js +++ b/dist/workflowengine-workflowengine.js @@ -1,3 +1,3 @@ /*! For license information please see workflowengine-workflowengine.js.LICENSE.txt */ -!function(){var n,e={98739:function(n,e,i){"use strict";var o=i(20144),r=i(20629),a=i(4820),s=i(16453),l=i(79753),c=0===(0,s.loadState)("workflowengine","scope")?"global":"user",u=function(t){return(0,l.generateOcsUrl)("apps/workflowengine/api/v1/workflows/{scopeValue}",{scopeValue:c})+t+"?format=json"},p=i(10128),d=i.n(p);function A(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}function m(t){return function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){A(r,i,o,a,s,"next",t)}function s(t){A(r,i,o,a,s,"throw",t)}a(void 0)}))}}function f(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,i)}return e}function h(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?f(Object(e),!0).forEach((function(n){g(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):f(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function g(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}o.default.use(r.ZP);var v=new r.yh({state:{rules:[],scope:(0,s.loadState)("workflowengine","scope"),appstoreEnabled:(0,s.loadState)("workflowengine","appstoreenabled"),operations:(0,s.loadState)("workflowengine","operators"),plugins:o.default.observable({checks:{},operators:{}}),entities:(0,s.loadState)("workflowengine","entities"),events:(0,s.loadState)("workflowengine","entities").map((function(t){return t.events.map((function(n){return h({id:"".concat(t.id,"::").concat(n.eventName),entity:t},n)}))})).flat(),checks:(0,s.loadState)("workflowengine","checks")},mutations:{addRule:function(t,n){t.rules.push(h(h({},n),{},{valid:!0}))},updateRule:function(t,n){var e=t.rules.findIndex((function(t){return n.id===t.id})),i=Object.assign({},n);o.default.set(t.rules,e,i)},removeRule:function(t,n){var e=t.rules.findIndex((function(t){return n.id===t.id}));t.rules.splice(e,1)},addPluginCheck:function(t,n){o.default.set(t.plugins.checks,n.class,n)},addPluginOperator:function(t,n){n=Object.assign({color:"var(--color-primary-element)"},n,t.operations[n.id]||{}),void 0!==t.operations[n.id]&&o.default.set(t.operations,n.id,n)}},actions:{fetchRules:function(t){return m(regeneratorRuntime.mark((function n(){var e,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,a.default.get(u(""));case 2:e=n.sent,i=e.data,Object.values(i.ocs.data).flat().forEach((function(n){t.commit("addRule",n)}));case 5:case"end":return n.stop()}}),n)})))()},createNewRule:function(t,n){var e=null,i=[];!1===n.isComplex&&""===n.fixedEntity&&(i=[(e=(e=t.state.entities.find((function(t){return n.entities&&n.entities[0]===t.id})))||Object.values(t.state.entities)[0]).events[0].eventName]),t.commit("addRule",{id:-(new Date).getTime(),class:n.id,entity:e?e.id:n.fixedEntity,events:i,name:"",checks:[{class:null,operator:null,value:""}],operation:n.operation||""})},updateRule:function(t,n){t.commit("updateRule",h(h({},n),{},{events:"string"==typeof n.events?JSON.parse(n.events):n.events}))},removeRule:function(t,n){t.commit("removeRule",n)},pushUpdateRule:function(t,n){return m(regeneratorRuntime.mark((function e(){var i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==t.state.scope){e.next=3;break}return e.next=3,d()();case 3:if(!(n.id<0)){e.next=9;break}return e.next=6,a.default.post(u(""),n);case 6:i=e.sent,e.next=12;break;case 9:return e.next=11,a.default.put(u("/".concat(n.id)),n);case 11:i=e.sent;case 12:o.default.set(n,"id",i.data.ocs.data.id),t.commit("updateRule",n);case 14:case"end":return e.stop()}}),e)})))()},deleteRule:function(t,n){return m(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d()();case 2:return e.next=4,a.default.delete(u("/".concat(n.id)));case 4:t.commit("removeRule",n);case 5:case"end":return e.stop()}}),e)})))()},setValid:function(t,n){var e=n.rule,i=n.valid;e.valid=i,t.commit("updateRule",e)}},getters:{getRules:function(t){return t.rules.filter((function(n){return void 0!==t.operations[n.class]})).sort((function(t,n){return t.id-n.id||n.class-t.class}))},getOperationForRule:function(t){return function(n){return t.operations[n.class]}},getEntityForOperation:function(t){return function(n){return t.entities.find((function(t){return n.fixedEntity===t.id}))}},getEventsForOperation:function(t){return function(n){return t.events}},getChecksForEntity:function(t){return function(n){return Object.values(t.checks).filter((function(t){return t.supportedEntities.indexOf(n)>-1||0===t.supportedEntities.length})).map((function(n){return t.plugins.checks[n.id]})).reduce((function(t,n){return t[n.class]=n,t}),{})}}}}),C=i(15168),w=i.n(C),b=i(79440),x=i.n(b),k=i(56286),y=i.n(k),_=i(1412),j=i.n(_),O=i(73723),R=i(44254),V=i(78039),E=i(7811),P=i.n(E),B=i(26932),T={name:"Event",components:{Multiselect:P()},props:{rule:{type:Object,required:!0}},computed:{entity:function(){return this.$store.getters.getEntityForOperation(this.operation)},operation:function(){return this.$store.getters.getOperationForRule(this.rule)},allEvents:function(){return this.$store.getters.getEventsForOperation(this.operation)},currentEvent:function(){var t=this;return this.allEvents.filter((function(n){return n.entity.id===t.rule.entity&&-1!==t.rule.events.indexOf(n.eventName)}))}},methods:{updateEvent:function(n){if(0!==n.length){var e,i=this.rule.entity,o=n.map((function(t){return t.entity.id})).filter((function(t,n,e){return e.indexOf(t)===n}));e=o.length>1?o.filter((function(t){return t!==i}))[0]:o[0],this.$set(this.rule,"entity",e),this.$set(this.rule,"events",n.filter((function(t){return t.entity.id===e})).map((function(t){return t.eventName}))),this.$emit("update",this.rule)}else(0,B.K2)(t("workflowengine","At least one event must be selected"))}}},S=i(93379),D=i.n(S),U=i(7795),F=i.n(U),$=i(90569),M=i.n($),I=i(3565),z=i.n(I),G=i(19216),L=i.n(G),N=i(44589),Z=i.n(N),W=i(13885),q={};q.styleTagTransform=Z(),q.setAttributes=z(),q.insert=M().bind(null,"head"),q.domAPI=F(),q.insertStyleElement=L(),D()(W.Z,q),W.Z&&W.Z.locals&&W.Z.locals;var Y=i(51900),H=(0,Y.Z)(T,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"event"},[t.operation.isComplex&&""!==t.operation.fixedEntity?e("div",{staticClass:"isComplex"},[e("img",{staticClass:"option__icon",attrs:{src:t.entity.icon}}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(t.operation.triggerHint))])]):e("Multiselect",{attrs:{value:t.currentEvent,options:t.allEvents,"track-by":"id",multiple:!0,"auto-limit":!1,disabled:t.allEvents.length<=1},on:{input:t.updateEvent},scopedSlots:t._u([{key:"selection",fn:function(n){var i=n.values,o=n.isOpen;return[i.length&&!o?e("div",{staticClass:"eventlist"},[e("img",{staticClass:"option__icon",attrs:{src:i[0].entity.icon}}),t._v(" "),t._l(i,(function(n,o){return e("span",{key:n.id,staticClass:"text option__title option__title_single"},[t._v(t._s(n.displayName)+" "),o+1<i.length?e("span",[t._v(", ")]):t._e()])}))],2):t._e()]}},{key:"option",fn:function(n){return[e("img",{staticClass:"option__icon",attrs:{src:n.option.entity.icon}}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.displayName))])]}}])})],1)}),[],!1,null,"57bd6e67",null).exports,J=i(2649),Q=i.n(J),K={name:"Check",components:{ActionButton:y(),Actions:x(),Multiselect:P()},directives:{ClickOutside:Q()},props:{check:{type:Object,required:!0},rule:{type:Object,required:!0}},data:function(){return{deleteVisible:!1,currentOption:null,currentOperator:null,options:[],valid:!1}},computed:{checks:function(){return this.$store.getters.getChecksForEntity(this.rule.entity)},operators:function(){if(!this.currentOption)return[];var t=this.checks[this.currentOption.class].operators;return"function"==typeof t?t(this.check):t},currentComponent:function(){return this.currentOption?this.checks[this.currentOption.class].component:[]},valuePlaceholder:function(){return this.currentOption&&this.currentOption.placeholder?this.currentOption.placeholder(this.check):""}},watch:{"check.operator":function(){this.validate()}},mounted:function(){var t=this;this.options=Object.values(this.checks),this.currentOption=this.checks[this.check.class],this.currentOperator=this.operators.find((function(n){return n.operator===t.check.operator})),null===this.check.class&&this.$nextTick((function(){return t.$refs.checkSelector.$el.focus()})),this.validate()},methods:{showDelete:function(){this.deleteVisible=!0},hideDelete:function(){this.deleteVisible=!1},validate:function(){this.valid=!0,this.currentOption&&this.currentOption.validate&&(this.valid=!!this.currentOption.validate(this.check)),this.check.invalid=!this.valid,this.$emit("validate",this.valid)},updateCheck:function(){var t=this,n=this.operators.findIndex((function(n){return t.check.operator===n.operator}));this.check.class===this.currentOption.class&&-1!==n||(this.currentOperator=this.operators[0]),this.check.class=this.currentOption.class,this.check.operator=this.currentOperator.operator,this.validate(),this.$emit("update",this.check)}}},X=i(38530),tt={};tt.styleTagTransform=Z(),tt.setAttributes=z(),tt.insert=M().bind(null,"head"),tt.domAPI=F(),tt.insertStyleElement=L(),D()(X.Z,tt),X.Z&&X.Z.locals&&X.Z.locals;var nt=(0,Y.Z)(K,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideDelete,expression:"hideDelete"}],staticClass:"check",on:{click:t.showDelete}},[e("Multiselect",{ref:"checkSelector",attrs:{options:t.options,label:"name","track-by":"class","allow-empty":!1,placeholder:t.t("workflowengine","Select a filter")},on:{input:t.updateCheck},model:{value:t.currentOption,callback:function(n){t.currentOption=n},expression:"currentOption"}}),t._v(" "),e("Multiselect",{staticClass:"comparator",attrs:{disabled:!t.currentOption,options:t.operators,label:"name","track-by":"operator","allow-empty":!1,placeholder:t.t("workflowengine","Select a comparator")},on:{input:t.updateCheck},model:{value:t.currentOperator,callback:function(n){t.currentOperator=n},expression:"currentOperator"}}),t._v(" "),t.currentOperator&&t.currentComponent?e(t.currentOption.component,{tag:"component",staticClass:"option",attrs:{disabled:!t.currentOption,check:t.check},on:{input:t.updateCheck,valid:function(n){(t.valid=!0)&&t.validate()},invalid:function(n){!(t.valid=!1)&&t.validate()}},model:{value:t.check.value,callback:function(n){t.$set(t.check,"value",n)},expression:"check.value"}}):e("input",{directives:[{name:"model",rawName:"v-model",value:t.check.value,expression:"check.value"}],staticClass:"option",class:{invalid:!t.valid},attrs:{type:"text",disabled:!t.currentOption,placeholder:t.valuePlaceholder},domProps:{value:t.check.value},on:{input:[function(n){n.target.composing||t.$set(t.check,"value",n.target.value)},t.updateCheck]}}),t._v(" "),t.deleteVisible||!t.currentOption?e("Actions",[e("ActionButton",{attrs:{icon:"icon-close"},on:{click:function(n){return t.$emit("remove")}}})],1):t._e()],1)}),[],!1,null,"70cc784d",null).exports,et={name:"Operation",components:{Button:j()},props:{operation:{type:Object,required:!0},colored:{type:Boolean,default:!0}}},it=i(46514),ot={};ot.styleTagTransform=Z(),ot.setAttributes=z(),ot.insert=M().bind(null,"head"),ot.domAPI=F(),ot.insertStyleElement=L(),D()(it.Z,ot),it.Z&&it.Z.locals&&it.Z.locals;var rt=(0,Y.Z)(et,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"actions__item",class:{colored:t.colored},style:{backgroundColor:t.colored?t.operation.color:"transparent"}},[e("div",{staticClass:"icon",class:t.operation.iconClass,style:{backgroundImage:t.operation.iconClass?"":"url("+t.operation.icon+")"}}),t._v(" "),e("div",{staticClass:"actions__item__description"},[e("h3",[t._v(t._s(t.operation.name))]),t._v(" "),e("small",[t._v(t._s(t.operation.description))]),t._v(" "),t.colored?e("Button",[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Add new flow"))+"\n\t\t")]):t._e()],1),t._v(" "),e("div",{staticClass:"actions__item_options"},[t._t("default")],2)])}),[],!1,null,"96600802",null).exports;function at(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}function st(t){return function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){at(r,i,o,a,s,"next",t)}function s(t){at(r,i,o,a,s,"throw",t)}a(void 0)}))}}var lt={name:"Rule",components:{Operation:rt,Check:nt,Event:H,Actions:x(),ActionButton:y(),Button:j(),ArrowRight:O.default,CheckMark:R.default,Close:V.default},directives:{Tooltip:w()},props:{rule:{type:Object,required:!0}},data:function(){return{editing:!1,checks:[],error:null,dirty:this.rule.id<0,originalRule:null}},computed:{operation:function(){return this.$store.getters.getOperationForRule(this.rule)},ruleStatus:function(){return this.error||!this.rule.valid||0===this.rule.checks.length||this.rule.checks.some((function(t){return!0===t.invalid}))?{title:t("workflowengine","The configuration is invalid"),icon:"Close",type:"warning",tooltip:{placement:"bottom",show:!0,content:this.error}}:this.dirty?{title:t("workflowengine","Save"),icon:"ArrowRight",type:"primary"}:{title:t("workflowengine","Active"),icon:"CheckMark",type:"success"}},lastCheckComplete:function(){var t=this.rule.checks[this.rule.checks.length-1];return void 0===t||null!==t.class}},mounted:function(){this.originalRule=JSON.parse(JSON.stringify(this.rule))},methods:{updateOperation:function(t){var n=this;return st(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.$set(n.rule,"operation",t),e.next=3,n.updateRule();case 3:case"end":return e.stop()}}),e)})))()},validate:function(t){this.error=null,this.$store.dispatch("updateRule",this.rule)},updateRule:function(){this.dirty||(this.dirty=!0),this.error=null,this.$store.dispatch("updateRule",this.rule)},saveRule:function(){var t=this;return st(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,t.$store.dispatch("pushUpdateRule",t.rule);case 3:t.dirty=!1,t.error=null,t.originalRule=JSON.parse(JSON.stringify(t.rule)),n.next=12;break;case 8:n.prev=8,n.t0=n.catch(0),console.error("Failed to save operation"),t.error=n.t0.response.data.ocs.meta.message;case 12:case"end":return n.stop()}}),n,null,[[0,8]])})))()},deleteRule:function(){var t=this;return st(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,t.$store.dispatch("deleteRule",t.rule);case 3:n.next=9;break;case 5:n.prev=5,n.t0=n.catch(0),console.error("Failed to delete operation"),t.error=n.t0.response.data.ocs.meta.message;case 9:case"end":return n.stop()}}),n,null,[[0,5]])})))()},cancelRule:function(){this.rule.id<0?this.$store.dispatch("removeRule",this.rule):(this.$store.dispatch("updateRule",this.originalRule),this.originalRule=JSON.parse(JSON.stringify(this.rule)),this.dirty=!1)},removeCheck:function(t){var n=this;return st(regeneratorRuntime.mark((function e(){var i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(i=n.rule.checks.findIndex((function(n){return n===t})))>-1&&n.$delete(n.rule.checks,i),n.$store.dispatch("updateRule",n.rule);case 3:case"end":return e.stop()}}),e)})))()},onAddFilter:function(){this.rule.checks.push({class:null,operator:null,value:""})}}},ct=i(11661),ut={};ut.styleTagTransform=Z(),ut.setAttributes=z(),ut.insert=M().bind(null,"head"),ut.domAPI=F(),ut.insertStyleElement=L(),D()(ct.Z,ut),ct.Z&&ct.Z.locals&&ct.Z.locals;var pt=(0,Y.Z)(lt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return t.operation?e("div",{staticClass:"section rule",style:{borderLeftColor:t.operation.color||""}},[e("div",{staticClass:"trigger"},[e("p",[e("span",[t._v(t._s(t.t("workflowengine","When")))]),t._v(" "),e("Event",{attrs:{rule:t.rule},on:{update:t.updateRule}})],1),t._v(" "),t._l(t.rule.checks,(function(n,i){return e("p",{key:i},[e("span",[t._v(t._s(t.t("workflowengine","and")))]),t._v(" "),e("Check",{attrs:{check:n,rule:t.rule},on:{update:t.updateRule,validate:t.validate,remove:function(e){return t.removeCheck(n)}}})],1)})),t._v(" "),e("p",[e("span"),t._v(" "),t.lastCheckComplete?e("input",{staticClass:"check--add",attrs:{type:"button",value:"Add a new filter"},on:{click:t.onAddFilter}}):t._e()])],2),t._v(" "),e("div",{staticClass:"flow-icon icon-confirm"}),t._v(" "),e("div",{staticClass:"action"},[e("Operation",{attrs:{operation:t.operation,colored:!1}},[t.operation.options?e(t.operation.options,{tag:"component",on:{input:t.updateOperation},model:{value:t.rule.operation,callback:function(n){t.$set(t.rule,"operation",n)},expression:"rule.operation"}}):t._e()],1),t._v(" "),e("div",{staticClass:"buttons"},[t.rule.id<-1||t.dirty?e("Button",{on:{click:t.cancelRule}},[t._v("\n\t\t\t\t"+t._s(t.t("workflowengine","Cancel"))+"\n\t\t\t")]):t.dirty?t._e():e("Button",{on:{click:t.deleteRule}},[t._v("\n\t\t\t\t"+t._s(t.t("workflowengine","Delete"))+"\n\t\t\t")]),t._v(" "),e("Button",{attrs:{type:t.ruleStatus.type},on:{click:t.saveRule},scopedSlots:t._u([{key:"icon",fn:function(){return[e(t.ruleStatus.icon,{tag:"component",attrs:{size:20}})]},proxy:!0}],null,!1,2383918876)},[t._v("\n\t\t\t\t"+t._s(t.ruleStatus.title)+"\n\t\t\t")])],1),t._v(" "),t.error?e("p",{staticClass:"error-message"},[t._v("\n\t\t\t"+t._s(t.error)+"\n\t\t")]):t._e()],1)]):t._e()}),[],!1,null,"779dc71c",null).exports,dt=i(67776),At=i.n(dt),mt=i(63286),ft=i(69686);function ht(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,i)}return e}function gt(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?ht(Object(e),!0).forEach((function(n){vt(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):ht(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function vt(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}var Ct={name:"Workflow",components:{Button:j(),MenuDown:ft.default,MenuUp:mt.Z,Operation:rt,Rule:pt,SettingsSection:At()},data:function(){return{showMoreOperations:!1,appstoreUrl:(0,l.generateUrl)("settings/apps/workflow"),workflowDocUrl:(0,s.loadState)("workflowengine","doc-url")}},computed:gt(gt(gt({},(0,r.Se)({rules:"getRules"})),(0,r.rn)({appstoreEnabled:"appstoreEnabled",scope:"scope",operations:"operations"})),{},{hasMoreOperations:function(){return Object.keys(this.operations).length>3},getMainOperations:function(){return this.showMoreOperations?Object.values(this.operations):Object.values(this.operations).slice(0,3)},showAppStoreHint:function(){return 0===this.scope&&this.appstoreEnabled&&OC.isUserAdmin()}}),mounted:function(){this.$store.dispatch("fetchRules")},methods:{createNewRule:function(t){this.$store.dispatch("createNewRule",t)}}},wt=i(33786),bt={};bt.styleTagTransform=Z(),bt.setAttributes=z(),bt.insert=M().bind(null,"head"),bt.domAPI=F(),bt.insertStyleElement=L(),D()(wt.Z,bt),wt.Z&&wt.Z.locals&&wt.Z.locals;var xt=(0,Y.Z)(Ct,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"workflowengine"}},[e("SettingsSection",{attrs:{title:t.t("workflowengine","Available flows"),"doc-url":t.workflowDocUrl}},[0===t.scope?e("p",{staticClass:"settings-hint"},[e("a",{attrs:{href:"https://nextcloud.com/developer/"}},[t._v(t._s(t.t("workflowengine","For details on how to write your own flow, check out the development documentation.")))])]):t._e(),t._v(" "),e("transition-group",{staticClass:"actions",attrs:{name:"slide",tag:"div"}},[t._l(t.getMainOperations,(function(n){return e("Operation",{key:n.id,attrs:{operation:n},nativeOn:{click:function(e){return t.createNewRule(n)}}})})),t._v(" "),t.showAppStoreHint?e("a",{key:"add",staticClass:"actions__item colored more",attrs:{href:t.appstoreUrl}},[e("div",{staticClass:"icon icon-add"}),t._v(" "),e("div",{staticClass:"actions__item__description"},[e("h3",[t._v(t._s(t.t("workflowengine","More flows")))]),t._v(" "),e("small",[t._v(t._s(t.t("workflowengine","Browse the App Store")))])])]):t._e()],2),t._v(" "),t.hasMoreOperations?e("div",{staticClass:"actions__more"},[e("Button",{on:{click:function(n){t.showMoreOperations=!t.showMoreOperations}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.showMoreOperations?e("MenuUp",{attrs:{size:20}}):e("MenuDown",{attrs:{size:20}})]},proxy:!0}],null,!1,3801522717)},[t._v("\n\t\t\t\t"+t._s(t.showMoreOperations?t.t("workflowengine","Show less"):t.t("workflowengine","Show more"))+"\n\t\t\t")])],1):t._e(),t._v(" "),0===t.scope?e("h2",{staticClass:"configured-flows"},[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Configured flows"))+"\n\t\t")]):e("h2",{staticClass:"configured-flows"},[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Your flows"))+"\n\t\t")])],1),t._v(" "),t.rules.length>0?e("transition-group",{attrs:{name:"slide"}},t._l(t.rules,(function(t){return e("Rule",{key:t.id,attrs:{rule:t}})})),1):t._e()],1)}),[],!1,null,"2fb0024e",null).exports,kt=/^\/(.*)\/([gui]{0,3})$/,yt=/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(3[0-2]|[1-2][0-9]|[1-9])$/,_t=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/,jt={props:{value:{type:String,default:""},check:{type:Object,default:function(){return{}}}},data:function(){return{newValue:""}},watch:{value:{immediate:!0,handler:function(t){this.updateInternalValue(t)}}},methods:{updateInternalValue:function(t){this.newValue=t}}};function Ot(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var Rt={name:"FileMimeType",components:{Multiselect:P()},mixins:[jt],data:function(){return{predefinedTypes:[{icon:"icon-folder",label:t("workflowengine","Folder"),pattern:"httpd/unix-directory"},{icon:"icon-picture",label:t("workflowengine","Images"),pattern:"/image\\/.*/"},{iconUrl:(0,l.imagePath)("core","filetypes/x-office-document"),label:t("workflowengine","Office documents"),pattern:"/(vnd\\.(ms-|openxmlformats-|oasis\\.opendocument).*)$/"},{iconUrl:(0,l.imagePath)("core","filetypes/application-pdf"),label:t("workflowengine","PDF documents"),pattern:"application/pdf"}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return Ot(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return Ot(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Ot(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},isPredefined:function(){var t=this;return!!this.predefinedTypes.find((function(n){return t.newValue===n.pattern}))},customValue:function(){return{icon:"icon-settings-dark",label:t("workflowengine","Custom mimetype"),pattern:""}},currentValue:function(){var n=this;return this.predefinedTypes.find((function(t){return n.newValue===t.pattern}))||{icon:"icon-settings-dark",label:t("workflowengine","Custom mimetype"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},Vt=i(1510),Et={};Et.styleTagTransform=Z(),Et.setAttributes=z(),Et.insert=M().bind(null,"head"),Et.domAPI=F(),Et.insertStyleElement=L(),D()(Vt.Z,Et),Vt.Z&&Vt.Z.locals&&Vt.Z.locals;var Pt=(0,Y.Z)(Rt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a file type"),label:"label","track-by":"pattern",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[n.option.icon?e("span",{staticClass:"option__icon",class:n.option.icon}):e("img",{attrs:{src:n.option.iconUrl}}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(n.option.label))])]}},{key:"option",fn:function(n){return[n.option.icon?e("span",{staticClass:"option__icon",class:n.option.icon}):e("img",{attrs:{src:n.option.iconUrl}}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.label))])]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text",placeholder:t.t("workflowengine","e.g. httpd/unix-directory")},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"8c011724",null).exports,Bt=function t(n){var e={};if(1===n.nodeType){if(n.attributes.length>0){e["@attributes"]={};for(var i=0;i<n.attributes.length;i++){var o=n.attributes.item(i);e["@attributes"][o.nodeName]=o.nodeValue}}}else 3===n.nodeType&&(e=n.nodeValue);if(n.hasChildNodes())for(var r=0;r<n.childNodes.length;r++){var a=n.childNodes.item(r),s=a.nodeName;if(void 0===e[s])e[s]=t(a);else{if(void 0===e[s].push){var l=e[s];e[s]=[],e[s].push(l)}e[s].push(t(a))}}return e},Tt=0,St={name:"MultiselectTag",components:{Multiselect:P()},props:{label:{type:String,required:!0},value:{type:[String,Array],default:null},disabled:{type:Boolean,default:!1},multiple:{type:Boolean,default:!1}},data:function(){return{inputValObjects:[],tags:[]}},computed:{id:function(){return"settings-input-text-"+this.uuid}},watch:{value:function(t){this.inputValObjects=this.getValueObject()}},beforeCreate:function(){var t=this;this.uuid=Tt.toString(),Tt+=1,(0,a.default)({method:"PROPFIND",url:(0,l.generateRemoteUrl)("dav")+"/systemtags/",data:'<?xml version="1.0"?>\n\t\t\t\t\t<d:propfind xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">\n\t\t\t\t\t <d:prop>\n\t\t\t\t\t\t<oc:id />\n\t\t\t\t\t\t<oc:display-name />\n\t\t\t\t\t\t<oc:user-visible />\n\t\t\t\t\t\t<oc:user-assignable />\n\t\t\t\t\t\t<oc:can-assign />\n\t\t\t\t\t </d:prop>\n\t\t\t\t\t</d:propfind>'}).then((function(t){return function(t){var n=Bt(function(t){var n=null;try{n=(new DOMParser).parseFromString(t,"text/xml")}catch(t){console.error("Failed to parse xml document",t)}return n}(t)),e=n["d:multistatus"]["d:response"],i=[];for(var o in e){var r=e[o]["d:propstat"];"HTTP/1.1 200 OK"===r["d:status"]["#text"]&&i.push({id:r["d:prop"]["oc:id"]["#text"],displayName:r["d:prop"]["oc:display-name"]["#text"],canAssign:"true"===r["d:prop"]["oc:can-assign"]["#text"],userAssignable:"true"===r["d:prop"]["oc:user-assignable"]["#text"],userVisible:"true"===r["d:prop"]["oc:user-visible"]["#text"]})}return i}(t.data)})).then((function(n){t.tags=n,t.inputValObjects=t.getValueObject()})).catch(console.error.bind(this))},methods:{getValueObject:function(){var t=this;return 0===this.tags.length?[]:this.multiple?this.value.filter((function(t){return""!==t})).map((function(n){return t.tags.find((function(t){return t.id===n}))})):this.tags.find((function(n){return n.id===t.value}))},update:function(){this.multiple?this.$emit("input",this.inputValObjects.map((function(t){return t.id}))):null===this.inputValObjects?this.$emit("input",""):this.$emit("input",this.inputValObjects.id)},tagLabel:function(n){var e=n.displayName,i=n.userVisible,o=n.userAssignable;return!1===i?t("systemtags","%s (invisible)").replace("%s",e):!1===o?t("systemtags","%s (restricted)").replace("%s",e):e}}},Dt={name:"FileSystemTag",components:{MultiselectTag:(0,Y.Z)(St,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("Multiselect",{staticClass:"multiselect-vue",attrs:{options:t.tags,"options-limit":5,placeholder:t.label,"track-by":"id","custom-label":t.tagLabel,multiple:t.multiple,"close-on-select":!1,"tag-width":60,disabled:t.disabled},on:{input:t.update},scopedSlots:t._u([{key:"option",fn:function(n){return[t._v("\n\t\t"+t._s(t.tagLabel(n.option))+"\n\t")]}}]),model:{value:t.inputValObjects,callback:function(n){t.inputValObjects=n},expression:"inputValObjects"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("core","No results")))])])}),[],!1,null,null,null).exports},props:{value:{type:String,default:""}},data:function(){return{newValue:[]}},watch:{value:function(){this.updateValue()}},beforeMount:function(){this.updateValue()},methods:{updateValue:function(){""!==this.value?this.newValue=this.value:this.newValue=null},update:function(){this.$emit("input",this.newValue||"")}}},Ut=(0,Y.Z)(Dt,(function(){var t=this,n=t.$createElement;return(t._self._c||n)("MultiselectTag",{attrs:{multiple:!1,label:t.t("workflowengine","Select a tag")},on:{input:t.update},model:{value:t.newValue,callback:function(n){t.newValue=n},expression:"newValue"}})}),[],!1,null,"31f5522d",null).exports,Ft=function(){return[{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")},{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")}]},$t=[{class:"OCA\\WorkflowEngine\\Check\\FileName",name:t("workflowengine","File name"),operators:Ft,placeholder:function(t){return"matches"===t.operator||"!matches"===t.operator?"/^dummy-.+$/i":"filename.txt"},validate:function(t){return"matches"!==t.operator&&"!matches"!==t.operator||!!(n=t.value)&&null!==kt.exec(n);var n}},{class:"OCA\\WorkflowEngine\\Check\\FileMimeType",name:t("workflowengine","File MIME type"),operators:Ft,component:Pt},{class:"OCA\\WorkflowEngine\\Check\\FileSize",name:t("workflowengine","File size (upload)"),operators:[{operator:"less",name:t("workflowengine","less")},{operator:"!greater",name:t("workflowengine","less or equals")},{operator:"!less",name:t("workflowengine","greater or equals")},{operator:"greater",name:t("workflowengine","greater")}],placeholder:function(t){return"5 MB"},validate:function(t){return!!t.value&&null!==t.value.match(/^[0-9]+[ ]?[kmgt]?b$/i)}},{class:"OCA\\WorkflowEngine\\Check\\RequestRemoteAddress",name:t("workflowengine","Request remote address"),operators:[{operator:"matchesIPv4",name:t("workflowengine","matches IPv4")},{operator:"!matchesIPv4",name:t("workflowengine","does not match IPv4")},{operator:"matchesIPv6",name:t("workflowengine","matches IPv6")},{operator:"!matchesIPv6",name:t("workflowengine","does not match IPv6")}],placeholder:function(t){return"matchesIPv6"===t.operator||"!matchesIPv6"===t.operator?"::1/128":"127.0.0.1/32"},validate:function(t){return"matchesIPv6"===t.operator||"!matchesIPv6"===t.operator?!!(n=t.value)&&null!==_t.exec(n):function(t){return!!t&&null!==yt.exec(t)}(t.value);var n}},{class:"OCA\\WorkflowEngine\\Check\\FileSystemTags",name:t("workflowengine","File system tag"),operators:[{operator:"is",name:t("workflowengine","is tagged with")},{operator:"!is",name:t("workflowengine","is not tagged with")}],component:Ut}];function Mt(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var It={name:"RequestUserAgent",components:{Multiselect:P()},mixins:[jt],data:function(){return{newValue:"",predefinedTypes:[{pattern:"android",label:t("workflowengine","Android client"),icon:"icon-phone"},{pattern:"ios",label:t("workflowengine","iOS client"),icon:"icon-phone"},{pattern:"desktop",label:t("workflowengine","Desktop client"),icon:"icon-desktop"},{pattern:"mail",label:t("workflowengine","Thunderbird & Outlook addons"),icon:"icon-mail"}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return Mt(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return Mt(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Mt(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},matchingPredefined:function(){var t=this;return this.predefinedTypes.find((function(n){return t.newValue===n.pattern}))},isPredefined:function(){return!!this.matchingPredefined},customValue:function(){return{icon:"icon-settings-dark",label:t("workflowengine","Custom user agent"),pattern:""}},currentValue:function(){return this.matchingPredefined?this.matchingPredefined:{icon:"icon-settings-dark",label:t("workflowengine","Custom user agent"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},zt=i(99055),Gt={};Gt.styleTagTransform=Z(),Gt.setAttributes=z(),Gt.insert=M().bind(null,"head"),Gt.domAPI=F(),Gt.insertStyleElement=L(),D()(zt.Z,Gt),zt.Z&&zt.Z.locals&&zt.Z.locals;var Lt=(0,Y.Z)(It,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a user agent"),label:"label","track-by":"pattern",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title option__title_single",domProps:{innerHTML:t._s(n.option.label)}})]}},{key:"option",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),n.option.$groupLabel?e("span",{staticClass:"option__title",domProps:{innerHTML:t._s(n.option.$groupLabel)}}):e("span",{staticClass:"option__title",domProps:{innerHTML:t._s(n.option.label)}})]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text"},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"475ac1e6",null).exports,Nt=i(80008),Zt=i.n(Nt),Wt=Zt().tz.names(),qt={name:"RequestTime",components:{Multiselect:P()},mixins:[jt],props:{value:{type:String,default:""}},data:function(){return{timezones:Wt,valid:!1,newValue:{startTime:null,endTime:null,timezone:Zt().tz.guess()}}},mounted:function(){this.validate()},methods:{updateInternalValue:function(t){try{var n=JSON.parse(t);2===n.length&&(this.newValue={startTime:n[0].split(" ",2)[0],endTime:n[1].split(" ",2)[0],timezone:n[0].split(" ",2)[1]})}catch(t){}},validate:function(){return this.valid=this.newValue.startTime&&null!==this.newValue.startTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i)&&this.newValue.endTime&&null!==this.newValue.endTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i)&&null!==Zt().tz.zone(this.newValue.timezone),this.valid?this.$emit("valid"):this.$emit("invalid"),this.valid},update:function(){if(null===this.newValue.timezone&&(this.newValue.timezone=Zt().tz.guess()),this.validate()){var t='["'.concat(this.newValue.startTime," ").concat(this.newValue.timezone,'","').concat(this.newValue.endTime," ").concat(this.newValue.timezone,'"]');this.$emit("input",t)}}}},Yt=i(76050),Ht={};Ht.styleTagTransform=Z(),Ht.setAttributes=z(),Ht.insert=M().bind(null,"head"),Ht.domAPI=F(),Ht.insertStyleElement=L(),D()(Yt.Z,Ht),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var Jt=(0,Y.Z)(qt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"timeslot"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.newValue.startTime,expression:"newValue.startTime"}],staticClass:"timeslot--start",attrs:{type:"text",placeholder:"e.g. 08:00"},domProps:{value:t.newValue.startTime},on:{input:[function(n){n.target.composing||t.$set(t.newValue,"startTime",n.target.value)},t.update]}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newValue.endTime,expression:"newValue.endTime"}],attrs:{type:"text",placeholder:"e.g. 18:00"},domProps:{value:t.newValue.endTime},on:{input:[function(n){n.target.composing||t.$set(t.newValue,"endTime",n.target.value)},t.update]}}),t._v(" "),t.valid?t._e():e("p",{staticClass:"invalid-hint"},[t._v("\n\t\t"+t._s(t.t("workflowengine","Please enter a valid time span"))+"\n\t")]),t._v(" "),e("Multiselect",{directives:[{name:"show",rawName:"v-show",value:t.valid,expression:"valid"}],attrs:{options:t.timezones},on:{input:t.update},model:{value:t.newValue.timezone,callback:function(n){t.$set(t.newValue,"timezone",n)},expression:"newValue.timezone"}})],1)}),[],!1,null,"149baca9",null).exports;function Qt(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var Kt={name:"RequestURL",components:{Multiselect:P()},mixins:[jt],data:function(){return{newValue:"",predefinedTypes:[{label:t("workflowengine","Predefined URLs"),children:[{pattern:"webdav",label:t("workflowengine","Files WebDAV")}]}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return Qt(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return Qt(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Qt(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},placeholder:function(){return"matches"===this.check.operator||"!matches"===this.check.operator?"/^https\\:\\/\\/localhost\\/index\\.php$/i":"https://localhost/index.php"},matchingPredefined:function(){var t=this;return this.predefinedTypes.map((function(t){return t.children})).flat().find((function(n){return t.newValue===n.pattern}))},isPredefined:function(){return!!this.matchingPredefined},customValue:function(){return{label:t("workflowengine","Others"),children:[{icon:"icon-settings-dark",label:t("workflowengine","Custom URL"),pattern:""}]}},currentValue:function(){return this.matchingPredefined?this.matchingPredefined:{icon:"icon-settings-dark",label:t("workflowengine","Custom URL"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},Xt=Kt,tn=i(82999),nn={};nn.styleTagTransform=Z(),nn.setAttributes=z(),nn.insert=M().bind(null,"head"),nn.domAPI=F(),nn.insertStyleElement=L(),D()(tn.Z,nn),tn.Z&&tn.Z.locals&&tn.Z.locals;var en=(0,Y.Z)(Xt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a request URL"),label:"label","track-by":"pattern","group-values":"children","group-label":"label",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(n.option.label))])]}},{key:"option",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.label)+" "+t._s(n.option.$groupLabel))])]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text",placeholder:t.placeholder},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"dd8e16be",null).exports;function on(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}var rn=[],an={isLoading:!1},sn={name:"RequestUserGroup",components:{Multiselect:P()},props:{value:{type:String,default:""},check:{type:Object,default:function(){return{}}}},data:function(){return{groups:rn,status:an}},computed:{currentValue:function(){var t=this;return this.groups.find((function(n){return n.id===t.value}))||null}},mounted:function(){var t,n=this;return(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(0!==n.groups.length){t.next=3;break}return t.next=3,n.searchAsync("");case 3:if(null!==n.currentValue){t.next=6;break}return t.next=6,n.searchAsync(n.value);case 6:case"end":return t.stop()}}),t)})),function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){on(r,i,o,a,s,"next",t)}function s(t){on(r,i,o,a,s,"throw",t)}a(void 0)}))})()},methods:{searchAsync:function(t){var n=this;if(!this.status.isLoading)return this.status.isLoading=!0,a.default.get((0,l.generateOcsUrl)("cloud/groups/details?limit=20&search={searchQuery}",{searchQuery:t})).then((function(t){t.data.ocs.data.groups.forEach((function(t){n.addGroup({id:t.id,displayname:t.displayname})})),n.status.isLoading=!1}),(function(t){console.error("Error while loading group list",t.response)}))},addGroup:function(t){-1===this.groups.findIndex((function(n){return n.id===t.id}))&&this.groups.push(t)}}},ln=sn,cn=i(80787),un={};un.styleTagTransform=Z(),un.setAttributes=z(),un.insert=M().bind(null,"head"),un.domAPI=F(),un.insertStyleElement=L(),D()(cn.Z,un),cn.Z&&cn.Z.locals&&cn.Z.locals;var pn=(0,Y.Z)(ln,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,loading:t.status.isLoading&&0===t.groups.length,options:t.groups,multiple:!1,label:"displayname","track-by":"id"},on:{"search-change":t.searchAsync,input:function(n){return t.$emit("input",n.id)}}})],1)}),[],!1,null,"79fa10a5",null).exports,dn=[{class:"OCA\\WorkflowEngine\\Check\\RequestURL",name:t("workflowengine","Request URL"),operators:[{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")},{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")}],component:en},{class:"OCA\\WorkflowEngine\\Check\\RequestTime",name:t("workflowengine","Request time"),operators:[{operator:"in",name:t("workflowengine","between")},{operator:"!in",name:t("workflowengine","not between")}],component:Jt},{class:"OCA\\WorkflowEngine\\Check\\RequestUserAgent",name:t("workflowengine","Request user agent"),operators:[{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")},{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")}],component:Lt},{class:"OCA\\WorkflowEngine\\Check\\UserGroupMembership",name:t("workflowengine","User group membership"),operators:[{operator:"is",name:t("workflowengine","is member of")},{operator:"!is",name:t("workflowengine","is not member of")}],component:pn}];function An(t){return function(t){if(Array.isArray(t))return mn(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return mn(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?mn(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mn(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var fn=[].concat(An($t),An(dn));window.OCA.WorkflowEngine=Object.assign({},OCA.WorkflowEngine,{registerCheck:function(t){v.commit("addPluginCheck",t)},registerOperator:function(t){v.commit("addPluginOperator",t)}}),fn.forEach((function(t){return window.OCA.WorkflowEngine.registerCheck(t)})),o.default.use(r.ZP),o.default.prototype.t=t,new(o.default.extend(xt))({store:v}).$mount("#workflowengine")},38530:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".check[data-v-70cc784d]{display:flex;flex-wrap:wrap;width:100%;padding-right:20px}.check>*[data-v-70cc784d]:not(.close){width:180px}.check>.comparator[data-v-70cc784d]{min-width:130px;width:130px}.check>.option[data-v-70cc784d]{min-width:230px;width:230px}.check>.multiselect[data-v-70cc784d],.check>input[type=text][data-v-70cc784d]{margin-right:5px;margin-bottom:5px}.check .multiselect[data-v-70cc784d] .multiselect__content-wrapper li>span,.check .multiselect[data-v-70cc784d] .multiselect__single{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}input[type=text][data-v-70cc784d]{margin:0}[data-v-70cc784d]::placeholder{font-size:10px}button.action-item.action-item--single.icon-close[data-v-70cc784d]{height:44px;width:44px;margin-top:-5px;margin-bottom:-5px}.invalid[data-v-70cc784d]{border:1px solid var(--color-error) !important}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Check.vue"],names:[],mappings:"AAsJA,wBACC,YAAA,CACA,cAAA,CACA,UAAA,CACA,kBAAA,CACA,sCACC,WAAA,CAED,oCACC,eAAA,CACA,WAAA,CAED,gCACC,eAAA,CACA,WAAA,CAED,8EAEC,gBAAA,CACA,iBAAA,CAGD,qIAEC,aAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CAGF,kCACC,QAAA,CAED,+BACC,cAAA,CAED,mEACC,WAAA,CACA,UAAA,CACA,eAAA,CACA,kBAAA,CAED,0BACC,8CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.check {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\twidth: 100%;\n\tpadding-right: 20px;\n\t& > *:not(.close) {\n\t\twidth: 180px;\n\t}\n\t& > .comparator {\n\t\tmin-width: 130px;\n\t\twidth: 130px;\n\t}\n\t& > .option {\n\t\tmin-width: 230px;\n\t\twidth: 230px;\n\t}\n\t& > .multiselect,\n\t& > input[type=text] {\n\t\tmargin-right: 5px;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t.multiselect::v-deep .multiselect__content-wrapper li>span,\n\t.multiselect::v-deep .multiselect__single {\n\t\tdisplay: block;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n}\ninput[type=text] {\n\tmargin: 0;\n}\n::placeholder {\n\tfont-size: 10px;\n}\nbutton.action-item.action-item--single.icon-close {\n\theight: 44px;\n\twidth: 44px;\n\tmargin-top: -5px;\n\tmargin-bottom: -5px;\n}\n.invalid {\n\tborder: 1px solid var(--color-error) !important;\n}\n"],sourceRoot:""}]),n.Z=a},76050:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".timeslot[data-v-149baca9]{display:flex;flex-grow:1;flex-wrap:wrap;max-width:180px}.timeslot .multiselect[data-v-149baca9]{width:100%;margin-bottom:5px}.timeslot .multiselect[data-v-149baca9] .multiselect__tags:not(:hover):not(:focus):not(:active){border:1px solid rgba(0,0,0,0)}.timeslot input[type=text][data-v-149baca9]{width:50%;margin:0;margin-bottom:5px}.timeslot input[type=text].timeslot--start[data-v-149baca9]{margin-right:5px;width:calc(50% - 5px)}.timeslot .invalid-hint[data-v-149baca9]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestTime.vue"],names:[],mappings:"AA+FA,2BACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,eAAA,CAEA,wCACC,UAAA,CACA,iBAAA,CAGD,gGACC,8BAAA,CAGD,4CACC,SAAA,CACA,QAAA,CACA,iBAAA,CAEA,4DACC,gBAAA,CACA,qBAAA,CAIF,yCACC,mCAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.timeslot {\n\tdisplay: flex;\n\tflex-grow: 1;\n\tflex-wrap: wrap;\n\tmax-width: 180px;\n\n\t.multiselect {\n\t\twidth: 100%;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\n\t\tborder: 1px solid transparent;\n\t}\n\n\tinput[type=text] {\n\t\twidth: 50%;\n\t\tmargin: 0;\n\t\tmargin-bottom: 5px;\n\n\t\t&.timeslot--start {\n\t\t\tmargin-right: 5px;\n\t\t\twidth: calc(50% - 5px);\n\t\t}\n\t}\n\n\t.invalid-hint {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]),n.Z=a},13885:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".event[data-v-57bd6e67]{margin-bottom:5px}.isComplex img[data-v-57bd6e67]{vertical-align:text-top}.isComplex span[data-v-57bd6e67]{padding-top:2px;display:inline-block}.multiselect[data-v-57bd6e67]{width:100%;max-width:550px;margin-top:4px}.multiselect[data-v-57bd6e67] .multiselect__single{display:flex}.multiselect[data-v-57bd6e67]:not(.multiselect--active) .multiselect__tags{background-color:var(--color-main-background) !important;border:1px solid rgba(0,0,0,0)}.multiselect[data-v-57bd6e67] .multiselect__tags{background-color:var(--color-main-background) !important;height:auto;min-height:34px}.multiselect[data-v-57bd6e67]:not(.multiselect--disabled) .multiselect__tags .multiselect__single{background-image:var(--icon-triangle-s-dark);background-repeat:no-repeat;background-position:right center}input[data-v-57bd6e67]{border:1px solid rgba(0,0,0,0)}.option__title[data-v-57bd6e67]{margin-left:5px;color:var(--color-main-text)}.option__title_single[data-v-57bd6e67]{font-weight:900}.option__icon[data-v-57bd6e67]{width:16px;height:16px}.eventlist img[data-v-57bd6e67],.eventlist .text[data-v-57bd6e67]{vertical-align:middle}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Event.vue"],names:[],mappings:"AAiFA,wBACC,iBAAA,CAGA,gCACC,uBAAA,CAED,iCACC,eAAA,CACA,oBAAA,CAGF,8BACC,UAAA,CACA,eAAA,CACA,cAAA,CAED,mDACC,YAAA,CAED,2EACC,wDAAA,CACA,8BAAA,CAGD,iDACC,wDAAA,CACA,WAAA,CACA,eAAA,CAGD,kGACC,4CAAA,CACA,2BAAA,CACA,gCAAA,CAGD,uBACC,8BAAA,CAGD,gCACC,eAAA,CACA,4BAAA,CAED,uCACC,eAAA,CAGD,+BACC,UAAA,CACA,WAAA,CAGD,kEAEC,qBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.event {\n\tmargin-bottom: 5px;\n}\n.isComplex {\n\timg {\n\t\tvertical-align: text-top;\n\t}\n\tspan {\n\t\tpadding-top: 2px;\n\t\tdisplay: inline-block;\n\t}\n}\n.multiselect {\n\twidth: 100%;\n\tmax-width: 550px;\n\tmargin-top: 4px;\n}\n.multiselect::v-deep .multiselect__single {\n\tdisplay: flex;\n}\n.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\n\tbackground-color: var(--color-main-background) !important;\n\tborder: 1px solid transparent;\n}\n\n.multiselect::v-deep .multiselect__tags {\n\tbackground-color: var(--color-main-background) !important;\n\theight: auto;\n\tmin-height: 34px;\n}\n\n.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\n\tbackground-image: var(--icon-triangle-s-dark);\n\tbackground-repeat: no-repeat;\n\tbackground-position: right center;\n}\n\ninput {\n\tborder: 1px solid transparent;\n}\n\n.option__title {\n\tmargin-left: 5px;\n\tcolor: var(--color-main-text);\n}\n.option__title_single {\n\tfont-weight: 900;\n}\n\n.option__icon {\n\twidth: 16px;\n\theight: 16px;\n}\n\n.eventlist img,\n.eventlist .text {\n\tvertical-align: middle;\n}\n"],sourceRoot:""}]),n.Z=a},46514:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".actions__item[data-v-96600802]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-96600802]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-96600802]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-96600802]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-96600802],small[data-v-96600802]{padding:6px;display:block}h3[data-v-96600802]{margin:0;padding:0;font-weight:600}small[data-v-96600802]{font-size:10pt;flex-grow:1}.colored[data-v-96600802]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-96600802],.colored:not(.more) small[data-v-96600802]{color:var(--color-primary-text)}.actions__item[data-v-96600802]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-96600802]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-96600802]{padding:0}.actions__item:not(.colored) .icon[data-v-96600802]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-96600802]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-96600802]{filter:invert(1)}","",{version:3,sources:["webpack://./apps/workflowengine/src/styles/operation.scss"],names:[],mappings:"AAAA,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA",sourcesContent:[".actions__item {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tmargin-left: -1px;\n\tpadding: 10px;\n\tborder-radius: var(--border-radius-large);\n\tmargin-right: 20px;\n\tmargin-bottom: 20px;\n}\n.actions__item .icon {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 50px;\n\tbackground-size: 50px 50px;\n\tbackground-position: center center;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n\tbackground-repeat: no-repeat;\n}\n.actions__item__description {\n\ttext-align: center;\n\tflex-grow: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n}\n.actions__item_options {\n\twidth: 100%;\n\tmargin-top: 10px;\n\tpadding-left: 60px;\n}\nh3, small {\n\tpadding: 6px;\n\tdisplay: block;\n}\nh3 {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-weight: 600;\n}\nsmall {\n\tfont-size: 10pt;\n\tflex-grow: 1;\n}\n\n.colored:not(.more) {\n\tbackground-color: var(--color-primary-element);\n\th3, small {\n\t\tcolor: var(--color-primary-text)\n\t}\n}\n\n.actions__item:not(.colored) {\n\tflex-direction: row;\n\n\t.actions__item__description {\n\t\tpadding-top: 5px;\n\t\ttext-align: left;\n\t\twidth: calc(100% - 105px);\n\t\tsmall {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\t.icon {\n\t\twidth: 50px;\n\t\tmargin: 0;\n\t\tmargin-right: 10px;\n\t\t&:not(.icon-invert) {\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n}\n\n.colored .icon-invert {\n\tfilter: invert(1);\n}\n"],sourceRoot:""}]),n.Z=a},11661:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".buttons[data-v-779dc71c]{display:flex;justify-content:end}.buttons button[data-v-779dc71c]{margin-left:5px}.buttons button[data-v-779dc71c]:last-child{margin-right:10px}.error-message[data-v-779dc71c]{float:right;margin-right:10px}.flow-icon[data-v-779dc71c]{width:44px}.rule[data-v-779dc71c]{display:flex;flex-wrap:wrap;border-left:5px solid var(--color-primary-element)}.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{flex-grow:1;min-height:100px;max-width:700px}.rule .action[data-v-779dc71c]{max-width:400px;position:relative}.rule .icon-confirm[data-v-779dc71c]{background-position:right 27px;padding-right:20px;margin-right:20px}.trigger p[data-v-779dc71c],.action p[data-v-779dc71c]{min-height:34px;display:flex}.trigger p>span[data-v-779dc71c],.action p>span[data-v-779dc71c]{min-width:50px;text-align:right;color:var(--color-text-maxcontrast);padding-right:10px;padding-top:6px}.trigger p .multiselect[data-v-779dc71c],.action p .multiselect[data-v-779dc71c]{flex-grow:1;max-width:300px}.trigger p:first-child span[data-v-779dc71c]{padding-top:3px}.check--add[data-v-779dc71c]{background-position:7px center;background-color:rgba(0,0,0,0);padding-left:6px;margin:0;width:180px;border-radius:var(--border-radius);color:var(--color-text-maxcontrast);font-weight:normal;text-align:left;font-size:1em}@media(max-width: 1400px){.rule[data-v-779dc71c],.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{width:100%;max-width:100%}.rule .flow-icon[data-v-779dc71c]{display:none}}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Rule.vue"],names:[],mappings:"AAqLA,0BACC,YAAA,CACA,mBAAA,CAEA,iCACC,eAAA,CAED,4CACC,iBAAA,CAIF,gCACC,WAAA,CACA,iBAAA,CAGD,4BACC,UAAA,CAGD,uBACC,YAAA,CACA,cAAA,CACA,kDAAA,CAEA,+DACC,WAAA,CACA,gBAAA,CACA,eAAA,CAED,+BACC,eAAA,CACA,iBAAA,CAED,qCACC,8BAAA,CACA,kBAAA,CACA,iBAAA,CAGF,uDACC,eAAA,CACA,YAAA,CAEA,iEACC,cAAA,CACA,gBAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CAED,iFACC,WAAA,CACA,eAAA,CAGF,6CACE,eAAA,CAGF,6BACC,8BAAA,CACA,8BAAA,CACA,gBAAA,CACA,QAAA,CACA,WAAA,CACA,kCAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CACA,aAAA,CAGD,0BAEE,sFACC,UAAA,CACA,cAAA,CAED,kCACC,YAAA,CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: end;\n\n\tbutton {\n\t\tmargin-left: 5px;\n\t}\n\tbutton:last-child{\n\t\tmargin-right: 10px;\n\t}\n}\n\n.error-message {\n\tfloat: right;\n\tmargin-right: 10px;\n}\n\n.flow-icon {\n\twidth: 44px;\n}\n\n.rule {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tborder-left: 5px solid var(--color-primary-element);\n\n\t.trigger, .action {\n\t\tflex-grow: 1;\n\t\tmin-height: 100px;\n\t\tmax-width: 700px;\n\t}\n\t.action {\n\t\tmax-width: 400px;\n\t\tposition: relative;\n\t}\n\t.icon-confirm {\n\t\tbackground-position: right 27px;\n\t\tpadding-right: 20px;\n\t\tmargin-right: 20px;\n\t}\n}\n.trigger p, .action p {\n\tmin-height: 34px;\n\tdisplay: flex;\n\n\t& > span {\n\t\tmin-width: 50px;\n\t\ttext-align: right;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-right: 10px;\n\t\tpadding-top: 6px;\n\t}\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmax-width: 300px;\n\t}\n}\n.trigger p:first-child span {\n\t\tpadding-top: 3px;\n}\n\n.check--add {\n\tbackground-position: 7px center;\n\tbackground-color: transparent;\n\tpadding-left: 6px;\n\tmargin: 0;\n\twidth: 180px;\n\tborder-radius: var(--border-radius);\n\tcolor: var(--color-text-maxcontrast);\n\tfont-weight: normal;\n\ttext-align: left;\n\tfont-size: 1em;\n}\n\n@media (max-width:1400px) {\n\t.rule {\n\t\t&, .trigger, .action {\n\t\t\twidth: 100%;\n\t\t\tmax-width: 100%;\n\t\t}\n\t\t.flow-icon {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]),n.Z=a},33786:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"#workflowengine[data-v-2fb0024e]{border-bottom:1px solid var(--color-border)}.section[data-v-2fb0024e]{max-width:100vw}.section h2.configured-flows[data-v-2fb0024e]{margin-top:50px;margin-bottom:0}.actions[data-v-2fb0024e]{display:flex;flex-wrap:wrap;max-width:1200px}.actions .actions__item[data-v-2fb0024e]{max-width:280px;flex-basis:250px}.actions__more[data-v-2fb0024e]{margin-bottom:10px}.slide-enter-active[data-v-2fb0024e]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:ease-in;-webkit-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in}.slide-leave-active[data-v-2fb0024e]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-webkit-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-o-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);transition-timing-function:cubic-bezier(0, 1, 0.5, 1)}.slide-enter-to[data-v-2fb0024e],.slide-leave[data-v-2fb0024e]{max-height:500px;overflow:hidden}.slide-enter[data-v-2fb0024e],.slide-leave-to[data-v-2fb0024e]{overflow:hidden;max-height:0;padding-top:0;padding-bottom:0}.actions__item[data-v-2fb0024e]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-2fb0024e]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-2fb0024e]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-2fb0024e]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-2fb0024e],small[data-v-2fb0024e]{padding:6px;display:block}h3[data-v-2fb0024e]{margin:0;padding:0;font-weight:600}small[data-v-2fb0024e]{font-size:10pt;flex-grow:1}.colored[data-v-2fb0024e]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-2fb0024e],.colored:not(.more) small[data-v-2fb0024e]{color:var(--color-primary-text)}.actions__item[data-v-2fb0024e]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-2fb0024e]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-2fb0024e]{padding:0}.actions__item:not(.colored) .icon[data-v-2fb0024e]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-2fb0024e]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-2fb0024e]{filter:invert(1)}.actions__item.more[data-v-2fb0024e]{background-color:var(--color-background-dark)}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Workflow.vue","webpack://./apps/workflowengine/src/styles/operation.scss"],names:[],mappings:"AAmHA,iCACC,2CAAA,CAED,0BACC,eAAA,CAEA,8CACC,eAAA,CACA,eAAA,CAGF,0BACC,YAAA,CACA,cAAA,CACA,gBAAA,CACA,yCACC,eAAA,CACA,gBAAA,CAGF,gCACC,kBAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,uCAAA,CACA,0CAAA,CACA,qCAAA,CACA,kCAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,0DAAA,CACA,6DAAA,CACA,wDAAA,CACA,qDAAA,CAGD,+DACC,gBAAA,CACA,eAAA,CAGD,+DACC,eAAA,CACA,YAAA,CACA,aAAA,CACA,gBAAA,CC1KD,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA,CDmGD,qCACC,6CAAA",sourcesContent:['\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#workflowengine {\n\tborder-bottom: 1px solid var(--color-border);\n}\n.section {\n\tmax-width: 100vw;\n\n\th2.configured-flows {\n\t\tmargin-top: 50px;\n\t\tmargin-bottom: 0;\n\t}\n}\n.actions {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tmax-width: 1200px;\n\t.actions__item {\n\t\tmax-width: 280px;\n\t\tflex-basis: 250px;\n\t}\n}\n.actions__more {\n\tmargin-bottom: 10px;\n}\n\n.slide-enter-active {\n\t-moz-transition-duration: 0.3s;\n\t-webkit-transition-duration: 0.3s;\n\t-o-transition-duration: 0.3s;\n\ttransition-duration: 0.3s;\n\t-moz-transition-timing-function: ease-in;\n\t-webkit-transition-timing-function: ease-in;\n\t-o-transition-timing-function: ease-in;\n\ttransition-timing-function: ease-in;\n}\n\n.slide-leave-active {\n\t-moz-transition-duration: 0.3s;\n\t-webkit-transition-duration: 0.3s;\n\t-o-transition-duration: 0.3s;\n\ttransition-duration: 0.3s;\n\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.slide-enter-to, .slide-leave {\n\tmax-height: 500px;\n\toverflow: hidden;\n}\n\n.slide-enter, .slide-leave-to {\n\toverflow: hidden;\n\tmax-height: 0;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n}\n\n@import "./../styles/operation";\n\n.actions__item.more {\n\tbackground-color: var(--color-background-dark);\n}\n',".actions__item {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tmargin-left: -1px;\n\tpadding: 10px;\n\tborder-radius: var(--border-radius-large);\n\tmargin-right: 20px;\n\tmargin-bottom: 20px;\n}\n.actions__item .icon {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 50px;\n\tbackground-size: 50px 50px;\n\tbackground-position: center center;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n\tbackground-repeat: no-repeat;\n}\n.actions__item__description {\n\ttext-align: center;\n\tflex-grow: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n}\n.actions__item_options {\n\twidth: 100%;\n\tmargin-top: 10px;\n\tpadding-left: 60px;\n}\nh3, small {\n\tpadding: 6px;\n\tdisplay: block;\n}\nh3 {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-weight: 600;\n}\nsmall {\n\tfont-size: 10pt;\n\tflex-grow: 1;\n}\n\n.colored:not(.more) {\n\tbackground-color: var(--color-primary-element);\n\th3, small {\n\t\tcolor: var(--color-primary-text)\n\t}\n}\n\n.actions__item:not(.colored) {\n\tflex-direction: row;\n\n\t.actions__item__description {\n\t\tpadding-top: 5px;\n\t\ttext-align: left;\n\t\twidth: calc(100% - 105px);\n\t\tsmall {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\t.icon {\n\t\twidth: 50px;\n\t\tmargin: 0;\n\t\tmargin-right: 10px;\n\t\t&:not(.icon-invert) {\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n}\n\n.colored .icon-invert {\n\tfilter: invert(1);\n}\n"],sourceRoot:""}]),n.Z=a},1510:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-8c011724], input[type='text'][data-v-8c011724] {\n\twidth: 100%;\n}\n.multiselect[data-v-8c011724] .multiselect__content-wrapper li>span,\n.multiselect[data-v-8c011724] .multiselect__single {\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/FileMimeType.vue"],names:[],mappings:";AA4IA;CACA,WAAA;AACA;AACA;;CAEA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a file type')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"t('workflowengine', 'e.g. httpd/unix-directory')\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from './../../mixins/valueMixin'\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'FileMimeType',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-folder',\n\t\t\t\t\tlabel: t('workflowengine', 'Folder'),\n\t\t\t\t\tpattern: 'httpd/unix-directory',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-picture',\n\t\t\t\t\tlabel: t('workflowengine', 'Images'),\n\t\t\t\t\tpattern: '/image\\\\/.*/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\n\t\t\t\t\tlabel: t('workflowengine', 'Office documents'),\n\t\t\t\t\tpattern: '/(vnd\\\\.(ms-|openxmlformats-|oasis\\\\.opendocument).*)$/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\n\t\t\t\t\tlabel: t('workflowengine', 'PDF documents'),\n\t\t\t\t\tpattern: 'application/pdf',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tisPredefined() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\t.multiselect >>> .multiselect__content-wrapper li>span,\n\t.multiselect >>> .multiselect__single {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},82999:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-dd8e16be], input[type='text'][data-v-dd8e16be] {\n\twidth: 100%;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestURL.vue"],names:[],mappings:";AA2IA;CACA,WAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a request URL')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\tgroup-values=\"children\"\n\t\t\tgroup-label=\"label\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestURL',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('workflowengine', 'Predefined URLs'),\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tplaceholder() {\n\t\t\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\n\t\t\t\treturn '/^https\\\\:\\\\/\\\\/localhost\\\\/index\\\\.php$/i'\n\t\t\t}\n\t\t\treturn 'https://localhost/index.php'\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.map(groups => groups.children)\n\t\t\t\t.flat()\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\tlabel: t('workflowengine', 'Others'),\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\t\t\tpattern: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},99055:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-475ac1e6], input[type='text'][data-v-475ac1e6] {\n\twidth: 100%;\n}\n.multiselect .multiselect__content-wrapper li>span[data-v-475ac1e6] {\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.multiselect[data-v-475ac1e6] .multiselect__single {\n\twidth: 100%;\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.option__icon[data-v-475ac1e6] {\n\tdisplay: inline-block;\n\tmin-width: 30px;\n\tbackground-position: left;\n}\n.option__title[data-v-475ac1e6] {\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestUserAgent.vue"],names:[],mappings:";AA8HA;CACA,WAAA;AACA;AAEA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,WAAA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,qBAAA;CACA,eAAA;CACA,yBAAA;AACA;AACA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a user agent')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t\x3c!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize --\x3e\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span class=\"option__title option__title_single\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span v-if=\"props.option.$groupLabel\" class=\"option__title\" v-html=\"props.option.$groupLabel\" />\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span v-else class=\"option__title\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestUserAgent',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\n\t\t\t\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\n\t.multiselect .multiselect__content-wrapper li>span {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.option__icon {\n\t\tdisplay: inline-block;\n\t\tmin-width: 30px;\n\t\tbackground-position: left;\n\t}\n\t.option__title {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},80787:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-79fa10a5] {\n\twidth: 100%;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestUserGroup.vue"],names:[],mappings:";AA4GA;CACA,WAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:loading=\"status.isLoading && groups.length === 0\"\n\t\t\t:options=\"groups\"\n\t\t\t:multiple=\"false\"\n\t\t\tlabel=\"displayname\"\n\t\t\ttrack-by=\"id\"\n\t\t\t@search-change=\"searchAsync\"\n\t\t\t@input=\"(value) => $emit('input', value.id)\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst groups = []\nconst status = {\n\tisLoading: false,\n}\n\nexport default {\n\tname: 'RequestUserGroup',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tgroups,\n\t\t\tstatus,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcurrentValue() {\n\t\t\treturn this.groups.find(group => group.id === this.value) || null\n\t\t},\n\t},\n\tasync mounted() {\n\t\tif (this.groups.length === 0) {\n\t\t\tawait this.searchAsync('')\n\t\t}\n\t\tif (this.currentValue === null) {\n\t\t\tawait this.searchAsync(this.value)\n\t\t}\n\t},\n\tmethods: {\n\t\tsearchAsync(searchQuery) {\n\t\t\tif (this.status.isLoading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.status.isLoading = true\n\t\t\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\n\t\t\t\tresponse.data.ocs.data.groups.forEach((group) => {\n\t\t\t\t\tthis.addGroup({\n\t\t\t\t\t\tid: group.id,\n\t\t\t\t\t\tdisplayname: group.displayname,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tthis.status.isLoading = false\n\t\t\t}, (error) => {\n\t\t\t\tconsole.error('Error while loading group list', error.response)\n\t\t\t})\n\t\t},\n\t\taddGroup(group) {\n\t\t\tconst index = this.groups.findIndex((item) => item.id === group.id)\n\t\t\tif (index === -1) {\n\t\t\t\tthis.groups.push(group)\n\t\t\t}\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect {\n\t\twidth: 100%;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},46700:function(t,n,e){var i={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":2819,"./hi.js":2819,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function o(t){var n=r(t);return e(n)}function r(t){if(!e.o(i,t)){var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}return i[t]}o.keys=function(){return Object.keys(i)},o.resolve=r,t.exports=o,o.id=46700}},i={};function o(t){var n=i[t];if(void 0!==n)return n.exports;var r=i[t]={id:t,loaded:!1,exports:{}};return e[t].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=e,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},n=[],o.O=function(t,e,i,r){if(!e){var a=1/0;for(u=0;u<n.length;u++){e=n[u][0],i=n[u][1],r=n[u][2];for(var s=!0,l=0;l<e.length;l++)(!1&r||a>=r)&&Object.keys(o.O).every((function(t){return o.O[t](e[l])}))?e.splice(l--,1):(s=!1,r<a&&(a=r));if(s){n.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}r=r||0;for(var u=n.length;u>0&&n[u-1][2]>r;u--)n[u]=n[u-1];n[u]=[e,i,r]},o.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(n,{a:n}),n},o.d=function(t,n){for(var e in n)o.o(n,e)&&!o.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=8318,function(){o.b=document.baseURI||self.location.href;var t={8318:0};o.O.j=function(n){return 0===t[n]};var n=function(n,e){var i,r,a=e[0],s=e[1],l=e[2],c=0;if(a.some((function(n){return 0!==t[n]}))){for(i in s)o.o(s,i)&&(o.m[i]=s[i]);if(l)var u=l(o)}for(n&&n(e);c<a.length;c++)r=a[c],o.o(t,r)&&t[r]&&t[r][0](),t[r]=0;return o.O(u)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(n.bind(null,0)),e.push=n.bind(null,e.push.bind(e))}(),o.nc=void 0;var r=o.O(void 0,[7874],(function(){return o(98739)}));r=o.O(r)}(); -//# sourceMappingURL=workflowengine-workflowengine.js.map?v=250f0429c83900f00758
\ No newline at end of file +!function(){var n,e={83282:function(n,e,i){"use strict";var o=i(20144),r=i(20629),a=i(4820),s=i(16453),l=i(79753),c=0===(0,s.loadState)("workflowengine","scope")?"global":"user",u=function(t){return(0,l.generateOcsUrl)("apps/workflowengine/api/v1/workflows/{scopeValue}",{scopeValue:c})+t+"?format=json"},p=i(10128),d=i.n(p);function A(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}function m(t){return function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){A(r,i,o,a,s,"next",t)}function s(t){A(r,i,o,a,s,"throw",t)}a(void 0)}))}}function f(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,i)}return e}function h(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?f(Object(e),!0).forEach((function(n){g(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):f(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function g(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}o.default.use(r.ZP);var v=new r.yh({state:{rules:[],scope:(0,s.loadState)("workflowengine","scope"),appstoreEnabled:(0,s.loadState)("workflowengine","appstoreenabled"),operations:(0,s.loadState)("workflowengine","operators"),plugins:o.default.observable({checks:{},operators:{}}),entities:(0,s.loadState)("workflowengine","entities"),events:(0,s.loadState)("workflowengine","entities").map((function(t){return t.events.map((function(n){return h({id:"".concat(t.id,"::").concat(n.eventName),entity:t},n)}))})).flat(),checks:(0,s.loadState)("workflowengine","checks")},mutations:{addRule:function(t,n){t.rules.push(h(h({},n),{},{valid:!0}))},updateRule:function(t,n){var e=t.rules.findIndex((function(t){return n.id===t.id})),i=Object.assign({},n);o.default.set(t.rules,e,i)},removeRule:function(t,n){var e=t.rules.findIndex((function(t){return n.id===t.id}));t.rules.splice(e,1)},addPluginCheck:function(t,n){o.default.set(t.plugins.checks,n.class,n)},addPluginOperator:function(t,n){n=Object.assign({color:"var(--color-primary-element)"},n,t.operations[n.id]||{}),void 0!==t.operations[n.id]&&o.default.set(t.operations,n.id,n)}},actions:{fetchRules:function(t){return m(regeneratorRuntime.mark((function n(){var e,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,a.default.get(u(""));case 2:e=n.sent,i=e.data,Object.values(i.ocs.data).flat().forEach((function(n){t.commit("addRule",n)}));case 5:case"end":return n.stop()}}),n)})))()},createNewRule:function(t,n){var e=null,i=[];!1===n.isComplex&&""===n.fixedEntity&&(i=[(e=(e=t.state.entities.find((function(t){return n.entities&&n.entities[0]===t.id})))||Object.values(t.state.entities)[0]).events[0].eventName]),t.commit("addRule",{id:-(new Date).getTime(),class:n.id,entity:e?e.id:n.fixedEntity,events:i,name:"",checks:[{class:null,operator:null,value:""}],operation:n.operation||""})},updateRule:function(t,n){t.commit("updateRule",h(h({},n),{},{events:"string"==typeof n.events?JSON.parse(n.events):n.events}))},removeRule:function(t,n){t.commit("removeRule",n)},pushUpdateRule:function(t,n){return m(regeneratorRuntime.mark((function e(){var i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==t.state.scope){e.next=3;break}return e.next=3,d()();case 3:if(!(n.id<0)){e.next=9;break}return e.next=6,a.default.post(u(""),n);case 6:i=e.sent,e.next=12;break;case 9:return e.next=11,a.default.put(u("/".concat(n.id)),n);case 11:i=e.sent;case 12:o.default.set(n,"id",i.data.ocs.data.id),t.commit("updateRule",n);case 14:case"end":return e.stop()}}),e)})))()},deleteRule:function(t,n){return m(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d()();case 2:return e.next=4,a.default.delete(u("/".concat(n.id)));case 4:t.commit("removeRule",n);case 5:case"end":return e.stop()}}),e)})))()},setValid:function(t,n){var e=n.rule,i=n.valid;e.valid=i,t.commit("updateRule",e)}},getters:{getRules:function(t){return t.rules.filter((function(n){return void 0!==t.operations[n.class]})).sort((function(t,n){return t.id-n.id||n.class-t.class}))},getOperationForRule:function(t){return function(n){return t.operations[n.class]}},getEntityForOperation:function(t){return function(n){return t.entities.find((function(t){return n.fixedEntity===t.id}))}},getEventsForOperation:function(t){return function(n){return t.events}},getChecksForEntity:function(t){return function(n){return Object.values(t.checks).filter((function(t){return t.supportedEntities.indexOf(n)>-1||0===t.supportedEntities.length})).map((function(n){return t.plugins.checks[n.id]})).reduce((function(t,n){return t[n.class]=n,t}),{})}}}}),C=i(15168),w=i.n(C),b=i(79440),x=i.n(b),k=i(56286),y=i.n(k),_=i(1412),j=i.n(_),O=i(73723),R=i(44254),V=i(78039),E=i(7811),P=i.n(E),B=i(26932),T={name:"Event",components:{Multiselect:P()},props:{rule:{type:Object,required:!0}},computed:{entity:function(){return this.$store.getters.getEntityForOperation(this.operation)},operation:function(){return this.$store.getters.getOperationForRule(this.rule)},allEvents:function(){return this.$store.getters.getEventsForOperation(this.operation)},currentEvent:function(){var t=this;return this.allEvents.filter((function(n){return n.entity.id===t.rule.entity&&-1!==t.rule.events.indexOf(n.eventName)}))}},methods:{updateEvent:function(n){if(0!==n.length){var e,i=this.rule.entity,o=n.map((function(t){return t.entity.id})).filter((function(t,n,e){return e.indexOf(t)===n}));e=o.length>1?o.filter((function(t){return t!==i}))[0]:o[0],this.$set(this.rule,"entity",e),this.$set(this.rule,"events",n.filter((function(t){return t.entity.id===e})).map((function(t){return t.eventName}))),this.$emit("update",this.rule)}else(0,B.K2)(t("workflowengine","At least one event must be selected"))}}},S=i(93379),D=i.n(S),M=i(7795),U=i.n(M),F=i(90569),$=i.n(F),I=i(3565),z=i.n(I),G=i(19216),L=i.n(G),N=i(44589),Z=i.n(N),W=i(13885),q={};q.styleTagTransform=Z(),q.setAttributes=z(),q.insert=$().bind(null,"head"),q.domAPI=U(),q.insertStyleElement=L(),D()(W.Z,q),W.Z&&W.Z.locals&&W.Z.locals;var Y=i(51900),H=(0,Y.Z)(T,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"event"},[t.operation.isComplex&&""!==t.operation.fixedEntity?e("div",{staticClass:"isComplex"},[e("img",{staticClass:"option__icon",attrs:{src:t.entity.icon}}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(t.operation.triggerHint))])]):e("Multiselect",{attrs:{value:t.currentEvent,options:t.allEvents,"track-by":"id",multiple:!0,"auto-limit":!1,disabled:t.allEvents.length<=1},on:{input:t.updateEvent},scopedSlots:t._u([{key:"selection",fn:function(n){var i=n.values,o=n.isOpen;return[i.length&&!o?e("div",{staticClass:"eventlist"},[e("img",{staticClass:"option__icon",attrs:{src:i[0].entity.icon}}),t._v(" "),t._l(i,(function(n,o){return e("span",{key:n.id,staticClass:"text option__title option__title_single"},[t._v(t._s(n.displayName)+" "),o+1<i.length?e("span",[t._v(", ")]):t._e()])}))],2):t._e()]}},{key:"option",fn:function(n){return[e("img",{staticClass:"option__icon",attrs:{src:n.option.entity.icon}}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.displayName))])]}}])})],1)}),[],!1,null,"57bd6e67",null).exports,J=i(2649),Q=i.n(J),K={name:"Check",components:{ActionButton:y(),Actions:x(),Multiselect:P()},directives:{ClickOutside:Q()},props:{check:{type:Object,required:!0},rule:{type:Object,required:!0}},data:function(){return{deleteVisible:!1,currentOption:null,currentOperator:null,options:[],valid:!1}},computed:{checks:function(){return this.$store.getters.getChecksForEntity(this.rule.entity)},operators:function(){if(!this.currentOption)return[];var t=this.checks[this.currentOption.class].operators;return"function"==typeof t?t(this.check):t},currentComponent:function(){return this.currentOption?this.checks[this.currentOption.class].component:[]},valuePlaceholder:function(){return this.currentOption&&this.currentOption.placeholder?this.currentOption.placeholder(this.check):""}},watch:{"check.operator":function(){this.validate()}},mounted:function(){var t=this;this.options=Object.values(this.checks),this.currentOption=this.checks[this.check.class],this.currentOperator=this.operators.find((function(n){return n.operator===t.check.operator})),null===this.check.class&&this.$nextTick((function(){return t.$refs.checkSelector.$el.focus()})),this.validate()},methods:{showDelete:function(){this.deleteVisible=!0},hideDelete:function(){this.deleteVisible=!1},validate:function(){this.valid=!0,this.currentOption&&this.currentOption.validate&&(this.valid=!!this.currentOption.validate(this.check)),this.check.invalid=!this.valid,this.$emit("validate",this.valid)},updateCheck:function(){var t=this,n=this.operators.findIndex((function(n){return t.check.operator===n.operator}));this.check.class===this.currentOption.class&&-1!==n||(this.currentOperator=this.operators[0]),this.check.class=this.currentOption.class,this.check.operator=this.currentOperator.operator,this.validate(),this.$emit("update",this.check)}}},X=i(38530),tt={};tt.styleTagTransform=Z(),tt.setAttributes=z(),tt.insert=$().bind(null,"head"),tt.domAPI=U(),tt.insertStyleElement=L(),D()(X.Z,tt),X.Z&&X.Z.locals&&X.Z.locals;var nt=(0,Y.Z)(K,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideDelete,expression:"hideDelete"}],staticClass:"check",on:{click:t.showDelete}},[e("Multiselect",{ref:"checkSelector",attrs:{options:t.options,label:"name","track-by":"class","allow-empty":!1,placeholder:t.t("workflowengine","Select a filter")},on:{input:t.updateCheck},model:{value:t.currentOption,callback:function(n){t.currentOption=n},expression:"currentOption"}}),t._v(" "),e("Multiselect",{staticClass:"comparator",attrs:{disabled:!t.currentOption,options:t.operators,label:"name","track-by":"operator","allow-empty":!1,placeholder:t.t("workflowengine","Select a comparator")},on:{input:t.updateCheck},model:{value:t.currentOperator,callback:function(n){t.currentOperator=n},expression:"currentOperator"}}),t._v(" "),t.currentOperator&&t.currentComponent?e(t.currentOption.component,{tag:"component",staticClass:"option",attrs:{disabled:!t.currentOption,check:t.check},on:{input:t.updateCheck,valid:function(n){(t.valid=!0)&&t.validate()},invalid:function(n){!(t.valid=!1)&&t.validate()}},model:{value:t.check.value,callback:function(n){t.$set(t.check,"value",n)},expression:"check.value"}}):e("input",{directives:[{name:"model",rawName:"v-model",value:t.check.value,expression:"check.value"}],staticClass:"option",class:{invalid:!t.valid},attrs:{type:"text",disabled:!t.currentOption,placeholder:t.valuePlaceholder},domProps:{value:t.check.value},on:{input:[function(n){n.target.composing||t.$set(t.check,"value",n.target.value)},t.updateCheck]}}),t._v(" "),t.deleteVisible||!t.currentOption?e("Actions",[e("ActionButton",{attrs:{icon:"icon-close"},on:{click:function(n){return t.$emit("remove")}}})],1):t._e()],1)}),[],!1,null,"70cc784d",null).exports,et={name:"Operation",components:{Button:j()},props:{operation:{type:Object,required:!0},colored:{type:Boolean,default:!0}}},it=i(46514),ot={};ot.styleTagTransform=Z(),ot.setAttributes=z(),ot.insert=$().bind(null,"head"),ot.domAPI=U(),ot.insertStyleElement=L(),D()(it.Z,ot),it.Z&&it.Z.locals&&it.Z.locals;var rt=(0,Y.Z)(et,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"actions__item",class:{colored:t.colored},style:{backgroundColor:t.colored?t.operation.color:"transparent"}},[e("div",{staticClass:"icon",class:t.operation.iconClass,style:{backgroundImage:t.operation.iconClass?"":"url("+t.operation.icon+")"}}),t._v(" "),e("div",{staticClass:"actions__item__description"},[e("h3",[t._v(t._s(t.operation.name))]),t._v(" "),e("small",[t._v(t._s(t.operation.description))]),t._v(" "),t.colored?e("Button",[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Add new flow"))+"\n\t\t")]):t._e()],1),t._v(" "),e("div",{staticClass:"actions__item_options"},[t._t("default")],2)])}),[],!1,null,"96600802",null).exports;function at(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}function st(t){return function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){at(r,i,o,a,s,"next",t)}function s(t){at(r,i,o,a,s,"throw",t)}a(void 0)}))}}var lt={name:"Rule",components:{Operation:rt,Check:nt,Event:H,Actions:x(),ActionButton:y(),Button:j(),ArrowRight:O.default,CheckMark:R.default,Close:V.default},directives:{Tooltip:w()},props:{rule:{type:Object,required:!0}},data:function(){return{editing:!1,checks:[],error:null,dirty:this.rule.id<0,originalRule:null}},computed:{operation:function(){return this.$store.getters.getOperationForRule(this.rule)},ruleStatus:function(){return this.error||!this.rule.valid||0===this.rule.checks.length||this.rule.checks.some((function(t){return!0===t.invalid}))?{title:t("workflowengine","The configuration is invalid"),icon:"Close",type:"warning",tooltip:{placement:"bottom",show:!0,content:this.error}}:this.dirty?{title:t("workflowengine","Save"),icon:"ArrowRight",type:"primary"}:{title:t("workflowengine","Active"),icon:"CheckMark",type:"success"}},lastCheckComplete:function(){var t=this.rule.checks[this.rule.checks.length-1];return void 0===t||null!==t.class}},mounted:function(){this.originalRule=JSON.parse(JSON.stringify(this.rule))},methods:{updateOperation:function(t){var n=this;return st(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.$set(n.rule,"operation",t),e.next=3,n.updateRule();case 3:case"end":return e.stop()}}),e)})))()},validate:function(t){this.error=null,this.$store.dispatch("updateRule",this.rule)},updateRule:function(){this.dirty||(this.dirty=!0),this.error=null,this.$store.dispatch("updateRule",this.rule)},saveRule:function(){var t=this;return st(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,t.$store.dispatch("pushUpdateRule",t.rule);case 3:t.dirty=!1,t.error=null,t.originalRule=JSON.parse(JSON.stringify(t.rule)),n.next=12;break;case 8:n.prev=8,n.t0=n.catch(0),console.error("Failed to save operation"),t.error=n.t0.response.data.ocs.meta.message;case 12:case"end":return n.stop()}}),n,null,[[0,8]])})))()},deleteRule:function(){var t=this;return st(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,t.$store.dispatch("deleteRule",t.rule);case 3:n.next=9;break;case 5:n.prev=5,n.t0=n.catch(0),console.error("Failed to delete operation"),t.error=n.t0.response.data.ocs.meta.message;case 9:case"end":return n.stop()}}),n,null,[[0,5]])})))()},cancelRule:function(){this.rule.id<0?this.$store.dispatch("removeRule",this.rule):(this.$store.dispatch("updateRule",this.originalRule),this.originalRule=JSON.parse(JSON.stringify(this.rule)),this.dirty=!1)},removeCheck:function(t){var n=this;return st(regeneratorRuntime.mark((function e(){var i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(i=n.rule.checks.findIndex((function(n){return n===t})))>-1&&n.$delete(n.rule.checks,i),n.$store.dispatch("updateRule",n.rule);case 3:case"end":return e.stop()}}),e)})))()},onAddFilter:function(){this.rule.checks.push({class:null,operator:null,value:""})}}},ct=i(11661),ut={};ut.styleTagTransform=Z(),ut.setAttributes=z(),ut.insert=$().bind(null,"head"),ut.domAPI=U(),ut.insertStyleElement=L(),D()(ct.Z,ut),ct.Z&&ct.Z.locals&&ct.Z.locals;var pt=(0,Y.Z)(lt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return t.operation?e("div",{staticClass:"section rule",style:{borderLeftColor:t.operation.color||""}},[e("div",{staticClass:"trigger"},[e("p",[e("span",[t._v(t._s(t.t("workflowengine","When")))]),t._v(" "),e("Event",{attrs:{rule:t.rule},on:{update:t.updateRule}})],1),t._v(" "),t._l(t.rule.checks,(function(n,i){return e("p",{key:i},[e("span",[t._v(t._s(t.t("workflowengine","and")))]),t._v(" "),e("Check",{attrs:{check:n,rule:t.rule},on:{update:t.updateRule,validate:t.validate,remove:function(e){return t.removeCheck(n)}}})],1)})),t._v(" "),e("p",[e("span"),t._v(" "),t.lastCheckComplete?e("input",{staticClass:"check--add",attrs:{type:"button",value:"Add a new filter"},on:{click:t.onAddFilter}}):t._e()])],2),t._v(" "),e("div",{staticClass:"flow-icon icon-confirm"}),t._v(" "),e("div",{staticClass:"action"},[e("Operation",{attrs:{operation:t.operation,colored:!1}},[t.operation.options?e(t.operation.options,{tag:"component",on:{input:t.updateOperation},model:{value:t.rule.operation,callback:function(n){t.$set(t.rule,"operation",n)},expression:"rule.operation"}}):t._e()],1),t._v(" "),e("div",{staticClass:"buttons"},[t.rule.id<-1||t.dirty?e("Button",{on:{click:t.cancelRule}},[t._v("\n\t\t\t\t"+t._s(t.t("workflowengine","Cancel"))+"\n\t\t\t")]):t.dirty?t._e():e("Button",{on:{click:t.deleteRule}},[t._v("\n\t\t\t\t"+t._s(t.t("workflowengine","Delete"))+"\n\t\t\t")]),t._v(" "),e("Button",{attrs:{type:t.ruleStatus.type},on:{click:t.saveRule},scopedSlots:t._u([{key:"icon",fn:function(){return[e(t.ruleStatus.icon,{tag:"component",attrs:{size:20}})]},proxy:!0}],null,!1,2383918876)},[t._v("\n\t\t\t\t"+t._s(t.ruleStatus.title)+"\n\t\t\t")])],1),t._v(" "),t.error?e("p",{staticClass:"error-message"},[t._v("\n\t\t\t"+t._s(t.error)+"\n\t\t")]):t._e()],1)]):t._e()}),[],!1,null,"779dc71c",null).exports,dt=i(67776),At=i.n(dt),mt=i(63286),ft=i(69686);function ht(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,i)}return e}function gt(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?ht(Object(e),!0).forEach((function(n){vt(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):ht(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function vt(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}var Ct={name:"Workflow",components:{Button:j(),MenuDown:ft.default,MenuUp:mt.Z,Operation:rt,Rule:pt,SettingsSection:At()},data:function(){return{showMoreOperations:!1,appstoreUrl:(0,l.generateUrl)("settings/apps/workflow"),workflowDocUrl:(0,s.loadState)("workflowengine","doc-url")}},computed:gt(gt(gt({},(0,r.Se)({rules:"getRules"})),(0,r.rn)({appstoreEnabled:"appstoreEnabled",scope:"scope",operations:"operations"})),{},{hasMoreOperations:function(){return Object.keys(this.operations).length>3},getMainOperations:function(){return this.showMoreOperations?Object.values(this.operations):Object.values(this.operations).slice(0,3)},showAppStoreHint:function(){return 0===this.scope&&this.appstoreEnabled&&OC.isUserAdmin()}}),mounted:function(){this.$store.dispatch("fetchRules")},methods:{createNewRule:function(t){this.$store.dispatch("createNewRule",t)}}},wt=i(33786),bt={};bt.styleTagTransform=Z(),bt.setAttributes=z(),bt.insert=$().bind(null,"head"),bt.domAPI=U(),bt.insertStyleElement=L(),D()(wt.Z,bt),wt.Z&&wt.Z.locals&&wt.Z.locals;var xt=(0,Y.Z)(Ct,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"workflowengine"}},[e("SettingsSection",{attrs:{title:t.t("workflowengine","Available flows"),"doc-url":t.workflowDocUrl}},[0===t.scope?e("p",{staticClass:"settings-hint"},[e("a",{attrs:{href:"https://nextcloud.com/developer/"}},[t._v(t._s(t.t("workflowengine","For details on how to write your own flow, check out the development documentation.")))])]):t._e(),t._v(" "),e("transition-group",{staticClass:"actions",attrs:{name:"slide",tag:"div"}},[t._l(t.getMainOperations,(function(n){return e("Operation",{key:n.id,attrs:{operation:n},nativeOn:{click:function(e){return t.createNewRule(n)}}})})),t._v(" "),t.showAppStoreHint?e("a",{key:"add",staticClass:"actions__item colored more",attrs:{href:t.appstoreUrl}},[e("div",{staticClass:"icon icon-add"}),t._v(" "),e("div",{staticClass:"actions__item__description"},[e("h3",[t._v(t._s(t.t("workflowengine","More flows")))]),t._v(" "),e("small",[t._v(t._s(t.t("workflowengine","Browse the App Store")))])])]):t._e()],2),t._v(" "),t.hasMoreOperations?e("div",{staticClass:"actions__more"},[e("Button",{on:{click:function(n){t.showMoreOperations=!t.showMoreOperations}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.showMoreOperations?e("MenuUp",{attrs:{size:20}}):e("MenuDown",{attrs:{size:20}})]},proxy:!0}],null,!1,3801522717)},[t._v("\n\t\t\t\t"+t._s(t.showMoreOperations?t.t("workflowengine","Show less"):t.t("workflowengine","Show more"))+"\n\t\t\t")])],1):t._e(),t._v(" "),0===t.scope?e("h2",{staticClass:"configured-flows"},[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Configured flows"))+"\n\t\t")]):e("h2",{staticClass:"configured-flows"},[t._v("\n\t\t\t"+t._s(t.t("workflowengine","Your flows"))+"\n\t\t")])],1),t._v(" "),t.rules.length>0?e("transition-group",{attrs:{name:"slide"}},t._l(t.rules,(function(t){return e("Rule",{key:t.id,attrs:{rule:t}})})),1):t._e()],1)}),[],!1,null,"2fb0024e",null).exports,kt=/^\/(.*)\/([gui]{0,3})$/,yt=/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(3[0-2]|[1-2][0-9]|[1-9])$/,_t=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/,jt={props:{value:{type:String,default:""},check:{type:Object,default:function(){return{}}}},data:function(){return{newValue:""}},watch:{value:{immediate:!0,handler:function(t){this.updateInternalValue(t)}}},methods:{updateInternalValue:function(t){this.newValue=t}}};function Ot(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var Rt={name:"FileMimeType",components:{Multiselect:P()},mixins:[jt],data:function(){return{predefinedTypes:[{icon:"icon-folder",label:t("workflowengine","Folder"),pattern:"httpd/unix-directory"},{icon:"icon-picture",label:t("workflowengine","Images"),pattern:"/image\\/.*/"},{iconUrl:(0,l.imagePath)("core","filetypes/x-office-document"),label:t("workflowengine","Office documents"),pattern:"/(vnd\\.(ms-|openxmlformats-|oasis\\.opendocument).*)$/"},{iconUrl:(0,l.imagePath)("core","filetypes/application-pdf"),label:t("workflowengine","PDF documents"),pattern:"application/pdf"}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return Ot(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return Ot(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Ot(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},isPredefined:function(){var t=this;return!!this.predefinedTypes.find((function(n){return t.newValue===n.pattern}))},customValue:function(){return{icon:"icon-settings-dark",label:t("workflowengine","Custom MIME type"),pattern:""}},currentValue:function(){var n=this;return this.predefinedTypes.find((function(t){return n.newValue===t.pattern}))||{icon:"icon-settings-dark",label:t("workflowengine","Custom mimetype"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},Vt=i(85155),Et={};Et.styleTagTransform=Z(),Et.setAttributes=z(),Et.insert=$().bind(null,"head"),Et.domAPI=U(),Et.insertStyleElement=L(),D()(Vt.Z,Et),Vt.Z&&Vt.Z.locals&&Vt.Z.locals;var Pt=(0,Y.Z)(Rt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a file type"),label:"label","track-by":"pattern",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[n.option.icon?e("span",{staticClass:"option__icon",class:n.option.icon}):e("img",{attrs:{src:n.option.iconUrl}}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(n.option.label))])]}},{key:"option",fn:function(n){return[n.option.icon?e("span",{staticClass:"option__icon",class:n.option.icon}):e("img",{attrs:{src:n.option.iconUrl}}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.label))])]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text",placeholder:t.t("workflowengine","e.g. httpd/unix-directory")},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"9f636120",null).exports,Bt=function t(n){var e={};if(1===n.nodeType){if(n.attributes.length>0){e["@attributes"]={};for(var i=0;i<n.attributes.length;i++){var o=n.attributes.item(i);e["@attributes"][o.nodeName]=o.nodeValue}}}else 3===n.nodeType&&(e=n.nodeValue);if(n.hasChildNodes())for(var r=0;r<n.childNodes.length;r++){var a=n.childNodes.item(r),s=a.nodeName;if(void 0===e[s])e[s]=t(a);else{if(void 0===e[s].push){var l=e[s];e[s]=[],e[s].push(l)}e[s].push(t(a))}}return e},Tt=0,St={name:"MultiselectTag",components:{Multiselect:P()},props:{label:{type:String,required:!0},value:{type:[String,Array],default:null},disabled:{type:Boolean,default:!1},multiple:{type:Boolean,default:!1}},data:function(){return{inputValObjects:[],tags:[]}},computed:{id:function(){return"settings-input-text-"+this.uuid}},watch:{value:function(t){this.inputValObjects=this.getValueObject()}},beforeCreate:function(){var t=this;this.uuid=Tt.toString(),Tt+=1,(0,a.default)({method:"PROPFIND",url:(0,l.generateRemoteUrl)("dav")+"/systemtags/",data:'<?xml version="1.0"?>\n\t\t\t\t\t<d:propfind xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">\n\t\t\t\t\t <d:prop>\n\t\t\t\t\t\t<oc:id />\n\t\t\t\t\t\t<oc:display-name />\n\t\t\t\t\t\t<oc:user-visible />\n\t\t\t\t\t\t<oc:user-assignable />\n\t\t\t\t\t\t<oc:can-assign />\n\t\t\t\t\t </d:prop>\n\t\t\t\t\t</d:propfind>'}).then((function(t){return function(t){var n=Bt(function(t){var n=null;try{n=(new DOMParser).parseFromString(t,"text/xml")}catch(t){console.error("Failed to parse xml document",t)}return n}(t)),e=n["d:multistatus"]["d:response"],i=[];for(var o in e){var r=e[o]["d:propstat"];"HTTP/1.1 200 OK"===r["d:status"]["#text"]&&i.push({id:r["d:prop"]["oc:id"]["#text"],displayName:r["d:prop"]["oc:display-name"]["#text"],canAssign:"true"===r["d:prop"]["oc:can-assign"]["#text"],userAssignable:"true"===r["d:prop"]["oc:user-assignable"]["#text"],userVisible:"true"===r["d:prop"]["oc:user-visible"]["#text"]})}return i}(t.data)})).then((function(n){t.tags=n,t.inputValObjects=t.getValueObject()})).catch(console.error.bind(this))},methods:{getValueObject:function(){var t=this;return 0===this.tags.length?[]:this.multiple?this.value.filter((function(t){return""!==t})).map((function(n){return t.tags.find((function(t){return t.id===n}))})):this.tags.find((function(n){return n.id===t.value}))},update:function(){this.multiple?this.$emit("input",this.inputValObjects.map((function(t){return t.id}))):null===this.inputValObjects?this.$emit("input",""):this.$emit("input",this.inputValObjects.id)},tagLabel:function(n){var e=n.displayName,i=n.userVisible,o=n.userAssignable;return!1===i?t("systemtags","%s (invisible)").replace("%s",e):!1===o?t("systemtags","%s (restricted)").replace("%s",e):e}}},Dt={name:"FileSystemTag",components:{MultiselectTag:(0,Y.Z)(St,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("Multiselect",{staticClass:"multiselect-vue",attrs:{options:t.tags,"options-limit":5,placeholder:t.label,"track-by":"id","custom-label":t.tagLabel,multiple:t.multiple,"close-on-select":!1,"tag-width":60,disabled:t.disabled},on:{input:t.update},scopedSlots:t._u([{key:"option",fn:function(n){return[t._v("\n\t\t"+t._s(t.tagLabel(n.option))+"\n\t")]}}]),model:{value:t.inputValObjects,callback:function(n){t.inputValObjects=n},expression:"inputValObjects"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("core","No results")))])])}),[],!1,null,null,null).exports},props:{value:{type:String,default:""}},data:function(){return{newValue:[]}},watch:{value:function(){this.updateValue()}},beforeMount:function(){this.updateValue()},methods:{updateValue:function(){""!==this.value?this.newValue=this.value:this.newValue=null},update:function(){this.$emit("input",this.newValue||"")}}},Mt=(0,Y.Z)(Dt,(function(){var t=this,n=t.$createElement;return(t._self._c||n)("MultiselectTag",{attrs:{multiple:!1,label:t.t("workflowengine","Select a tag")},on:{input:t.update},model:{value:t.newValue,callback:function(n){t.newValue=n},expression:"newValue"}})}),[],!1,null,"31f5522d",null).exports,Ut=function(){return[{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")},{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")}]},Ft=[{class:"OCA\\WorkflowEngine\\Check\\FileName",name:t("workflowengine","File name"),operators:Ut,placeholder:function(t){return"matches"===t.operator||"!matches"===t.operator?"/^dummy-.+$/i":"filename.txt"},validate:function(t){return"matches"!==t.operator&&"!matches"!==t.operator||!!(n=t.value)&&null!==kt.exec(n);var n}},{class:"OCA\\WorkflowEngine\\Check\\FileMimeType",name:t("workflowengine","File MIME type"),operators:Ut,component:Pt},{class:"OCA\\WorkflowEngine\\Check\\FileSize",name:t("workflowengine","File size (upload)"),operators:[{operator:"less",name:t("workflowengine","less")},{operator:"!greater",name:t("workflowengine","less or equals")},{operator:"!less",name:t("workflowengine","greater or equals")},{operator:"greater",name:t("workflowengine","greater")}],placeholder:function(t){return"5 MB"},validate:function(t){return!!t.value&&null!==t.value.match(/^[0-9]+[ ]?[kmgt]?b$/i)}},{class:"OCA\\WorkflowEngine\\Check\\RequestRemoteAddress",name:t("workflowengine","Request remote address"),operators:[{operator:"matchesIPv4",name:t("workflowengine","matches IPv4")},{operator:"!matchesIPv4",name:t("workflowengine","does not match IPv4")},{operator:"matchesIPv6",name:t("workflowengine","matches IPv6")},{operator:"!matchesIPv6",name:t("workflowengine","does not match IPv6")}],placeholder:function(t){return"matchesIPv6"===t.operator||"!matchesIPv6"===t.operator?"::1/128":"127.0.0.1/32"},validate:function(t){return"matchesIPv6"===t.operator||"!matchesIPv6"===t.operator?!!(n=t.value)&&null!==_t.exec(n):function(t){return!!t&&null!==yt.exec(t)}(t.value);var n}},{class:"OCA\\WorkflowEngine\\Check\\FileSystemTags",name:t("workflowengine","File system tag"),operators:[{operator:"is",name:t("workflowengine","is tagged with")},{operator:"!is",name:t("workflowengine","is not tagged with")}],component:Mt}];function $t(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var It={name:"RequestUserAgent",components:{Multiselect:P()},mixins:[jt],data:function(){return{newValue:"",predefinedTypes:[{pattern:"android",label:t("workflowengine","Android client"),icon:"icon-phone"},{pattern:"ios",label:t("workflowengine","iOS client"),icon:"icon-phone"},{pattern:"desktop",label:t("workflowengine","Desktop client"),icon:"icon-desktop"},{pattern:"mail",label:t("workflowengine","Thunderbird & Outlook addons"),icon:"icon-mail"}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return $t(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return $t(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?$t(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},matchingPredefined:function(){var t=this;return this.predefinedTypes.find((function(n){return t.newValue===n.pattern}))},isPredefined:function(){return!!this.matchingPredefined},customValue:function(){return{icon:"icon-settings-dark",label:t("workflowengine","Custom user agent"),pattern:""}},currentValue:function(){return this.matchingPredefined?this.matchingPredefined:{icon:"icon-settings-dark",label:t("workflowengine","Custom user agent"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},zt=i(99055),Gt={};Gt.styleTagTransform=Z(),Gt.setAttributes=z(),Gt.insert=$().bind(null,"head"),Gt.domAPI=U(),Gt.insertStyleElement=L(),D()(zt.Z,Gt),zt.Z&&zt.Z.locals&&zt.Z.locals;var Lt=(0,Y.Z)(It,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a user agent"),label:"label","track-by":"pattern",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title option__title_single",domProps:{innerHTML:t._s(n.option.label)}})]}},{key:"option",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),n.option.$groupLabel?e("span",{staticClass:"option__title",domProps:{innerHTML:t._s(n.option.$groupLabel)}}):e("span",{staticClass:"option__title",domProps:{innerHTML:t._s(n.option.label)}})]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text"},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"475ac1e6",null).exports,Nt=i(80008),Zt=i.n(Nt),Wt=Zt().tz.names(),qt={name:"RequestTime",components:{Multiselect:P()},mixins:[jt],props:{value:{type:String,default:""}},data:function(){return{timezones:Wt,valid:!1,newValue:{startTime:null,endTime:null,timezone:Zt().tz.guess()}}},mounted:function(){this.validate()},methods:{updateInternalValue:function(t){try{var n=JSON.parse(t);2===n.length&&(this.newValue={startTime:n[0].split(" ",2)[0],endTime:n[1].split(" ",2)[0],timezone:n[0].split(" ",2)[1]})}catch(t){}},validate:function(){return this.valid=this.newValue.startTime&&null!==this.newValue.startTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i)&&this.newValue.endTime&&null!==this.newValue.endTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i)&&null!==Zt().tz.zone(this.newValue.timezone),this.valid?this.$emit("valid"):this.$emit("invalid"),this.valid},update:function(){if(null===this.newValue.timezone&&(this.newValue.timezone=Zt().tz.guess()),this.validate()){var t='["'.concat(this.newValue.startTime," ").concat(this.newValue.timezone,'","').concat(this.newValue.endTime," ").concat(this.newValue.timezone,'"]');this.$emit("input",t)}}}},Yt=i(76050),Ht={};Ht.styleTagTransform=Z(),Ht.setAttributes=z(),Ht.insert=$().bind(null,"head"),Ht.domAPI=U(),Ht.insertStyleElement=L(),D()(Yt.Z,Ht),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var Jt=(0,Y.Z)(qt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"timeslot"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.newValue.startTime,expression:"newValue.startTime"}],staticClass:"timeslot--start",attrs:{type:"text",placeholder:"e.g. 08:00"},domProps:{value:t.newValue.startTime},on:{input:[function(n){n.target.composing||t.$set(t.newValue,"startTime",n.target.value)},t.update]}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newValue.endTime,expression:"newValue.endTime"}],attrs:{type:"text",placeholder:"e.g. 18:00"},domProps:{value:t.newValue.endTime},on:{input:[function(n){n.target.composing||t.$set(t.newValue,"endTime",n.target.value)},t.update]}}),t._v(" "),t.valid?t._e():e("p",{staticClass:"invalid-hint"},[t._v("\n\t\t"+t._s(t.t("workflowengine","Please enter a valid time span"))+"\n\t")]),t._v(" "),e("Multiselect",{directives:[{name:"show",rawName:"v-show",value:t.valid,expression:"valid"}],attrs:{options:t.timezones},on:{input:t.update},model:{value:t.newValue.timezone,callback:function(n){t.$set(t.newValue,"timezone",n)},expression:"newValue.timezone"}})],1)}),[],!1,null,"149baca9",null).exports;function Qt(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var Kt={name:"RequestURL",components:{Multiselect:P()},mixins:[jt],data:function(){return{newValue:"",predefinedTypes:[{label:t("workflowengine","Predefined URLs"),children:[{pattern:"webdav",label:t("workflowengine","Files WebDAV")}]}]}},computed:{options:function(){return[].concat(function(t){if(Array.isArray(t))return Qt(t)}(t=this.predefinedTypes)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return Qt(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Qt(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[this.customValue]);var t},placeholder:function(){return"matches"===this.check.operator||"!matches"===this.check.operator?"/^https\\:\\/\\/localhost\\/index\\.php$/i":"https://localhost/index.php"},matchingPredefined:function(){var t=this;return this.predefinedTypes.map((function(t){return t.children})).flat().find((function(n){return t.newValue===n.pattern}))},isPredefined:function(){return!!this.matchingPredefined},customValue:function(){return{label:t("workflowengine","Others"),children:[{icon:"icon-settings-dark",label:t("workflowengine","Custom URL"),pattern:""}]}},currentValue:function(){return this.matchingPredefined?this.matchingPredefined:{icon:"icon-settings-dark",label:t("workflowengine","Custom URL"),pattern:this.newValue}}},methods:{validateRegex:function(t){return null!==/^\/(.*)\/([gui]{0,3})$/.exec(t)},setValue:function(t){null!==t&&(this.newValue=t.pattern,this.$emit("input",this.newValue))},updateCustom:function(t){this.newValue=t.target.value,this.$emit("input",this.newValue)}}},Xt=Kt,tn=i(82999),nn={};nn.styleTagTransform=Z(),nn.setAttributes=z(),nn.insert=$().bind(null,"head"),nn.domAPI=U(),nn.insertStyleElement=L(),D()(tn.Z,nn),tn.Z&&tn.Z.locals&&tn.Z.locals;var en=(0,Y.Z)(Xt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,placeholder:t.t("workflowengine","Select a request URL"),label:"label","track-by":"pattern","group-values":"children","group-label":"label",options:t.options,multiple:!1,tagging:!1},on:{input:t.setValue},scopedSlots:t._u([{key:"singleLabel",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title option__title_single"},[t._v(t._s(n.option.label))])]}},{key:"option",fn:function(n){return[e("span",{staticClass:"option__icon",class:n.option.icon}),t._v(" "),e("span",{staticClass:"option__title"},[t._v(t._s(n.option.label)+" "+t._s(n.option.$groupLabel))])]}}])}),t._v(" "),t.isPredefined?t._e():e("input",{attrs:{type:"text",placeholder:t.placeholder},domProps:{value:t.currentValue.pattern},on:{input:t.updateCustom}})],1)}),[],!1,null,"dd8e16be",null).exports;function on(t,n,e,i,o,r,a){try{var s=t[r](a),l=s.value}catch(t){return void e(t)}s.done?n(l):Promise.resolve(l).then(i,o)}var rn=[],an={isLoading:!1},sn={name:"RequestUserGroup",components:{Multiselect:P()},props:{value:{type:String,default:""},check:{type:Object,default:function(){return{}}}},data:function(){return{groups:rn,status:an}},computed:{currentValue:function(){var t=this;return this.groups.find((function(n){return n.id===t.value}))||null}},mounted:function(){var t,n=this;return(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(0!==n.groups.length){t.next=3;break}return t.next=3,n.searchAsync("");case 3:if(null!==n.currentValue){t.next=6;break}return t.next=6,n.searchAsync(n.value);case 6:case"end":return t.stop()}}),t)})),function(){var n=this,e=arguments;return new Promise((function(i,o){var r=t.apply(n,e);function a(t){on(r,i,o,a,s,"next",t)}function s(t){on(r,i,o,a,s,"throw",t)}a(void 0)}))})()},methods:{searchAsync:function(t){var n=this;if(!this.status.isLoading)return this.status.isLoading=!0,a.default.get((0,l.generateOcsUrl)("cloud/groups/details?limit=20&search={searchQuery}",{searchQuery:t})).then((function(t){t.data.ocs.data.groups.forEach((function(t){n.addGroup({id:t.id,displayname:t.displayname})})),n.status.isLoading=!1}),(function(t){console.error("Error while loading group list",t.response)}))},addGroup:function(t){-1===this.groups.findIndex((function(n){return n.id===t.id}))&&this.groups.push(t)}}},ln=sn,cn=i(80787),un={};un.styleTagTransform=Z(),un.setAttributes=z(),un.insert=$().bind(null,"head"),un.domAPI=U(),un.insertStyleElement=L(),D()(cn.Z,un),cn.Z&&cn.Z.locals&&cn.Z.locals;var pn=(0,Y.Z)(ln,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("Multiselect",{attrs:{value:t.currentValue,loading:t.status.isLoading&&0===t.groups.length,options:t.groups,multiple:!1,label:"displayname","track-by":"id"},on:{"search-change":t.searchAsync,input:function(n){return t.$emit("input",n.id)}}})],1)}),[],!1,null,"79fa10a5",null).exports,dn=[{class:"OCA\\WorkflowEngine\\Check\\RequestURL",name:t("workflowengine","Request URL"),operators:[{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")},{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")}],component:en},{class:"OCA\\WorkflowEngine\\Check\\RequestTime",name:t("workflowengine","Request time"),operators:[{operator:"in",name:t("workflowengine","between")},{operator:"!in",name:t("workflowengine","not between")}],component:Jt},{class:"OCA\\WorkflowEngine\\Check\\RequestUserAgent",name:t("workflowengine","Request user agent"),operators:[{operator:"is",name:t("workflowengine","is")},{operator:"!is",name:t("workflowengine","is not")},{operator:"matches",name:t("workflowengine","matches")},{operator:"!matches",name:t("workflowengine","does not match")}],component:Lt},{class:"OCA\\WorkflowEngine\\Check\\UserGroupMembership",name:t("workflowengine","User group membership"),operators:[{operator:"is",name:t("workflowengine","is member of")},{operator:"!is",name:t("workflowengine","is not member of")}],component:pn}];function An(t){return function(t){if(Array.isArray(t))return mn(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return mn(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?mn(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mn(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=new Array(n);e<n;e++)i[e]=t[e];return i}var fn=[].concat(An(Ft),An(dn));window.OCA.WorkflowEngine=Object.assign({},OCA.WorkflowEngine,{registerCheck:function(t){v.commit("addPluginCheck",t)},registerOperator:function(t){v.commit("addPluginOperator",t)}}),fn.forEach((function(t){return window.OCA.WorkflowEngine.registerCheck(t)})),o.default.use(r.ZP),o.default.prototype.t=t,new(o.default.extend(xt))({store:v}).$mount("#workflowengine")},38530:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".check[data-v-70cc784d]{display:flex;flex-wrap:wrap;width:100%;padding-right:20px}.check>*[data-v-70cc784d]:not(.close){width:180px}.check>.comparator[data-v-70cc784d]{min-width:130px;width:130px}.check>.option[data-v-70cc784d]{min-width:230px;width:230px}.check>.multiselect[data-v-70cc784d],.check>input[type=text][data-v-70cc784d]{margin-right:5px;margin-bottom:5px}.check .multiselect[data-v-70cc784d] .multiselect__content-wrapper li>span,.check .multiselect[data-v-70cc784d] .multiselect__single{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}input[type=text][data-v-70cc784d]{margin:0}[data-v-70cc784d]::placeholder{font-size:10px}button.action-item.action-item--single.icon-close[data-v-70cc784d]{height:44px;width:44px;margin-top:-5px;margin-bottom:-5px}.invalid[data-v-70cc784d]{border:1px solid var(--color-error) !important}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Check.vue"],names:[],mappings:"AAsJA,wBACC,YAAA,CACA,cAAA,CACA,UAAA,CACA,kBAAA,CACA,sCACC,WAAA,CAED,oCACC,eAAA,CACA,WAAA,CAED,gCACC,eAAA,CACA,WAAA,CAED,8EAEC,gBAAA,CACA,iBAAA,CAGD,qIAEC,aAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CAGF,kCACC,QAAA,CAED,+BACC,cAAA,CAED,mEACC,WAAA,CACA,UAAA,CACA,eAAA,CACA,kBAAA,CAED,0BACC,8CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.check {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\twidth: 100%;\n\tpadding-right: 20px;\n\t& > *:not(.close) {\n\t\twidth: 180px;\n\t}\n\t& > .comparator {\n\t\tmin-width: 130px;\n\t\twidth: 130px;\n\t}\n\t& > .option {\n\t\tmin-width: 230px;\n\t\twidth: 230px;\n\t}\n\t& > .multiselect,\n\t& > input[type=text] {\n\t\tmargin-right: 5px;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t.multiselect::v-deep .multiselect__content-wrapper li>span,\n\t.multiselect::v-deep .multiselect__single {\n\t\tdisplay: block;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n}\ninput[type=text] {\n\tmargin: 0;\n}\n::placeholder {\n\tfont-size: 10px;\n}\nbutton.action-item.action-item--single.icon-close {\n\theight: 44px;\n\twidth: 44px;\n\tmargin-top: -5px;\n\tmargin-bottom: -5px;\n}\n.invalid {\n\tborder: 1px solid var(--color-error) !important;\n}\n"],sourceRoot:""}]),n.Z=a},76050:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".timeslot[data-v-149baca9]{display:flex;flex-grow:1;flex-wrap:wrap;max-width:180px}.timeslot .multiselect[data-v-149baca9]{width:100%;margin-bottom:5px}.timeslot .multiselect[data-v-149baca9] .multiselect__tags:not(:hover):not(:focus):not(:active){border:1px solid rgba(0,0,0,0)}.timeslot input[type=text][data-v-149baca9]{width:50%;margin:0;margin-bottom:5px}.timeslot input[type=text].timeslot--start[data-v-149baca9]{margin-right:5px;width:calc(50% - 5px)}.timeslot .invalid-hint[data-v-149baca9]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestTime.vue"],names:[],mappings:"AA+FA,2BACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,eAAA,CAEA,wCACC,UAAA,CACA,iBAAA,CAGD,gGACC,8BAAA,CAGD,4CACC,SAAA,CACA,QAAA,CACA,iBAAA,CAEA,4DACC,gBAAA,CACA,qBAAA,CAIF,yCACC,mCAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.timeslot {\n\tdisplay: flex;\n\tflex-grow: 1;\n\tflex-wrap: wrap;\n\tmax-width: 180px;\n\n\t.multiselect {\n\t\twidth: 100%;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\n\t\tborder: 1px solid transparent;\n\t}\n\n\tinput[type=text] {\n\t\twidth: 50%;\n\t\tmargin: 0;\n\t\tmargin-bottom: 5px;\n\n\t\t&.timeslot--start {\n\t\t\tmargin-right: 5px;\n\t\t\twidth: calc(50% - 5px);\n\t\t}\n\t}\n\n\t.invalid-hint {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]),n.Z=a},13885:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".event[data-v-57bd6e67]{margin-bottom:5px}.isComplex img[data-v-57bd6e67]{vertical-align:text-top}.isComplex span[data-v-57bd6e67]{padding-top:2px;display:inline-block}.multiselect[data-v-57bd6e67]{width:100%;max-width:550px;margin-top:4px}.multiselect[data-v-57bd6e67] .multiselect__single{display:flex}.multiselect[data-v-57bd6e67]:not(.multiselect--active) .multiselect__tags{background-color:var(--color-main-background) !important;border:1px solid rgba(0,0,0,0)}.multiselect[data-v-57bd6e67] .multiselect__tags{background-color:var(--color-main-background) !important;height:auto;min-height:34px}.multiselect[data-v-57bd6e67]:not(.multiselect--disabled) .multiselect__tags .multiselect__single{background-image:var(--icon-triangle-s-dark);background-repeat:no-repeat;background-position:right center}input[data-v-57bd6e67]{border:1px solid rgba(0,0,0,0)}.option__title[data-v-57bd6e67]{margin-left:5px;color:var(--color-main-text)}.option__title_single[data-v-57bd6e67]{font-weight:900}.option__icon[data-v-57bd6e67]{width:16px;height:16px}.eventlist img[data-v-57bd6e67],.eventlist .text[data-v-57bd6e67]{vertical-align:middle}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Event.vue"],names:[],mappings:"AAiFA,wBACC,iBAAA,CAGA,gCACC,uBAAA,CAED,iCACC,eAAA,CACA,oBAAA,CAGF,8BACC,UAAA,CACA,eAAA,CACA,cAAA,CAED,mDACC,YAAA,CAED,2EACC,wDAAA,CACA,8BAAA,CAGD,iDACC,wDAAA,CACA,WAAA,CACA,eAAA,CAGD,kGACC,4CAAA,CACA,2BAAA,CACA,gCAAA,CAGD,uBACC,8BAAA,CAGD,gCACC,eAAA,CACA,4BAAA,CAED,uCACC,eAAA,CAGD,+BACC,UAAA,CACA,WAAA,CAGD,kEAEC,qBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.event {\n\tmargin-bottom: 5px;\n}\n.isComplex {\n\timg {\n\t\tvertical-align: text-top;\n\t}\n\tspan {\n\t\tpadding-top: 2px;\n\t\tdisplay: inline-block;\n\t}\n}\n.multiselect {\n\twidth: 100%;\n\tmax-width: 550px;\n\tmargin-top: 4px;\n}\n.multiselect::v-deep .multiselect__single {\n\tdisplay: flex;\n}\n.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\n\tbackground-color: var(--color-main-background) !important;\n\tborder: 1px solid transparent;\n}\n\n.multiselect::v-deep .multiselect__tags {\n\tbackground-color: var(--color-main-background) !important;\n\theight: auto;\n\tmin-height: 34px;\n}\n\n.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\n\tbackground-image: var(--icon-triangle-s-dark);\n\tbackground-repeat: no-repeat;\n\tbackground-position: right center;\n}\n\ninput {\n\tborder: 1px solid transparent;\n}\n\n.option__title {\n\tmargin-left: 5px;\n\tcolor: var(--color-main-text);\n}\n.option__title_single {\n\tfont-weight: 900;\n}\n\n.option__icon {\n\twidth: 16px;\n\theight: 16px;\n}\n\n.eventlist img,\n.eventlist .text {\n\tvertical-align: middle;\n}\n"],sourceRoot:""}]),n.Z=a},46514:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".actions__item[data-v-96600802]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-96600802]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-96600802]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-96600802]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-96600802],small[data-v-96600802]{padding:6px;display:block}h3[data-v-96600802]{margin:0;padding:0;font-weight:600}small[data-v-96600802]{font-size:10pt;flex-grow:1}.colored[data-v-96600802]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-96600802],.colored:not(.more) small[data-v-96600802]{color:var(--color-primary-text)}.actions__item[data-v-96600802]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-96600802]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-96600802]{padding:0}.actions__item:not(.colored) .icon[data-v-96600802]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-96600802]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-96600802]{filter:invert(1)}","",{version:3,sources:["webpack://./apps/workflowengine/src/styles/operation.scss"],names:[],mappings:"AAAA,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA",sourcesContent:[".actions__item {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tmargin-left: -1px;\n\tpadding: 10px;\n\tborder-radius: var(--border-radius-large);\n\tmargin-right: 20px;\n\tmargin-bottom: 20px;\n}\n.actions__item .icon {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 50px;\n\tbackground-size: 50px 50px;\n\tbackground-position: center center;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n\tbackground-repeat: no-repeat;\n}\n.actions__item__description {\n\ttext-align: center;\n\tflex-grow: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n}\n.actions__item_options {\n\twidth: 100%;\n\tmargin-top: 10px;\n\tpadding-left: 60px;\n}\nh3, small {\n\tpadding: 6px;\n\tdisplay: block;\n}\nh3 {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-weight: 600;\n}\nsmall {\n\tfont-size: 10pt;\n\tflex-grow: 1;\n}\n\n.colored:not(.more) {\n\tbackground-color: var(--color-primary-element);\n\th3, small {\n\t\tcolor: var(--color-primary-text)\n\t}\n}\n\n.actions__item:not(.colored) {\n\tflex-direction: row;\n\n\t.actions__item__description {\n\t\tpadding-top: 5px;\n\t\ttext-align: left;\n\t\twidth: calc(100% - 105px);\n\t\tsmall {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\t.icon {\n\t\twidth: 50px;\n\t\tmargin: 0;\n\t\tmargin-right: 10px;\n\t\t&:not(.icon-invert) {\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n}\n\n.colored .icon-invert {\n\tfilter: invert(1);\n}\n"],sourceRoot:""}]),n.Z=a},11661:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,".buttons[data-v-779dc71c]{display:flex;justify-content:end}.buttons button[data-v-779dc71c]{margin-left:5px}.buttons button[data-v-779dc71c]:last-child{margin-right:10px}.error-message[data-v-779dc71c]{float:right;margin-right:10px}.flow-icon[data-v-779dc71c]{width:44px}.rule[data-v-779dc71c]{display:flex;flex-wrap:wrap;border-left:5px solid var(--color-primary-element)}.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{flex-grow:1;min-height:100px;max-width:700px}.rule .action[data-v-779dc71c]{max-width:400px;position:relative}.rule .icon-confirm[data-v-779dc71c]{background-position:right 27px;padding-right:20px;margin-right:20px}.trigger p[data-v-779dc71c],.action p[data-v-779dc71c]{min-height:34px;display:flex}.trigger p>span[data-v-779dc71c],.action p>span[data-v-779dc71c]{min-width:50px;text-align:right;color:var(--color-text-maxcontrast);padding-right:10px;padding-top:6px}.trigger p .multiselect[data-v-779dc71c],.action p .multiselect[data-v-779dc71c]{flex-grow:1;max-width:300px}.trigger p:first-child span[data-v-779dc71c]{padding-top:3px}.check--add[data-v-779dc71c]{background-position:7px center;background-color:rgba(0,0,0,0);padding-left:6px;margin:0;width:180px;border-radius:var(--border-radius);color:var(--color-text-maxcontrast);font-weight:normal;text-align:left;font-size:1em}@media(max-width: 1400px){.rule[data-v-779dc71c],.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{width:100%;max-width:100%}.rule .flow-icon[data-v-779dc71c]{display:none}}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Rule.vue"],names:[],mappings:"AAqLA,0BACC,YAAA,CACA,mBAAA,CAEA,iCACC,eAAA,CAED,4CACC,iBAAA,CAIF,gCACC,WAAA,CACA,iBAAA,CAGD,4BACC,UAAA,CAGD,uBACC,YAAA,CACA,cAAA,CACA,kDAAA,CAEA,+DACC,WAAA,CACA,gBAAA,CACA,eAAA,CAED,+BACC,eAAA,CACA,iBAAA,CAED,qCACC,8BAAA,CACA,kBAAA,CACA,iBAAA,CAGF,uDACC,eAAA,CACA,YAAA,CAEA,iEACC,cAAA,CACA,gBAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CAED,iFACC,WAAA,CACA,eAAA,CAGF,6CACE,eAAA,CAGF,6BACC,8BAAA,CACA,8BAAA,CACA,gBAAA,CACA,QAAA,CACA,WAAA,CACA,kCAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CACA,aAAA,CAGD,0BAEE,sFACC,UAAA,CACA,cAAA,CAED,kCACC,YAAA,CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: end;\n\n\tbutton {\n\t\tmargin-left: 5px;\n\t}\n\tbutton:last-child{\n\t\tmargin-right: 10px;\n\t}\n}\n\n.error-message {\n\tfloat: right;\n\tmargin-right: 10px;\n}\n\n.flow-icon {\n\twidth: 44px;\n}\n\n.rule {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tborder-left: 5px solid var(--color-primary-element);\n\n\t.trigger, .action {\n\t\tflex-grow: 1;\n\t\tmin-height: 100px;\n\t\tmax-width: 700px;\n\t}\n\t.action {\n\t\tmax-width: 400px;\n\t\tposition: relative;\n\t}\n\t.icon-confirm {\n\t\tbackground-position: right 27px;\n\t\tpadding-right: 20px;\n\t\tmargin-right: 20px;\n\t}\n}\n.trigger p, .action p {\n\tmin-height: 34px;\n\tdisplay: flex;\n\n\t& > span {\n\t\tmin-width: 50px;\n\t\ttext-align: right;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-right: 10px;\n\t\tpadding-top: 6px;\n\t}\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmax-width: 300px;\n\t}\n}\n.trigger p:first-child span {\n\t\tpadding-top: 3px;\n}\n\n.check--add {\n\tbackground-position: 7px center;\n\tbackground-color: transparent;\n\tpadding-left: 6px;\n\tmargin: 0;\n\twidth: 180px;\n\tborder-radius: var(--border-radius);\n\tcolor: var(--color-text-maxcontrast);\n\tfont-weight: normal;\n\ttext-align: left;\n\tfont-size: 1em;\n}\n\n@media (max-width:1400px) {\n\t.rule {\n\t\t&, .trigger, .action {\n\t\t\twidth: 100%;\n\t\t\tmax-width: 100%;\n\t\t}\n\t\t.flow-icon {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]),n.Z=a},33786:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"#workflowengine[data-v-2fb0024e]{border-bottom:1px solid var(--color-border)}.section[data-v-2fb0024e]{max-width:100vw}.section h2.configured-flows[data-v-2fb0024e]{margin-top:50px;margin-bottom:0}.actions[data-v-2fb0024e]{display:flex;flex-wrap:wrap;max-width:1200px}.actions .actions__item[data-v-2fb0024e]{max-width:280px;flex-basis:250px}.actions__more[data-v-2fb0024e]{margin-bottom:10px}.slide-enter-active[data-v-2fb0024e]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:ease-in;-webkit-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in}.slide-leave-active[data-v-2fb0024e]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-webkit-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-o-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);transition-timing-function:cubic-bezier(0, 1, 0.5, 1)}.slide-enter-to[data-v-2fb0024e],.slide-leave[data-v-2fb0024e]{max-height:500px;overflow:hidden}.slide-enter[data-v-2fb0024e],.slide-leave-to[data-v-2fb0024e]{overflow:hidden;max-height:0;padding-top:0;padding-bottom:0}.actions__item[data-v-2fb0024e]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-2fb0024e]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-2fb0024e]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-2fb0024e]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-2fb0024e],small[data-v-2fb0024e]{padding:6px;display:block}h3[data-v-2fb0024e]{margin:0;padding:0;font-weight:600}small[data-v-2fb0024e]{font-size:10pt;flex-grow:1}.colored[data-v-2fb0024e]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-2fb0024e],.colored:not(.more) small[data-v-2fb0024e]{color:var(--color-primary-text)}.actions__item[data-v-2fb0024e]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-2fb0024e]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-2fb0024e]{padding:0}.actions__item:not(.colored) .icon[data-v-2fb0024e]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-2fb0024e]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-2fb0024e]{filter:invert(1)}.actions__item.more[data-v-2fb0024e]{background-color:var(--color-background-dark)}","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Workflow.vue","webpack://./apps/workflowengine/src/styles/operation.scss"],names:[],mappings:"AAmHA,iCACC,2CAAA,CAED,0BACC,eAAA,CAEA,8CACC,eAAA,CACA,eAAA,CAGF,0BACC,YAAA,CACA,cAAA,CACA,gBAAA,CACA,yCACC,eAAA,CACA,gBAAA,CAGF,gCACC,kBAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,uCAAA,CACA,0CAAA,CACA,qCAAA,CACA,kCAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,0DAAA,CACA,6DAAA,CACA,wDAAA,CACA,qDAAA,CAGD,+DACC,gBAAA,CACA,eAAA,CAGD,+DACC,eAAA,CACA,YAAA,CACA,aAAA,CACA,gBAAA,CC1KD,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA,CDmGD,qCACC,6CAAA",sourcesContent:['\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#workflowengine {\n\tborder-bottom: 1px solid var(--color-border);\n}\n.section {\n\tmax-width: 100vw;\n\n\th2.configured-flows {\n\t\tmargin-top: 50px;\n\t\tmargin-bottom: 0;\n\t}\n}\n.actions {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tmax-width: 1200px;\n\t.actions__item {\n\t\tmax-width: 280px;\n\t\tflex-basis: 250px;\n\t}\n}\n.actions__more {\n\tmargin-bottom: 10px;\n}\n\n.slide-enter-active {\n\t-moz-transition-duration: 0.3s;\n\t-webkit-transition-duration: 0.3s;\n\t-o-transition-duration: 0.3s;\n\ttransition-duration: 0.3s;\n\t-moz-transition-timing-function: ease-in;\n\t-webkit-transition-timing-function: ease-in;\n\t-o-transition-timing-function: ease-in;\n\ttransition-timing-function: ease-in;\n}\n\n.slide-leave-active {\n\t-moz-transition-duration: 0.3s;\n\t-webkit-transition-duration: 0.3s;\n\t-o-transition-duration: 0.3s;\n\ttransition-duration: 0.3s;\n\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.slide-enter-to, .slide-leave {\n\tmax-height: 500px;\n\toverflow: hidden;\n}\n\n.slide-enter, .slide-leave-to {\n\toverflow: hidden;\n\tmax-height: 0;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n}\n\n@import "./../styles/operation";\n\n.actions__item.more {\n\tbackground-color: var(--color-background-dark);\n}\n',".actions__item {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tmargin-left: -1px;\n\tpadding: 10px;\n\tborder-radius: var(--border-radius-large);\n\tmargin-right: 20px;\n\tmargin-bottom: 20px;\n}\n.actions__item .icon {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 50px;\n\tbackground-size: 50px 50px;\n\tbackground-position: center center;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n\tbackground-repeat: no-repeat;\n}\n.actions__item__description {\n\ttext-align: center;\n\tflex-grow: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n}\n.actions__item_options {\n\twidth: 100%;\n\tmargin-top: 10px;\n\tpadding-left: 60px;\n}\nh3, small {\n\tpadding: 6px;\n\tdisplay: block;\n}\nh3 {\n\tmargin: 0;\n\tpadding: 0;\n\tfont-weight: 600;\n}\nsmall {\n\tfont-size: 10pt;\n\tflex-grow: 1;\n}\n\n.colored:not(.more) {\n\tbackground-color: var(--color-primary-element);\n\th3, small {\n\t\tcolor: var(--color-primary-text)\n\t}\n}\n\n.actions__item:not(.colored) {\n\tflex-direction: row;\n\n\t.actions__item__description {\n\t\tpadding-top: 5px;\n\t\ttext-align: left;\n\t\twidth: calc(100% - 105px);\n\t\tsmall {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\t.icon {\n\t\twidth: 50px;\n\t\tmargin: 0;\n\t\tmargin-right: 10px;\n\t\t&:not(.icon-invert) {\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n}\n\n.colored .icon-invert {\n\tfilter: invert(1);\n}\n"],sourceRoot:""}]),n.Z=a},85155:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-9f636120], input[type='text'][data-v-9f636120] {\n\twidth: 100%;\n}\n.multiselect[data-v-9f636120] .multiselect__content-wrapper li>span,\n.multiselect[data-v-9f636120] .multiselect__single {\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/FileMimeType.vue"],names:[],mappings:";AA4IA;CACA,WAAA;AACA;AACA;;CAEA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a file type')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"t('workflowengine', 'e.g. httpd/unix-directory')\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from './../../mixins/valueMixin'\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'FileMimeType',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-folder',\n\t\t\t\t\tlabel: t('workflowengine', 'Folder'),\n\t\t\t\t\tpattern: 'httpd/unix-directory',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-picture',\n\t\t\t\t\tlabel: t('workflowengine', 'Images'),\n\t\t\t\t\tpattern: '/image\\\\/.*/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\n\t\t\t\t\tlabel: t('workflowengine', 'Office documents'),\n\t\t\t\t\tpattern: '/(vnd\\\\.(ms-|openxmlformats-|oasis\\\\.opendocument).*)$/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\n\t\t\t\t\tlabel: t('workflowengine', 'PDF documents'),\n\t\t\t\t\tpattern: 'application/pdf',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tisPredefined() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom MIME type'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\t.multiselect >>> .multiselect__content-wrapper li>span,\n\t.multiselect >>> .multiselect__single {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},82999:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-dd8e16be], input[type='text'][data-v-dd8e16be] {\n\twidth: 100%;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestURL.vue"],names:[],mappings:";AA2IA;CACA,WAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a request URL')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\tgroup-values=\"children\"\n\t\t\tgroup-label=\"label\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestURL',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('workflowengine', 'Predefined URLs'),\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tplaceholder() {\n\t\t\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\n\t\t\t\treturn '/^https\\\\:\\\\/\\\\/localhost\\\\/index\\\\.php$/i'\n\t\t\t}\n\t\t\treturn 'https://localhost/index.php'\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.map(groups => groups.children)\n\t\t\t\t.flat()\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\tlabel: t('workflowengine', 'Others'),\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\t\t\tpattern: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},99055:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-475ac1e6], input[type='text'][data-v-475ac1e6] {\n\twidth: 100%;\n}\n.multiselect .multiselect__content-wrapper li>span[data-v-475ac1e6] {\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.multiselect[data-v-475ac1e6] .multiselect__single {\n\twidth: 100%;\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.option__icon[data-v-475ac1e6] {\n\tdisplay: inline-block;\n\tmin-width: 30px;\n\tbackground-position: left;\n}\n.option__title[data-v-475ac1e6] {\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestUserAgent.vue"],names:[],mappings:";AA8HA;CACA,WAAA;AACA;AAEA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,WAAA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,qBAAA;CACA,eAAA;CACA,yBAAA;AACA;AACA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a user agent')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t\x3c!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize --\x3e\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span class=\"option__title option__title_single\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span v-if=\"props.option.$groupLabel\" class=\"option__title\" v-html=\"props.option.$groupLabel\" />\n\t\t\t\t\x3c!-- eslint-disable-next-line vue/no-v-html --\x3e\n\t\t\t\t<span v-else class=\"option__title\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestUserAgent',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\n\t\t\t\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\n\t.multiselect .multiselect__content-wrapper li>span {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.option__icon {\n\t\tdisplay: inline-block;\n\t\tmin-width: 30px;\n\t\tbackground-position: left;\n\t}\n\t.option__title {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},80787:function(t,n,e){"use strict";var i=e(87537),o=e.n(i),r=e(23645),a=e.n(r)()(o());a.push([t.id,"\n.multiselect[data-v-79fa10a5] {\n\twidth: 100%;\n}\n","",{version:3,sources:["webpack://./apps/workflowengine/src/components/Checks/RequestUserGroup.vue"],names:[],mappings:";AA4GA;CACA,WAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:loading=\"status.isLoading && groups.length === 0\"\n\t\t\t:options=\"groups\"\n\t\t\t:multiple=\"false\"\n\t\t\tlabel=\"displayname\"\n\t\t\ttrack-by=\"id\"\n\t\t\t@search-change=\"searchAsync\"\n\t\t\t@input=\"(value) => $emit('input', value.id)\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst groups = []\nconst status = {\n\tisLoading: false,\n}\n\nexport default {\n\tname: 'RequestUserGroup',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tgroups,\n\t\t\tstatus,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcurrentValue() {\n\t\t\treturn this.groups.find(group => group.id === this.value) || null\n\t\t},\n\t},\n\tasync mounted() {\n\t\tif (this.groups.length === 0) {\n\t\t\tawait this.searchAsync('')\n\t\t}\n\t\tif (this.currentValue === null) {\n\t\t\tawait this.searchAsync(this.value)\n\t\t}\n\t},\n\tmethods: {\n\t\tsearchAsync(searchQuery) {\n\t\t\tif (this.status.isLoading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.status.isLoading = true\n\t\t\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\n\t\t\t\tresponse.data.ocs.data.groups.forEach((group) => {\n\t\t\t\t\tthis.addGroup({\n\t\t\t\t\t\tid: group.id,\n\t\t\t\t\t\tdisplayname: group.displayname,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tthis.status.isLoading = false\n\t\t\t}, (error) => {\n\t\t\t\tconsole.error('Error while loading group list', error.response)\n\t\t\t})\n\t\t},\n\t\taddGroup(group) {\n\t\t\tconst index = this.groups.findIndex((item) => item.id === group.id)\n\t\t\tif (index === -1) {\n\t\t\t\tthis.groups.push(group)\n\t\t\t}\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.multiselect {\n\t\twidth: 100%;\n\t}\n</style>\n"],sourceRoot:""}]),n.Z=a},46700:function(t,n,e){var i={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":2819,"./hi.js":2819,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function o(t){var n=r(t);return e(n)}function r(t){if(!e.o(i,t)){var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}return i[t]}o.keys=function(){return Object.keys(i)},o.resolve=r,t.exports=o,o.id=46700}},i={};function o(t){var n=i[t];if(void 0!==n)return n.exports;var r=i[t]={id:t,loaded:!1,exports:{}};return e[t].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=e,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},n=[],o.O=function(t,e,i,r){if(!e){var a=1/0;for(u=0;u<n.length;u++){e=n[u][0],i=n[u][1],r=n[u][2];for(var s=!0,l=0;l<e.length;l++)(!1&r||a>=r)&&Object.keys(o.O).every((function(t){return o.O[t](e[l])}))?e.splice(l--,1):(s=!1,r<a&&(a=r));if(s){n.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}r=r||0;for(var u=n.length;u>0&&n[u-1][2]>r;u--)n[u]=n[u-1];n[u]=[e,i,r]},o.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(n,{a:n}),n},o.d=function(t,n){for(var e in n)o.o(n,e)&&!o.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=8318,function(){o.b=document.baseURI||self.location.href;var t={8318:0};o.O.j=function(n){return 0===t[n]};var n=function(n,e){var i,r,a=e[0],s=e[1],l=e[2],c=0;if(a.some((function(n){return 0!==t[n]}))){for(i in s)o.o(s,i)&&(o.m[i]=s[i]);if(l)var u=l(o)}for(n&&n(e);c<a.length;c++)r=a[c],o.o(t,r)&&t[r]&&t[r][0](),t[r]=0;return o.O(u)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(n.bind(null,0)),e.push=n.bind(null,e.push.bind(e))}(),o.nc=void 0;var r=o.O(void 0,[7874],(function(){return o(83282)}));r=o.O(r)}(); +//# sourceMappingURL=workflowengine-workflowengine.js.map?v=0cadc6477b7ea28576ee
\ No newline at end of file diff --git a/dist/workflowengine-workflowengine.js.map b/dist/workflowengine-workflowengine.js.map index d39e3c2eb4d..ac2c1e906e9 100644 --- a/dist/workflowengine-workflowengine.js.map +++ b/dist/workflowengine-workflowengine.js.map @@ -1 +1 @@ -{"version":3,"file":"workflowengine-workflowengine.js?v=250f0429c83900f00758","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/workflowengine/src/helpers/api.js","webpack:///nextcloud/apps/workflowengine/src/store.js","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue","webpack://nextcloud/./apps/workflowengine/src/components/Event.vue?ae78","webpack://nextcloud/./apps/workflowengine/src/components/Event.vue?5115","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=template&id=57bd6e67&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue","webpack://nextcloud/./apps/workflowengine/src/components/Check.vue?50c3","webpack://nextcloud/./apps/workflowengine/src/components/Check.vue?3fb8","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=template&id=70cc784d&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue","webpack://nextcloud/./apps/workflowengine/src/components/Operation.vue?10fd","webpack://nextcloud/./apps/workflowengine/src/components/Operation.vue?3526","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=template&id=96600802&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Rule.vue?6847","webpack://nextcloud/./apps/workflowengine/src/components/Rule.vue?e711","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=template&id=779dc71c&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Workflow.vue?eec9","webpack://nextcloud/./apps/workflowengine/src/components/Workflow.vue?17b8","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=template&id=2fb0024e&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/helpers/validators.js","webpack:///nextcloud/apps/workflowengine/src/mixins/valueMixin.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileMimeType.vue?6178","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileMimeType.vue?c385","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=template&id=8c011724&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/api.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue","webpack://nextcloud/./apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?3f10","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?vue&type=template&id=73cc22e8&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileSystemTag.vue?2d3e","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue?vue&type=template&id=31f5522d&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/file.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserAgent.vue?83e0","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserAgent.vue?81d6","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=template&id=475ac1e6&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestTime.vue?6629","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestTime.vue?a55a","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=template&id=149baca9&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestURL.vue?de33","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestURL.vue?eee5","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=template&id=dd8e16be&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserGroup.vue?b928","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserGroup.vue?f6d3","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=template&id=79fa10a5&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/request.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/index.js","webpack:///nextcloud/apps/workflowengine/src/workflowengine.js","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=style&index=0&id=2fb0024e&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst scopeValue = loadState('workflowengine', 'scope') === 0 ? 'global' : 'user'\n\nconst getApiUrl = (url) => {\n\treturn generateOcsUrl('apps/workflowengine/api/v1/workflows/{scopeValue}', { scopeValue }) + url + '?format=json'\n}\n\nexport {\n\tgetApiUrl,\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport axios from '@nextcloud/axios'\nimport { getApiUrl } from './helpers/api'\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { loadState } from '@nextcloud/initial-state'\n\nVue.use(Vuex)\n\nconst store = new Store({\n\tstate: {\n\t\trules: [],\n\t\tscope: loadState('workflowengine', 'scope'),\n\t\tappstoreEnabled: loadState('workflowengine', 'appstoreenabled'),\n\t\toperations: loadState('workflowengine', 'operators'),\n\n\t\tplugins: Vue.observable({\n\t\t\tchecks: {},\n\t\t\toperators: {},\n\t\t}),\n\n\t\tentities: loadState('workflowengine', 'entities'),\n\t\tevents: loadState('workflowengine', 'entities')\n\t\t\t.map((entity) => entity.events.map(event => {\n\t\t\t\treturn {\n\t\t\t\t\tid: `${entity.id}::${event.eventName}`,\n\t\t\t\t\tentity,\n\t\t\t\t\t...event,\n\t\t\t\t}\n\t\t\t})).flat(),\n\t\tchecks: loadState('workflowengine', 'checks'),\n\t},\n\tmutations: {\n\t\taddRule(state, rule) {\n\t\t\tstate.rules.push({ ...rule, valid: true })\n\t\t},\n\t\tupdateRule(state, rule) {\n\t\t\tconst index = state.rules.findIndex((item) => rule.id === item.id)\n\t\t\tconst newRule = Object.assign({}, rule)\n\t\t\tVue.set(state.rules, index, newRule)\n\t\t},\n\t\tremoveRule(state, rule) {\n\t\t\tconst index = state.rules.findIndex((item) => rule.id === item.id)\n\t\t\tstate.rules.splice(index, 1)\n\t\t},\n\t\taddPluginCheck(state, plugin) {\n\t\t\tVue.set(state.plugins.checks, plugin.class, plugin)\n\t\t},\n\t\taddPluginOperator(state, plugin) {\n\t\t\tplugin = Object.assign(\n\t\t\t\t{ color: 'var(--color-primary-element)' },\n\t\t\t\tplugin, state.operations[plugin.id] || {})\n\t\t\tif (typeof state.operations[plugin.id] !== 'undefined') {\n\t\t\t\tVue.set(state.operations, plugin.id, plugin)\n\t\t\t}\n\t\t},\n\t},\n\tactions: {\n\t\tasync fetchRules(context) {\n\t\t\tconst { data } = await axios.get(getApiUrl(''))\n\t\t\tObject.values(data.ocs.data).flat().forEach((rule) => {\n\t\t\t\tcontext.commit('addRule', rule)\n\t\t\t})\n\t\t},\n\t\tcreateNewRule(context, rule) {\n\t\t\tlet entity = null\n\t\t\tlet events = []\n\t\t\tif (rule.isComplex === false && rule.fixedEntity === '') {\n\t\t\t\tentity = context.state.entities.find((item) => rule.entities && rule.entities[0] === item.id)\n\t\t\t\tentity = entity || Object.values(context.state.entities)[0]\n\t\t\t\tevents = [entity.events[0].eventName]\n\t\t\t}\n\n\t\t\tcontext.commit('addRule', {\n\t\t\t\tid: -(new Date().getTime()),\n\t\t\t\tclass: rule.id,\n\t\t\t\tentity: entity ? entity.id : rule.fixedEntity,\n\t\t\t\tevents,\n\t\t\t\tname: '', // unused in the new ui, there for legacy reasons\n\t\t\t\tchecks: [\n\t\t\t\t\t{ class: null, operator: null, value: '' },\n\t\t\t\t],\n\t\t\t\toperation: rule.operation || '',\n\t\t\t})\n\t\t},\n\t\tupdateRule(context, rule) {\n\t\t\tcontext.commit('updateRule', {\n\t\t\t\t...rule,\n\t\t\t\tevents: typeof rule.events === 'string' ? JSON.parse(rule.events) : rule.events,\n\t\t\t})\n\t\t},\n\t\tremoveRule(context, rule) {\n\t\t\tcontext.commit('removeRule', rule)\n\t\t},\n\t\tasync pushUpdateRule(context, rule) {\n\t\t\tif (context.state.scope === 0) {\n\t\t\t\tawait confirmPassword()\n\t\t\t}\n\t\t\tlet result\n\t\t\tif (rule.id < 0) {\n\t\t\t\tresult = await axios.post(getApiUrl(''), rule)\n\t\t\t} else {\n\t\t\t\tresult = await axios.put(getApiUrl(`/${rule.id}`), rule)\n\t\t\t}\n\t\t\tVue.set(rule, 'id', result.data.ocs.data.id)\n\t\t\tcontext.commit('updateRule', rule)\n\t\t},\n\t\tasync deleteRule(context, rule) {\n\t\t\tawait confirmPassword()\n\t\t\tawait axios.delete(getApiUrl(`/${rule.id}`))\n\t\t\tcontext.commit('removeRule', rule)\n\t\t},\n\t\tsetValid(context, { rule, valid }) {\n\t\t\trule.valid = valid\n\t\t\tcontext.commit('updateRule', rule)\n\t\t},\n\t},\n\tgetters: {\n\t\tgetRules(state) {\n\t\t\treturn state.rules.filter((rule) => typeof state.operations[rule.class] !== 'undefined').sort((rule1, rule2) => {\n\t\t\t\treturn rule1.id - rule2.id || rule2.class - rule1.class\n\t\t\t})\n\t\t},\n\t\tgetOperationForRule(state) {\n\t\t\treturn (rule) => state.operations[rule.class]\n\t\t},\n\t\tgetEntityForOperation(state) {\n\t\t\treturn (operation) => state.entities.find((entity) => operation.fixedEntity === entity.id)\n\t\t},\n\t\tgetEventsForOperation(state) {\n\t\t\treturn (operation) => state.events\n\t\t},\n\n\t\t/**\n\t\t * Return all available checker plugins for a given entity class\n\t\t *\n\t\t * @param {object} state the store state\n\t\t * @return {Function} the available plugins\n\t\t */\n\t\tgetChecksForEntity(state) {\n\t\t\treturn (entity) => {\n\t\t\t\treturn Object.values(state.checks)\n\t\t\t\t\t.filter((check) => check.supportedEntities.indexOf(entity) > -1 || check.supportedEntities.length === 0)\n\t\t\t\t\t.map((check) => state.plugins.checks[check.id])\n\t\t\t\t\t.reduce((obj, item) => {\n\t\t\t\t\t\tobj[item.class] = item\n\t\t\t\t\t\treturn obj\n\t\t\t\t\t}, {})\n\t\t\t}\n\t\t},\n\t},\n})\n\nexport default store\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"event\">\n\t\t<div v-if=\"operation.isComplex && operation.fixedEntity !== ''\" class=\"isComplex\">\n\t\t\t<img class=\"option__icon\" :src=\"entity.icon\">\n\t\t\t<span class=\"option__title option__title_single\">{{ operation.triggerHint }}</span>\n\t\t</div>\n\t\t<Multiselect v-else\n\t\t\t:value=\"currentEvent\"\n\t\t\t:options=\"allEvents\"\n\t\t\ttrack-by=\"id\"\n\t\t\t:multiple=\"true\"\n\t\t\t:auto-limit=\"false\"\n\t\t\t:disabled=\"allEvents.length <= 1\"\n\t\t\t@input=\"updateEvent\">\n\t\t\t<template slot=\"selection\" slot-scope=\"{ values, isOpen }\">\n\t\t\t\t<div v-if=\"values.length && !isOpen\" class=\"eventlist\">\n\t\t\t\t\t<img class=\"option__icon\" :src=\"values[0].entity.icon\">\n\t\t\t\t\t<span v-for=\"(value, index) in values\" :key=\"value.id\" class=\"text option__title option__title_single\">{{ value.displayName }} <span v-if=\"index+1 < values.length\">, </span></span>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<img class=\"option__icon\" :src=\"props.option.entity.icon\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.displayName }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { showWarning } from '@nextcloud/dialogs'\n\nexport default {\n\tname: 'Event',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tentity() {\n\t\t\treturn this.$store.getters.getEntityForOperation(this.operation)\n\t\t},\n\t\toperation() {\n\t\t\treturn this.$store.getters.getOperationForRule(this.rule)\n\t\t},\n\t\tallEvents() {\n\t\t\treturn this.$store.getters.getEventsForOperation(this.operation)\n\t\t},\n\t\tcurrentEvent() {\n\t\t\treturn this.allEvents.filter(event => event.entity.id === this.rule.entity && this.rule.events.indexOf(event.eventName) !== -1)\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateEvent(events) {\n\t\t\tif (events.length === 0) {\n\t\t\t\tshowWarning(t('workflowengine', 'At least one event must be selected'))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst existingEntity = this.rule.entity\n\t\t\tconst newEntities = events.map(event => event.entity.id).filter((value, index, self) => self.indexOf(value) === index)\n\t\t\tlet newEntity = null\n\t\t\tif (newEntities.length > 1) {\n\t\t\t\tnewEntity = newEntities.filter(entity => entity !== existingEntity)[0]\n\t\t\t} else {\n\t\t\t\tnewEntity = newEntities[0]\n\t\t\t}\n\n\t\t\tthis.$set(this.rule, 'entity', newEntity)\n\t\t\tthis.$set(this.rule, 'events', events.filter(event => event.entity.id === newEntity).map(event => event.eventName))\n\t\t\tthis.$emit('update', this.rule)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.event {\n\t\tmargin-bottom: 5px;\n\t}\n\t.isComplex {\n\t\timg {\n\t\t\tvertical-align: text-top;\n\t\t}\n\t\tspan {\n\t\t\tpadding-top: 2px;\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n\t.multiselect {\n\t\twidth: 100%;\n\t\tmax-width: 550px;\n\t\tmargin-top: 4px;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\tdisplay: flex;\n\t}\n\t.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\n\t\tbackground-color: var(--color-main-background) !important;\n\t\tborder: 1px solid transparent;\n\t}\n\n\t.multiselect::v-deep .multiselect__tags {\n\t\tbackground-color: var(--color-main-background) !important;\n\t\theight: auto;\n\t\tmin-height: 34px;\n\t}\n\n\t.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\n\t\tbackground-image: var(--icon-triangle-s-dark);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: right center;\n\t}\n\n\tinput {\n\t\tborder: 1px solid transparent;\n\t}\n\n\t.option__title {\n\t\tmargin-left: 5px;\n\t\tcolor: var(--color-main-text);\n\t}\n\t.option__title_single {\n\t\tfont-weight: 900;\n\t}\n\n\t.option__icon {\n\t\twidth: 16px;\n\t\theight: 16px;\n\t}\n\n\t.eventlist img,\n\t.eventlist .text {\n\t\tvertical-align: middle;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Event.vue?vue&type=template&id=57bd6e67&scoped=true&\"\nimport script from \"./Event.vue?vue&type=script&lang=js&\"\nexport * from \"./Event.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57bd6e67\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"event\"},[(_vm.operation.isComplex && _vm.operation.fixedEntity !== '')?_c('div',{staticClass:\"isComplex\"},[_c('img',{staticClass:\"option__icon\",attrs:{\"src\":_vm.entity.icon}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(_vm.operation.triggerHint))])]):_c('Multiselect',{attrs:{\"value\":_vm.currentEvent,\"options\":_vm.allEvents,\"track-by\":\"id\",\"multiple\":true,\"auto-limit\":false,\"disabled\":_vm.allEvents.length <= 1},on:{\"input\":_vm.updateEvent},scopedSlots:_vm._u([{key:\"selection\",fn:function(ref){\nvar values = ref.values;\nvar isOpen = ref.isOpen;\nreturn [(values.length && !isOpen)?_c('div',{staticClass:\"eventlist\"},[_c('img',{staticClass:\"option__icon\",attrs:{\"src\":values[0].entity.icon}}),_vm._v(\" \"),_vm._l((values),function(value,index){return _c('span',{key:value.id,staticClass:\"text option__title option__title_single\"},[_vm._v(_vm._s(value.displayName)+\" \"),(index+1 < values.length)?_c('span',[_vm._v(\", \")]):_vm._e()])})],2):_vm._e()]}},{key:\"option\",fn:function(props){return [_c('img',{staticClass:\"option__icon\",attrs:{\"src\":props.option.entity.icon}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.displayName))])]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=script&lang=js&\"","<template>\n\t<div v-click-outside=\"hideDelete\" class=\"check\" @click=\"showDelete\">\n\t\t<Multiselect ref=\"checkSelector\"\n\t\t\tv-model=\"currentOption\"\n\t\t\t:options=\"options\"\n\t\t\tlabel=\"name\"\n\t\t\ttrack-by=\"class\"\n\t\t\t:allow-empty=\"false\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a filter')\"\n\t\t\t@input=\"updateCheck\" />\n\t\t<Multiselect v-model=\"currentOperator\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:options=\"operators\"\n\t\t\tclass=\"comparator\"\n\t\t\tlabel=\"name\"\n\t\t\ttrack-by=\"operator\"\n\t\t\t:allow-empty=\"false\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a comparator')\"\n\t\t\t@input=\"updateCheck\" />\n\t\t<component :is=\"currentOption.component\"\n\t\t\tv-if=\"currentOperator && currentComponent\"\n\t\t\tv-model=\"check.value\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:check=\"check\"\n\t\t\tclass=\"option\"\n\t\t\t@input=\"updateCheck\"\n\t\t\t@valid=\"(valid=true) && validate()\"\n\t\t\t@invalid=\"!(valid=false) && validate()\" />\n\t\t<input v-else\n\t\t\tv-model=\"check.value\"\n\t\t\ttype=\"text\"\n\t\t\t:class=\"{ invalid: !valid }\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:placeholder=\"valuePlaceholder\"\n\t\t\tclass=\"option\"\n\t\t\t@input=\"updateCheck\">\n\t\t<Actions v-if=\"deleteVisible || !currentOption\">\n\t\t\t<ActionButton icon=\"icon-close\" @click=\"$emit('remove')\" />\n\t\t</Actions>\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ClickOutside from 'vue-click-outside'\n\nexport default {\n\tname: 'Check',\n\tcomponents: {\n\t\tActionButton,\n\t\tActions,\n\t\tMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tprops: {\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdeleteVisible: false,\n\t\t\tcurrentOption: null,\n\t\t\tcurrentOperator: null,\n\t\t\toptions: [],\n\t\t\tvalid: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tchecks() {\n\t\t\treturn this.$store.getters.getChecksForEntity(this.rule.entity)\n\t\t},\n\t\toperators() {\n\t\t\tif (!this.currentOption) { return [] }\n\t\t\tconst operators = this.checks[this.currentOption.class].operators\n\t\t\tif (typeof operators === 'function') {\n\t\t\t\treturn operators(this.check)\n\t\t\t}\n\t\t\treturn operators\n\t\t},\n\t\tcurrentComponent() {\n\t\t\tif (!this.currentOption) { return [] }\n\t\t\treturn this.checks[this.currentOption.class].component\n\t\t},\n\t\tvaluePlaceholder() {\n\t\t\tif (this.currentOption && this.currentOption.placeholder) {\n\t\t\t\treturn this.currentOption.placeholder(this.check)\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\t},\n\twatch: {\n\t\t'check.operator'() {\n\t\t\tthis.validate()\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.options = Object.values(this.checks)\n\t\tthis.currentOption = this.checks[this.check.class]\n\t\tthis.currentOperator = this.operators.find((operator) => operator.operator === this.check.operator)\n\n\t\tif (this.check.class === null) {\n\t\t\tthis.$nextTick(() => this.$refs.checkSelector.$el.focus())\n\t\t}\n\t\tthis.validate()\n\t},\n\tmethods: {\n\t\tshowDelete() {\n\t\t\tthis.deleteVisible = true\n\t\t},\n\t\thideDelete() {\n\t\t\tthis.deleteVisible = false\n\t\t},\n\t\tvalidate() {\n\t\t\tthis.valid = true\n\t\t\tif (this.currentOption && this.currentOption.validate) {\n\t\t\t\tthis.valid = !!this.currentOption.validate(this.check)\n\t\t\t}\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.invalid = !this.valid\n\t\t\tthis.$emit('validate', this.valid)\n\t\t},\n\t\tupdateCheck() {\n\t\t\tconst matchingOperator = this.operators.findIndex((operator) => this.check.operator === operator.operator)\n\t\t\tif (this.check.class !== this.currentOption.class || matchingOperator === -1) {\n\t\t\t\tthis.currentOperator = this.operators[0]\n\t\t\t}\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.class = this.currentOption.class\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.operator = this.currentOperator.operator\n\n\t\t\tthis.validate()\n\n\t\t\tthis.$emit('update', this.check)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.check {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\twidth: 100%;\n\t\tpadding-right: 20px;\n\t\t& > *:not(.close) {\n\t\t\twidth: 180px;\n\t\t}\n\t\t& > .comparator {\n\t\t\tmin-width: 130px;\n\t\t\twidth: 130px;\n\t\t}\n\t\t& > .option {\n\t\t\tmin-width: 230px;\n\t\t\twidth: 230px;\n\t\t}\n\t\t& > .multiselect,\n\t\t& > input[type=text] {\n\t\t\tmargin-right: 5px;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\n\t\t.multiselect::v-deep .multiselect__content-wrapper li>span,\n\t\t.multiselect::v-deep .multiselect__single {\n\t\t\tdisplay: block;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t}\n\tinput[type=text] {\n\t\tmargin: 0;\n\t}\n\t::placeholder {\n\t\tfont-size: 10px;\n\t}\n\tbutton.action-item.action-item--single.icon-close {\n\t\theight: 44px;\n\t\twidth: 44px;\n\t\tmargin-top: -5px;\n\t\tmargin-bottom: -5px;\n\t}\n\t.invalid {\n\t\tborder: 1px solid var(--color-error) !important;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Check.vue?vue&type=template&id=70cc784d&scoped=true&\"\nimport script from \"./Check.vue?vue&type=script&lang=js&\"\nexport * from \"./Check.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70cc784d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideDelete),expression:\"hideDelete\"}],staticClass:\"check\",on:{\"click\":_vm.showDelete}},[_c('Multiselect',{ref:\"checkSelector\",attrs:{\"options\":_vm.options,\"label\":\"name\",\"track-by\":\"class\",\"allow-empty\":false,\"placeholder\":_vm.t('workflowengine', 'Select a filter')},on:{\"input\":_vm.updateCheck},model:{value:(_vm.currentOption),callback:function ($$v) {_vm.currentOption=$$v},expression:\"currentOption\"}}),_vm._v(\" \"),_c('Multiselect',{staticClass:\"comparator\",attrs:{\"disabled\":!_vm.currentOption,\"options\":_vm.operators,\"label\":\"name\",\"track-by\":\"operator\",\"allow-empty\":false,\"placeholder\":_vm.t('workflowengine', 'Select a comparator')},on:{\"input\":_vm.updateCheck},model:{value:(_vm.currentOperator),callback:function ($$v) {_vm.currentOperator=$$v},expression:\"currentOperator\"}}),_vm._v(\" \"),(_vm.currentOperator && _vm.currentComponent)?_c(_vm.currentOption.component,{tag:\"component\",staticClass:\"option\",attrs:{\"disabled\":!_vm.currentOption,\"check\":_vm.check},on:{\"input\":_vm.updateCheck,\"valid\":function($event){(_vm.valid=true) && _vm.validate()},\"invalid\":function($event){!(_vm.valid=false) && _vm.validate()}},model:{value:(_vm.check.value),callback:function ($$v) {_vm.$set(_vm.check, \"value\", $$v)},expression:\"check.value\"}}):_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.check.value),expression:\"check.value\"}],staticClass:\"option\",class:{ invalid: !_vm.valid },attrs:{\"type\":\"text\",\"disabled\":!_vm.currentOption,\"placeholder\":_vm.valuePlaceholder},domProps:{\"value\":(_vm.check.value)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.check, \"value\", $event.target.value)},_vm.updateCheck]}}),_vm._v(\" \"),(_vm.deleteVisible || !_vm.currentOption)?_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":function($event){return _vm.$emit('remove')}}})],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"actions__item\" :class=\"{'colored': colored}\" :style=\"{ backgroundColor: colored ? operation.color : 'transparent' }\">\n\t\t<div class=\"icon\" :class=\"operation.iconClass\" :style=\"{ backgroundImage: operation.iconClass ? '' : `url(${operation.icon})` }\" />\n\t\t<div class=\"actions__item__description\">\n\t\t\t<h3>{{ operation.name }}</h3>\n\t\t\t<small>{{ operation.description }}</small>\n\t\t\t<Button v-if=\"colored\">\n\t\t\t\t{{ t('workflowengine', 'Add new flow') }}\n\t\t\t</Button>\n\t\t</div>\n\t\t<div class=\"actions__item_options\">\n\t\t\t<slot />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport Button from '@nextcloud/vue/dist/Components/Button'\n\nexport default {\n\tname: 'Operation',\n\tcomponents: {\n\t\tButton,\n\t},\n\tprops: {\n\t\toperation: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcolored: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"./../styles/operation\";\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Operation.vue?vue&type=template&id=96600802&scoped=true&\"\nimport script from \"./Operation.vue?vue&type=script&lang=js&\"\nexport * from \"./Operation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"96600802\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"actions__item\",class:{'colored': _vm.colored},style:({ backgroundColor: _vm.colored ? _vm.operation.color : 'transparent' })},[_c('div',{staticClass:\"icon\",class:_vm.operation.iconClass,style:({ backgroundImage: _vm.operation.iconClass ? '' : (\"url(\" + (_vm.operation.icon) + \")\") })}),_vm._v(\" \"),_c('div',{staticClass:\"actions__item__description\"},[_c('h3',[_vm._v(_vm._s(_vm.operation.name))]),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.operation.description))]),_vm._v(\" \"),(_vm.colored)?_c('Button',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Add new flow'))+\"\\n\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"actions__item_options\"},[_vm._t(\"default\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div v-if=\"operation\" class=\"section rule\" :style=\"{ borderLeftColor: operation.color || '' }\">\n\t\t<div class=\"trigger\">\n\t\t\t<p>\n\t\t\t\t<span>{{ t('workflowengine', 'When') }}</span>\n\t\t\t\t<Event :rule=\"rule\" @update=\"updateRule\" />\n\t\t\t</p>\n\t\t\t<p v-for=\"(check, index) in rule.checks\" :key=\"index\">\n\t\t\t\t<span>{{ t('workflowengine', 'and') }}</span>\n\t\t\t\t<Check :check=\"check\"\n\t\t\t\t\t:rule=\"rule\"\n\t\t\t\t\t@update=\"updateRule\"\n\t\t\t\t\t@validate=\"validate\"\n\t\t\t\t\t@remove=\"removeCheck(check)\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<span />\n\t\t\t\t<input v-if=\"lastCheckComplete\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"check--add\"\n\t\t\t\t\tvalue=\"Add a new filter\"\n\t\t\t\t\t@click=\"onAddFilter\">\n\t\t\t</p>\n\t\t</div>\n\t\t<div class=\"flow-icon icon-confirm\" />\n\t\t<div class=\"action\">\n\t\t\t<Operation :operation=\"operation\" :colored=\"false\">\n\t\t\t\t<component :is=\"operation.options\"\n\t\t\t\t\tv-if=\"operation.options\"\n\t\t\t\t\tv-model=\"rule.operation\"\n\t\t\t\t\t@input=\"updateOperation\" />\n\t\t\t</Operation>\n\t\t\t<div class=\"buttons\">\n\t\t\t\t<Button v-if=\"rule.id < -1 || dirty\" @click=\"cancelRule\">\n\t\t\t\t\t{{ t('workflowengine', 'Cancel') }}\n\t\t\t\t</Button>\n\t\t\t\t<Button v-else-if=\"!dirty\" @click=\"deleteRule\">\n\t\t\t\t\t{{ t('workflowengine', 'Delete') }}\n\t\t\t\t</Button>\n\t\t\t\t<Button :type=\"ruleStatus.type\"\n\t\t\t\t\t@click=\"saveRule\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<component :is=\"ruleStatus.icon\" :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ ruleStatus.title }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t<p v-if=\"error\" class=\"error-message\">\n\t\t\t\t{{ error }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport Button from '@nextcloud/vue/dist/Components/Button'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport CheckMark from 'vue-material-design-icons/Check.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\n\nimport Event from './Event'\nimport Check from './Check'\nimport Operation from './Operation'\n\nexport default {\n\tname: 'Rule',\n\tcomponents: {\n\t\tOperation, Check, Event, Actions, ActionButton, Button, ArrowRight, CheckMark, Close,\n\t},\n\tdirectives: {\n\t\tTooltip,\n\t},\n\tprops: {\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tediting: false,\n\t\t\tchecks: [],\n\t\t\terror: null,\n\t\t\tdirty: this.rule.id < 0,\n\t\t\toriginalRule: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\toperation() {\n\t\t\treturn this.$store.getters.getOperationForRule(this.rule)\n\t\t},\n\t\truleStatus() {\n\t\t\tif (this.error || !this.rule.valid || this.rule.checks.length === 0 || this.rule.checks.some((check) => check.invalid === true)) {\n\t\t\t\treturn {\n\t\t\t\t\ttitle: t('workflowengine', 'The configuration is invalid'),\n\t\t\t\t\ticon: 'Close',\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttooltip: { placement: 'bottom', show: true, content: this.error },\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dirty) {\n\t\t\t\treturn { title: t('workflowengine', 'Active'), icon: 'CheckMark', type: 'success' }\n\t\t\t}\n\t\t\treturn { title: t('workflowengine', 'Save'), icon: 'ArrowRight', type: 'primary' }\n\n\t\t},\n\t\tlastCheckComplete() {\n\t\t\tconst lastCheck = this.rule.checks[this.rule.checks.length - 1]\n\t\t\treturn typeof lastCheck === 'undefined' || lastCheck.class !== null\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t},\n\tmethods: {\n\t\tasync updateOperation(operation) {\n\t\t\tthis.$set(this.rule, 'operation', operation)\n\t\t\tawait this.updateRule()\n\t\t},\n\t\tvalidate(state) {\n\t\t\tthis.error = null\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\t\tupdateRule() {\n\t\t\tif (!this.dirty) {\n\t\t\t\tthis.dirty = true\n\t\t\t}\n\n\t\t\tthis.error = null\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\t\tasync saveRule() {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('pushUpdateRule', this.rule)\n\t\t\t\tthis.dirty = false\n\t\t\t\tthis.error = null\n\t\t\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Failed to save operation')\n\t\t\t\tthis.error = e.response.data.ocs.meta.message\n\t\t\t}\n\t\t},\n\t\tasync deleteRule() {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('deleteRule', this.rule)\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Failed to delete operation')\n\t\t\t\tthis.error = e.response.data.ocs.meta.message\n\t\t\t}\n\t\t},\n\t\tcancelRule() {\n\t\t\tif (this.rule.id < 0) {\n\t\t\t\tthis.$store.dispatch('removeRule', this.rule)\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('updateRule', this.originalRule)\n\t\t\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t\t\t\tthis.dirty = false\n\t\t\t}\n\t\t},\n\n\t\tasync removeCheck(check) {\n\t\t\tconst index = this.rule.checks.findIndex(item => item === check)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.$delete(this.rule.checks, index)\n\t\t\t}\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\n\t\tonAddFilter() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.rule.checks.push({ class: null, operator: null, value: '' })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n\t.buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: end;\n\n\t\tbutton {\n\t\t\tmargin-left: 5px;\n\t\t}\n\t\tbutton:last-child{\n\t\t\tmargin-right: 10px;\n\t\t}\n\t}\n\n\t.error-message {\n\t\tfloat: right;\n\t\tmargin-right: 10px;\n\t}\n\n\t.flow-icon {\n\t\twidth: 44px;\n\t}\n\n\t.rule {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tborder-left: 5px solid var(--color-primary-element);\n\n\t\t.trigger, .action {\n\t\t\tflex-grow: 1;\n\t\t\tmin-height: 100px;\n\t\t\tmax-width: 700px;\n\t\t}\n\t\t.action {\n\t\t\tmax-width: 400px;\n\t\t\tposition: relative;\n\t\t}\n\t\t.icon-confirm {\n\t\t\tbackground-position: right 27px;\n\t\t\tpadding-right: 20px;\n\t\t\tmargin-right: 20px;\n\t\t}\n\t}\n\t.trigger p, .action p {\n\t\tmin-height: 34px;\n\t\tdisplay: flex;\n\n\t\t& > span {\n\t\t\tmin-width: 50px;\n\t\t\ttext-align: right;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tpadding-right: 10px;\n\t\t\tpadding-top: 6px;\n\t\t}\n\t\t.multiselect {\n\t\t\tflex-grow: 1;\n\t\t\tmax-width: 300px;\n\t\t}\n\t}\n\t.trigger p:first-child span {\n\t\t\tpadding-top: 3px;\n\t}\n\n\t.check--add {\n\t\tbackground-position: 7px center;\n\t\tbackground-color: transparent;\n\t\tpadding-left: 6px;\n\t\tmargin: 0;\n\t\twidth: 180px;\n\t\tborder-radius: var(--border-radius);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tfont-weight: normal;\n\t\ttext-align: left;\n\t\tfont-size: 1em;\n\t}\n\n\t@media (max-width:1400px) {\n\t\t.rule {\n\t\t\t&, .trigger, .action {\n\t\t\t\twidth: 100%;\n\t\t\t\tmax-width: 100%;\n\t\t\t}\n\t\t\t.flow-icon {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Rule.vue?vue&type=template&id=779dc71c&scoped=true&\"\nimport script from \"./Rule.vue?vue&type=script&lang=js&\"\nexport * from \"./Rule.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"779dc71c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.operation)?_c('div',{staticClass:\"section rule\",style:({ borderLeftColor: _vm.operation.color || '' })},[_c('div',{staticClass:\"trigger\"},[_c('p',[_c('span',[_vm._v(_vm._s(_vm.t('workflowengine', 'When')))]),_vm._v(\" \"),_c('Event',{attrs:{\"rule\":_vm.rule},on:{\"update\":_vm.updateRule}})],1),_vm._v(\" \"),_vm._l((_vm.rule.checks),function(check,index){return _c('p',{key:index},[_c('span',[_vm._v(_vm._s(_vm.t('workflowengine', 'and')))]),_vm._v(\" \"),_c('Check',{attrs:{\"check\":check,\"rule\":_vm.rule},on:{\"update\":_vm.updateRule,\"validate\":_vm.validate,\"remove\":function($event){return _vm.removeCheck(check)}}})],1)}),_vm._v(\" \"),_c('p',[_c('span'),_vm._v(\" \"),(_vm.lastCheckComplete)?_c('input',{staticClass:\"check--add\",attrs:{\"type\":\"button\",\"value\":\"Add a new filter\"},on:{\"click\":_vm.onAddFilter}}):_vm._e()])],2),_vm._v(\" \"),_c('div',{staticClass:\"flow-icon icon-confirm\"}),_vm._v(\" \"),_c('div',{staticClass:\"action\"},[_c('Operation',{attrs:{\"operation\":_vm.operation,\"colored\":false}},[(_vm.operation.options)?_c(_vm.operation.options,{tag:\"component\",on:{\"input\":_vm.updateOperation},model:{value:(_vm.rule.operation),callback:function ($$v) {_vm.$set(_vm.rule, \"operation\", $$v)},expression:\"rule.operation\"}}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"buttons\"},[(_vm.rule.id < -1 || _vm.dirty)?_c('Button',{on:{\"click\":_vm.cancelRule}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Cancel'))+\"\\n\\t\\t\\t\")]):(!_vm.dirty)?_c('Button',{on:{\"click\":_vm.deleteRule}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Delete'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('Button',{attrs:{\"type\":_vm.ruleStatus.type},on:{\"click\":_vm.saveRule},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_vm.ruleStatus.icon,{tag:\"component\",attrs:{\"size\":20}})]},proxy:true}],null,false,2383918876)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.ruleStatus.title)+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),(_vm.error)?_c('p',{staticClass:\"error-message\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.error)+\"\\n\\t\\t\")]):_vm._e()],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div id=\"workflowengine\">\n\t\t<SettingsSection :title=\"t('workflowengine', 'Available flows')\"\n\t\t\t:doc-url=\"workflowDocUrl\">\n\n\t\t\t<p v-if=\"scope === 0\" class=\"settings-hint\">\n\t\t\t\t<a href=\"https://nextcloud.com/developer/\">{{ t('workflowengine', 'For details on how to write your own flow, check out the development documentation.') }}</a>\n\t\t\t</p>\n\n\t\t\t<transition-group name=\"slide\" tag=\"div\" class=\"actions\">\n\t\t\t\t<Operation v-for=\"operation in getMainOperations\"\n\t\t\t\t\t:key=\"operation.id\"\n\t\t\t\t\t:operation=\"operation\"\n\t\t\t\t\t@click.native=\"createNewRule(operation)\" />\n\n\t\t\t\t<a v-if=\"showAppStoreHint\"\n\t\t\t\t\t:key=\"'add'\"\n\t\t\t\t\t:href=\"appstoreUrl\"\n\t\t\t\t\tclass=\"actions__item colored more\">\n\t\t\t\t\t<div class=\"icon icon-add\" />\n\t\t\t\t\t<div class=\"actions__item__description\">\n\t\t\t\t\t\t<h3>{{ t('workflowengine', 'More flows') }}</h3>\n\t\t\t\t\t\t<small>{{ t('workflowengine', 'Browse the App Store') }}</small>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t</transition-group>\n\n\t\t\t<div v-if=\"hasMoreOperations\" class=\"actions__more\">\n\t\t\t\t<Button @click=\"showMoreOperations = !showMoreOperations\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<MenuUp v-if=\"showMoreOperations\" :size=\"20\" />\n\t\t\t\t\t\t<MenuDown v-else :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ showMoreOperations ? t('workflowengine', 'Show less') : t('workflowengine', 'Show more') }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\n\t\t\t<h2 v-if=\"scope === 0\" class=\"configured-flows\">\n\t\t\t\t{{ t('workflowengine', 'Configured flows') }}\n\t\t\t</h2>\n\t\t\t<h2 v-else class=\"configured-flows\">\n\t\t\t\t{{ t('workflowengine', 'Your flows') }}\n\t\t\t</h2>\n\t\t</SettingsSection>\n\n\t\t<transition-group v-if=\"rules.length > 0\" name=\"slide\">\n\t\t\t<Rule v-for=\"rule in rules\" :key=\"rule.id\" :rule=\"rule\" />\n\t\t</transition-group>\n\t</div>\n</template>\n\n<script>\nimport Rule from './Rule'\nimport Operation from './Operation'\nimport SettingsSection from '@nextcloud/vue/dist/Components/SettingsSection'\nimport Button from '@nextcloud/vue/dist/Components/Button'\nimport { mapGetters, mapState } from 'vuex'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport MenuUp from 'vue-material-design-icons/MenuUp'\nimport MenuDown from 'vue-material-design-icons/MenuDown'\n\nconst ACTION_LIMIT = 3\n\nexport default {\n\tname: 'Workflow',\n\tcomponents: {\n\t\tButton,\n\t\tMenuDown,\n\t\tMenuUp,\n\t\tOperation,\n\t\tRule,\n\t\tSettingsSection,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMoreOperations: false,\n\t\t\tappstoreUrl: generateUrl('settings/apps/workflow'),\n\t\t\tworkflowDocUrl: loadState('workflowengine', 'doc-url'),\n\t\t}\n\t},\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\trules: 'getRules',\n\t\t}),\n\t\t...mapState({\n\t\t\tappstoreEnabled: 'appstoreEnabled',\n\t\t\tscope: 'scope',\n\t\t\toperations: 'operations',\n\t\t}),\n\t\thasMoreOperations() {\n\t\t\treturn Object.keys(this.operations).length > ACTION_LIMIT\n\t\t},\n\t\tgetMainOperations() {\n\t\t\tif (this.showMoreOperations) {\n\t\t\t\treturn Object.values(this.operations)\n\t\t\t}\n\t\t\treturn Object.values(this.operations).slice(0, ACTION_LIMIT)\n\t\t},\n\t\tshowAppStoreHint() {\n\t\t\treturn this.scope === 0 && this.appstoreEnabled && OC.isUserAdmin()\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$store.dispatch('fetchRules')\n\t},\n\tmethods: {\n\t\tcreateNewRule(operation) {\n\t\t\tthis.$store.dispatch('createNewRule', operation)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t#workflowengine {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t}\n\t.section {\n\t\tmax-width: 100vw;\n\n\t\th2.configured-flows {\n\t\t\tmargin-top: 50px;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\t.actions {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tmax-width: 1200px;\n\t\t.actions__item {\n\t\t\tmax-width: 280px;\n\t\t\tflex-basis: 250px;\n\t\t}\n\t}\n\t.actions__more {\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.slide-enter-active {\n\t\t-moz-transition-duration: 0.3s;\n\t\t-webkit-transition-duration: 0.3s;\n\t\t-o-transition-duration: 0.3s;\n\t\ttransition-duration: 0.3s;\n\t\t-moz-transition-timing-function: ease-in;\n\t\t-webkit-transition-timing-function: ease-in;\n\t\t-o-transition-timing-function: ease-in;\n\t\ttransition-timing-function: ease-in;\n\t}\n\n\t.slide-leave-active {\n\t\t-moz-transition-duration: 0.3s;\n\t\t-webkit-transition-duration: 0.3s;\n\t\t-o-transition-duration: 0.3s;\n\t\ttransition-duration: 0.3s;\n\t\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t}\n\n\t.slide-enter-to, .slide-leave {\n\t\tmax-height: 500px;\n\t\toverflow: hidden;\n\t}\n\n\t.slide-enter, .slide-leave-to {\n\t\toverflow: hidden;\n\t\tmax-height: 0;\n\t\tpadding-top: 0;\n\t\tpadding-bottom: 0;\n\t}\n\n\t@import \"./../styles/operation\";\n\n\t.actions__item.more {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=style&index=0&id=2fb0024e&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=style&index=0&id=2fb0024e&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Workflow.vue?vue&type=template&id=2fb0024e&scoped=true&\"\nimport script from \"./Workflow.vue?vue&type=script&lang=js&\"\nexport * from \"./Workflow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Workflow.vue?vue&type=style&index=0&id=2fb0024e&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2fb0024e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"workflowengine\"}},[_c('SettingsSection',{attrs:{\"title\":_vm.t('workflowengine', 'Available flows'),\"doc-url\":_vm.workflowDocUrl}},[(_vm.scope === 0)?_c('p',{staticClass:\"settings-hint\"},[_c('a',{attrs:{\"href\":\"https://nextcloud.com/developer/\"}},[_vm._v(_vm._s(_vm.t('workflowengine', 'For details on how to write your own flow, check out the development documentation.')))])]):_vm._e(),_vm._v(\" \"),_c('transition-group',{staticClass:\"actions\",attrs:{\"name\":\"slide\",\"tag\":\"div\"}},[_vm._l((_vm.getMainOperations),function(operation){return _c('Operation',{key:operation.id,attrs:{\"operation\":operation},nativeOn:{\"click\":function($event){return _vm.createNewRule(operation)}}})}),_vm._v(\" \"),(_vm.showAppStoreHint)?_c('a',{key:'add',staticClass:\"actions__item colored more\",attrs:{\"href\":_vm.appstoreUrl}},[_c('div',{staticClass:\"icon icon-add\"}),_vm._v(\" \"),_c('div',{staticClass:\"actions__item__description\"},[_c('h3',[_vm._v(_vm._s(_vm.t('workflowengine', 'More flows')))]),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.t('workflowengine', 'Browse the App Store')))])])]):_vm._e()],2),_vm._v(\" \"),(_vm.hasMoreOperations)?_c('div',{staticClass:\"actions__more\"},[_c('Button',{on:{\"click\":function($event){_vm.showMoreOperations = !_vm.showMoreOperations}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.showMoreOperations)?_c('MenuUp',{attrs:{\"size\":20}}):_c('MenuDown',{attrs:{\"size\":20}})]},proxy:true}],null,false,3801522717)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.showMoreOperations ? _vm.t('workflowengine', 'Show less') : _vm.t('workflowengine', 'Show more'))+\"\\n\\t\\t\\t\")])],1):_vm._e(),_vm._v(\" \"),(_vm.scope === 0)?_c('h2',{staticClass:\"configured-flows\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Configured flows'))+\"\\n\\t\\t\")]):_c('h2',{staticClass:\"configured-flows\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Your flows'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.rules.length > 0)?_c('transition-group',{attrs:{\"name\":\"slide\"}},_vm._l((_vm.rules),function(rule){return _c('Rule',{key:rule.id,attrs:{\"rule\":rule}})}),1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\nconst regexIPv4 = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\/(3[0-2]|[1-2][0-9]|[1-9])$/\nconst regexIPv6 = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/\n\nconst validateRegex = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexRegex.exec(string) !== null\n}\n\nconst validateIPv4 = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexIPv4.exec(string) !== null\n}\n\nconst validateIPv6 = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexIPv6.exec(string) !== null\n}\n\nconst stringValidator = (check) => {\n\tif (check.operator === 'matches' || check.operator === '!matches') {\n\t\treturn validateRegex(check.value)\n\t}\n\treturn true\n}\n\nexport { validateRegex, stringValidator, validateIPv4, validateIPv6 }\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst valueMixin = {\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t}\n\t},\n\twatch: {\n\t\tvalue: {\n\t\t\timmediate: true,\n\t\t\thandler(value) {\n\t\t\t\tthis.updateInternalValue(value)\n\t\t\t},\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateInternalValue(value) {\n\t\t\tthis.newValue = value\n\t\t},\n\t},\n}\n\nexport default valueMixin\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a file type')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"t('workflowengine', 'e.g. httpd/unix-directory')\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from './../../mixins/valueMixin'\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'FileMimeType',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-folder',\n\t\t\t\t\tlabel: t('workflowengine', 'Folder'),\n\t\t\t\t\tpattern: 'httpd/unix-directory',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-picture',\n\t\t\t\t\tlabel: t('workflowengine', 'Images'),\n\t\t\t\t\tpattern: '/image\\\\/.*/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\n\t\t\t\t\tlabel: t('workflowengine', 'Office documents'),\n\t\t\t\t\tpattern: '/(vnd\\\\.(ms-|openxmlformats-|oasis\\\\.opendocument).*)$/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\n\t\t\t\t\tlabel: t('workflowengine', 'PDF documents'),\n\t\t\t\t\tpattern: 'application/pdf',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tisPredefined() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\t.multiselect >>> .multiselect__content-wrapper li>span,\n\t.multiselect >>> .multiselect__single {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileMimeType.vue?vue&type=template&id=8c011724&scoped=true&\"\nimport script from \"./FileMimeType.vue?vue&type=script&lang=js&\"\nexport * from \"./FileMimeType.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileMimeType.vue?vue&type=style&index=0&id=8c011724&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8c011724\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a file type'),\"label\":\"label\",\"track-by\":\"pattern\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [(props.option.icon)?_c('span',{staticClass:\"option__icon\",class:props.option.icon}):_c('img',{attrs:{\"src\":props.option.iconUrl}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(props.option.label))])]}},{key:\"option\",fn:function(props){return [(props.option.icon)?_c('span',{staticClass:\"option__icon\",class:props.option.icon}):_c('img',{attrs:{\"src\":props.option.iconUrl}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.label))])]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\",\"placeholder\":_vm.t('workflowengine', 'e.g. httpd/unix-directory')},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst xmlToJson = (xml) => {\n\tlet obj = {}\n\n\tif (xml.nodeType === 1) {\n\t\tif (xml.attributes.length > 0) {\n\t\t\tobj['@attributes'] = {}\n\t\t\tfor (let j = 0; j < xml.attributes.length; j++) {\n\t\t\t\tconst attribute = xml.attributes.item(j)\n\t\t\t\tobj['@attributes'][attribute.nodeName] = attribute.nodeValue\n\t\t\t}\n\t\t}\n\t} else if (xml.nodeType === 3) {\n\t\tobj = xml.nodeValue\n\t}\n\n\tif (xml.hasChildNodes()) {\n\t\tfor (let i = 0; i < xml.childNodes.length; i++) {\n\t\t\tconst item = xml.childNodes.item(i)\n\t\t\tconst nodeName = item.nodeName\n\t\t\tif (typeof (obj[nodeName]) === 'undefined') {\n\t\t\t\tobj[nodeName] = xmlToJson(item)\n\t\t\t} else {\n\t\t\t\tif (typeof obj[nodeName].push === 'undefined') {\n\t\t\t\t\tconst old = obj[nodeName]\n\t\t\t\t\tobj[nodeName] = []\n\t\t\t\t\tobj[nodeName].push(old)\n\t\t\t\t}\n\t\t\t\tobj[nodeName].push(xmlToJson(item))\n\t\t\t}\n\t\t}\n\t}\n\treturn obj\n}\n\nconst parseXml = (xml) => {\n\tlet dom = null\n\ttry {\n\t\tdom = (new DOMParser()).parseFromString(xml, 'text/xml')\n\t} catch (e) {\n\t\tconsole.error('Failed to parse xml document', e)\n\t}\n\treturn dom\n}\n\nconst xmlToTagList = (xml) => {\n\tconst json = xmlToJson(parseXml(xml))\n\tconst list = json['d:multistatus']['d:response']\n\tconst result = []\n\tfor (const index in list) {\n\t\tconst tag = list[index]['d:propstat']\n\n\t\tif (tag['d:status']['#text'] !== 'HTTP/1.1 200 OK') {\n\t\t\tcontinue\n\t\t}\n\t\tresult.push({\n\t\t\tid: tag['d:prop']['oc:id']['#text'],\n\t\t\tdisplayName: tag['d:prop']['oc:display-name']['#text'],\n\t\t\tcanAssign: tag['d:prop']['oc:can-assign']['#text'] === 'true',\n\t\t\tuserAssignable: tag['d:prop']['oc:user-assignable']['#text'] === 'true',\n\t\t\tuserVisible: tag['d:prop']['oc:user-visible']['#text'] === 'true',\n\t\t})\n\t}\n\treturn result\n}\n\nconst searchTags = function() {\n\treturn axios({\n\t\tmethod: 'PROPFIND',\n\t\turl: generateRemoteUrl('dav') + '/systemtags/',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t\t\t<d:propfind xmlns:d=\"DAV:\" xmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t\t\t <d:prop>\n\t\t\t\t\t\t<oc:id />\n\t\t\t\t\t\t<oc:display-name />\n\t\t\t\t\t\t<oc:user-visible />\n\t\t\t\t\t\t<oc:user-assignable />\n\t\t\t\t\t\t<oc:can-assign />\n\t\t\t\t\t </d:prop>\n\t\t\t\t\t</d:propfind>`,\n\t}).then((response) => {\n\t\treturn xmlToTagList(response.data)\n\t})\n}\n\nexport {\n\tsearchTags,\n}\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Multiselect v-model=\"inputValObjects\"\n\t\t:options=\"tags\"\n\t\t:options-limit=\"5\"\n\t\t:placeholder=\"label\"\n\t\ttrack-by=\"id\"\n\t\t:custom-label=\"tagLabel\"\n\t\tclass=\"multiselect-vue\"\n\t\t:multiple=\"multiple\"\n\t\t:close-on-select=\"false\"\n\t\t:tag-width=\"60\"\n\t\t:disabled=\"disabled\"\n\t\t@input=\"update\">\n\t\t<span slot=\"noResult\">{{ t('core', 'No results') }}</span>\n\t\t<template #option=\"scope\">\n\t\t\t{{ tagLabel(scope.option) }}\n\t\t</template>\n\t</multiselect>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { searchTags } from './api'\n\nlet uuid = 0\nexport default {\n\tname: 'MultiselectTag',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: [String, Array],\n\t\t\tdefault: null,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tmultiple: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tinputValObjects: [],\n\t\t\ttags: [],\n\t\t}\n\t},\n\tcomputed: {\n\t\tid() {\n\t\t\treturn 'settings-input-text-' + this.uuid\n\t\t},\n\t},\n\twatch: {\n\t\tvalue(newVal) {\n\t\t\tthis.inputValObjects = this.getValueObject()\n\t\t},\n\t},\n\tbeforeCreate() {\n\t\tthis.uuid = uuid.toString()\n\t\tuuid += 1\n\t\tsearchTags().then((result) => {\n\t\t\tthis.tags = result\n\t\t\tthis.inputValObjects = this.getValueObject()\n\t\t}).catch(console.error.bind(this))\n\t},\n\tmethods: {\n\t\tgetValueObject() {\n\t\t\tif (this.tags.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (this.multiple) {\n\t\t\t\treturn this.value.filter((tag) => tag !== '').map(\n\t\t\t\t\t(id) => this.tags.find((tag2) => tag2.id === id)\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn this.tags.find((tag) => tag.id === this.value)\n\t\t\t}\n\t\t},\n\t\tupdate() {\n\t\t\tif (this.multiple) {\n\t\t\t\tthis.$emit('input', this.inputValObjects.map((element) => element.id))\n\t\t\t} else {\n\t\t\t\tif (this.inputValObjects === null) {\n\t\t\t\t\tthis.$emit('input', '')\n\t\t\t\t} else {\n\t\t\t\t\tthis.$emit('input', this.inputValObjects.id)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttagLabel({ displayName, userVisible, userAssignable }) {\n\t\t\tif (userVisible === false) {\n\t\t\t\treturn t('systemtags', '%s (invisible)').replace('%s', displayName)\n\t\t\t}\n\t\t\tif (userAssignable === false) {\n\t\t\t\treturn t('systemtags', '%s (restricted)').replace('%s', displayName)\n\t\t\t}\n\t\t\treturn displayName\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MultiselectTag.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MultiselectTag.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileSystemTag.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileSystemTag.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<MultiselectTag v-model=\"newValue\"\n\t\t:multiple=\"false\"\n\t\t:label=\"t('workflowengine', 'Select a tag')\"\n\t\t@input=\"update\" />\n</template>\n\n<script>\nimport { MultiselectTag } from './MultiselectTag'\n\nexport default {\n\tname: 'FileSystemTag',\n\tcomponents: {\n\t\tMultiselectTag,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: [],\n\t\t}\n\t},\n\twatch: {\n\t\tvalue() {\n\t\t\tthis.updateValue()\n\t\t},\n\t},\n\tbeforeMount() {\n\t\tthis.updateValue()\n\t},\n\tmethods: {\n\t\tupdateValue() {\n\t\t\tif (this.value !== '') {\n\t\t\t\tthis.newValue = this.value\n\t\t\t} else {\n\t\t\t\tthis.newValue = null\n\t\t\t}\n\t\t},\n\t\tupdate() {\n\t\t\tthis.$emit('input', this.newValue || '')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./MultiselectTag.vue?vue&type=template&id=73cc22e8&\"\nimport script from \"./MultiselectTag.vue?vue&type=script&lang=js&\"\nexport * from \"./MultiselectTag.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"options\":_vm.tags,\"options-limit\":5,\"placeholder\":_vm.label,\"track-by\":\"id\",\"custom-label\":_vm.tagLabel,\"multiple\":_vm.multiple,\"close-on-select\":false,\"tag-width\":60,\"disabled\":_vm.disabled},on:{\"input\":_vm.update},scopedSlots:_vm._u([{key:\"option\",fn:function(scope){return [_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.tagLabel(scope.option))+\"\\n\\t\")]}}]),model:{value:(_vm.inputValObjects),callback:function ($$v) {_vm.inputValObjects=$$v},expression:\"inputValObjects\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('core', 'No results')))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./FileSystemTag.vue?vue&type=template&id=31f5522d&scoped=true&\"\nimport script from \"./FileSystemTag.vue?vue&type=script&lang=js&\"\nexport * from \"./FileSystemTag.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"31f5522d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('MultiselectTag',{attrs:{\"multiple\":false,\"label\":_vm.t('workflowengine', 'Select a tag')},on:{\"input\":_vm.update},model:{value:(_vm.newValue),callback:function ($$v) {_vm.newValue=$$v},expression:\"newValue\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { stringValidator, validateIPv4, validateIPv6 } from '../../helpers/validators'\nimport FileMimeType from './FileMimeType'\nimport FileSystemTag from './FileSystemTag'\n\nconst stringOrRegexOperators = () => {\n\treturn [\n\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t]\n}\n\nconst FileChecks = [\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileName',\n\t\tname: t('workflowengine', 'File name'),\n\t\toperators: stringOrRegexOperators,\n\t\tplaceholder: (check) => {\n\t\t\tif (check.operator === 'matches' || check.operator === '!matches') {\n\t\t\t\treturn '/^dummy-.+$/i'\n\t\t\t}\n\t\t\treturn 'filename.txt'\n\t\t},\n\t\tvalidate: stringValidator,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileMimeType',\n\t\tname: t('workflowengine', 'File MIME type'),\n\t\toperators: stringOrRegexOperators,\n\t\tcomponent: FileMimeType,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileSize',\n\t\tname: t('workflowengine', 'File size (upload)'),\n\t\toperators: [\n\t\t\t{ operator: 'less', name: t('workflowengine', 'less') },\n\t\t\t{ operator: '!greater', name: t('workflowengine', 'less or equals') },\n\t\t\t{ operator: '!less', name: t('workflowengine', 'greater or equals') },\n\t\t\t{ operator: 'greater', name: t('workflowengine', 'greater') },\n\t\t],\n\t\tplaceholder: (check) => '5 MB',\n\t\tvalidate: (check) => check.value ? check.value.match(/^[0-9]+[ ]?[kmgt]?b$/i) !== null : false,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestRemoteAddress',\n\t\tname: t('workflowengine', 'Request remote address'),\n\t\toperators: [\n\t\t\t{ operator: 'matchesIPv4', name: t('workflowengine', 'matches IPv4') },\n\t\t\t{ operator: '!matchesIPv4', name: t('workflowengine', 'does not match IPv4') },\n\t\t\t{ operator: 'matchesIPv6', name: t('workflowengine', 'matches IPv6') },\n\t\t\t{ operator: '!matchesIPv6', name: t('workflowengine', 'does not match IPv6') },\n\t\t],\n\t\tplaceholder: (check) => {\n\t\t\tif (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {\n\t\t\t\treturn '::1/128'\n\t\t\t}\n\t\t\treturn '127.0.0.1/32'\n\t\t},\n\t\tvalidate: (check) => {\n\t\t\tif (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {\n\t\t\t\treturn validateIPv6(check.value)\n\t\t\t}\n\t\t\treturn validateIPv4(check.value)\n\t\t},\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileSystemTags',\n\t\tname: t('workflowengine', 'File system tag'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is tagged with') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not tagged with') },\n\t\t],\n\t\tcomponent: FileSystemTag,\n\t},\n]\n\nexport default FileChecks\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a user agent')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize -->\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span class=\"option__title option__title_single\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span v-if=\"props.option.$groupLabel\" class=\"option__title\" v-html=\"props.option.$groupLabel\" />\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span v-else class=\"option__title\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestUserAgent',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\n\t\t\t\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\n\t.multiselect .multiselect__content-wrapper li>span {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.option__icon {\n\t\tdisplay: inline-block;\n\t\tmin-width: 30px;\n\t\tbackground-position: left;\n\t}\n\t.option__title {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestUserAgent.vue?vue&type=template&id=475ac1e6&scoped=true&\"\nimport script from \"./RequestUserAgent.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestUserAgent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"475ac1e6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a user agent'),\"label\":\"label\",\"track-by\":\"pattern\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\",domProps:{\"innerHTML\":_vm._s(props.option.label)}})]}},{key:\"option\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),(props.option.$groupLabel)?_c('span',{staticClass:\"option__title\",domProps:{\"innerHTML\":_vm._s(props.option.$groupLabel)}}):_c('span',{staticClass:\"option__title\",domProps:{\"innerHTML\":_vm._s(props.option.label)}})]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\"},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div class=\"timeslot\">\n\t\t<input v-model=\"newValue.startTime\"\n\t\t\ttype=\"text\"\n\t\t\tclass=\"timeslot--start\"\n\t\t\tplaceholder=\"e.g. 08:00\"\n\t\t\t@input=\"update\">\n\t\t<input v-model=\"newValue.endTime\"\n\t\t\ttype=\"text\"\n\t\t\tplaceholder=\"e.g. 18:00\"\n\t\t\t@input=\"update\">\n\t\t<p v-if=\"!valid\" class=\"invalid-hint\">\n\t\t\t{{ t('workflowengine', 'Please enter a valid time span') }}\n\t\t</p>\n\t\t<Multiselect v-show=\"valid\"\n\t\t\tv-model=\"newValue.timezone\"\n\t\t\t:options=\"timezones\"\n\t\t\t@input=\"update\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport moment from 'moment-timezone'\nimport valueMixin from '../../mixins/valueMixin'\n\nconst zones = moment.tz.names()\nexport default {\n\tname: 'RequestTime',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttimezones: zones,\n\t\t\tvalid: false,\n\t\t\tnewValue: {\n\t\t\t\tstartTime: null,\n\t\t\t\tendTime: null,\n\t\t\t\ttimezone: moment.tz.guess(),\n\t\t\t},\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.validate()\n\t},\n\tmethods: {\n\t\tupdateInternalValue(value) {\n\t\t\ttry {\n\t\t\t\tconst data = JSON.parse(value)\n\t\t\t\tif (data.length === 2) {\n\t\t\t\t\tthis.newValue = {\n\t\t\t\t\t\tstartTime: data[0].split(' ', 2)[0],\n\t\t\t\t\t\tendTime: data[1].split(' ', 2)[0],\n\t\t\t\t\t\ttimezone: data[0].split(' ', 2)[1],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// ignore invalid values\n\t\t\t}\n\t\t},\n\t\tvalidate() {\n\t\t\tthis.valid = this.newValue.startTime && this.newValue.startTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i) !== null\n\t\t\t\t&& this.newValue.endTime && this.newValue.endTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i) !== null\n\t\t\t\t&& moment.tz.zone(this.newValue.timezone) !== null\n\t\t\tif (this.valid) {\n\t\t\t\tthis.$emit('valid')\n\t\t\t} else {\n\t\t\t\tthis.$emit('invalid')\n\t\t\t}\n\t\t\treturn this.valid\n\t\t},\n\t\tupdate() {\n\t\t\tif (this.newValue.timezone === null) {\n\t\t\t\tthis.newValue.timezone = moment.tz.guess()\n\t\t\t}\n\t\t\tif (this.validate()) {\n\t\t\t\tconst output = `[\"${this.newValue.startTime} ${this.newValue.timezone}\",\"${this.newValue.endTime} ${this.newValue.timezone}\"]`\n\t\t\t\tthis.$emit('input', output)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.timeslot {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-wrap: wrap;\n\t\tmax-width: 180px;\n\n\t\t.multiselect {\n\t\t\twidth: 100%;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\n\t\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\n\t\t\tborder: 1px solid transparent;\n\t\t}\n\n\t\tinput[type=text] {\n\t\t\twidth: 50%;\n\t\t\tmargin: 0;\n\t\t\tmargin-bottom: 5px;\n\n\t\t\t&.timeslot--start {\n\t\t\t\tmargin-right: 5px;\n\t\t\t\twidth: calc(50% - 5px);\n\t\t\t}\n\t\t}\n\n\t\t.invalid-hint {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestTime.vue?vue&type=template&id=149baca9&scoped=true&\"\nimport script from \"./RequestTime.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestTime.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"149baca9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"timeslot\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newValue.startTime),expression:\"newValue.startTime\"}],staticClass:\"timeslot--start\",attrs:{\"type\":\"text\",\"placeholder\":\"e.g. 08:00\"},domProps:{\"value\":(_vm.newValue.startTime)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.newValue, \"startTime\", $event.target.value)},_vm.update]}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newValue.endTime),expression:\"newValue.endTime\"}],attrs:{\"type\":\"text\",\"placeholder\":\"e.g. 18:00\"},domProps:{\"value\":(_vm.newValue.endTime)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.newValue, \"endTime\", $event.target.value)},_vm.update]}}),_vm._v(\" \"),(!_vm.valid)?_c('p',{staticClass:\"invalid-hint\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Please enter a valid time span'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('Multiselect',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.valid),expression:\"valid\"}],attrs:{\"options\":_vm.timezones},on:{\"input\":_vm.update},model:{value:(_vm.newValue.timezone),callback:function ($$v) {_vm.$set(_vm.newValue, \"timezone\", $$v)},expression:\"newValue.timezone\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a request URL')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\tgroup-values=\"children\"\n\t\t\tgroup-label=\"label\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestURL',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('workflowengine', 'Predefined URLs'),\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tplaceholder() {\n\t\t\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\n\t\t\t\treturn '/^https\\\\:\\\\/\\\\/localhost\\\\/index\\\\.php$/i'\n\t\t\t}\n\t\t\treturn 'https://localhost/index.php'\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.map(groups => groups.children)\n\t\t\t\t.flat()\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\tlabel: t('workflowengine', 'Others'),\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\t\t\tpattern: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestURL.vue?vue&type=template&id=dd8e16be&scoped=true&\"\nimport script from \"./RequestURL.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestURL.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dd8e16be\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a request URL'),\"label\":\"label\",\"track-by\":\"pattern\",\"group-values\":\"children\",\"group-label\":\"label\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(props.option.label))])]}},{key:\"option\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.label)+\" \"+_vm._s(props.option.$groupLabel))])]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\",\"placeholder\":_vm.placeholder},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:loading=\"status.isLoading && groups.length === 0\"\n\t\t\t:options=\"groups\"\n\t\t\t:multiple=\"false\"\n\t\t\tlabel=\"displayname\"\n\t\t\ttrack-by=\"id\"\n\t\t\t@search-change=\"searchAsync\"\n\t\t\t@input=\"(value) => $emit('input', value.id)\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst groups = []\nconst status = {\n\tisLoading: false,\n}\n\nexport default {\n\tname: 'RequestUserGroup',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tgroups,\n\t\t\tstatus,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcurrentValue() {\n\t\t\treturn this.groups.find(group => group.id === this.value) || null\n\t\t},\n\t},\n\tasync mounted() {\n\t\tif (this.groups.length === 0) {\n\t\t\tawait this.searchAsync('')\n\t\t}\n\t\tif (this.currentValue === null) {\n\t\t\tawait this.searchAsync(this.value)\n\t\t}\n\t},\n\tmethods: {\n\t\tsearchAsync(searchQuery) {\n\t\t\tif (this.status.isLoading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.status.isLoading = true\n\t\t\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\n\t\t\t\tresponse.data.ocs.data.groups.forEach((group) => {\n\t\t\t\t\tthis.addGroup({\n\t\t\t\t\t\tid: group.id,\n\t\t\t\t\t\tdisplayname: group.displayname,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tthis.status.isLoading = false\n\t\t\t}, (error) => {\n\t\t\t\tconsole.error('Error while loading group list', error.response)\n\t\t\t})\n\t\t},\n\t\taddGroup(group) {\n\t\t\tconst index = this.groups.findIndex((item) => item.id === group.id)\n\t\t\tif (index === -1) {\n\t\t\t\tthis.groups.push(group)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect {\n\t\twidth: 100%;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestUserGroup.vue?vue&type=template&id=79fa10a5&scoped=true&\"\nimport script from \"./RequestUserGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestUserGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"79fa10a5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"loading\":_vm.status.isLoading && _vm.groups.length === 0,\"options\":_vm.groups,\"multiple\":false,\"label\":\"displayname\",\"track-by\":\"id\"},on:{\"search-change\":_vm.searchAsync,\"input\":function (value) { return _vm.$emit('input', value.id); }}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport RequestUserAgent from './RequestUserAgent'\nimport RequestTime from './RequestTime'\nimport RequestURL from './RequestURL'\nimport RequestUserGroup from './RequestUserGroup'\n\nconst RequestChecks = [\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestURL',\n\t\tname: t('workflowengine', 'Request URL'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t],\n\t\tcomponent: RequestURL,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestTime',\n\t\tname: t('workflowengine', 'Request time'),\n\t\toperators: [\n\t\t\t{ operator: 'in', name: t('workflowengine', 'between') },\n\t\t\t{ operator: '!in', name: t('workflowengine', 'not between') },\n\t\t],\n\t\tcomponent: RequestTime,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestUserAgent',\n\t\tname: t('workflowengine', 'Request user agent'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t],\n\t\tcomponent: RequestUserAgent,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\UserGroupMembership',\n\t\tname: t('workflowengine', 'User group membership'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is member of') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not member of') },\n\t\t],\n\t\tcomponent: RequestUserGroup,\n\t},\n]\n\nexport default RequestChecks\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport FileChecks from './file'\nimport RequestChecks from './request'\n\nexport default [...FileChecks, ...RequestChecks]\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport store from './store'\nimport Settings from './components/Workflow'\nimport ShippedChecks from './components/Checks'\n\n/**\n * A plugin for displaying a custom value field for checks\n *\n * @typedef {object} CheckPlugin\n * @property {string} class - The PHP class name of the check\n * @property {Comparison[]} operators - A list of possible comparison operations running on the check\n * @property {Vue} component - A vue component to handle the rendering of options\n * The component should handle the v-model directive properly,\n * so it needs a value property to receive data and emit an input\n * event once the data has changed\n * @property {Function} placeholder - Return a placeholder of no custom component is used\n * @property {Function} validate - validate a check if no custom component is used\n */\n\n/**\n * A plugin for extending the admin page repesentation of a operator\n *\n * @typedef {object} OperatorPlugin\n * @property {string} id - The PHP class name of the check\n * @property {string} operation - Default value for the operation field\n * @property {string} color - Custom color code to be applied for the operator selector\n * @property {Vue} component - A vue component to handle the rendering of options\n * The component should handle the v-model directive properly,\n * so it needs a value property to receive data and emit an input\n * event once the data has changed\n */\n\n/**\n * @typedef {object} Comparison\n * @property {string} operator - value the comparison should have, e.g. !less, greater\n * @property {string} name - Translated readable text, e.g. less or equals\n */\n\n/**\n * Public javascript api for apps to register custom plugins\n */\nwindow.OCA.WorkflowEngine = Object.assign({}, OCA.WorkflowEngine, {\n\n\t/**\n\t *\n\t * @param {CheckPlugin} Plugin the plugin to register\n\t */\n\tregisterCheck(Plugin) {\n\t\tstore.commit('addPluginCheck', Plugin)\n\t},\n\t/**\n\t *\n\t * @param {OperatorPlugin} Plugin the plugin to register\n\t */\n\tregisterOperator(Plugin) {\n\t\tstore.commit('addPluginOperator', Plugin)\n\t},\n})\n\n// Register shipped checks\nShippedChecks.forEach((checkPlugin) => window.OCA.WorkflowEngine.registerCheck(checkPlugin))\n\nVue.use(Vuex)\nVue.prototype.t = t\n\nconst View = Vue.extend(Settings)\nconst workflowengine = new View({\n\tstore,\n})\nworkflowengine.$mount('#workflowengine')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".check[data-v-70cc784d]{display:flex;flex-wrap:wrap;width:100%;padding-right:20px}.check>*[data-v-70cc784d]:not(.close){width:180px}.check>.comparator[data-v-70cc784d]{min-width:130px;width:130px}.check>.option[data-v-70cc784d]{min-width:230px;width:230px}.check>.multiselect[data-v-70cc784d],.check>input[type=text][data-v-70cc784d]{margin-right:5px;margin-bottom:5px}.check .multiselect[data-v-70cc784d] .multiselect__content-wrapper li>span,.check .multiselect[data-v-70cc784d] .multiselect__single{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}input[type=text][data-v-70cc784d]{margin:0}[data-v-70cc784d]::placeholder{font-size:10px}button.action-item.action-item--single.icon-close[data-v-70cc784d]{height:44px;width:44px;margin-top:-5px;margin-bottom:-5px}.invalid[data-v-70cc784d]{border:1px solid var(--color-error) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Check.vue\"],\"names\":[],\"mappings\":\"AAsJA,wBACC,YAAA,CACA,cAAA,CACA,UAAA,CACA,kBAAA,CACA,sCACC,WAAA,CAED,oCACC,eAAA,CACA,WAAA,CAED,gCACC,eAAA,CACA,WAAA,CAED,8EAEC,gBAAA,CACA,iBAAA,CAGD,qIAEC,aAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CAGF,kCACC,QAAA,CAED,+BACC,cAAA,CAED,mEACC,WAAA,CACA,UAAA,CACA,eAAA,CACA,kBAAA,CAED,0BACC,8CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.check {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\twidth: 100%;\\n\\tpadding-right: 20px;\\n\\t& > *:not(.close) {\\n\\t\\twidth: 180px;\\n\\t}\\n\\t& > .comparator {\\n\\t\\tmin-width: 130px;\\n\\t\\twidth: 130px;\\n\\t}\\n\\t& > .option {\\n\\t\\tmin-width: 230px;\\n\\t\\twidth: 230px;\\n\\t}\\n\\t& > .multiselect,\\n\\t& > input[type=text] {\\n\\t\\tmargin-right: 5px;\\n\\t\\tmargin-bottom: 5px;\\n\\t}\\n\\n\\t.multiselect::v-deep .multiselect__content-wrapper li>span,\\n\\t.multiselect::v-deep .multiselect__single {\\n\\t\\tdisplay: block;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\ninput[type=text] {\\n\\tmargin: 0;\\n}\\n::placeholder {\\n\\tfont-size: 10px;\\n}\\nbutton.action-item.action-item--single.icon-close {\\n\\theight: 44px;\\n\\twidth: 44px;\\n\\tmargin-top: -5px;\\n\\tmargin-bottom: -5px;\\n}\\n.invalid {\\n\\tborder: 1px solid var(--color-error) !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".timeslot[data-v-149baca9]{display:flex;flex-grow:1;flex-wrap:wrap;max-width:180px}.timeslot .multiselect[data-v-149baca9]{width:100%;margin-bottom:5px}.timeslot .multiselect[data-v-149baca9] .multiselect__tags:not(:hover):not(:focus):not(:active){border:1px solid rgba(0,0,0,0)}.timeslot input[type=text][data-v-149baca9]{width:50%;margin:0;margin-bottom:5px}.timeslot input[type=text].timeslot--start[data-v-149baca9]{margin-right:5px;width:calc(50% - 5px)}.timeslot .invalid-hint[data-v-149baca9]{color:var(--color-text-maxcontrast)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestTime.vue\"],\"names\":[],\"mappings\":\"AA+FA,2BACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,eAAA,CAEA,wCACC,UAAA,CACA,iBAAA,CAGD,gGACC,8BAAA,CAGD,4CACC,SAAA,CACA,QAAA,CACA,iBAAA,CAEA,4DACC,gBAAA,CACA,qBAAA,CAIF,yCACC,mCAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.timeslot {\\n\\tdisplay: flex;\\n\\tflex-grow: 1;\\n\\tflex-wrap: wrap;\\n\\tmax-width: 180px;\\n\\n\\t.multiselect {\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 5px;\\n\\t}\\n\\n\\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\\n\\t\\tborder: 1px solid transparent;\\n\\t}\\n\\n\\tinput[type=text] {\\n\\t\\twidth: 50%;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-bottom: 5px;\\n\\n\\t\\t&.timeslot--start {\\n\\t\\t\\tmargin-right: 5px;\\n\\t\\t\\twidth: calc(50% - 5px);\\n\\t\\t}\\n\\t}\\n\\n\\t.invalid-hint {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".event[data-v-57bd6e67]{margin-bottom:5px}.isComplex img[data-v-57bd6e67]{vertical-align:text-top}.isComplex span[data-v-57bd6e67]{padding-top:2px;display:inline-block}.multiselect[data-v-57bd6e67]{width:100%;max-width:550px;margin-top:4px}.multiselect[data-v-57bd6e67] .multiselect__single{display:flex}.multiselect[data-v-57bd6e67]:not(.multiselect--active) .multiselect__tags{background-color:var(--color-main-background) !important;border:1px solid rgba(0,0,0,0)}.multiselect[data-v-57bd6e67] .multiselect__tags{background-color:var(--color-main-background) !important;height:auto;min-height:34px}.multiselect[data-v-57bd6e67]:not(.multiselect--disabled) .multiselect__tags .multiselect__single{background-image:var(--icon-triangle-s-dark);background-repeat:no-repeat;background-position:right center}input[data-v-57bd6e67]{border:1px solid rgba(0,0,0,0)}.option__title[data-v-57bd6e67]{margin-left:5px;color:var(--color-main-text)}.option__title_single[data-v-57bd6e67]{font-weight:900}.option__icon[data-v-57bd6e67]{width:16px;height:16px}.eventlist img[data-v-57bd6e67],.eventlist .text[data-v-57bd6e67]{vertical-align:middle}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Event.vue\"],\"names\":[],\"mappings\":\"AAiFA,wBACC,iBAAA,CAGA,gCACC,uBAAA,CAED,iCACC,eAAA,CACA,oBAAA,CAGF,8BACC,UAAA,CACA,eAAA,CACA,cAAA,CAED,mDACC,YAAA,CAED,2EACC,wDAAA,CACA,8BAAA,CAGD,iDACC,wDAAA,CACA,WAAA,CACA,eAAA,CAGD,kGACC,4CAAA,CACA,2BAAA,CACA,gCAAA,CAGD,uBACC,8BAAA,CAGD,gCACC,eAAA,CACA,4BAAA,CAED,uCACC,eAAA,CAGD,+BACC,UAAA,CACA,WAAA,CAGD,kEAEC,qBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.event {\\n\\tmargin-bottom: 5px;\\n}\\n.isComplex {\\n\\timg {\\n\\t\\tvertical-align: text-top;\\n\\t}\\n\\tspan {\\n\\t\\tpadding-top: 2px;\\n\\t\\tdisplay: inline-block;\\n\\t}\\n}\\n.multiselect {\\n\\twidth: 100%;\\n\\tmax-width: 550px;\\n\\tmargin-top: 4px;\\n}\\n.multiselect::v-deep .multiselect__single {\\n\\tdisplay: flex;\\n}\\n.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\\n\\tbackground-color: var(--color-main-background) !important;\\n\\tborder: 1px solid transparent;\\n}\\n\\n.multiselect::v-deep .multiselect__tags {\\n\\tbackground-color: var(--color-main-background) !important;\\n\\theight: auto;\\n\\tmin-height: 34px;\\n}\\n\\n.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\\n\\tbackground-image: var(--icon-triangle-s-dark);\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: right center;\\n}\\n\\ninput {\\n\\tborder: 1px solid transparent;\\n}\\n\\n.option__title {\\n\\tmargin-left: 5px;\\n\\tcolor: var(--color-main-text);\\n}\\n.option__title_single {\\n\\tfont-weight: 900;\\n}\\n\\n.option__icon {\\n\\twidth: 16px;\\n\\theight: 16px;\\n}\\n\\n.eventlist img,\\n.eventlist .text {\\n\\tvertical-align: middle;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".actions__item[data-v-96600802]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-96600802]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-96600802]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-96600802]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-96600802],small[data-v-96600802]{padding:6px;display:block}h3[data-v-96600802]{margin:0;padding:0;font-weight:600}small[data-v-96600802]{font-size:10pt;flex-grow:1}.colored[data-v-96600802]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-96600802],.colored:not(.more) small[data-v-96600802]{color:var(--color-primary-text)}.actions__item[data-v-96600802]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-96600802]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-96600802]{padding:0}.actions__item:not(.colored) .icon[data-v-96600802]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-96600802]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-96600802]{filter:invert(1)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/styles/operation.scss\"],\"names\":[],\"mappings\":\"AAAA,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA\",\"sourcesContent\":[\".actions__item {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tflex-direction: column;\\n\\tflex-grow: 1;\\n\\tmargin-left: -1px;\\n\\tpadding: 10px;\\n\\tborder-radius: var(--border-radius-large);\\n\\tmargin-right: 20px;\\n\\tmargin-bottom: 20px;\\n}\\n.actions__item .icon {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 50px;\\n\\tbackground-size: 50px 50px;\\n\\tbackground-position: center center;\\n\\tmargin-top: 10px;\\n\\tmargin-bottom: 10px;\\n\\tbackground-repeat: no-repeat;\\n}\\n.actions__item__description {\\n\\ttext-align: center;\\n\\tflex-grow: 1;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n}\\n.actions__item_options {\\n\\twidth: 100%;\\n\\tmargin-top: 10px;\\n\\tpadding-left: 60px;\\n}\\nh3, small {\\n\\tpadding: 6px;\\n\\tdisplay: block;\\n}\\nh3 {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tfont-weight: 600;\\n}\\nsmall {\\n\\tfont-size: 10pt;\\n\\tflex-grow: 1;\\n}\\n\\n.colored:not(.more) {\\n\\tbackground-color: var(--color-primary-element);\\n\\th3, small {\\n\\t\\tcolor: var(--color-primary-text)\\n\\t}\\n}\\n\\n.actions__item:not(.colored) {\\n\\tflex-direction: row;\\n\\n\\t.actions__item__description {\\n\\t\\tpadding-top: 5px;\\n\\t\\ttext-align: left;\\n\\t\\twidth: calc(100% - 105px);\\n\\t\\tsmall {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n\\t.icon {\\n\\t\\twidth: 50px;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-right: 10px;\\n\\t\\t&:not(.icon-invert) {\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n}\\n\\n.colored .icon-invert {\\n\\tfilter: invert(1);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".buttons[data-v-779dc71c]{display:flex;justify-content:end}.buttons button[data-v-779dc71c]{margin-left:5px}.buttons button[data-v-779dc71c]:last-child{margin-right:10px}.error-message[data-v-779dc71c]{float:right;margin-right:10px}.flow-icon[data-v-779dc71c]{width:44px}.rule[data-v-779dc71c]{display:flex;flex-wrap:wrap;border-left:5px solid var(--color-primary-element)}.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{flex-grow:1;min-height:100px;max-width:700px}.rule .action[data-v-779dc71c]{max-width:400px;position:relative}.rule .icon-confirm[data-v-779dc71c]{background-position:right 27px;padding-right:20px;margin-right:20px}.trigger p[data-v-779dc71c],.action p[data-v-779dc71c]{min-height:34px;display:flex}.trigger p>span[data-v-779dc71c],.action p>span[data-v-779dc71c]{min-width:50px;text-align:right;color:var(--color-text-maxcontrast);padding-right:10px;padding-top:6px}.trigger p .multiselect[data-v-779dc71c],.action p .multiselect[data-v-779dc71c]{flex-grow:1;max-width:300px}.trigger p:first-child span[data-v-779dc71c]{padding-top:3px}.check--add[data-v-779dc71c]{background-position:7px center;background-color:rgba(0,0,0,0);padding-left:6px;margin:0;width:180px;border-radius:var(--border-radius);color:var(--color-text-maxcontrast);font-weight:normal;text-align:left;font-size:1em}@media(max-width: 1400px){.rule[data-v-779dc71c],.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{width:100%;max-width:100%}.rule .flow-icon[data-v-779dc71c]{display:none}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Rule.vue\"],\"names\":[],\"mappings\":\"AAqLA,0BACC,YAAA,CACA,mBAAA,CAEA,iCACC,eAAA,CAED,4CACC,iBAAA,CAIF,gCACC,WAAA,CACA,iBAAA,CAGD,4BACC,UAAA,CAGD,uBACC,YAAA,CACA,cAAA,CACA,kDAAA,CAEA,+DACC,WAAA,CACA,gBAAA,CACA,eAAA,CAED,+BACC,eAAA,CACA,iBAAA,CAED,qCACC,8BAAA,CACA,kBAAA,CACA,iBAAA,CAGF,uDACC,eAAA,CACA,YAAA,CAEA,iEACC,cAAA,CACA,gBAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CAED,iFACC,WAAA,CACA,eAAA,CAGF,6CACE,eAAA,CAGF,6BACC,8BAAA,CACA,8BAAA,CACA,gBAAA,CACA,QAAA,CACA,WAAA,CACA,kCAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CACA,aAAA,CAGD,0BAEE,sFACC,UAAA,CACA,cAAA,CAED,kCACC,YAAA,CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.buttons {\\n\\tdisplay: flex;\\n\\tjustify-content: end;\\n\\n\\tbutton {\\n\\t\\tmargin-left: 5px;\\n\\t}\\n\\tbutton:last-child{\\n\\t\\tmargin-right: 10px;\\n\\t}\\n}\\n\\n.error-message {\\n\\tfloat: right;\\n\\tmargin-right: 10px;\\n}\\n\\n.flow-icon {\\n\\twidth: 44px;\\n}\\n\\n.rule {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tborder-left: 5px solid var(--color-primary-element);\\n\\n\\t.trigger, .action {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-height: 100px;\\n\\t\\tmax-width: 700px;\\n\\t}\\n\\t.action {\\n\\t\\tmax-width: 400px;\\n\\t\\tposition: relative;\\n\\t}\\n\\t.icon-confirm {\\n\\t\\tbackground-position: right 27px;\\n\\t\\tpadding-right: 20px;\\n\\t\\tmargin-right: 20px;\\n\\t}\\n}\\n.trigger p, .action p {\\n\\tmin-height: 34px;\\n\\tdisplay: flex;\\n\\n\\t& > span {\\n\\t\\tmin-width: 50px;\\n\\t\\ttext-align: right;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-right: 10px;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmax-width: 300px;\\n\\t}\\n}\\n.trigger p:first-child span {\\n\\t\\tpadding-top: 3px;\\n}\\n\\n.check--add {\\n\\tbackground-position: 7px center;\\n\\tbackground-color: transparent;\\n\\tpadding-left: 6px;\\n\\tmargin: 0;\\n\\twidth: 180px;\\n\\tborder-radius: var(--border-radius);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tfont-weight: normal;\\n\\ttext-align: left;\\n\\tfont-size: 1em;\\n}\\n\\n@media (max-width:1400px) {\\n\\t.rule {\\n\\t\\t&, .trigger, .action {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t}\\n\\t\\t.flow-icon {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#workflowengine[data-v-2fb0024e]{border-bottom:1px solid var(--color-border)}.section[data-v-2fb0024e]{max-width:100vw}.section h2.configured-flows[data-v-2fb0024e]{margin-top:50px;margin-bottom:0}.actions[data-v-2fb0024e]{display:flex;flex-wrap:wrap;max-width:1200px}.actions .actions__item[data-v-2fb0024e]{max-width:280px;flex-basis:250px}.actions__more[data-v-2fb0024e]{margin-bottom:10px}.slide-enter-active[data-v-2fb0024e]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:ease-in;-webkit-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in}.slide-leave-active[data-v-2fb0024e]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-webkit-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-o-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);transition-timing-function:cubic-bezier(0, 1, 0.5, 1)}.slide-enter-to[data-v-2fb0024e],.slide-leave[data-v-2fb0024e]{max-height:500px;overflow:hidden}.slide-enter[data-v-2fb0024e],.slide-leave-to[data-v-2fb0024e]{overflow:hidden;max-height:0;padding-top:0;padding-bottom:0}.actions__item[data-v-2fb0024e]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-2fb0024e]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-2fb0024e]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-2fb0024e]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-2fb0024e],small[data-v-2fb0024e]{padding:6px;display:block}h3[data-v-2fb0024e]{margin:0;padding:0;font-weight:600}small[data-v-2fb0024e]{font-size:10pt;flex-grow:1}.colored[data-v-2fb0024e]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-2fb0024e],.colored:not(.more) small[data-v-2fb0024e]{color:var(--color-primary-text)}.actions__item[data-v-2fb0024e]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-2fb0024e]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-2fb0024e]{padding:0}.actions__item:not(.colored) .icon[data-v-2fb0024e]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-2fb0024e]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-2fb0024e]{filter:invert(1)}.actions__item.more[data-v-2fb0024e]{background-color:var(--color-background-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Workflow.vue\",\"webpack://./apps/workflowengine/src/styles/operation.scss\"],\"names\":[],\"mappings\":\"AAmHA,iCACC,2CAAA,CAED,0BACC,eAAA,CAEA,8CACC,eAAA,CACA,eAAA,CAGF,0BACC,YAAA,CACA,cAAA,CACA,gBAAA,CACA,yCACC,eAAA,CACA,gBAAA,CAGF,gCACC,kBAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,uCAAA,CACA,0CAAA,CACA,qCAAA,CACA,kCAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,0DAAA,CACA,6DAAA,CACA,wDAAA,CACA,qDAAA,CAGD,+DACC,gBAAA,CACA,eAAA,CAGD,+DACC,eAAA,CACA,YAAA,CACA,aAAA,CACA,gBAAA,CC1KD,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA,CDmGD,qCACC,6CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#workflowengine {\\n\\tborder-bottom: 1px solid var(--color-border);\\n}\\n.section {\\n\\tmax-width: 100vw;\\n\\n\\th2.configured-flows {\\n\\t\\tmargin-top: 50px;\\n\\t\\tmargin-bottom: 0;\\n\\t}\\n}\\n.actions {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tmax-width: 1200px;\\n\\t.actions__item {\\n\\t\\tmax-width: 280px;\\n\\t\\tflex-basis: 250px;\\n\\t}\\n}\\n.actions__more {\\n\\tmargin-bottom: 10px;\\n}\\n\\n.slide-enter-active {\\n\\t-moz-transition-duration: 0.3s;\\n\\t-webkit-transition-duration: 0.3s;\\n\\t-o-transition-duration: 0.3s;\\n\\ttransition-duration: 0.3s;\\n\\t-moz-transition-timing-function: ease-in;\\n\\t-webkit-transition-timing-function: ease-in;\\n\\t-o-transition-timing-function: ease-in;\\n\\ttransition-timing-function: ease-in;\\n}\\n\\n.slide-leave-active {\\n\\t-moz-transition-duration: 0.3s;\\n\\t-webkit-transition-duration: 0.3s;\\n\\t-o-transition-duration: 0.3s;\\n\\ttransition-duration: 0.3s;\\n\\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n}\\n\\n.slide-enter-to, .slide-leave {\\n\\tmax-height: 500px;\\n\\toverflow: hidden;\\n}\\n\\n.slide-enter, .slide-leave-to {\\n\\toverflow: hidden;\\n\\tmax-height: 0;\\n\\tpadding-top: 0;\\n\\tpadding-bottom: 0;\\n}\\n\\n@import \\\"./../styles/operation\\\";\\n\\n.actions__item.more {\\n\\tbackground-color: var(--color-background-dark);\\n}\\n\",\".actions__item {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tflex-direction: column;\\n\\tflex-grow: 1;\\n\\tmargin-left: -1px;\\n\\tpadding: 10px;\\n\\tborder-radius: var(--border-radius-large);\\n\\tmargin-right: 20px;\\n\\tmargin-bottom: 20px;\\n}\\n.actions__item .icon {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 50px;\\n\\tbackground-size: 50px 50px;\\n\\tbackground-position: center center;\\n\\tmargin-top: 10px;\\n\\tmargin-bottom: 10px;\\n\\tbackground-repeat: no-repeat;\\n}\\n.actions__item__description {\\n\\ttext-align: center;\\n\\tflex-grow: 1;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n}\\n.actions__item_options {\\n\\twidth: 100%;\\n\\tmargin-top: 10px;\\n\\tpadding-left: 60px;\\n}\\nh3, small {\\n\\tpadding: 6px;\\n\\tdisplay: block;\\n}\\nh3 {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tfont-weight: 600;\\n}\\nsmall {\\n\\tfont-size: 10pt;\\n\\tflex-grow: 1;\\n}\\n\\n.colored:not(.more) {\\n\\tbackground-color: var(--color-primary-element);\\n\\th3, small {\\n\\t\\tcolor: var(--color-primary-text)\\n\\t}\\n}\\n\\n.actions__item:not(.colored) {\\n\\tflex-direction: row;\\n\\n\\t.actions__item__description {\\n\\t\\tpadding-top: 5px;\\n\\t\\ttext-align: left;\\n\\t\\twidth: calc(100% - 105px);\\n\\t\\tsmall {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n\\t.icon {\\n\\t\\twidth: 50px;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-right: 10px;\\n\\t\\t&:not(.icon-invert) {\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n}\\n\\n.colored .icon-invert {\\n\\tfilter: invert(1);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-8c011724], input[type='text'][data-v-8c011724] {\\n\\twidth: 100%;\\n}\\n.multiselect[data-v-8c011724] .multiselect__content-wrapper li>span,\\n.multiselect[data-v-8c011724] .multiselect__single {\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/FileMimeType.vue\"],\"names\":[],\"mappings\":\";AA4IA;CACA,WAAA;AACA;AACA;;CAEA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a file type')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span v-if=\\\"props.option.icon\\\" class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<img v-else :src=\\\"props.option.iconUrl\\\">\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span v-if=\\\"props.option.icon\\\" class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<img v-else :src=\\\"props.option.iconUrl\\\">\\n\\t\\t\\t\\t<span class=\\\"option__title\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'e.g. httpd/unix-directory')\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from './../../mixins/valueMixin'\\nimport { imagePath } from '@nextcloud/router'\\n\\nexport default {\\n\\tname: 'FileMimeType',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticon: 'icon-folder',\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Folder'),\\n\\t\\t\\t\\t\\tpattern: 'httpd/unix-directory',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticon: 'icon-picture',\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Images'),\\n\\t\\t\\t\\t\\tpattern: '/image\\\\\\\\/.*/',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Office documents'),\\n\\t\\t\\t\\t\\tpattern: '/(vnd\\\\\\\\.(ms-|openxmlformats-|oasis\\\\\\\\.opendocument).*)$/',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'PDF documents'),\\n\\t\\t\\t\\t\\tpattern: 'application/pdf',\\n\\t\\t\\t\\t},\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\\n\\t\\t\\tif (matchingPredefined) {\\n\\t\\t\\t\\treturn true\\n\\t\\t\\t}\\n\\t\\t\\treturn false\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom mimetype'),\\n\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\\n\\t\\t\\tif (matchingPredefined) {\\n\\t\\t\\t\\treturn matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom mimetype'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.multiselect >>> .multiselect__content-wrapper li>span,\\n\\t.multiselect >>> .multiselect__single {\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-dd8e16be], input[type='text'][data-v-dd8e16be] {\\n\\twidth: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestURL.vue\"],\"names\":[],\"mappings\":\";AA2IA;CACA,WAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a request URL')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\tgroup-values=\\\"children\\\"\\n\\t\\t\\tgroup-label=\\\"label\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<span class=\\\"option__title\\\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t:placeholder=\\\"placeholder\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from '../../mixins/valueMixin'\\n\\nexport default {\\n\\tname: 'RequestURL',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tnewValue: '',\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Predefined URLs'),\\n\\t\\t\\t\\t\\tchildren: [\\n\\t\\t\\t\\t\\t\\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\\n\\t\\t\\t\\t\\t],\\n\\t\\t\\t\\t},\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tplaceholder() {\\n\\t\\t\\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\\n\\t\\t\\t\\treturn '/^https\\\\\\\\:\\\\\\\\/\\\\\\\\/localhost\\\\\\\\/index\\\\\\\\.php$/i'\\n\\t\\t\\t}\\n\\t\\t\\treturn 'https://localhost/index.php'\\n\\t\\t},\\n\\t\\tmatchingPredefined() {\\n\\t\\t\\treturn this.predefinedTypes\\n\\t\\t\\t\\t.map(groups => groups.children)\\n\\t\\t\\t\\t.flat()\\n\\t\\t\\t\\t.find((type) => this.newValue === type.pattern)\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\treturn !!this.matchingPredefined\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Others'),\\n\\t\\t\\t\\tchildren: [\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Custom URL'),\\n\\t\\t\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t],\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tif (this.matchingPredefined) {\\n\\t\\t\\t\\treturn this.matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom URL'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\t// TODO: check if value requires a regex and set the check operator according to that\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-475ac1e6], input[type='text'][data-v-475ac1e6] {\\n\\twidth: 100%;\\n}\\n.multiselect .multiselect__content-wrapper li>span[data-v-475ac1e6] {\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.multiselect[data-v-475ac1e6] .multiselect__single {\\n\\twidth: 100%;\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.option__icon[data-v-475ac1e6] {\\n\\tdisplay: inline-block;\\n\\tmin-width: 30px;\\n\\tbackground-position: left;\\n}\\n.option__title[data-v-475ac1e6] {\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestUserAgent.vue\"],\"names\":[],\"mappings\":\";AA8HA;CACA,WAAA;AACA;AAEA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,WAAA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,qBAAA;CACA,eAAA;CACA,yBAAA;AACA;AACA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a user agent')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize -->\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\" v-html=\\\"props.option.label\\\" />\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span v-if=\\\"props.option.$groupLabel\\\" class=\\\"option__title\\\" v-html=\\\"props.option.$groupLabel\\\" />\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span v-else class=\\\"option__title\\\" v-html=\\\"props.option.label\\\" />\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from '../../mixins/valueMixin'\\n\\nexport default {\\n\\tname: 'RequestUserAgent',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tnewValue: '',\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\\n\\t\\t\\t\\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\\n\\t\\t\\t\\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\\n\\t\\t\\t\\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tmatchingPredefined() {\\n\\t\\t\\treturn this.predefinedTypes\\n\\t\\t\\t\\t.find((type) => this.newValue === type.pattern)\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\treturn !!this.matchingPredefined\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom user agent'),\\n\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tif (this.matchingPredefined) {\\n\\t\\t\\t\\treturn this.matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom user agent'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\t// TODO: check if value requires a regex and set the check operator according to that\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.multiselect .multiselect__content-wrapper li>span {\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\t.multiselect::v-deep .multiselect__single {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\t.option__icon {\\n\\t\\tdisplay: inline-block;\\n\\t\\tmin-width: 30px;\\n\\t\\tbackground-position: left;\\n\\t}\\n\\t.option__title {\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-79fa10a5] {\\n\\twidth: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestUserGroup.vue\"],\"names\":[],\"mappings\":\";AA4GA;CACA,WAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:loading=\\\"status.isLoading && groups.length === 0\\\"\\n\\t\\t\\t:options=\\\"groups\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\tlabel=\\\"displayname\\\"\\n\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t@search-change=\\\"searchAsync\\\"\\n\\t\\t\\t@input=\\\"(value) => $emit('input', value.id)\\\" />\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport axios from '@nextcloud/axios'\\nimport { generateOcsUrl } from '@nextcloud/router'\\n\\nconst groups = []\\nconst status = {\\n\\tisLoading: false,\\n}\\n\\nexport default {\\n\\tname: 'RequestUserGroup',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tprops: {\\n\\t\\tvalue: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\tdefault: '',\\n\\t\\t},\\n\\t\\tcheck: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\tdefault: () => { return {} },\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tgroups,\\n\\t\\t\\tstatus,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tcurrentValue() {\\n\\t\\t\\treturn this.groups.find(group => group.id === this.value) || null\\n\\t\\t},\\n\\t},\\n\\tasync mounted() {\\n\\t\\tif (this.groups.length === 0) {\\n\\t\\t\\tawait this.searchAsync('')\\n\\t\\t}\\n\\t\\tif (this.currentValue === null) {\\n\\t\\t\\tawait this.searchAsync(this.value)\\n\\t\\t}\\n\\t},\\n\\tmethods: {\\n\\t\\tsearchAsync(searchQuery) {\\n\\t\\t\\tif (this.status.isLoading) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tthis.status.isLoading = true\\n\\t\\t\\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\\n\\t\\t\\t\\tresponse.data.ocs.data.groups.forEach((group) => {\\n\\t\\t\\t\\t\\tthis.addGroup({\\n\\t\\t\\t\\t\\t\\tid: group.id,\\n\\t\\t\\t\\t\\t\\tdisplayname: group.displayname,\\n\\t\\t\\t\\t\\t})\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\tthis.status.isLoading = false\\n\\t\\t\\t}, (error) => {\\n\\t\\t\\t\\tconsole.error('Error while loading group list', error.response)\\n\\t\\t\\t})\\n\\t\\t},\\n\\t\\taddGroup(group) {\\n\\t\\t\\tconst index = this.groups.findIndex((item) => item.id === group.id)\\n\\t\\t\\tif (index === -1) {\\n\\t\\t\\t\\tthis.groups.push(group)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect {\\n\\t\\twidth: 100%;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 2819,\n\t\"./hi.js\": 2819,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 8318;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t8318: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(98739); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","scopeValue","loadState","getApiUrl","url","generateOcsUrl","Vue","Vuex","Store","state","rules","scope","appstoreEnabled","operations","plugins","checks","operators","entities","events","map","entity","event","id","eventName","flat","mutations","addRule","rule","push","valid","updateRule","index","findIndex","item","newRule","Object","assign","removeRule","splice","addPluginCheck","plugin","class","addPluginOperator","color","actions","fetchRules","context","axios","data","values","ocs","forEach","commit","createNewRule","isComplex","fixedEntity","find","Date","getTime","name","operator","value","operation","JSON","parse","pushUpdateRule","confirmPassword","result","deleteRule","setValid","getters","getRules","filter","sort","rule1","rule2","getOperationForRule","getEntityForOperation","getEventsForOperation","getChecksForEntity","check","supportedEntities","indexOf","length","reduce","obj","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","icon","_v","_s","triggerHint","currentEvent","allEvents","on","updateEvent","scopedSlots","_u","key","fn","ref","isOpen","_l","displayName","_e","props","option","directives","rawName","expression","showDelete","t","updateCheck","model","callback","$$v","currentOption","currentOperator","currentComponent","component","tag","$event","validate","$set","invalid","valuePlaceholder","domProps","target","composing","deleteVisible","$emit","colored","style","backgroundColor","iconClass","backgroundImage","description","_t","borderLeftColor","removeCheck","onAddFilter","updateOperation","dirty","cancelRule","ruleStatus","type","saveRule","proxy","title","error","workflowDocUrl","nativeOn","appstoreUrl","showMoreOperations","regexRegex","regexIPv4","regexIPv6","String","default","newValue","watch","immediate","handler","updateInternalValue","methods","currentValue","setValue","iconUrl","label","isPredefined","pattern","updateCustom","xmlToJson","xml","nodeType","attributes","j","attribute","nodeName","nodeValue","hasChildNodes","i","childNodes","old","method","generateRemoteUrl","then","response","json","dom","DOMParser","parseFromString","e","console","parseXml","list","canAssign","userAssignable","userVisible","xmlToTagList","tags","tagLabel","multiple","disabled","update","inputValObjects","slot","stringOrRegexOperators","placeholder","string","exec","FileMimeType","match","validateIPv4","FileSystemTag","$groupLabel","timezones","status","isLoading","groups","searchAsync","RequestURL","RequestTime","RequestUserAgent","RequestUserGroup","FileChecks","RequestChecks","window","OCA","WorkflowEngine","registerCheck","Plugin","store","registerOperator","ShippedChecks","checkPlugin","Settings","$mount","___CSS_LOADER_EXPORT___","module","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","keys","resolve","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","amdD","amdO","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"workflowengine-workflowengine.js?v=0cadc6477b7ea28576ee","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/workflowengine/src/helpers/api.js","webpack:///nextcloud/apps/workflowengine/src/store.js","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue","webpack://nextcloud/./apps/workflowengine/src/components/Event.vue?ae78","webpack://nextcloud/./apps/workflowengine/src/components/Event.vue?5115","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=template&id=57bd6e67&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue","webpack://nextcloud/./apps/workflowengine/src/components/Check.vue?50c3","webpack://nextcloud/./apps/workflowengine/src/components/Check.vue?3fb8","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=template&id=70cc784d&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue","webpack://nextcloud/./apps/workflowengine/src/components/Operation.vue?10fd","webpack://nextcloud/./apps/workflowengine/src/components/Operation.vue?3526","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=template&id=96600802&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Rule.vue?6847","webpack://nextcloud/./apps/workflowengine/src/components/Rule.vue?e711","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=template&id=779dc71c&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Workflow.vue?eec9","webpack://nextcloud/./apps/workflowengine/src/components/Workflow.vue?17b8","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=template&id=2fb0024e&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/helpers/validators.js","webpack:///nextcloud/apps/workflowengine/src/mixins/valueMixin.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileMimeType.vue?3210","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileMimeType.vue?c385","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=template&id=9f636120&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/api.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue","webpack://nextcloud/./apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?3f10","webpack:///nextcloud/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue?vue&type=template&id=73cc22e8&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/FileSystemTag.vue?2d3e","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileSystemTag.vue?vue&type=template&id=31f5522d&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/file.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserAgent.vue?83e0","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserAgent.vue?81d6","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=template&id=475ac1e6&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestTime.vue?6629","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestTime.vue?a55a","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=template&id=149baca9&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestURL.vue?de33","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestURL.vue?eee5","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=template&id=dd8e16be&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserGroup.vue?b928","webpack://nextcloud/./apps/workflowengine/src/components/Checks/RequestUserGroup.vue?f6d3","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=template&id=79fa10a5&scoped=true&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/request.js","webpack:///nextcloud/apps/workflowengine/src/components/Checks/index.js","webpack:///nextcloud/apps/workflowengine/src/workflowengine.js","webpack:///nextcloud/apps/workflowengine/src/components/Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Workflow.vue?vue&type=style&index=0&id=2fb0024e&scoped=true&lang=scss&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/FileMimeType.vue?vue&type=style&index=0&id=9f636120&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&","webpack:///nextcloud/apps/workflowengine/src/components/Checks/RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst scopeValue = loadState('workflowengine', 'scope') === 0 ? 'global' : 'user'\n\nconst getApiUrl = (url) => {\n\treturn generateOcsUrl('apps/workflowengine/api/v1/workflows/{scopeValue}', { scopeValue }) + url + '?format=json'\n}\n\nexport {\n\tgetApiUrl,\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport axios from '@nextcloud/axios'\nimport { getApiUrl } from './helpers/api'\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { loadState } from '@nextcloud/initial-state'\n\nVue.use(Vuex)\n\nconst store = new Store({\n\tstate: {\n\t\trules: [],\n\t\tscope: loadState('workflowengine', 'scope'),\n\t\tappstoreEnabled: loadState('workflowengine', 'appstoreenabled'),\n\t\toperations: loadState('workflowengine', 'operators'),\n\n\t\tplugins: Vue.observable({\n\t\t\tchecks: {},\n\t\t\toperators: {},\n\t\t}),\n\n\t\tentities: loadState('workflowengine', 'entities'),\n\t\tevents: loadState('workflowengine', 'entities')\n\t\t\t.map((entity) => entity.events.map(event => {\n\t\t\t\treturn {\n\t\t\t\t\tid: `${entity.id}::${event.eventName}`,\n\t\t\t\t\tentity,\n\t\t\t\t\t...event,\n\t\t\t\t}\n\t\t\t})).flat(),\n\t\tchecks: loadState('workflowengine', 'checks'),\n\t},\n\tmutations: {\n\t\taddRule(state, rule) {\n\t\t\tstate.rules.push({ ...rule, valid: true })\n\t\t},\n\t\tupdateRule(state, rule) {\n\t\t\tconst index = state.rules.findIndex((item) => rule.id === item.id)\n\t\t\tconst newRule = Object.assign({}, rule)\n\t\t\tVue.set(state.rules, index, newRule)\n\t\t},\n\t\tremoveRule(state, rule) {\n\t\t\tconst index = state.rules.findIndex((item) => rule.id === item.id)\n\t\t\tstate.rules.splice(index, 1)\n\t\t},\n\t\taddPluginCheck(state, plugin) {\n\t\t\tVue.set(state.plugins.checks, plugin.class, plugin)\n\t\t},\n\t\taddPluginOperator(state, plugin) {\n\t\t\tplugin = Object.assign(\n\t\t\t\t{ color: 'var(--color-primary-element)' },\n\t\t\t\tplugin, state.operations[plugin.id] || {})\n\t\t\tif (typeof state.operations[plugin.id] !== 'undefined') {\n\t\t\t\tVue.set(state.operations, plugin.id, plugin)\n\t\t\t}\n\t\t},\n\t},\n\tactions: {\n\t\tasync fetchRules(context) {\n\t\t\tconst { data } = await axios.get(getApiUrl(''))\n\t\t\tObject.values(data.ocs.data).flat().forEach((rule) => {\n\t\t\t\tcontext.commit('addRule', rule)\n\t\t\t})\n\t\t},\n\t\tcreateNewRule(context, rule) {\n\t\t\tlet entity = null\n\t\t\tlet events = []\n\t\t\tif (rule.isComplex === false && rule.fixedEntity === '') {\n\t\t\t\tentity = context.state.entities.find((item) => rule.entities && rule.entities[0] === item.id)\n\t\t\t\tentity = entity || Object.values(context.state.entities)[0]\n\t\t\t\tevents = [entity.events[0].eventName]\n\t\t\t}\n\n\t\t\tcontext.commit('addRule', {\n\t\t\t\tid: -(new Date().getTime()),\n\t\t\t\tclass: rule.id,\n\t\t\t\tentity: entity ? entity.id : rule.fixedEntity,\n\t\t\t\tevents,\n\t\t\t\tname: '', // unused in the new ui, there for legacy reasons\n\t\t\t\tchecks: [\n\t\t\t\t\t{ class: null, operator: null, value: '' },\n\t\t\t\t],\n\t\t\t\toperation: rule.operation || '',\n\t\t\t})\n\t\t},\n\t\tupdateRule(context, rule) {\n\t\t\tcontext.commit('updateRule', {\n\t\t\t\t...rule,\n\t\t\t\tevents: typeof rule.events === 'string' ? JSON.parse(rule.events) : rule.events,\n\t\t\t})\n\t\t},\n\t\tremoveRule(context, rule) {\n\t\t\tcontext.commit('removeRule', rule)\n\t\t},\n\t\tasync pushUpdateRule(context, rule) {\n\t\t\tif (context.state.scope === 0) {\n\t\t\t\tawait confirmPassword()\n\t\t\t}\n\t\t\tlet result\n\t\t\tif (rule.id < 0) {\n\t\t\t\tresult = await axios.post(getApiUrl(''), rule)\n\t\t\t} else {\n\t\t\t\tresult = await axios.put(getApiUrl(`/${rule.id}`), rule)\n\t\t\t}\n\t\t\tVue.set(rule, 'id', result.data.ocs.data.id)\n\t\t\tcontext.commit('updateRule', rule)\n\t\t},\n\t\tasync deleteRule(context, rule) {\n\t\t\tawait confirmPassword()\n\t\t\tawait axios.delete(getApiUrl(`/${rule.id}`))\n\t\t\tcontext.commit('removeRule', rule)\n\t\t},\n\t\tsetValid(context, { rule, valid }) {\n\t\t\trule.valid = valid\n\t\t\tcontext.commit('updateRule', rule)\n\t\t},\n\t},\n\tgetters: {\n\t\tgetRules(state) {\n\t\t\treturn state.rules.filter((rule) => typeof state.operations[rule.class] !== 'undefined').sort((rule1, rule2) => {\n\t\t\t\treturn rule1.id - rule2.id || rule2.class - rule1.class\n\t\t\t})\n\t\t},\n\t\tgetOperationForRule(state) {\n\t\t\treturn (rule) => state.operations[rule.class]\n\t\t},\n\t\tgetEntityForOperation(state) {\n\t\t\treturn (operation) => state.entities.find((entity) => operation.fixedEntity === entity.id)\n\t\t},\n\t\tgetEventsForOperation(state) {\n\t\t\treturn (operation) => state.events\n\t\t},\n\n\t\t/**\n\t\t * Return all available checker plugins for a given entity class\n\t\t *\n\t\t * @param {object} state the store state\n\t\t * @return {Function} the available plugins\n\t\t */\n\t\tgetChecksForEntity(state) {\n\t\t\treturn (entity) => {\n\t\t\t\treturn Object.values(state.checks)\n\t\t\t\t\t.filter((check) => check.supportedEntities.indexOf(entity) > -1 || check.supportedEntities.length === 0)\n\t\t\t\t\t.map((check) => state.plugins.checks[check.id])\n\t\t\t\t\t.reduce((obj, item) => {\n\t\t\t\t\t\tobj[item.class] = item\n\t\t\t\t\t\treturn obj\n\t\t\t\t\t}, {})\n\t\t\t}\n\t\t},\n\t},\n})\n\nexport default store\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"event\">\n\t\t<div v-if=\"operation.isComplex && operation.fixedEntity !== ''\" class=\"isComplex\">\n\t\t\t<img class=\"option__icon\" :src=\"entity.icon\">\n\t\t\t<span class=\"option__title option__title_single\">{{ operation.triggerHint }}</span>\n\t\t</div>\n\t\t<Multiselect v-else\n\t\t\t:value=\"currentEvent\"\n\t\t\t:options=\"allEvents\"\n\t\t\ttrack-by=\"id\"\n\t\t\t:multiple=\"true\"\n\t\t\t:auto-limit=\"false\"\n\t\t\t:disabled=\"allEvents.length <= 1\"\n\t\t\t@input=\"updateEvent\">\n\t\t\t<template slot=\"selection\" slot-scope=\"{ values, isOpen }\">\n\t\t\t\t<div v-if=\"values.length && !isOpen\" class=\"eventlist\">\n\t\t\t\t\t<img class=\"option__icon\" :src=\"values[0].entity.icon\">\n\t\t\t\t\t<span v-for=\"(value, index) in values\" :key=\"value.id\" class=\"text option__title option__title_single\">{{ value.displayName }} <span v-if=\"index+1 < values.length\">, </span></span>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<img class=\"option__icon\" :src=\"props.option.entity.icon\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.displayName }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { showWarning } from '@nextcloud/dialogs'\n\nexport default {\n\tname: 'Event',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tentity() {\n\t\t\treturn this.$store.getters.getEntityForOperation(this.operation)\n\t\t},\n\t\toperation() {\n\t\t\treturn this.$store.getters.getOperationForRule(this.rule)\n\t\t},\n\t\tallEvents() {\n\t\t\treturn this.$store.getters.getEventsForOperation(this.operation)\n\t\t},\n\t\tcurrentEvent() {\n\t\t\treturn this.allEvents.filter(event => event.entity.id === this.rule.entity && this.rule.events.indexOf(event.eventName) !== -1)\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateEvent(events) {\n\t\t\tif (events.length === 0) {\n\t\t\t\tshowWarning(t('workflowengine', 'At least one event must be selected'))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst existingEntity = this.rule.entity\n\t\t\tconst newEntities = events.map(event => event.entity.id).filter((value, index, self) => self.indexOf(value) === index)\n\t\t\tlet newEntity = null\n\t\t\tif (newEntities.length > 1) {\n\t\t\t\tnewEntity = newEntities.filter(entity => entity !== existingEntity)[0]\n\t\t\t} else {\n\t\t\t\tnewEntity = newEntities[0]\n\t\t\t}\n\n\t\t\tthis.$set(this.rule, 'entity', newEntity)\n\t\t\tthis.$set(this.rule, 'events', events.filter(event => event.entity.id === newEntity).map(event => event.eventName))\n\t\t\tthis.$emit('update', this.rule)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.event {\n\t\tmargin-bottom: 5px;\n\t}\n\t.isComplex {\n\t\timg {\n\t\t\tvertical-align: text-top;\n\t\t}\n\t\tspan {\n\t\t\tpadding-top: 2px;\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n\t.multiselect {\n\t\twidth: 100%;\n\t\tmax-width: 550px;\n\t\tmargin-top: 4px;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\tdisplay: flex;\n\t}\n\t.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\n\t\tbackground-color: var(--color-main-background) !important;\n\t\tborder: 1px solid transparent;\n\t}\n\n\t.multiselect::v-deep .multiselect__tags {\n\t\tbackground-color: var(--color-main-background) !important;\n\t\theight: auto;\n\t\tmin-height: 34px;\n\t}\n\n\t.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\n\t\tbackground-image: var(--icon-triangle-s-dark);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: right center;\n\t}\n\n\tinput {\n\t\tborder: 1px solid transparent;\n\t}\n\n\t.option__title {\n\t\tmargin-left: 5px;\n\t\tcolor: var(--color-main-text);\n\t}\n\t.option__title_single {\n\t\tfont-weight: 900;\n\t}\n\n\t.option__icon {\n\t\twidth: 16px;\n\t\theight: 16px;\n\t}\n\n\t.eventlist img,\n\t.eventlist .text {\n\t\tvertical-align: middle;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Event.vue?vue&type=template&id=57bd6e67&scoped=true&\"\nimport script from \"./Event.vue?vue&type=script&lang=js&\"\nexport * from \"./Event.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Event.vue?vue&type=style&index=0&id=57bd6e67&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57bd6e67\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"event\"},[(_vm.operation.isComplex && _vm.operation.fixedEntity !== '')?_c('div',{staticClass:\"isComplex\"},[_c('img',{staticClass:\"option__icon\",attrs:{\"src\":_vm.entity.icon}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(_vm.operation.triggerHint))])]):_c('Multiselect',{attrs:{\"value\":_vm.currentEvent,\"options\":_vm.allEvents,\"track-by\":\"id\",\"multiple\":true,\"auto-limit\":false,\"disabled\":_vm.allEvents.length <= 1},on:{\"input\":_vm.updateEvent},scopedSlots:_vm._u([{key:\"selection\",fn:function(ref){\nvar values = ref.values;\nvar isOpen = ref.isOpen;\nreturn [(values.length && !isOpen)?_c('div',{staticClass:\"eventlist\"},[_c('img',{staticClass:\"option__icon\",attrs:{\"src\":values[0].entity.icon}}),_vm._v(\" \"),_vm._l((values),function(value,index){return _c('span',{key:value.id,staticClass:\"text option__title option__title_single\"},[_vm._v(_vm._s(value.displayName)+\" \"),(index+1 < values.length)?_c('span',[_vm._v(\", \")]):_vm._e()])})],2):_vm._e()]}},{key:\"option\",fn:function(props){return [_c('img',{staticClass:\"option__icon\",attrs:{\"src\":props.option.entity.icon}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.displayName))])]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=script&lang=js&\"","<template>\n\t<div v-click-outside=\"hideDelete\" class=\"check\" @click=\"showDelete\">\n\t\t<Multiselect ref=\"checkSelector\"\n\t\t\tv-model=\"currentOption\"\n\t\t\t:options=\"options\"\n\t\t\tlabel=\"name\"\n\t\t\ttrack-by=\"class\"\n\t\t\t:allow-empty=\"false\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a filter')\"\n\t\t\t@input=\"updateCheck\" />\n\t\t<Multiselect v-model=\"currentOperator\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:options=\"operators\"\n\t\t\tclass=\"comparator\"\n\t\t\tlabel=\"name\"\n\t\t\ttrack-by=\"operator\"\n\t\t\t:allow-empty=\"false\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a comparator')\"\n\t\t\t@input=\"updateCheck\" />\n\t\t<component :is=\"currentOption.component\"\n\t\t\tv-if=\"currentOperator && currentComponent\"\n\t\t\tv-model=\"check.value\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:check=\"check\"\n\t\t\tclass=\"option\"\n\t\t\t@input=\"updateCheck\"\n\t\t\t@valid=\"(valid=true) && validate()\"\n\t\t\t@invalid=\"!(valid=false) && validate()\" />\n\t\t<input v-else\n\t\t\tv-model=\"check.value\"\n\t\t\ttype=\"text\"\n\t\t\t:class=\"{ invalid: !valid }\"\n\t\t\t:disabled=\"!currentOption\"\n\t\t\t:placeholder=\"valuePlaceholder\"\n\t\t\tclass=\"option\"\n\t\t\t@input=\"updateCheck\">\n\t\t<Actions v-if=\"deleteVisible || !currentOption\">\n\t\t\t<ActionButton icon=\"icon-close\" @click=\"$emit('remove')\" />\n\t\t</Actions>\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ClickOutside from 'vue-click-outside'\n\nexport default {\n\tname: 'Check',\n\tcomponents: {\n\t\tActionButton,\n\t\tActions,\n\t\tMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tprops: {\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdeleteVisible: false,\n\t\t\tcurrentOption: null,\n\t\t\tcurrentOperator: null,\n\t\t\toptions: [],\n\t\t\tvalid: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tchecks() {\n\t\t\treturn this.$store.getters.getChecksForEntity(this.rule.entity)\n\t\t},\n\t\toperators() {\n\t\t\tif (!this.currentOption) { return [] }\n\t\t\tconst operators = this.checks[this.currentOption.class].operators\n\t\t\tif (typeof operators === 'function') {\n\t\t\t\treturn operators(this.check)\n\t\t\t}\n\t\t\treturn operators\n\t\t},\n\t\tcurrentComponent() {\n\t\t\tif (!this.currentOption) { return [] }\n\t\t\treturn this.checks[this.currentOption.class].component\n\t\t},\n\t\tvaluePlaceholder() {\n\t\t\tif (this.currentOption && this.currentOption.placeholder) {\n\t\t\t\treturn this.currentOption.placeholder(this.check)\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\t},\n\twatch: {\n\t\t'check.operator'() {\n\t\t\tthis.validate()\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.options = Object.values(this.checks)\n\t\tthis.currentOption = this.checks[this.check.class]\n\t\tthis.currentOperator = this.operators.find((operator) => operator.operator === this.check.operator)\n\n\t\tif (this.check.class === null) {\n\t\t\tthis.$nextTick(() => this.$refs.checkSelector.$el.focus())\n\t\t}\n\t\tthis.validate()\n\t},\n\tmethods: {\n\t\tshowDelete() {\n\t\t\tthis.deleteVisible = true\n\t\t},\n\t\thideDelete() {\n\t\t\tthis.deleteVisible = false\n\t\t},\n\t\tvalidate() {\n\t\t\tthis.valid = true\n\t\t\tif (this.currentOption && this.currentOption.validate) {\n\t\t\t\tthis.valid = !!this.currentOption.validate(this.check)\n\t\t\t}\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.invalid = !this.valid\n\t\t\tthis.$emit('validate', this.valid)\n\t\t},\n\t\tupdateCheck() {\n\t\t\tconst matchingOperator = this.operators.findIndex((operator) => this.check.operator === operator.operator)\n\t\t\tif (this.check.class !== this.currentOption.class || matchingOperator === -1) {\n\t\t\t\tthis.currentOperator = this.operators[0]\n\t\t\t}\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.class = this.currentOption.class\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.check.operator = this.currentOperator.operator\n\n\t\t\tthis.validate()\n\n\t\t\tthis.$emit('update', this.check)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.check {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\twidth: 100%;\n\t\tpadding-right: 20px;\n\t\t& > *:not(.close) {\n\t\t\twidth: 180px;\n\t\t}\n\t\t& > .comparator {\n\t\t\tmin-width: 130px;\n\t\t\twidth: 130px;\n\t\t}\n\t\t& > .option {\n\t\t\tmin-width: 230px;\n\t\t\twidth: 230px;\n\t\t}\n\t\t& > .multiselect,\n\t\t& > input[type=text] {\n\t\t\tmargin-right: 5px;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\n\t\t.multiselect::v-deep .multiselect__content-wrapper li>span,\n\t\t.multiselect::v-deep .multiselect__single {\n\t\t\tdisplay: block;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t}\n\tinput[type=text] {\n\t\tmargin: 0;\n\t}\n\t::placeholder {\n\t\tfont-size: 10px;\n\t}\n\tbutton.action-item.action-item--single.icon-close {\n\t\theight: 44px;\n\t\twidth: 44px;\n\t\tmargin-top: -5px;\n\t\tmargin-bottom: -5px;\n\t}\n\t.invalid {\n\t\tborder: 1px solid var(--color-error) !important;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Check.vue?vue&type=template&id=70cc784d&scoped=true&\"\nimport script from \"./Check.vue?vue&type=script&lang=js&\"\nexport * from \"./Check.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Check.vue?vue&type=style&index=0&id=70cc784d&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70cc784d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideDelete),expression:\"hideDelete\"}],staticClass:\"check\",on:{\"click\":_vm.showDelete}},[_c('Multiselect',{ref:\"checkSelector\",attrs:{\"options\":_vm.options,\"label\":\"name\",\"track-by\":\"class\",\"allow-empty\":false,\"placeholder\":_vm.t('workflowengine', 'Select a filter')},on:{\"input\":_vm.updateCheck},model:{value:(_vm.currentOption),callback:function ($$v) {_vm.currentOption=$$v},expression:\"currentOption\"}}),_vm._v(\" \"),_c('Multiselect',{staticClass:\"comparator\",attrs:{\"disabled\":!_vm.currentOption,\"options\":_vm.operators,\"label\":\"name\",\"track-by\":\"operator\",\"allow-empty\":false,\"placeholder\":_vm.t('workflowengine', 'Select a comparator')},on:{\"input\":_vm.updateCheck},model:{value:(_vm.currentOperator),callback:function ($$v) {_vm.currentOperator=$$v},expression:\"currentOperator\"}}),_vm._v(\" \"),(_vm.currentOperator && _vm.currentComponent)?_c(_vm.currentOption.component,{tag:\"component\",staticClass:\"option\",attrs:{\"disabled\":!_vm.currentOption,\"check\":_vm.check},on:{\"input\":_vm.updateCheck,\"valid\":function($event){(_vm.valid=true) && _vm.validate()},\"invalid\":function($event){!(_vm.valid=false) && _vm.validate()}},model:{value:(_vm.check.value),callback:function ($$v) {_vm.$set(_vm.check, \"value\", $$v)},expression:\"check.value\"}}):_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.check.value),expression:\"check.value\"}],staticClass:\"option\",class:{ invalid: !_vm.valid },attrs:{\"type\":\"text\",\"disabled\":!_vm.currentOption,\"placeholder\":_vm.valuePlaceholder},domProps:{\"value\":(_vm.check.value)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.check, \"value\", $event.target.value)},_vm.updateCheck]}}),_vm._v(\" \"),(_vm.deleteVisible || !_vm.currentOption)?_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":function($event){return _vm.$emit('remove')}}})],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"actions__item\" :class=\"{'colored': colored}\" :style=\"{ backgroundColor: colored ? operation.color : 'transparent' }\">\n\t\t<div class=\"icon\" :class=\"operation.iconClass\" :style=\"{ backgroundImage: operation.iconClass ? '' : `url(${operation.icon})` }\" />\n\t\t<div class=\"actions__item__description\">\n\t\t\t<h3>{{ operation.name }}</h3>\n\t\t\t<small>{{ operation.description }}</small>\n\t\t\t<Button v-if=\"colored\">\n\t\t\t\t{{ t('workflowengine', 'Add new flow') }}\n\t\t\t</Button>\n\t\t</div>\n\t\t<div class=\"actions__item_options\">\n\t\t\t<slot />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport Button from '@nextcloud/vue/dist/Components/Button'\n\nexport default {\n\tname: 'Operation',\n\tcomponents: {\n\t\tButton,\n\t},\n\tprops: {\n\t\toperation: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcolored: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t@import \"./../styles/operation\";\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Operation.vue?vue&type=template&id=96600802&scoped=true&\"\nimport script from \"./Operation.vue?vue&type=script&lang=js&\"\nexport * from \"./Operation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Operation.vue?vue&type=style&index=0&id=96600802&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"96600802\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"actions__item\",class:{'colored': _vm.colored},style:({ backgroundColor: _vm.colored ? _vm.operation.color : 'transparent' })},[_c('div',{staticClass:\"icon\",class:_vm.operation.iconClass,style:({ backgroundImage: _vm.operation.iconClass ? '' : (\"url(\" + (_vm.operation.icon) + \")\") })}),_vm._v(\" \"),_c('div',{staticClass:\"actions__item__description\"},[_c('h3',[_vm._v(_vm._s(_vm.operation.name))]),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.operation.description))]),_vm._v(\" \"),(_vm.colored)?_c('Button',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Add new flow'))+\"\\n\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"actions__item_options\"},[_vm._t(\"default\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div v-if=\"operation\" class=\"section rule\" :style=\"{ borderLeftColor: operation.color || '' }\">\n\t\t<div class=\"trigger\">\n\t\t\t<p>\n\t\t\t\t<span>{{ t('workflowengine', 'When') }}</span>\n\t\t\t\t<Event :rule=\"rule\" @update=\"updateRule\" />\n\t\t\t</p>\n\t\t\t<p v-for=\"(check, index) in rule.checks\" :key=\"index\">\n\t\t\t\t<span>{{ t('workflowengine', 'and') }}</span>\n\t\t\t\t<Check :check=\"check\"\n\t\t\t\t\t:rule=\"rule\"\n\t\t\t\t\t@update=\"updateRule\"\n\t\t\t\t\t@validate=\"validate\"\n\t\t\t\t\t@remove=\"removeCheck(check)\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<span />\n\t\t\t\t<input v-if=\"lastCheckComplete\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"check--add\"\n\t\t\t\t\tvalue=\"Add a new filter\"\n\t\t\t\t\t@click=\"onAddFilter\">\n\t\t\t</p>\n\t\t</div>\n\t\t<div class=\"flow-icon icon-confirm\" />\n\t\t<div class=\"action\">\n\t\t\t<Operation :operation=\"operation\" :colored=\"false\">\n\t\t\t\t<component :is=\"operation.options\"\n\t\t\t\t\tv-if=\"operation.options\"\n\t\t\t\t\tv-model=\"rule.operation\"\n\t\t\t\t\t@input=\"updateOperation\" />\n\t\t\t</Operation>\n\t\t\t<div class=\"buttons\">\n\t\t\t\t<Button v-if=\"rule.id < -1 || dirty\" @click=\"cancelRule\">\n\t\t\t\t\t{{ t('workflowengine', 'Cancel') }}\n\t\t\t\t</Button>\n\t\t\t\t<Button v-else-if=\"!dirty\" @click=\"deleteRule\">\n\t\t\t\t\t{{ t('workflowengine', 'Delete') }}\n\t\t\t\t</Button>\n\t\t\t\t<Button :type=\"ruleStatus.type\"\n\t\t\t\t\t@click=\"saveRule\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<component :is=\"ruleStatus.icon\" :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ ruleStatus.title }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t<p v-if=\"error\" class=\"error-message\">\n\t\t\t\t{{ error }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport Button from '@nextcloud/vue/dist/Components/Button'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport CheckMark from 'vue-material-design-icons/Check.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\n\nimport Event from './Event'\nimport Check from './Check'\nimport Operation from './Operation'\n\nexport default {\n\tname: 'Rule',\n\tcomponents: {\n\t\tOperation, Check, Event, Actions, ActionButton, Button, ArrowRight, CheckMark, Close,\n\t},\n\tdirectives: {\n\t\tTooltip,\n\t},\n\tprops: {\n\t\trule: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tediting: false,\n\t\t\tchecks: [],\n\t\t\terror: null,\n\t\t\tdirty: this.rule.id < 0,\n\t\t\toriginalRule: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\toperation() {\n\t\t\treturn this.$store.getters.getOperationForRule(this.rule)\n\t\t},\n\t\truleStatus() {\n\t\t\tif (this.error || !this.rule.valid || this.rule.checks.length === 0 || this.rule.checks.some((check) => check.invalid === true)) {\n\t\t\t\treturn {\n\t\t\t\t\ttitle: t('workflowengine', 'The configuration is invalid'),\n\t\t\t\t\ticon: 'Close',\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttooltip: { placement: 'bottom', show: true, content: this.error },\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dirty) {\n\t\t\t\treturn { title: t('workflowengine', 'Active'), icon: 'CheckMark', type: 'success' }\n\t\t\t}\n\t\t\treturn { title: t('workflowengine', 'Save'), icon: 'ArrowRight', type: 'primary' }\n\n\t\t},\n\t\tlastCheckComplete() {\n\t\t\tconst lastCheck = this.rule.checks[this.rule.checks.length - 1]\n\t\t\treturn typeof lastCheck === 'undefined' || lastCheck.class !== null\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t},\n\tmethods: {\n\t\tasync updateOperation(operation) {\n\t\t\tthis.$set(this.rule, 'operation', operation)\n\t\t\tawait this.updateRule()\n\t\t},\n\t\tvalidate(state) {\n\t\t\tthis.error = null\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\t\tupdateRule() {\n\t\t\tif (!this.dirty) {\n\t\t\t\tthis.dirty = true\n\t\t\t}\n\n\t\t\tthis.error = null\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\t\tasync saveRule() {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('pushUpdateRule', this.rule)\n\t\t\t\tthis.dirty = false\n\t\t\t\tthis.error = null\n\t\t\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Failed to save operation')\n\t\t\t\tthis.error = e.response.data.ocs.meta.message\n\t\t\t}\n\t\t},\n\t\tasync deleteRule() {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('deleteRule', this.rule)\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Failed to delete operation')\n\t\t\t\tthis.error = e.response.data.ocs.meta.message\n\t\t\t}\n\t\t},\n\t\tcancelRule() {\n\t\t\tif (this.rule.id < 0) {\n\t\t\t\tthis.$store.dispatch('removeRule', this.rule)\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('updateRule', this.originalRule)\n\t\t\t\tthis.originalRule = JSON.parse(JSON.stringify(this.rule))\n\t\t\t\tthis.dirty = false\n\t\t\t}\n\t\t},\n\n\t\tasync removeCheck(check) {\n\t\t\tconst index = this.rule.checks.findIndex(item => item === check)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.$delete(this.rule.checks, index)\n\t\t\t}\n\t\t\tthis.$store.dispatch('updateRule', this.rule)\n\t\t},\n\n\t\tonAddFilter() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.rule.checks.push({ class: null, operator: null, value: '' })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n\t.buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: end;\n\n\t\tbutton {\n\t\t\tmargin-left: 5px;\n\t\t}\n\t\tbutton:last-child{\n\t\t\tmargin-right: 10px;\n\t\t}\n\t}\n\n\t.error-message {\n\t\tfloat: right;\n\t\tmargin-right: 10px;\n\t}\n\n\t.flow-icon {\n\t\twidth: 44px;\n\t}\n\n\t.rule {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tborder-left: 5px solid var(--color-primary-element);\n\n\t\t.trigger, .action {\n\t\t\tflex-grow: 1;\n\t\t\tmin-height: 100px;\n\t\t\tmax-width: 700px;\n\t\t}\n\t\t.action {\n\t\t\tmax-width: 400px;\n\t\t\tposition: relative;\n\t\t}\n\t\t.icon-confirm {\n\t\t\tbackground-position: right 27px;\n\t\t\tpadding-right: 20px;\n\t\t\tmargin-right: 20px;\n\t\t}\n\t}\n\t.trigger p, .action p {\n\t\tmin-height: 34px;\n\t\tdisplay: flex;\n\n\t\t& > span {\n\t\t\tmin-width: 50px;\n\t\t\ttext-align: right;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tpadding-right: 10px;\n\t\t\tpadding-top: 6px;\n\t\t}\n\t\t.multiselect {\n\t\t\tflex-grow: 1;\n\t\t\tmax-width: 300px;\n\t\t}\n\t}\n\t.trigger p:first-child span {\n\t\t\tpadding-top: 3px;\n\t}\n\n\t.check--add {\n\t\tbackground-position: 7px center;\n\t\tbackground-color: transparent;\n\t\tpadding-left: 6px;\n\t\tmargin: 0;\n\t\twidth: 180px;\n\t\tborder-radius: var(--border-radius);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tfont-weight: normal;\n\t\ttext-align: left;\n\t\tfont-size: 1em;\n\t}\n\n\t@media (max-width:1400px) {\n\t\t.rule {\n\t\t\t&, .trigger, .action {\n\t\t\t\twidth: 100%;\n\t\t\t\tmax-width: 100%;\n\t\t\t}\n\t\t\t.flow-icon {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Rule.vue?vue&type=template&id=779dc71c&scoped=true&\"\nimport script from \"./Rule.vue?vue&type=script&lang=js&\"\nexport * from \"./Rule.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Rule.vue?vue&type=style&index=0&id=779dc71c&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"779dc71c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.operation)?_c('div',{staticClass:\"section rule\",style:({ borderLeftColor: _vm.operation.color || '' })},[_c('div',{staticClass:\"trigger\"},[_c('p',[_c('span',[_vm._v(_vm._s(_vm.t('workflowengine', 'When')))]),_vm._v(\" \"),_c('Event',{attrs:{\"rule\":_vm.rule},on:{\"update\":_vm.updateRule}})],1),_vm._v(\" \"),_vm._l((_vm.rule.checks),function(check,index){return _c('p',{key:index},[_c('span',[_vm._v(_vm._s(_vm.t('workflowengine', 'and')))]),_vm._v(\" \"),_c('Check',{attrs:{\"check\":check,\"rule\":_vm.rule},on:{\"update\":_vm.updateRule,\"validate\":_vm.validate,\"remove\":function($event){return _vm.removeCheck(check)}}})],1)}),_vm._v(\" \"),_c('p',[_c('span'),_vm._v(\" \"),(_vm.lastCheckComplete)?_c('input',{staticClass:\"check--add\",attrs:{\"type\":\"button\",\"value\":\"Add a new filter\"},on:{\"click\":_vm.onAddFilter}}):_vm._e()])],2),_vm._v(\" \"),_c('div',{staticClass:\"flow-icon icon-confirm\"}),_vm._v(\" \"),_c('div',{staticClass:\"action\"},[_c('Operation',{attrs:{\"operation\":_vm.operation,\"colored\":false}},[(_vm.operation.options)?_c(_vm.operation.options,{tag:\"component\",on:{\"input\":_vm.updateOperation},model:{value:(_vm.rule.operation),callback:function ($$v) {_vm.$set(_vm.rule, \"operation\", $$v)},expression:\"rule.operation\"}}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"buttons\"},[(_vm.rule.id < -1 || _vm.dirty)?_c('Button',{on:{\"click\":_vm.cancelRule}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Cancel'))+\"\\n\\t\\t\\t\")]):(!_vm.dirty)?_c('Button',{on:{\"click\":_vm.deleteRule}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Delete'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('Button',{attrs:{\"type\":_vm.ruleStatus.type},on:{\"click\":_vm.saveRule},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_vm.ruleStatus.icon,{tag:\"component\",attrs:{\"size\":20}})]},proxy:true}],null,false,2383918876)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.ruleStatus.title)+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),(_vm.error)?_c('p',{staticClass:\"error-message\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.error)+\"\\n\\t\\t\")]):_vm._e()],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div id=\"workflowengine\">\n\t\t<SettingsSection :title=\"t('workflowengine', 'Available flows')\"\n\t\t\t:doc-url=\"workflowDocUrl\">\n\n\t\t\t<p v-if=\"scope === 0\" class=\"settings-hint\">\n\t\t\t\t<a href=\"https://nextcloud.com/developer/\">{{ t('workflowengine', 'For details on how to write your own flow, check out the development documentation.') }}</a>\n\t\t\t</p>\n\n\t\t\t<transition-group name=\"slide\" tag=\"div\" class=\"actions\">\n\t\t\t\t<Operation v-for=\"operation in getMainOperations\"\n\t\t\t\t\t:key=\"operation.id\"\n\t\t\t\t\t:operation=\"operation\"\n\t\t\t\t\t@click.native=\"createNewRule(operation)\" />\n\n\t\t\t\t<a v-if=\"showAppStoreHint\"\n\t\t\t\t\t:key=\"'add'\"\n\t\t\t\t\t:href=\"appstoreUrl\"\n\t\t\t\t\tclass=\"actions__item colored more\">\n\t\t\t\t\t<div class=\"icon icon-add\" />\n\t\t\t\t\t<div class=\"actions__item__description\">\n\t\t\t\t\t\t<h3>{{ t('workflowengine', 'More flows') }}</h3>\n\t\t\t\t\t\t<small>{{ t('workflowengine', 'Browse the App Store') }}</small>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t</transition-group>\n\n\t\t\t<div v-if=\"hasMoreOperations\" class=\"actions__more\">\n\t\t\t\t<Button @click=\"showMoreOperations = !showMoreOperations\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<MenuUp v-if=\"showMoreOperations\" :size=\"20\" />\n\t\t\t\t\t\t<MenuDown v-else :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ showMoreOperations ? t('workflowengine', 'Show less') : t('workflowengine', 'Show more') }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\n\t\t\t<h2 v-if=\"scope === 0\" class=\"configured-flows\">\n\t\t\t\t{{ t('workflowengine', 'Configured flows') }}\n\t\t\t</h2>\n\t\t\t<h2 v-else class=\"configured-flows\">\n\t\t\t\t{{ t('workflowengine', 'Your flows') }}\n\t\t\t</h2>\n\t\t</SettingsSection>\n\n\t\t<transition-group v-if=\"rules.length > 0\" name=\"slide\">\n\t\t\t<Rule v-for=\"rule in rules\" :key=\"rule.id\" :rule=\"rule\" />\n\t\t</transition-group>\n\t</div>\n</template>\n\n<script>\nimport Rule from './Rule'\nimport Operation from './Operation'\nimport SettingsSection from '@nextcloud/vue/dist/Components/SettingsSection'\nimport Button from '@nextcloud/vue/dist/Components/Button'\nimport { mapGetters, mapState } from 'vuex'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport MenuUp from 'vue-material-design-icons/MenuUp'\nimport MenuDown from 'vue-material-design-icons/MenuDown'\n\nconst ACTION_LIMIT = 3\n\nexport default {\n\tname: 'Workflow',\n\tcomponents: {\n\t\tButton,\n\t\tMenuDown,\n\t\tMenuUp,\n\t\tOperation,\n\t\tRule,\n\t\tSettingsSection,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMoreOperations: false,\n\t\t\tappstoreUrl: generateUrl('settings/apps/workflow'),\n\t\t\tworkflowDocUrl: loadState('workflowengine', 'doc-url'),\n\t\t}\n\t},\n\tcomputed: {\n\t\t...mapGetters({\n\t\t\trules: 'getRules',\n\t\t}),\n\t\t...mapState({\n\t\t\tappstoreEnabled: 'appstoreEnabled',\n\t\t\tscope: 'scope',\n\t\t\toperations: 'operations',\n\t\t}),\n\t\thasMoreOperations() {\n\t\t\treturn Object.keys(this.operations).length > ACTION_LIMIT\n\t\t},\n\t\tgetMainOperations() {\n\t\t\tif (this.showMoreOperations) {\n\t\t\t\treturn Object.values(this.operations)\n\t\t\t}\n\t\t\treturn Object.values(this.operations).slice(0, ACTION_LIMIT)\n\t\t},\n\t\tshowAppStoreHint() {\n\t\t\treturn this.scope === 0 && this.appstoreEnabled && OC.isUserAdmin()\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$store.dispatch('fetchRules')\n\t},\n\tmethods: {\n\t\tcreateNewRule(operation) {\n\t\t\tthis.$store.dispatch('createNewRule', operation)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t#workflowengine {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t}\n\t.section {\n\t\tmax-width: 100vw;\n\n\t\th2.configured-flows {\n\t\t\tmargin-top: 50px;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\t.actions {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tmax-width: 1200px;\n\t\t.actions__item {\n\t\t\tmax-width: 280px;\n\t\t\tflex-basis: 250px;\n\t\t}\n\t}\n\t.actions__more {\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.slide-enter-active {\n\t\t-moz-transition-duration: 0.3s;\n\t\t-webkit-transition-duration: 0.3s;\n\t\t-o-transition-duration: 0.3s;\n\t\ttransition-duration: 0.3s;\n\t\t-moz-transition-timing-function: ease-in;\n\t\t-webkit-transition-timing-function: ease-in;\n\t\t-o-transition-timing-function: ease-in;\n\t\ttransition-timing-function: ease-in;\n\t}\n\n\t.slide-leave-active {\n\t\t-moz-transition-duration: 0.3s;\n\t\t-webkit-transition-duration: 0.3s;\n\t\t-o-transition-duration: 0.3s;\n\t\ttransition-duration: 0.3s;\n\t\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n\t}\n\n\t.slide-enter-to, .slide-leave {\n\t\tmax-height: 500px;\n\t\toverflow: hidden;\n\t}\n\n\t.slide-enter, .slide-leave-to {\n\t\toverflow: hidden;\n\t\tmax-height: 0;\n\t\tpadding-top: 0;\n\t\tpadding-bottom: 0;\n\t}\n\n\t@import \"./../styles/operation\";\n\n\t.actions__item.more {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=style&index=0&id=2fb0024e&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Workflow.vue?vue&type=style&index=0&id=2fb0024e&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Workflow.vue?vue&type=template&id=2fb0024e&scoped=true&\"\nimport script from \"./Workflow.vue?vue&type=script&lang=js&\"\nexport * from \"./Workflow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Workflow.vue?vue&type=style&index=0&id=2fb0024e&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2fb0024e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"workflowengine\"}},[_c('SettingsSection',{attrs:{\"title\":_vm.t('workflowengine', 'Available flows'),\"doc-url\":_vm.workflowDocUrl}},[(_vm.scope === 0)?_c('p',{staticClass:\"settings-hint\"},[_c('a',{attrs:{\"href\":\"https://nextcloud.com/developer/\"}},[_vm._v(_vm._s(_vm.t('workflowengine', 'For details on how to write your own flow, check out the development documentation.')))])]):_vm._e(),_vm._v(\" \"),_c('transition-group',{staticClass:\"actions\",attrs:{\"name\":\"slide\",\"tag\":\"div\"}},[_vm._l((_vm.getMainOperations),function(operation){return _c('Operation',{key:operation.id,attrs:{\"operation\":operation},nativeOn:{\"click\":function($event){return _vm.createNewRule(operation)}}})}),_vm._v(\" \"),(_vm.showAppStoreHint)?_c('a',{key:'add',staticClass:\"actions__item colored more\",attrs:{\"href\":_vm.appstoreUrl}},[_c('div',{staticClass:\"icon icon-add\"}),_vm._v(\" \"),_c('div',{staticClass:\"actions__item__description\"},[_c('h3',[_vm._v(_vm._s(_vm.t('workflowengine', 'More flows')))]),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.t('workflowengine', 'Browse the App Store')))])])]):_vm._e()],2),_vm._v(\" \"),(_vm.hasMoreOperations)?_c('div',{staticClass:\"actions__more\"},[_c('Button',{on:{\"click\":function($event){_vm.showMoreOperations = !_vm.showMoreOperations}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.showMoreOperations)?_c('MenuUp',{attrs:{\"size\":20}}):_c('MenuDown',{attrs:{\"size\":20}})]},proxy:true}],null,false,3801522717)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.showMoreOperations ? _vm.t('workflowengine', 'Show less') : _vm.t('workflowengine', 'Show more'))+\"\\n\\t\\t\\t\")])],1):_vm._e(),_vm._v(\" \"),(_vm.scope === 0)?_c('h2',{staticClass:\"configured-flows\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Configured flows'))+\"\\n\\t\\t\")]):_c('h2',{staticClass:\"configured-flows\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Your flows'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.rules.length > 0)?_c('transition-group',{attrs:{\"name\":\"slide\"}},_vm._l((_vm.rules),function(rule){return _c('Rule',{key:rule.id,attrs:{\"rule\":rule}})}),1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\nconst regexIPv4 = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\/(3[0-2]|[1-2][0-9]|[1-9])$/\nconst regexIPv6 = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/\n\nconst validateRegex = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexRegex.exec(string) !== null\n}\n\nconst validateIPv4 = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexIPv4.exec(string) !== null\n}\n\nconst validateIPv6 = function(string) {\n\tif (!string) {\n\t\treturn false\n\t}\n\treturn regexIPv6.exec(string) !== null\n}\n\nconst stringValidator = (check) => {\n\tif (check.operator === 'matches' || check.operator === '!matches') {\n\t\treturn validateRegex(check.value)\n\t}\n\treturn true\n}\n\nexport { validateRegex, stringValidator, validateIPv4, validateIPv6 }\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst valueMixin = {\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t}\n\t},\n\twatch: {\n\t\tvalue: {\n\t\t\timmediate: true,\n\t\t\thandler(value) {\n\t\t\t\tthis.updateInternalValue(value)\n\t\t\t},\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateInternalValue(value) {\n\t\t\tthis.newValue = value\n\t\t},\n\t},\n}\n\nexport default valueMixin\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a file type')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span v-if=\"props.option.icon\" class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<img v-else :src=\"props.option.iconUrl\">\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"t('workflowengine', 'e.g. httpd/unix-directory')\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from './../../mixins/valueMixin'\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'FileMimeType',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-folder',\n\t\t\t\t\tlabel: t('workflowengine', 'Folder'),\n\t\t\t\t\tpattern: 'httpd/unix-directory',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-picture',\n\t\t\t\t\tlabel: t('workflowengine', 'Images'),\n\t\t\t\t\tpattern: '/image\\\\/.*/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\n\t\t\t\t\tlabel: t('workflowengine', 'Office documents'),\n\t\t\t\t\tpattern: '/(vnd\\\\.(ms-|openxmlformats-|oasis\\\\.opendocument).*)$/',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\n\t\t\t\t\tlabel: t('workflowengine', 'PDF documents'),\n\t\t\t\t\tpattern: 'application/pdf',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tisPredefined() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom MIME type'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\n\t\t\tif (matchingPredefined) {\n\t\t\t\treturn matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom mimetype'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\t.multiselect >>> .multiselect__content-wrapper li>span,\n\t.multiselect >>> .multiselect__single {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=style&index=0&id=9f636120&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileMimeType.vue?vue&type=style&index=0&id=9f636120&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileMimeType.vue?vue&type=template&id=9f636120&scoped=true&\"\nimport script from \"./FileMimeType.vue?vue&type=script&lang=js&\"\nexport * from \"./FileMimeType.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileMimeType.vue?vue&type=style&index=0&id=9f636120&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9f636120\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a file type'),\"label\":\"label\",\"track-by\":\"pattern\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [(props.option.icon)?_c('span',{staticClass:\"option__icon\",class:props.option.icon}):_c('img',{attrs:{\"src\":props.option.iconUrl}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(props.option.label))])]}},{key:\"option\",fn:function(props){return [(props.option.icon)?_c('span',{staticClass:\"option__icon\",class:props.option.icon}):_c('img',{attrs:{\"src\":props.option.iconUrl}}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.label))])]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\",\"placeholder\":_vm.t('workflowengine', 'e.g. httpd/unix-directory')},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst xmlToJson = (xml) => {\n\tlet obj = {}\n\n\tif (xml.nodeType === 1) {\n\t\tif (xml.attributes.length > 0) {\n\t\t\tobj['@attributes'] = {}\n\t\t\tfor (let j = 0; j < xml.attributes.length; j++) {\n\t\t\t\tconst attribute = xml.attributes.item(j)\n\t\t\t\tobj['@attributes'][attribute.nodeName] = attribute.nodeValue\n\t\t\t}\n\t\t}\n\t} else if (xml.nodeType === 3) {\n\t\tobj = xml.nodeValue\n\t}\n\n\tif (xml.hasChildNodes()) {\n\t\tfor (let i = 0; i < xml.childNodes.length; i++) {\n\t\t\tconst item = xml.childNodes.item(i)\n\t\t\tconst nodeName = item.nodeName\n\t\t\tif (typeof (obj[nodeName]) === 'undefined') {\n\t\t\t\tobj[nodeName] = xmlToJson(item)\n\t\t\t} else {\n\t\t\t\tif (typeof obj[nodeName].push === 'undefined') {\n\t\t\t\t\tconst old = obj[nodeName]\n\t\t\t\t\tobj[nodeName] = []\n\t\t\t\t\tobj[nodeName].push(old)\n\t\t\t\t}\n\t\t\t\tobj[nodeName].push(xmlToJson(item))\n\t\t\t}\n\t\t}\n\t}\n\treturn obj\n}\n\nconst parseXml = (xml) => {\n\tlet dom = null\n\ttry {\n\t\tdom = (new DOMParser()).parseFromString(xml, 'text/xml')\n\t} catch (e) {\n\t\tconsole.error('Failed to parse xml document', e)\n\t}\n\treturn dom\n}\n\nconst xmlToTagList = (xml) => {\n\tconst json = xmlToJson(parseXml(xml))\n\tconst list = json['d:multistatus']['d:response']\n\tconst result = []\n\tfor (const index in list) {\n\t\tconst tag = list[index]['d:propstat']\n\n\t\tif (tag['d:status']['#text'] !== 'HTTP/1.1 200 OK') {\n\t\t\tcontinue\n\t\t}\n\t\tresult.push({\n\t\t\tid: tag['d:prop']['oc:id']['#text'],\n\t\t\tdisplayName: tag['d:prop']['oc:display-name']['#text'],\n\t\t\tcanAssign: tag['d:prop']['oc:can-assign']['#text'] === 'true',\n\t\t\tuserAssignable: tag['d:prop']['oc:user-assignable']['#text'] === 'true',\n\t\t\tuserVisible: tag['d:prop']['oc:user-visible']['#text'] === 'true',\n\t\t})\n\t}\n\treturn result\n}\n\nconst searchTags = function() {\n\treturn axios({\n\t\tmethod: 'PROPFIND',\n\t\turl: generateRemoteUrl('dav') + '/systemtags/',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t\t\t<d:propfind xmlns:d=\"DAV:\" xmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t\t\t <d:prop>\n\t\t\t\t\t\t<oc:id />\n\t\t\t\t\t\t<oc:display-name />\n\t\t\t\t\t\t<oc:user-visible />\n\t\t\t\t\t\t<oc:user-assignable />\n\t\t\t\t\t\t<oc:can-assign />\n\t\t\t\t\t </d:prop>\n\t\t\t\t\t</d:propfind>`,\n\t}).then((response) => {\n\t\treturn xmlToTagList(response.data)\n\t})\n}\n\nexport {\n\tsearchTags,\n}\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Multiselect v-model=\"inputValObjects\"\n\t\t:options=\"tags\"\n\t\t:options-limit=\"5\"\n\t\t:placeholder=\"label\"\n\t\ttrack-by=\"id\"\n\t\t:custom-label=\"tagLabel\"\n\t\tclass=\"multiselect-vue\"\n\t\t:multiple=\"multiple\"\n\t\t:close-on-select=\"false\"\n\t\t:tag-width=\"60\"\n\t\t:disabled=\"disabled\"\n\t\t@input=\"update\">\n\t\t<span slot=\"noResult\">{{ t('core', 'No results') }}</span>\n\t\t<template #option=\"scope\">\n\t\t\t{{ tagLabel(scope.option) }}\n\t\t</template>\n\t</multiselect>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { searchTags } from './api'\n\nlet uuid = 0\nexport default {\n\tname: 'MultiselectTag',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: [String, Array],\n\t\t\tdefault: null,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tmultiple: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tinputValObjects: [],\n\t\t\ttags: [],\n\t\t}\n\t},\n\tcomputed: {\n\t\tid() {\n\t\t\treturn 'settings-input-text-' + this.uuid\n\t\t},\n\t},\n\twatch: {\n\t\tvalue(newVal) {\n\t\t\tthis.inputValObjects = this.getValueObject()\n\t\t},\n\t},\n\tbeforeCreate() {\n\t\tthis.uuid = uuid.toString()\n\t\tuuid += 1\n\t\tsearchTags().then((result) => {\n\t\t\tthis.tags = result\n\t\t\tthis.inputValObjects = this.getValueObject()\n\t\t}).catch(console.error.bind(this))\n\t},\n\tmethods: {\n\t\tgetValueObject() {\n\t\t\tif (this.tags.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (this.multiple) {\n\t\t\t\treturn this.value.filter((tag) => tag !== '').map(\n\t\t\t\t\t(id) => this.tags.find((tag2) => tag2.id === id)\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn this.tags.find((tag) => tag.id === this.value)\n\t\t\t}\n\t\t},\n\t\tupdate() {\n\t\t\tif (this.multiple) {\n\t\t\t\tthis.$emit('input', this.inputValObjects.map((element) => element.id))\n\t\t\t} else {\n\t\t\t\tif (this.inputValObjects === null) {\n\t\t\t\t\tthis.$emit('input', '')\n\t\t\t\t} else {\n\t\t\t\t\tthis.$emit('input', this.inputValObjects.id)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttagLabel({ displayName, userVisible, userAssignable }) {\n\t\t\tif (userVisible === false) {\n\t\t\t\treturn t('systemtags', '%s (invisible)').replace('%s', displayName)\n\t\t\t}\n\t\t\tif (userAssignable === false) {\n\t\t\t\treturn t('systemtags', '%s (restricted)').replace('%s', displayName)\n\t\t\t}\n\t\t\treturn displayName\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MultiselectTag.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MultiselectTag.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileSystemTag.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileSystemTag.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<MultiselectTag v-model=\"newValue\"\n\t\t:multiple=\"false\"\n\t\t:label=\"t('workflowengine', 'Select a tag')\"\n\t\t@input=\"update\" />\n</template>\n\n<script>\nimport { MultiselectTag } from './MultiselectTag'\n\nexport default {\n\tname: 'FileSystemTag',\n\tcomponents: {\n\t\tMultiselectTag,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: [],\n\t\t}\n\t},\n\twatch: {\n\t\tvalue() {\n\t\t\tthis.updateValue()\n\t\t},\n\t},\n\tbeforeMount() {\n\t\tthis.updateValue()\n\t},\n\tmethods: {\n\t\tupdateValue() {\n\t\t\tif (this.value !== '') {\n\t\t\t\tthis.newValue = this.value\n\t\t\t} else {\n\t\t\t\tthis.newValue = null\n\t\t\t}\n\t\t},\n\t\tupdate() {\n\t\t\tthis.$emit('input', this.newValue || '')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./MultiselectTag.vue?vue&type=template&id=73cc22e8&\"\nimport script from \"./MultiselectTag.vue?vue&type=script&lang=js&\"\nexport * from \"./MultiselectTag.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"options\":_vm.tags,\"options-limit\":5,\"placeholder\":_vm.label,\"track-by\":\"id\",\"custom-label\":_vm.tagLabel,\"multiple\":_vm.multiple,\"close-on-select\":false,\"tag-width\":60,\"disabled\":_vm.disabled},on:{\"input\":_vm.update},scopedSlots:_vm._u([{key:\"option\",fn:function(scope){return [_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.tagLabel(scope.option))+\"\\n\\t\")]}}]),model:{value:(_vm.inputValObjects),callback:function ($$v) {_vm.inputValObjects=$$v},expression:\"inputValObjects\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('core', 'No results')))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./FileSystemTag.vue?vue&type=template&id=31f5522d&scoped=true&\"\nimport script from \"./FileSystemTag.vue?vue&type=script&lang=js&\"\nexport * from \"./FileSystemTag.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"31f5522d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('MultiselectTag',{attrs:{\"multiple\":false,\"label\":_vm.t('workflowengine', 'Select a tag')},on:{\"input\":_vm.update},model:{value:(_vm.newValue),callback:function ($$v) {_vm.newValue=$$v},expression:\"newValue\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { stringValidator, validateIPv4, validateIPv6 } from '../../helpers/validators'\nimport FileMimeType from './FileMimeType'\nimport FileSystemTag from './FileSystemTag'\n\nconst stringOrRegexOperators = () => {\n\treturn [\n\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t]\n}\n\nconst FileChecks = [\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileName',\n\t\tname: t('workflowengine', 'File name'),\n\t\toperators: stringOrRegexOperators,\n\t\tplaceholder: (check) => {\n\t\t\tif (check.operator === 'matches' || check.operator === '!matches') {\n\t\t\t\treturn '/^dummy-.+$/i'\n\t\t\t}\n\t\t\treturn 'filename.txt'\n\t\t},\n\t\tvalidate: stringValidator,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileMimeType',\n\t\tname: t('workflowengine', 'File MIME type'),\n\t\toperators: stringOrRegexOperators,\n\t\tcomponent: FileMimeType,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileSize',\n\t\tname: t('workflowengine', 'File size (upload)'),\n\t\toperators: [\n\t\t\t{ operator: 'less', name: t('workflowengine', 'less') },\n\t\t\t{ operator: '!greater', name: t('workflowengine', 'less or equals') },\n\t\t\t{ operator: '!less', name: t('workflowengine', 'greater or equals') },\n\t\t\t{ operator: 'greater', name: t('workflowengine', 'greater') },\n\t\t],\n\t\tplaceholder: (check) => '5 MB',\n\t\tvalidate: (check) => check.value ? check.value.match(/^[0-9]+[ ]?[kmgt]?b$/i) !== null : false,\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestRemoteAddress',\n\t\tname: t('workflowengine', 'Request remote address'),\n\t\toperators: [\n\t\t\t{ operator: 'matchesIPv4', name: t('workflowengine', 'matches IPv4') },\n\t\t\t{ operator: '!matchesIPv4', name: t('workflowengine', 'does not match IPv4') },\n\t\t\t{ operator: 'matchesIPv6', name: t('workflowengine', 'matches IPv6') },\n\t\t\t{ operator: '!matchesIPv6', name: t('workflowengine', 'does not match IPv6') },\n\t\t],\n\t\tplaceholder: (check) => {\n\t\t\tif (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {\n\t\t\t\treturn '::1/128'\n\t\t\t}\n\t\t\treturn '127.0.0.1/32'\n\t\t},\n\t\tvalidate: (check) => {\n\t\t\tif (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {\n\t\t\t\treturn validateIPv6(check.value)\n\t\t\t}\n\t\t\treturn validateIPv4(check.value)\n\t\t},\n\t},\n\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\FileSystemTags',\n\t\tname: t('workflowengine', 'File system tag'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is tagged with') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not tagged with') },\n\t\t],\n\t\tcomponent: FileSystemTag,\n\t},\n]\n\nexport default FileChecks\n","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a user agent')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize -->\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span class=\"option__title option__title_single\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span v-if=\"props.option.$groupLabel\" class=\"option__title\" v-html=\"props.option.$groupLabel\" />\n\t\t\t\t<!-- eslint-disable-next-line vue/no-v-html -->\n\t\t\t\t<span v-else class=\"option__title\" v-html=\"props.option.label\" />\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestUserAgent',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\n\t\t\t\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\n\t\t\t\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: '',\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom user agent'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n\n\t.multiselect .multiselect__content-wrapper li>span {\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.multiselect::v-deep .multiselect__single {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t.option__icon {\n\t\tdisplay: inline-block;\n\t\tmin-width: 30px;\n\t\tbackground-position: left;\n\t}\n\t.option__title {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestUserAgent.vue?vue&type=template&id=475ac1e6&scoped=true&\"\nimport script from \"./RequestUserAgent.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestUserAgent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestUserAgent.vue?vue&type=style&index=0&id=475ac1e6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"475ac1e6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a user agent'),\"label\":\"label\",\"track-by\":\"pattern\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\",domProps:{\"innerHTML\":_vm._s(props.option.label)}})]}},{key:\"option\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),(props.option.$groupLabel)?_c('span',{staticClass:\"option__title\",domProps:{\"innerHTML\":_vm._s(props.option.$groupLabel)}}):_c('span',{staticClass:\"option__title\",domProps:{\"innerHTML\":_vm._s(props.option.label)}})]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\"},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div class=\"timeslot\">\n\t\t<input v-model=\"newValue.startTime\"\n\t\t\ttype=\"text\"\n\t\t\tclass=\"timeslot--start\"\n\t\t\tplaceholder=\"e.g. 08:00\"\n\t\t\t@input=\"update\">\n\t\t<input v-model=\"newValue.endTime\"\n\t\t\ttype=\"text\"\n\t\t\tplaceholder=\"e.g. 18:00\"\n\t\t\t@input=\"update\">\n\t\t<p v-if=\"!valid\" class=\"invalid-hint\">\n\t\t\t{{ t('workflowengine', 'Please enter a valid time span') }}\n\t\t</p>\n\t\t<Multiselect v-show=\"valid\"\n\t\t\tv-model=\"newValue.timezone\"\n\t\t\t:options=\"timezones\"\n\t\t\t@input=\"update\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport moment from 'moment-timezone'\nimport valueMixin from '../../mixins/valueMixin'\n\nconst zones = moment.tz.names()\nexport default {\n\tname: 'RequestTime',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttimezones: zones,\n\t\t\tvalid: false,\n\t\t\tnewValue: {\n\t\t\t\tstartTime: null,\n\t\t\t\tendTime: null,\n\t\t\t\ttimezone: moment.tz.guess(),\n\t\t\t},\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.validate()\n\t},\n\tmethods: {\n\t\tupdateInternalValue(value) {\n\t\t\ttry {\n\t\t\t\tconst data = JSON.parse(value)\n\t\t\t\tif (data.length === 2) {\n\t\t\t\t\tthis.newValue = {\n\t\t\t\t\t\tstartTime: data[0].split(' ', 2)[0],\n\t\t\t\t\t\tendTime: data[1].split(' ', 2)[0],\n\t\t\t\t\t\ttimezone: data[0].split(' ', 2)[1],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// ignore invalid values\n\t\t\t}\n\t\t},\n\t\tvalidate() {\n\t\t\tthis.valid = this.newValue.startTime && this.newValue.startTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i) !== null\n\t\t\t\t&& this.newValue.endTime && this.newValue.endTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i) !== null\n\t\t\t\t&& moment.tz.zone(this.newValue.timezone) !== null\n\t\t\tif (this.valid) {\n\t\t\t\tthis.$emit('valid')\n\t\t\t} else {\n\t\t\t\tthis.$emit('invalid')\n\t\t\t}\n\t\t\treturn this.valid\n\t\t},\n\t\tupdate() {\n\t\t\tif (this.newValue.timezone === null) {\n\t\t\t\tthis.newValue.timezone = moment.tz.guess()\n\t\t\t}\n\t\t\tif (this.validate()) {\n\t\t\t\tconst output = `[\"${this.newValue.startTime} ${this.newValue.timezone}\",\"${this.newValue.endTime} ${this.newValue.timezone}\"]`\n\t\t\t\tthis.$emit('input', output)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.timeslot {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-wrap: wrap;\n\t\tmax-width: 180px;\n\n\t\t.multiselect {\n\t\t\twidth: 100%;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\n\t\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\n\t\t\tborder: 1px solid transparent;\n\t\t}\n\n\t\tinput[type=text] {\n\t\t\twidth: 50%;\n\t\t\tmargin: 0;\n\t\t\tmargin-bottom: 5px;\n\n\t\t\t&.timeslot--start {\n\t\t\t\tmargin-right: 5px;\n\t\t\t\twidth: calc(50% - 5px);\n\t\t\t}\n\t\t}\n\n\t\t.invalid-hint {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestTime.vue?vue&type=template&id=149baca9&scoped=true&\"\nimport script from \"./RequestTime.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestTime.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestTime.vue?vue&type=style&index=0&id=149baca9&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"149baca9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"timeslot\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newValue.startTime),expression:\"newValue.startTime\"}],staticClass:\"timeslot--start\",attrs:{\"type\":\"text\",\"placeholder\":\"e.g. 08:00\"},domProps:{\"value\":(_vm.newValue.startTime)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.newValue, \"startTime\", $event.target.value)},_vm.update]}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newValue.endTime),expression:\"newValue.endTime\"}],attrs:{\"type\":\"text\",\"placeholder\":\"e.g. 18:00\"},domProps:{\"value\":(_vm.newValue.endTime)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.newValue, \"endTime\", $event.target.value)},_vm.update]}}),_vm._v(\" \"),(!_vm.valid)?_c('p',{staticClass:\"invalid-hint\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('workflowengine', 'Please enter a valid time span'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('Multiselect',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.valid),expression:\"valid\"}],attrs:{\"options\":_vm.timezones},on:{\"input\":_vm.update},model:{value:(_vm.newValue.timezone),callback:function ($$v) {_vm.$set(_vm.newValue, \"timezone\", $$v)},expression:\"newValue.timezone\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:placeholder=\"t('workflowengine', 'Select a request URL')\"\n\t\t\tlabel=\"label\"\n\t\t\ttrack-by=\"pattern\"\n\t\t\tgroup-values=\"children\"\n\t\t\tgroup-label=\"label\"\n\t\t\t:options=\"options\"\n\t\t\t:multiple=\"false\"\n\t\t\t:tagging=\"false\"\n\t\t\t@input=\"setValue\">\n\t\t\t<template slot=\"singleLabel\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title option__title_single\">{{ props.option.label }}</span>\n\t\t\t</template>\n\t\t\t<template slot=\"option\" slot-scope=\"props\">\n\t\t\t\t<span class=\"option__icon\" :class=\"props.option.icon\" />\n\t\t\t\t<span class=\"option__title\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\n\t\t\t</template>\n\t\t</Multiselect>\n\t\t<input v-if=\"!isPredefined\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"currentValue.pattern\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t@input=\"updateCustom\">\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport valueMixin from '../../mixins/valueMixin'\n\nexport default {\n\tname: 'RequestURL',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tmixins: [\n\t\tvalueMixin,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tnewValue: '',\n\t\t\tpredefinedTypes: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('workflowengine', 'Predefined URLs'),\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\treturn [...this.predefinedTypes, this.customValue]\n\t\t},\n\t\tplaceholder() {\n\t\t\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\n\t\t\t\treturn '/^https\\\\:\\\\/\\\\/localhost\\\\/index\\\\.php$/i'\n\t\t\t}\n\t\t\treturn 'https://localhost/index.php'\n\t\t},\n\t\tmatchingPredefined() {\n\t\t\treturn this.predefinedTypes\n\t\t\t\t.map(groups => groups.children)\n\t\t\t\t.flat()\n\t\t\t\t.find((type) => this.newValue === type.pattern)\n\t\t},\n\t\tisPredefined() {\n\t\t\treturn !!this.matchingPredefined\n\t\t},\n\t\tcustomValue() {\n\t\t\treturn {\n\t\t\t\tlabel: t('workflowengine', 'Others'),\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\t\t\tpattern: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t},\n\t\tcurrentValue() {\n\t\t\tif (this.matchingPredefined) {\n\t\t\t\treturn this.matchingPredefined\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ticon: 'icon-settings-dark',\n\t\t\t\tlabel: t('workflowengine', 'Custom URL'),\n\t\t\t\tpattern: this.newValue,\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tvalidateRegex(string) {\n\t\t\tconst regexRegex = /^\\/(.*)\\/([gui]{0,3})$/\n\t\t\tconst result = regexRegex.exec(string)\n\t\t\treturn result !== null\n\t\t},\n\t\tsetValue(value) {\n\t\t\t// TODO: check if value requires a regex and set the check operator according to that\n\t\t\tif (value !== null) {\n\t\t\t\tthis.newValue = value.pattern\n\t\t\t\tthis.$emit('input', this.newValue)\n\t\t\t}\n\t\t},\n\t\tupdateCustom(event) {\n\t\t\tthis.newValue = event.target.value\n\t\t\tthis.$emit('input', this.newValue)\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect, input[type='text'] {\n\t\twidth: 100%;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestURL.vue?vue&type=template&id=dd8e16be&scoped=true&\"\nimport script from \"./RequestURL.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestURL.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestURL.vue?vue&type=style&index=0&id=dd8e16be&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dd8e16be\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"placeholder\":_vm.t('workflowengine', 'Select a request URL'),\"label\":\"label\",\"track-by\":\"pattern\",\"group-values\":\"children\",\"group-label\":\"label\",\"options\":_vm.options,\"multiple\":false,\"tagging\":false},on:{\"input\":_vm.setValue},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title option__title_single\"},[_vm._v(_vm._s(props.option.label))])]}},{key:\"option\",fn:function(props){return [_c('span',{staticClass:\"option__icon\",class:props.option.icon}),_vm._v(\" \"),_c('span',{staticClass:\"option__title\"},[_vm._v(_vm._s(props.option.label)+\" \"+_vm._s(props.option.$groupLabel))])]}}])}),_vm._v(\" \"),(!_vm.isPredefined)?_c('input',{attrs:{\"type\":\"text\",\"placeholder\":_vm.placeholder},domProps:{\"value\":_vm.currentValue.pattern},on:{\"input\":_vm.updateCustom}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<Multiselect :value=\"currentValue\"\n\t\t\t:loading=\"status.isLoading && groups.length === 0\"\n\t\t\t:options=\"groups\"\n\t\t\t:multiple=\"false\"\n\t\t\tlabel=\"displayname\"\n\t\t\ttrack-by=\"id\"\n\t\t\t@search-change=\"searchAsync\"\n\t\t\t@input=\"(value) => $emit('input', value.id)\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst groups = []\nconst status = {\n\tisLoading: false,\n}\n\nexport default {\n\tname: 'RequestUserGroup',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tcheck: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => { return {} },\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tgroups,\n\t\t\tstatus,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcurrentValue() {\n\t\t\treturn this.groups.find(group => group.id === this.value) || null\n\t\t},\n\t},\n\tasync mounted() {\n\t\tif (this.groups.length === 0) {\n\t\t\tawait this.searchAsync('')\n\t\t}\n\t\tif (this.currentValue === null) {\n\t\t\tawait this.searchAsync(this.value)\n\t\t}\n\t},\n\tmethods: {\n\t\tsearchAsync(searchQuery) {\n\t\t\tif (this.status.isLoading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.status.isLoading = true\n\t\t\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\n\t\t\t\tresponse.data.ocs.data.groups.forEach((group) => {\n\t\t\t\t\tthis.addGroup({\n\t\t\t\t\t\tid: group.id,\n\t\t\t\t\t\tdisplayname: group.displayname,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tthis.status.isLoading = false\n\t\t\t}, (error) => {\n\t\t\t\tconsole.error('Error while loading group list', error.response)\n\t\t\t})\n\t\t},\n\t\taddGroup(group) {\n\t\t\tconst index = this.groups.findIndex((item) => item.id === group.id)\n\t\t\tif (index === -1) {\n\t\t\t\tthis.groups.push(group)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.multiselect {\n\t\twidth: 100%;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RequestUserGroup.vue?vue&type=template&id=79fa10a5&scoped=true&\"\nimport script from \"./RequestUserGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./RequestUserGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RequestUserGroup.vue?vue&type=style&index=0&id=79fa10a5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"79fa10a5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('Multiselect',{attrs:{\"value\":_vm.currentValue,\"loading\":_vm.status.isLoading && _vm.groups.length === 0,\"options\":_vm.groups,\"multiple\":false,\"label\":\"displayname\",\"track-by\":\"id\"},on:{\"search-change\":_vm.searchAsync,\"input\":function (value) { return _vm.$emit('input', value.id); }}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport RequestUserAgent from './RequestUserAgent'\nimport RequestTime from './RequestTime'\nimport RequestURL from './RequestURL'\nimport RequestUserGroup from './RequestUserGroup'\n\nconst RequestChecks = [\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestURL',\n\t\tname: t('workflowengine', 'Request URL'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t],\n\t\tcomponent: RequestURL,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestTime',\n\t\tname: t('workflowengine', 'Request time'),\n\t\toperators: [\n\t\t\t{ operator: 'in', name: t('workflowengine', 'between') },\n\t\t\t{ operator: '!in', name: t('workflowengine', 'not between') },\n\t\t],\n\t\tcomponent: RequestTime,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\RequestUserAgent',\n\t\tname: t('workflowengine', 'Request user agent'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not') },\n\t\t\t{ operator: 'matches', name: t('workflowengine', 'matches') },\n\t\t\t{ operator: '!matches', name: t('workflowengine', 'does not match') },\n\t\t],\n\t\tcomponent: RequestUserAgent,\n\t},\n\t{\n\t\tclass: 'OCA\\\\WorkflowEngine\\\\Check\\\\UserGroupMembership',\n\t\tname: t('workflowengine', 'User group membership'),\n\t\toperators: [\n\t\t\t{ operator: 'is', name: t('workflowengine', 'is member of') },\n\t\t\t{ operator: '!is', name: t('workflowengine', 'is not member of') },\n\t\t],\n\t\tcomponent: RequestUserGroup,\n\t},\n]\n\nexport default RequestChecks\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport FileChecks from './file'\nimport RequestChecks from './request'\n\nexport default [...FileChecks, ...RequestChecks]\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport store from './store'\nimport Settings from './components/Workflow'\nimport ShippedChecks from './components/Checks'\n\n/**\n * A plugin for displaying a custom value field for checks\n *\n * @typedef {object} CheckPlugin\n * @property {string} class - The PHP class name of the check\n * @property {Comparison[]} operators - A list of possible comparison operations running on the check\n * @property {Vue} component - A vue component to handle the rendering of options\n * The component should handle the v-model directive properly,\n * so it needs a value property to receive data and emit an input\n * event once the data has changed\n * @property {Function} placeholder - Return a placeholder of no custom component is used\n * @property {Function} validate - validate a check if no custom component is used\n */\n\n/**\n * A plugin for extending the admin page repesentation of a operator\n *\n * @typedef {object} OperatorPlugin\n * @property {string} id - The PHP class name of the check\n * @property {string} operation - Default value for the operation field\n * @property {string} color - Custom color code to be applied for the operator selector\n * @property {Vue} component - A vue component to handle the rendering of options\n * The component should handle the v-model directive properly,\n * so it needs a value property to receive data and emit an input\n * event once the data has changed\n */\n\n/**\n * @typedef {object} Comparison\n * @property {string} operator - value the comparison should have, e.g. !less, greater\n * @property {string} name - Translated readable text, e.g. less or equals\n */\n\n/**\n * Public javascript api for apps to register custom plugins\n */\nwindow.OCA.WorkflowEngine = Object.assign({}, OCA.WorkflowEngine, {\n\n\t/**\n\t *\n\t * @param {CheckPlugin} Plugin the plugin to register\n\t */\n\tregisterCheck(Plugin) {\n\t\tstore.commit('addPluginCheck', Plugin)\n\t},\n\t/**\n\t *\n\t * @param {OperatorPlugin} Plugin the plugin to register\n\t */\n\tregisterOperator(Plugin) {\n\t\tstore.commit('addPluginOperator', Plugin)\n\t},\n})\n\n// Register shipped checks\nShippedChecks.forEach((checkPlugin) => window.OCA.WorkflowEngine.registerCheck(checkPlugin))\n\nVue.use(Vuex)\nVue.prototype.t = t\n\nconst View = Vue.extend(Settings)\nconst workflowengine = new View({\n\tstore,\n})\nworkflowengine.$mount('#workflowengine')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".check[data-v-70cc784d]{display:flex;flex-wrap:wrap;width:100%;padding-right:20px}.check>*[data-v-70cc784d]:not(.close){width:180px}.check>.comparator[data-v-70cc784d]{min-width:130px;width:130px}.check>.option[data-v-70cc784d]{min-width:230px;width:230px}.check>.multiselect[data-v-70cc784d],.check>input[type=text][data-v-70cc784d]{margin-right:5px;margin-bottom:5px}.check .multiselect[data-v-70cc784d] .multiselect__content-wrapper li>span,.check .multiselect[data-v-70cc784d] .multiselect__single{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}input[type=text][data-v-70cc784d]{margin:0}[data-v-70cc784d]::placeholder{font-size:10px}button.action-item.action-item--single.icon-close[data-v-70cc784d]{height:44px;width:44px;margin-top:-5px;margin-bottom:-5px}.invalid[data-v-70cc784d]{border:1px solid var(--color-error) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Check.vue\"],\"names\":[],\"mappings\":\"AAsJA,wBACC,YAAA,CACA,cAAA,CACA,UAAA,CACA,kBAAA,CACA,sCACC,WAAA,CAED,oCACC,eAAA,CACA,WAAA,CAED,gCACC,eAAA,CACA,WAAA,CAED,8EAEC,gBAAA,CACA,iBAAA,CAGD,qIAEC,aAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CAGF,kCACC,QAAA,CAED,+BACC,cAAA,CAED,mEACC,WAAA,CACA,UAAA,CACA,eAAA,CACA,kBAAA,CAED,0BACC,8CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.check {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\twidth: 100%;\\n\\tpadding-right: 20px;\\n\\t& > *:not(.close) {\\n\\t\\twidth: 180px;\\n\\t}\\n\\t& > .comparator {\\n\\t\\tmin-width: 130px;\\n\\t\\twidth: 130px;\\n\\t}\\n\\t& > .option {\\n\\t\\tmin-width: 230px;\\n\\t\\twidth: 230px;\\n\\t}\\n\\t& > .multiselect,\\n\\t& > input[type=text] {\\n\\t\\tmargin-right: 5px;\\n\\t\\tmargin-bottom: 5px;\\n\\t}\\n\\n\\t.multiselect::v-deep .multiselect__content-wrapper li>span,\\n\\t.multiselect::v-deep .multiselect__single {\\n\\t\\tdisplay: block;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\ninput[type=text] {\\n\\tmargin: 0;\\n}\\n::placeholder {\\n\\tfont-size: 10px;\\n}\\nbutton.action-item.action-item--single.icon-close {\\n\\theight: 44px;\\n\\twidth: 44px;\\n\\tmargin-top: -5px;\\n\\tmargin-bottom: -5px;\\n}\\n.invalid {\\n\\tborder: 1px solid var(--color-error) !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".timeslot[data-v-149baca9]{display:flex;flex-grow:1;flex-wrap:wrap;max-width:180px}.timeslot .multiselect[data-v-149baca9]{width:100%;margin-bottom:5px}.timeslot .multiselect[data-v-149baca9] .multiselect__tags:not(:hover):not(:focus):not(:active){border:1px solid rgba(0,0,0,0)}.timeslot input[type=text][data-v-149baca9]{width:50%;margin:0;margin-bottom:5px}.timeslot input[type=text].timeslot--start[data-v-149baca9]{margin-right:5px;width:calc(50% - 5px)}.timeslot .invalid-hint[data-v-149baca9]{color:var(--color-text-maxcontrast)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestTime.vue\"],\"names\":[],\"mappings\":\"AA+FA,2BACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,eAAA,CAEA,wCACC,UAAA,CACA,iBAAA,CAGD,gGACC,8BAAA,CAGD,4CACC,SAAA,CACA,QAAA,CACA,iBAAA,CAEA,4DACC,gBAAA,CACA,qBAAA,CAIF,yCACC,mCAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.timeslot {\\n\\tdisplay: flex;\\n\\tflex-grow: 1;\\n\\tflex-wrap: wrap;\\n\\tmax-width: 180px;\\n\\n\\t.multiselect {\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 5px;\\n\\t}\\n\\n\\t.multiselect::v-deep .multiselect__tags:not(:hover):not(:focus):not(:active) {\\n\\t\\tborder: 1px solid transparent;\\n\\t}\\n\\n\\tinput[type=text] {\\n\\t\\twidth: 50%;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-bottom: 5px;\\n\\n\\t\\t&.timeslot--start {\\n\\t\\t\\tmargin-right: 5px;\\n\\t\\t\\twidth: calc(50% - 5px);\\n\\t\\t}\\n\\t}\\n\\n\\t.invalid-hint {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".event[data-v-57bd6e67]{margin-bottom:5px}.isComplex img[data-v-57bd6e67]{vertical-align:text-top}.isComplex span[data-v-57bd6e67]{padding-top:2px;display:inline-block}.multiselect[data-v-57bd6e67]{width:100%;max-width:550px;margin-top:4px}.multiselect[data-v-57bd6e67] .multiselect__single{display:flex}.multiselect[data-v-57bd6e67]:not(.multiselect--active) .multiselect__tags{background-color:var(--color-main-background) !important;border:1px solid rgba(0,0,0,0)}.multiselect[data-v-57bd6e67] .multiselect__tags{background-color:var(--color-main-background) !important;height:auto;min-height:34px}.multiselect[data-v-57bd6e67]:not(.multiselect--disabled) .multiselect__tags .multiselect__single{background-image:var(--icon-triangle-s-dark);background-repeat:no-repeat;background-position:right center}input[data-v-57bd6e67]{border:1px solid rgba(0,0,0,0)}.option__title[data-v-57bd6e67]{margin-left:5px;color:var(--color-main-text)}.option__title_single[data-v-57bd6e67]{font-weight:900}.option__icon[data-v-57bd6e67]{width:16px;height:16px}.eventlist img[data-v-57bd6e67],.eventlist .text[data-v-57bd6e67]{vertical-align:middle}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Event.vue\"],\"names\":[],\"mappings\":\"AAiFA,wBACC,iBAAA,CAGA,gCACC,uBAAA,CAED,iCACC,eAAA,CACA,oBAAA,CAGF,8BACC,UAAA,CACA,eAAA,CACA,cAAA,CAED,mDACC,YAAA,CAED,2EACC,wDAAA,CACA,8BAAA,CAGD,iDACC,wDAAA,CACA,WAAA,CACA,eAAA,CAGD,kGACC,4CAAA,CACA,2BAAA,CACA,gCAAA,CAGD,uBACC,8BAAA,CAGD,gCACC,eAAA,CACA,4BAAA,CAED,uCACC,eAAA,CAGD,+BACC,UAAA,CACA,WAAA,CAGD,kEAEC,qBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.event {\\n\\tmargin-bottom: 5px;\\n}\\n.isComplex {\\n\\timg {\\n\\t\\tvertical-align: text-top;\\n\\t}\\n\\tspan {\\n\\t\\tpadding-top: 2px;\\n\\t\\tdisplay: inline-block;\\n\\t}\\n}\\n.multiselect {\\n\\twidth: 100%;\\n\\tmax-width: 550px;\\n\\tmargin-top: 4px;\\n}\\n.multiselect::v-deep .multiselect__single {\\n\\tdisplay: flex;\\n}\\n.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {\\n\\tbackground-color: var(--color-main-background) !important;\\n\\tborder: 1px solid transparent;\\n}\\n\\n.multiselect::v-deep .multiselect__tags {\\n\\tbackground-color: var(--color-main-background) !important;\\n\\theight: auto;\\n\\tmin-height: 34px;\\n}\\n\\n.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {\\n\\tbackground-image: var(--icon-triangle-s-dark);\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: right center;\\n}\\n\\ninput {\\n\\tborder: 1px solid transparent;\\n}\\n\\n.option__title {\\n\\tmargin-left: 5px;\\n\\tcolor: var(--color-main-text);\\n}\\n.option__title_single {\\n\\tfont-weight: 900;\\n}\\n\\n.option__icon {\\n\\twidth: 16px;\\n\\theight: 16px;\\n}\\n\\n.eventlist img,\\n.eventlist .text {\\n\\tvertical-align: middle;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".actions__item[data-v-96600802]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-96600802]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-96600802]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-96600802]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-96600802],small[data-v-96600802]{padding:6px;display:block}h3[data-v-96600802]{margin:0;padding:0;font-weight:600}small[data-v-96600802]{font-size:10pt;flex-grow:1}.colored[data-v-96600802]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-96600802],.colored:not(.more) small[data-v-96600802]{color:var(--color-primary-text)}.actions__item[data-v-96600802]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-96600802]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-96600802]{padding:0}.actions__item:not(.colored) .icon[data-v-96600802]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-96600802]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-96600802]{filter:invert(1)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/styles/operation.scss\"],\"names\":[],\"mappings\":\"AAAA,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA\",\"sourcesContent\":[\".actions__item {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tflex-direction: column;\\n\\tflex-grow: 1;\\n\\tmargin-left: -1px;\\n\\tpadding: 10px;\\n\\tborder-radius: var(--border-radius-large);\\n\\tmargin-right: 20px;\\n\\tmargin-bottom: 20px;\\n}\\n.actions__item .icon {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 50px;\\n\\tbackground-size: 50px 50px;\\n\\tbackground-position: center center;\\n\\tmargin-top: 10px;\\n\\tmargin-bottom: 10px;\\n\\tbackground-repeat: no-repeat;\\n}\\n.actions__item__description {\\n\\ttext-align: center;\\n\\tflex-grow: 1;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n}\\n.actions__item_options {\\n\\twidth: 100%;\\n\\tmargin-top: 10px;\\n\\tpadding-left: 60px;\\n}\\nh3, small {\\n\\tpadding: 6px;\\n\\tdisplay: block;\\n}\\nh3 {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tfont-weight: 600;\\n}\\nsmall {\\n\\tfont-size: 10pt;\\n\\tflex-grow: 1;\\n}\\n\\n.colored:not(.more) {\\n\\tbackground-color: var(--color-primary-element);\\n\\th3, small {\\n\\t\\tcolor: var(--color-primary-text)\\n\\t}\\n}\\n\\n.actions__item:not(.colored) {\\n\\tflex-direction: row;\\n\\n\\t.actions__item__description {\\n\\t\\tpadding-top: 5px;\\n\\t\\ttext-align: left;\\n\\t\\twidth: calc(100% - 105px);\\n\\t\\tsmall {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n\\t.icon {\\n\\t\\twidth: 50px;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-right: 10px;\\n\\t\\t&:not(.icon-invert) {\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n}\\n\\n.colored .icon-invert {\\n\\tfilter: invert(1);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".buttons[data-v-779dc71c]{display:flex;justify-content:end}.buttons button[data-v-779dc71c]{margin-left:5px}.buttons button[data-v-779dc71c]:last-child{margin-right:10px}.error-message[data-v-779dc71c]{float:right;margin-right:10px}.flow-icon[data-v-779dc71c]{width:44px}.rule[data-v-779dc71c]{display:flex;flex-wrap:wrap;border-left:5px solid var(--color-primary-element)}.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{flex-grow:1;min-height:100px;max-width:700px}.rule .action[data-v-779dc71c]{max-width:400px;position:relative}.rule .icon-confirm[data-v-779dc71c]{background-position:right 27px;padding-right:20px;margin-right:20px}.trigger p[data-v-779dc71c],.action p[data-v-779dc71c]{min-height:34px;display:flex}.trigger p>span[data-v-779dc71c],.action p>span[data-v-779dc71c]{min-width:50px;text-align:right;color:var(--color-text-maxcontrast);padding-right:10px;padding-top:6px}.trigger p .multiselect[data-v-779dc71c],.action p .multiselect[data-v-779dc71c]{flex-grow:1;max-width:300px}.trigger p:first-child span[data-v-779dc71c]{padding-top:3px}.check--add[data-v-779dc71c]{background-position:7px center;background-color:rgba(0,0,0,0);padding-left:6px;margin:0;width:180px;border-radius:var(--border-radius);color:var(--color-text-maxcontrast);font-weight:normal;text-align:left;font-size:1em}@media(max-width: 1400px){.rule[data-v-779dc71c],.rule .trigger[data-v-779dc71c],.rule .action[data-v-779dc71c]{width:100%;max-width:100%}.rule .flow-icon[data-v-779dc71c]{display:none}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Rule.vue\"],\"names\":[],\"mappings\":\"AAqLA,0BACC,YAAA,CACA,mBAAA,CAEA,iCACC,eAAA,CAED,4CACC,iBAAA,CAIF,gCACC,WAAA,CACA,iBAAA,CAGD,4BACC,UAAA,CAGD,uBACC,YAAA,CACA,cAAA,CACA,kDAAA,CAEA,+DACC,WAAA,CACA,gBAAA,CACA,eAAA,CAED,+BACC,eAAA,CACA,iBAAA,CAED,qCACC,8BAAA,CACA,kBAAA,CACA,iBAAA,CAGF,uDACC,eAAA,CACA,YAAA,CAEA,iEACC,cAAA,CACA,gBAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CAED,iFACC,WAAA,CACA,eAAA,CAGF,6CACE,eAAA,CAGF,6BACC,8BAAA,CACA,8BAAA,CACA,gBAAA,CACA,QAAA,CACA,WAAA,CACA,kCAAA,CACA,mCAAA,CACA,kBAAA,CACA,eAAA,CACA,aAAA,CAGD,0BAEE,sFACC,UAAA,CACA,cAAA,CAED,kCACC,YAAA,CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.buttons {\\n\\tdisplay: flex;\\n\\tjustify-content: end;\\n\\n\\tbutton {\\n\\t\\tmargin-left: 5px;\\n\\t}\\n\\tbutton:last-child{\\n\\t\\tmargin-right: 10px;\\n\\t}\\n}\\n\\n.error-message {\\n\\tfloat: right;\\n\\tmargin-right: 10px;\\n}\\n\\n.flow-icon {\\n\\twidth: 44px;\\n}\\n\\n.rule {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tborder-left: 5px solid var(--color-primary-element);\\n\\n\\t.trigger, .action {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-height: 100px;\\n\\t\\tmax-width: 700px;\\n\\t}\\n\\t.action {\\n\\t\\tmax-width: 400px;\\n\\t\\tposition: relative;\\n\\t}\\n\\t.icon-confirm {\\n\\t\\tbackground-position: right 27px;\\n\\t\\tpadding-right: 20px;\\n\\t\\tmargin-right: 20px;\\n\\t}\\n}\\n.trigger p, .action p {\\n\\tmin-height: 34px;\\n\\tdisplay: flex;\\n\\n\\t& > span {\\n\\t\\tmin-width: 50px;\\n\\t\\ttext-align: right;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-right: 10px;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmax-width: 300px;\\n\\t}\\n}\\n.trigger p:first-child span {\\n\\t\\tpadding-top: 3px;\\n}\\n\\n.check--add {\\n\\tbackground-position: 7px center;\\n\\tbackground-color: transparent;\\n\\tpadding-left: 6px;\\n\\tmargin: 0;\\n\\twidth: 180px;\\n\\tborder-radius: var(--border-radius);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tfont-weight: normal;\\n\\ttext-align: left;\\n\\tfont-size: 1em;\\n}\\n\\n@media (max-width:1400px) {\\n\\t.rule {\\n\\t\\t&, .trigger, .action {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t}\\n\\t\\t.flow-icon {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#workflowengine[data-v-2fb0024e]{border-bottom:1px solid var(--color-border)}.section[data-v-2fb0024e]{max-width:100vw}.section h2.configured-flows[data-v-2fb0024e]{margin-top:50px;margin-bottom:0}.actions[data-v-2fb0024e]{display:flex;flex-wrap:wrap;max-width:1200px}.actions .actions__item[data-v-2fb0024e]{max-width:280px;flex-basis:250px}.actions__more[data-v-2fb0024e]{margin-bottom:10px}.slide-enter-active[data-v-2fb0024e]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:ease-in;-webkit-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in}.slide-leave-active[data-v-2fb0024e]{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;-moz-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-webkit-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);-o-transition-timing-function:cubic-bezier(0, 1, 0.5, 1);transition-timing-function:cubic-bezier(0, 1, 0.5, 1)}.slide-enter-to[data-v-2fb0024e],.slide-leave[data-v-2fb0024e]{max-height:500px;overflow:hidden}.slide-enter[data-v-2fb0024e],.slide-leave-to[data-v-2fb0024e]{overflow:hidden;max-height:0;padding-top:0;padding-bottom:0}.actions__item[data-v-2fb0024e]{display:flex;flex-wrap:wrap;flex-direction:column;flex-grow:1;margin-left:-1px;padding:10px;border-radius:var(--border-radius-large);margin-right:20px;margin-bottom:20px}.actions__item .icon[data-v-2fb0024e]{display:block;width:100%;height:50px;background-size:50px 50px;background-position:center center;margin-top:10px;margin-bottom:10px;background-repeat:no-repeat}.actions__item__description[data-v-2fb0024e]{text-align:center;flex-grow:1;display:flex;flex-direction:column;align-items:center}.actions__item_options[data-v-2fb0024e]{width:100%;margin-top:10px;padding-left:60px}h3[data-v-2fb0024e],small[data-v-2fb0024e]{padding:6px;display:block}h3[data-v-2fb0024e]{margin:0;padding:0;font-weight:600}small[data-v-2fb0024e]{font-size:10pt;flex-grow:1}.colored[data-v-2fb0024e]:not(.more){background-color:var(--color-primary-element)}.colored:not(.more) h3[data-v-2fb0024e],.colored:not(.more) small[data-v-2fb0024e]{color:var(--color-primary-text)}.actions__item[data-v-2fb0024e]:not(.colored){flex-direction:row}.actions__item:not(.colored) .actions__item__description[data-v-2fb0024e]{padding-top:5px;text-align:left;width:calc(100% - 105px)}.actions__item:not(.colored) .actions__item__description small[data-v-2fb0024e]{padding:0}.actions__item:not(.colored) .icon[data-v-2fb0024e]{width:50px;margin:0;margin-right:10px}.actions__item:not(.colored) .icon[data-v-2fb0024e]:not(.icon-invert){filter:invert(1)}.colored .icon-invert[data-v-2fb0024e]{filter:invert(1)}.actions__item.more[data-v-2fb0024e]{background-color:var(--color-background-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Workflow.vue\",\"webpack://./apps/workflowengine/src/styles/operation.scss\"],\"names\":[],\"mappings\":\"AAmHA,iCACC,2CAAA,CAED,0BACC,eAAA,CAEA,8CACC,eAAA,CACA,eAAA,CAGF,0BACC,YAAA,CACA,cAAA,CACA,gBAAA,CACA,yCACC,eAAA,CACA,gBAAA,CAGF,gCACC,kBAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,uCAAA,CACA,0CAAA,CACA,qCAAA,CACA,kCAAA,CAGD,qCACC,4BAAA,CACA,+BAAA,CACA,0BAAA,CACA,uBAAA,CACA,0DAAA,CACA,6DAAA,CACA,wDAAA,CACA,qDAAA,CAGD,+DACC,gBAAA,CACA,eAAA,CAGD,+DACC,eAAA,CACA,YAAA,CACA,aAAA,CACA,gBAAA,CC1KD,gCACC,YAAA,CACA,cAAA,CACA,qBAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,wCAAA,CACA,iBAAA,CACA,kBAAA,CAED,sCACC,aAAA,CACA,UAAA,CACA,WAAA,CACA,yBAAA,CACA,iCAAA,CACA,eAAA,CACA,kBAAA,CACA,2BAAA,CAED,6CACC,iBAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAED,wCACC,UAAA,CACA,eAAA,CACA,iBAAA,CAED,2CACC,WAAA,CACA,aAAA,CAED,oBACC,QAAA,CACA,SAAA,CACA,eAAA,CAED,uBACC,cAAA,CACA,WAAA,CAGD,qCACC,6CAAA,CACA,mFACC,+BAAA,CAIF,8CACC,kBAAA,CAEA,0EACC,eAAA,CACA,eAAA,CACA,wBAAA,CACA,gFACC,SAAA,CAGF,oDACC,UAAA,CACA,QAAA,CACA,iBAAA,CACA,sEACC,gBAAA,CAKH,uCACC,gBAAA,CDmGD,qCACC,6CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#workflowengine {\\n\\tborder-bottom: 1px solid var(--color-border);\\n}\\n.section {\\n\\tmax-width: 100vw;\\n\\n\\th2.configured-flows {\\n\\t\\tmargin-top: 50px;\\n\\t\\tmargin-bottom: 0;\\n\\t}\\n}\\n.actions {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tmax-width: 1200px;\\n\\t.actions__item {\\n\\t\\tmax-width: 280px;\\n\\t\\tflex-basis: 250px;\\n\\t}\\n}\\n.actions__more {\\n\\tmargin-bottom: 10px;\\n}\\n\\n.slide-enter-active {\\n\\t-moz-transition-duration: 0.3s;\\n\\t-webkit-transition-duration: 0.3s;\\n\\t-o-transition-duration: 0.3s;\\n\\ttransition-duration: 0.3s;\\n\\t-moz-transition-timing-function: ease-in;\\n\\t-webkit-transition-timing-function: ease-in;\\n\\t-o-transition-timing-function: ease-in;\\n\\ttransition-timing-function: ease-in;\\n}\\n\\n.slide-leave-active {\\n\\t-moz-transition-duration: 0.3s;\\n\\t-webkit-transition-duration: 0.3s;\\n\\t-o-transition-duration: 0.3s;\\n\\ttransition-duration: 0.3s;\\n\\t-moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\t-webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\t-o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n\\ttransition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n}\\n\\n.slide-enter-to, .slide-leave {\\n\\tmax-height: 500px;\\n\\toverflow: hidden;\\n}\\n\\n.slide-enter, .slide-leave-to {\\n\\toverflow: hidden;\\n\\tmax-height: 0;\\n\\tpadding-top: 0;\\n\\tpadding-bottom: 0;\\n}\\n\\n@import \\\"./../styles/operation\\\";\\n\\n.actions__item.more {\\n\\tbackground-color: var(--color-background-dark);\\n}\\n\",\".actions__item {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tflex-direction: column;\\n\\tflex-grow: 1;\\n\\tmargin-left: -1px;\\n\\tpadding: 10px;\\n\\tborder-radius: var(--border-radius-large);\\n\\tmargin-right: 20px;\\n\\tmargin-bottom: 20px;\\n}\\n.actions__item .icon {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 50px;\\n\\tbackground-size: 50px 50px;\\n\\tbackground-position: center center;\\n\\tmargin-top: 10px;\\n\\tmargin-bottom: 10px;\\n\\tbackground-repeat: no-repeat;\\n}\\n.actions__item__description {\\n\\ttext-align: center;\\n\\tflex-grow: 1;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n}\\n.actions__item_options {\\n\\twidth: 100%;\\n\\tmargin-top: 10px;\\n\\tpadding-left: 60px;\\n}\\nh3, small {\\n\\tpadding: 6px;\\n\\tdisplay: block;\\n}\\nh3 {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tfont-weight: 600;\\n}\\nsmall {\\n\\tfont-size: 10pt;\\n\\tflex-grow: 1;\\n}\\n\\n.colored:not(.more) {\\n\\tbackground-color: var(--color-primary-element);\\n\\th3, small {\\n\\t\\tcolor: var(--color-primary-text)\\n\\t}\\n}\\n\\n.actions__item:not(.colored) {\\n\\tflex-direction: row;\\n\\n\\t.actions__item__description {\\n\\t\\tpadding-top: 5px;\\n\\t\\ttext-align: left;\\n\\t\\twidth: calc(100% - 105px);\\n\\t\\tsmall {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n\\t.icon {\\n\\t\\twidth: 50px;\\n\\t\\tmargin: 0;\\n\\t\\tmargin-right: 10px;\\n\\t\\t&:not(.icon-invert) {\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n}\\n\\n.colored .icon-invert {\\n\\tfilter: invert(1);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-9f636120], input[type='text'][data-v-9f636120] {\\n\\twidth: 100%;\\n}\\n.multiselect[data-v-9f636120] .multiselect__content-wrapper li>span,\\n.multiselect[data-v-9f636120] .multiselect__single {\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/FileMimeType.vue\"],\"names\":[],\"mappings\":\";AA4IA;CACA,WAAA;AACA;AACA;;CAEA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a file type')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span v-if=\\\"props.option.icon\\\" class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<img v-else :src=\\\"props.option.iconUrl\\\">\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span v-if=\\\"props.option.icon\\\" class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<img v-else :src=\\\"props.option.iconUrl\\\">\\n\\t\\t\\t\\t<span class=\\\"option__title\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'e.g. httpd/unix-directory')\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from './../../mixins/valueMixin'\\nimport { imagePath } from '@nextcloud/router'\\n\\nexport default {\\n\\tname: 'FileMimeType',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticon: 'icon-folder',\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Folder'),\\n\\t\\t\\t\\t\\tpattern: 'httpd/unix-directory',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticon: 'icon-picture',\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Images'),\\n\\t\\t\\t\\t\\tpattern: '/image\\\\\\\\/.*/',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticonUrl: imagePath('core', 'filetypes/x-office-document'),\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Office documents'),\\n\\t\\t\\t\\t\\tpattern: '/(vnd\\\\\\\\.(ms-|openxmlformats-|oasis\\\\\\\\.opendocument).*)$/',\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ticonUrl: imagePath('core', 'filetypes/application-pdf'),\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'PDF documents'),\\n\\t\\t\\t\\t\\tpattern: 'application/pdf',\\n\\t\\t\\t\\t},\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\\n\\t\\t\\tif (matchingPredefined) {\\n\\t\\t\\t\\treturn true\\n\\t\\t\\t}\\n\\t\\t\\treturn false\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom MIME type'),\\n\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tconst matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.pattern)\\n\\t\\t\\tif (matchingPredefined) {\\n\\t\\t\\t\\treturn matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom mimetype'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.multiselect >>> .multiselect__content-wrapper li>span,\\n\\t.multiselect >>> .multiselect__single {\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-dd8e16be], input[type='text'][data-v-dd8e16be] {\\n\\twidth: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestURL.vue\"],\"names\":[],\"mappings\":\";AA2IA;CACA,WAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a request URL')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\tgroup-values=\\\"children\\\"\\n\\t\\t\\tgroup-label=\\\"label\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\">{{ props.option.label }}</span>\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<span class=\\\"option__title\\\">{{ props.option.label }} {{ props.option.$groupLabel }}</span>\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t:placeholder=\\\"placeholder\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from '../../mixins/valueMixin'\\n\\nexport default {\\n\\tname: 'RequestURL',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tnewValue: '',\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Predefined URLs'),\\n\\t\\t\\t\\t\\tchildren: [\\n\\t\\t\\t\\t\\t\\t{ pattern: 'webdav', label: t('workflowengine', 'Files WebDAV') },\\n\\t\\t\\t\\t\\t],\\n\\t\\t\\t\\t},\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tplaceholder() {\\n\\t\\t\\tif (this.check.operator === 'matches' || this.check.operator === '!matches') {\\n\\t\\t\\t\\treturn '/^https\\\\\\\\:\\\\\\\\/\\\\\\\\/localhost\\\\\\\\/index\\\\\\\\.php$/i'\\n\\t\\t\\t}\\n\\t\\t\\treturn 'https://localhost/index.php'\\n\\t\\t},\\n\\t\\tmatchingPredefined() {\\n\\t\\t\\treturn this.predefinedTypes\\n\\t\\t\\t\\t.map(groups => groups.children)\\n\\t\\t\\t\\t.flat()\\n\\t\\t\\t\\t.find((type) => this.newValue === type.pattern)\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\treturn !!this.matchingPredefined\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Others'),\\n\\t\\t\\t\\tchildren: [\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\t\\t\\tlabel: t('workflowengine', 'Custom URL'),\\n\\t\\t\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t],\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tif (this.matchingPredefined) {\\n\\t\\t\\t\\treturn this.matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom URL'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\t// TODO: check if value requires a regex and set the check operator according to that\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-475ac1e6], input[type='text'][data-v-475ac1e6] {\\n\\twidth: 100%;\\n}\\n.multiselect .multiselect__content-wrapper li>span[data-v-475ac1e6] {\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.multiselect[data-v-475ac1e6] .multiselect__single {\\n\\twidth: 100%;\\n\\tdisplay: flex;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.option__icon[data-v-475ac1e6] {\\n\\tdisplay: inline-block;\\n\\tmin-width: 30px;\\n\\tbackground-position: left;\\n}\\n.option__title[data-v-475ac1e6] {\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestUserAgent.vue\"],\"names\":[],\"mappings\":\";AA8HA;CACA,WAAA;AACA;AAEA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,WAAA;CACA,aAAA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA;AACA;CACA,qBAAA;CACA,eAAA;CACA,yBAAA;AACA;AACA;CACA,mBAAA;CACA,gBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:placeholder=\\\"t('workflowengine', 'Select a user agent')\\\"\\n\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\ttrack-by=\\\"pattern\\\"\\n\\t\\t\\t:options=\\\"options\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\t:tagging=\\\"false\\\"\\n\\t\\t\\t@input=\\\"setValue\\\">\\n\\t\\t\\t<template slot=\\\"singleLabel\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<!-- v-html can be used here as t() always passes our translated strings though DOMPurify.sanitize -->\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span class=\\\"option__title option__title_single\\\" v-html=\\\"props.option.label\\\" />\\n\\t\\t\\t</template>\\n\\t\\t\\t<template slot=\\\"option\\\" slot-scope=\\\"props\\\">\\n\\t\\t\\t\\t<span class=\\\"option__icon\\\" :class=\\\"props.option.icon\\\" />\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span v-if=\\\"props.option.$groupLabel\\\" class=\\\"option__title\\\" v-html=\\\"props.option.$groupLabel\\\" />\\n\\t\\t\\t\\t<!-- eslint-disable-next-line vue/no-v-html -->\\n\\t\\t\\t\\t<span v-else class=\\\"option__title\\\" v-html=\\\"props.option.label\\\" />\\n\\t\\t\\t</template>\\n\\t\\t</Multiselect>\\n\\t\\t<input v-if=\\\"!isPredefined\\\"\\n\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t:value=\\\"currentValue.pattern\\\"\\n\\t\\t\\t@input=\\\"updateCustom\\\">\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport valueMixin from '../../mixins/valueMixin'\\n\\nexport default {\\n\\tname: 'RequestUserAgent',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tmixins: [\\n\\t\\tvalueMixin,\\n\\t],\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tnewValue: '',\\n\\t\\t\\tpredefinedTypes: [\\n\\t\\t\\t\\t{ pattern: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },\\n\\t\\t\\t\\t{ pattern: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },\\n\\t\\t\\t\\t{ pattern: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },\\n\\t\\t\\t\\t{ pattern: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },\\n\\t\\t\\t],\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\toptions() {\\n\\t\\t\\treturn [...this.predefinedTypes, this.customValue]\\n\\t\\t},\\n\\t\\tmatchingPredefined() {\\n\\t\\t\\treturn this.predefinedTypes\\n\\t\\t\\t\\t.find((type) => this.newValue === type.pattern)\\n\\t\\t},\\n\\t\\tisPredefined() {\\n\\t\\t\\treturn !!this.matchingPredefined\\n\\t\\t},\\n\\t\\tcustomValue() {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom user agent'),\\n\\t\\t\\t\\tpattern: '',\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcurrentValue() {\\n\\t\\t\\tif (this.matchingPredefined) {\\n\\t\\t\\t\\treturn this.matchingPredefined\\n\\t\\t\\t}\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ticon: 'icon-settings-dark',\\n\\t\\t\\t\\tlabel: t('workflowengine', 'Custom user agent'),\\n\\t\\t\\t\\tpattern: this.newValue,\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tvalidateRegex(string) {\\n\\t\\t\\tconst regexRegex = /^\\\\/(.*)\\\\/([gui]{0,3})$/\\n\\t\\t\\tconst result = regexRegex.exec(string)\\n\\t\\t\\treturn result !== null\\n\\t\\t},\\n\\t\\tsetValue(value) {\\n\\t\\t\\t// TODO: check if value requires a regex and set the check operator according to that\\n\\t\\t\\tif (value !== null) {\\n\\t\\t\\t\\tthis.newValue = value.pattern\\n\\t\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tupdateCustom(event) {\\n\\t\\t\\tthis.newValue = event.target.value\\n\\t\\t\\tthis.$emit('input', this.newValue)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect, input[type='text'] {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.multiselect .multiselect__content-wrapper li>span {\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\t.multiselect::v-deep .multiselect__single {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\t.option__icon {\\n\\t\\tdisplay: inline-block;\\n\\t\\tmin-width: 30px;\\n\\t\\tbackground-position: left;\\n\\t}\\n\\t.option__title {\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.multiselect[data-v-79fa10a5] {\\n\\twidth: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/workflowengine/src/components/Checks/RequestUserGroup.vue\"],\"names\":[],\"mappings\":\";AA4GA;CACA,WAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div>\\n\\t\\t<Multiselect :value=\\\"currentValue\\\"\\n\\t\\t\\t:loading=\\\"status.isLoading && groups.length === 0\\\"\\n\\t\\t\\t:options=\\\"groups\\\"\\n\\t\\t\\t:multiple=\\\"false\\\"\\n\\t\\t\\tlabel=\\\"displayname\\\"\\n\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t@search-change=\\\"searchAsync\\\"\\n\\t\\t\\t@input=\\\"(value) => $emit('input', value.id)\\\" />\\n\\t</div>\\n</template>\\n\\n<script>\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport axios from '@nextcloud/axios'\\nimport { generateOcsUrl } from '@nextcloud/router'\\n\\nconst groups = []\\nconst status = {\\n\\tisLoading: false,\\n}\\n\\nexport default {\\n\\tname: 'RequestUserGroup',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t},\\n\\tprops: {\\n\\t\\tvalue: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\tdefault: '',\\n\\t\\t},\\n\\t\\tcheck: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\tdefault: () => { return {} },\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tgroups,\\n\\t\\t\\tstatus,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tcurrentValue() {\\n\\t\\t\\treturn this.groups.find(group => group.id === this.value) || null\\n\\t\\t},\\n\\t},\\n\\tasync mounted() {\\n\\t\\tif (this.groups.length === 0) {\\n\\t\\t\\tawait this.searchAsync('')\\n\\t\\t}\\n\\t\\tif (this.currentValue === null) {\\n\\t\\t\\tawait this.searchAsync(this.value)\\n\\t\\t}\\n\\t},\\n\\tmethods: {\\n\\t\\tsearchAsync(searchQuery) {\\n\\t\\t\\tif (this.status.isLoading) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tthis.status.isLoading = true\\n\\t\\t\\treturn axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {\\n\\t\\t\\t\\tresponse.data.ocs.data.groups.forEach((group) => {\\n\\t\\t\\t\\t\\tthis.addGroup({\\n\\t\\t\\t\\t\\t\\tid: group.id,\\n\\t\\t\\t\\t\\t\\tdisplayname: group.displayname,\\n\\t\\t\\t\\t\\t})\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\tthis.status.isLoading = false\\n\\t\\t\\t}, (error) => {\\n\\t\\t\\t\\tconsole.error('Error while loading group list', error.response)\\n\\t\\t\\t})\\n\\t\\t},\\n\\t\\taddGroup(group) {\\n\\t\\t\\tconst index = this.groups.findIndex((item) => item.id === group.id)\\n\\t\\t\\tif (index === -1) {\\n\\t\\t\\t\\tthis.groups.push(group)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.multiselect {\\n\\t\\twidth: 100%;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 2819,\n\t\"./hi.js\": 2819,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 8318;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t8318: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(83282); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","scopeValue","loadState","getApiUrl","url","generateOcsUrl","Vue","Vuex","Store","state","rules","scope","appstoreEnabled","operations","plugins","checks","operators","entities","events","map","entity","event","id","eventName","flat","mutations","addRule","rule","push","valid","updateRule","index","findIndex","item","newRule","Object","assign","removeRule","splice","addPluginCheck","plugin","class","addPluginOperator","color","actions","fetchRules","context","axios","data","values","ocs","forEach","commit","createNewRule","isComplex","fixedEntity","find","Date","getTime","name","operator","value","operation","JSON","parse","pushUpdateRule","confirmPassword","result","deleteRule","setValid","getters","getRules","filter","sort","rule1","rule2","getOperationForRule","getEntityForOperation","getEventsForOperation","getChecksForEntity","check","supportedEntities","indexOf","length","reduce","obj","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","icon","_v","_s","triggerHint","currentEvent","allEvents","on","updateEvent","scopedSlots","_u","key","fn","ref","isOpen","_l","displayName","_e","props","option","directives","rawName","expression","showDelete","t","updateCheck","model","callback","$$v","currentOption","currentOperator","currentComponent","component","tag","$event","validate","$set","invalid","valuePlaceholder","domProps","target","composing","deleteVisible","$emit","colored","style","backgroundColor","iconClass","backgroundImage","description","_t","borderLeftColor","removeCheck","onAddFilter","updateOperation","dirty","cancelRule","ruleStatus","type","saveRule","proxy","title","error","workflowDocUrl","nativeOn","appstoreUrl","showMoreOperations","regexRegex","regexIPv4","regexIPv6","String","default","newValue","watch","immediate","handler","updateInternalValue","methods","currentValue","setValue","iconUrl","label","isPredefined","pattern","updateCustom","xmlToJson","xml","nodeType","attributes","j","attribute","nodeName","nodeValue","hasChildNodes","i","childNodes","old","method","generateRemoteUrl","then","response","json","dom","DOMParser","parseFromString","e","console","parseXml","list","canAssign","userAssignable","userVisible","xmlToTagList","tags","tagLabel","multiple","disabled","update","inputValObjects","slot","stringOrRegexOperators","placeholder","string","exec","FileMimeType","match","validateIPv4","FileSystemTag","$groupLabel","timezones","status","isLoading","groups","searchAsync","RequestURL","RequestTime","RequestUserAgent","RequestUserGroup","FileChecks","RequestChecks","window","OCA","WorkflowEngine","registerCheck","Plugin","store","registerOperator","ShippedChecks","checkPlugin","Settings","$mount","___CSS_LOADER_EXPORT___","module","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","keys","resolve","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","amdD","amdO","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/lib/base.php b/lib/base.php index 814f30b5af3..26ad684a81a 100644 --- a/lib/base.php +++ b/lib/base.php @@ -1048,6 +1048,13 @@ class OC { return; } + // Handle requests for JSON or XML + $acceptHeader = $request->getHeader('Accept'); + if (in_array($acceptHeader, ['application/json', 'application/xml'], true)) { + http_response_code(404); + return; + } + // Someone is logged in if (\OC::$server->getUserSession()->isLoggedIn()) { OC_App::loadApps(); diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 251c547116f..e3572aa833c 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -860,6 +860,7 @@ return array( 'OC\\Core\\Command\\Background\\Base' => $baseDir . '/core/Command/Background/Base.php', 'OC\\Core\\Command\\Background\\Cron' => $baseDir . '/core/Command/Background/Cron.php', 'OC\\Core\\Command\\Background\\Job' => $baseDir . '/core/Command/Background/Job.php', + 'OC\\Core\\Command\\Background\\ListCommand' => $baseDir . '/core/Command/Background/ListCommand.php', 'OC\\Core\\Command\\Background\\WebCron' => $baseDir . '/core/Command/Background/WebCron.php', 'OC\\Core\\Command\\Base' => $baseDir . '/core/Command/Base.php', 'OC\\Core\\Command\\Broadcast\\Test' => $baseDir . '/core/Command/Broadcast/Test.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index d6566462a8e..658f2cdfe2d 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -893,6 +893,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'OC\\Core\\Command\\Background\\Base' => __DIR__ . '/../../..' . '/core/Command/Background/Base.php', 'OC\\Core\\Command\\Background\\Cron' => __DIR__ . '/../../..' . '/core/Command/Background/Cron.php', 'OC\\Core\\Command\\Background\\Job' => __DIR__ . '/../../..' . '/core/Command/Background/Job.php', + 'OC\\Core\\Command\\Background\\ListCommand' => __DIR__ . '/../../..' . '/core/Command/Background/ListCommand.php', 'OC\\Core\\Command\\Background\\WebCron' => __DIR__ . '/../../..' . '/core/Command/Background/WebCron.php', 'OC\\Core\\Command\\Base' => __DIR__ . '/../../..' . '/core/Command/Base.php', 'OC\\Core\\Command\\Broadcast\\Test' => __DIR__ . '/../../..' . '/core/Command/Broadcast/Test.php', diff --git a/lib/private/BackgroundJob/JobList.php b/lib/private/BackgroundJob/JobList.php index 7ab86df8455..20176e45125 100644 --- a/lib/private/BackgroundJob/JobList.php +++ b/lib/private/BackgroundJob/JobList.php @@ -40,21 +40,10 @@ use OCP\IConfig; use OCP\IDBConnection; class JobList implements IJobList { + protected IDBConnection $connection; + protected IConfig $config; + protected ITimeFactory $timeFactory; - /** @var IDBConnection */ - protected $connection; - - /**@var IConfig */ - protected $config; - - /**@var ITimeFactory */ - protected $timeFactory; - - /** - * @param IDBConnection $connection - * @param IConfig $config - * @param ITimeFactory $timeFactory - */ public function __construct(IDBConnection $connection, IConfig $config, ITimeFactory $timeFactory) { $this->connection = $connection; $this->config = $config; @@ -62,10 +51,10 @@ class JobList implements IJobList { } /** - * @param IJob|string $job + * @param IJob|class-string<IJob> $job * @param mixed $argument */ - public function add($job, $argument = null) { + public function add($job, $argument = null): void { if ($job instanceof IJob) { $class = get_class($job); } else { @@ -101,7 +90,7 @@ class JobList implements IJobList { * @param IJob|string $job * @param mixed $argument */ - public function remove($job, $argument = null) { + public function remove($job, $argument = null): void { if ($job instanceof IJob) { $class = get_class($job); } else { @@ -133,24 +122,20 @@ class JobList implements IJobList { } } - /** - * @param int $id - */ - protected function removeById($id) { + protected function removeById(int $id): void { $query = $this->connection->getQueryBuilder(); $query->delete('jobs') ->where($query->expr()->eq('id', $query->createNamedParameter($id, IQueryBuilder::PARAM_INT))); - $query->execute(); + $query->executeStatement(); } /** * check if a job is in the list * - * @param IJob|string $job + * @param IJob|class-string<IJob> $job * @param mixed $argument - * @return bool */ - public function has($job, $argument) { + public function has($job, $argument): bool { if ($job instanceof IJob) { $class = get_class($job); } else { @@ -165,7 +150,7 @@ class JobList implements IJobList { ->andWhere($query->expr()->eq('argument_hash', $query->createNamedParameter(md5($argument)))) ->setMaxResults(1); - $result = $query->execute(); + $result = $query->executeQuery(); $row = $result->fetch(); $result->closeCursor(); @@ -177,13 +162,33 @@ class JobList implements IJobList { * * @return IJob[] * @deprecated 9.0.0 - This method is dangerous since it can cause load and - * memory problems when creating too many instances. + * memory problems when creating too many instances. Use getJobs instead. + */ + public function getAll(): array { + return $this->getJobs(null, null, 0); + } + + /** + * @param IJob|class-string<IJob>|null $job + * @return IJob[] */ - public function getAll() { + public function getJobs($job, ?int $limit, int $offset): array { $query = $this->connection->getQueryBuilder(); $query->select('*') - ->from('jobs'); - $result = $query->execute(); + ->from('jobs') + ->setMaxResults($limit) + ->setFirstResult($offset); + + if ($job !== null) { + if ($job instanceof IJob) { + $class = get_class($job); + } else { + $class = $job; + } + $query->where($query->expr()->eq('class', $query->createNamedParameter($class))); + } + + $result = $query->executeQuery(); $jobs = []; while ($row = $result->fetch()) { @@ -199,9 +204,6 @@ class JobList implements IJobList { /** * get the next job in the list - * - * @param bool $onlyTimeSensitive - * @return IJob|null */ public function getNext(bool $onlyTimeSensitive = false): ?IJob { $query = $this->connection->getQueryBuilder(); @@ -224,7 +226,7 @@ class JobList implements IJobList { ->andWhere($update->expr()->eq('reserved_at', $update->createParameter('reserved_at'))) ->andWhere($update->expr()->eq('last_checked', $update->createParameter('last_checked'))); - $result = $query->execute(); + $result = $query->executeQuery(); $row = $result->fetch(); $result->closeCursor(); @@ -232,7 +234,7 @@ class JobList implements IJobList { $update->setParameter('jobid', $row['id']); $update->setParameter('reserved_at', $row['reserved_at']); $update->setParameter('last_checked', $row['last_checked']); - $count = $update->execute(); + $count = $update->executeStatement(); if ($count === 0) { // Background job already executed elsewhere, try again. @@ -247,7 +249,7 @@ class JobList implements IJobList { ->set('reserved_at', $reset->expr()->literal(0, IQueryBuilder::PARAM_INT)) ->set('last_checked', $reset->createNamedParameter($this->timeFactory->getTime() + 12 * 3600, IQueryBuilder::PARAM_INT)) ->where($reset->expr()->eq('id', $reset->createNamedParameter($row['id'], IQueryBuilder::PARAM_INT))); - $reset->execute(); + $reset->executeStatement(); // Background job from disabled app, try again. return $this->getNext($onlyTimeSensitive); @@ -259,11 +261,7 @@ class JobList implements IJobList { } } - /** - * @param int $id - * @return IJob|null - */ - public function getById($id) { + public function getById(int $id): ?IJob { $row = $this->getDetailsById($id); if ($row) { @@ -292,15 +290,14 @@ class JobList implements IJobList { /** * get the job object from a row in the db * - * @param array $row - * @return IJob|null + * @param array{class:class-string<IJob>, id:mixed, last_run:mixed, argument:string} $row */ - private function buildJob($row) { + private function buildJob(array $row): ?IJob { try { try { // Try to load the job as a service /** @var IJob $job */ - $job = \OC::$server->query($row['class']); + $job = \OCP\Server::get($row['class']); } catch (QueryException $e) { if (class_exists($row['class'])) { $class = $row['class']; @@ -327,33 +324,27 @@ class JobList implements IJobList { /** * set the job that was last ran - * - * @param IJob $job */ - public function setLastJob(IJob $job) { + public function setLastJob(IJob $job): void { $this->unlockJob($job); - $this->config->setAppValue('backgroundjob', 'lastjob', $job->getId()); + $this->config->setAppValue('backgroundjob', 'lastjob', (string)$job->getId()); } /** * Remove the reservation for a job - * - * @param IJob $job */ - public function unlockJob(IJob $job) { + public function unlockJob(IJob $job): void { $query = $this->connection->getQueryBuilder(); $query->update('jobs') ->set('reserved_at', $query->expr()->literal(0, IQueryBuilder::PARAM_INT)) ->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), IQueryBuilder::PARAM_INT))); - $query->execute(); + $query->executeStatement(); } /** * set the lastRun of $job to now - * - * @param IJob $job */ - public function setLastRun(IJob $job) { + public function setLastRun(IJob $job): void { $query = $this->connection->getQueryBuilder(); $query->update('jobs') ->set('last_run', $query->createNamedParameter(time(), IQueryBuilder::PARAM_INT)) @@ -364,25 +355,23 @@ class JobList implements IJobList { $query->set('time_sensitive', $query->createNamedParameter(IJob::TIME_INSENSITIVE)); } - $query->execute(); + $query->executeStatement(); } /** - * @param IJob $job - * @param $timeTaken + * @param int $timeTaken */ - public function setExecutionTime(IJob $job, $timeTaken) { + public function setExecutionTime(IJob $job, $timeTaken): void { $query = $this->connection->getQueryBuilder(); $query->update('jobs') ->set('execution_duration', $query->createNamedParameter($timeTaken, IQueryBuilder::PARAM_INT)) ->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), IQueryBuilder::PARAM_INT))); - $query->execute(); + $query->executeStatement(); } /** * Reset the $job so it executes on the next trigger * - * @param IJob $job * @since 23.0.0 */ public function resetBackgroundJob(IJob $job): void { diff --git a/lib/private/Files/SetupManager.php b/lib/private/Files/SetupManager.php index 876514b473c..f19c9bfa062 100644 --- a/lib/private/Files/SetupManager.php +++ b/lib/private/Files/SetupManager.php @@ -554,10 +554,10 @@ class SetupManager { }); $genericEvents = [ - '\OCA\Circles::onCircleCreation', - '\OCA\Circles::onCircleDestruction', - '\OCA\Circles::onMemberNew', - '\OCA\Circles::onMemberLeaving', + 'OCA\Circles\Events\CreatingCircleEvent', + 'OCA\Circles\Events\DestroyingCircleEvent', + 'OCA\Circles\Events\AddingCircleMemberEvent', + 'OCA\Circles\Events\RemovingCircleMemberEvent', ]; foreach ($genericEvents as $genericEvent) { diff --git a/lib/public/BackgroundJob/IJobList.php b/lib/public/BackgroundJob/IJobList.php index eab37a03f36..8f6449b070b 100644 --- a/lib/public/BackgroundJob/IJobList.php +++ b/lib/public/BackgroundJob/IJobList.php @@ -7,6 +7,7 @@ * @author Noveen Sachdeva <noveen.sachdeva@research.iiit.ac.in> * @author Robin Appelman <robin@icewind.nl> * @author Robin McCorkell <robin@mccorkell.me.uk> + * @author Côme Chilliet <come.chilliet@nextcloud.com> * * @license AGPL-3.0 * @@ -41,66 +42,71 @@ namespace OCP\BackgroundJob; * be specified in the constructor of the job by calling * $this->setInterval($interval) with $interval in seconds. * + * This interface should be used directly and not implemented by an application. + * The implementation is provided by the server. + * * @since 7.0.0 */ interface IJobList { /** * Add a job to the list * - * @param \OCP\BackgroundJob\IJob|string $job + * @param IJob|class-string<IJob> $job * @param mixed $argument The argument to be passed to $job->run() when the job is exectured * @since 7.0.0 */ - public function add($job, $argument = null); + public function add($job, $argument = null): void; /** * Remove a job from the list * - * @param \OCP\BackgroundJob\IJob|string $job + * @param IJob|class-string<IJob> $job * @param mixed $argument * @since 7.0.0 */ - public function remove($job, $argument = null); + public function remove($job, $argument = null): void; /** * check if a job is in the list * - * @param \OCP\BackgroundJob\IJob|string $job + * @param IJob|class-string<IJob> $job * @param mixed $argument - * @return bool * @since 7.0.0 */ - public function has($job, $argument); + public function has($job, $argument): bool; /** * get all jobs in the list * - * @return \OCP\BackgroundJob\IJob[] + * @return IJob[] * @since 7.0.0 * @deprecated 9.0.0 - This method is dangerous since it can cause load and - * memory problems when creating too many instances. + * memory problems when creating too many instances. Use getJobs instead. + */ + public function getAll(): array; + + /** + * Get jobs matching the search + * + * @param IJob|class-string<IJob>|null $job + * @return IJob[] + * @since 25.0.0 */ - public function getAll(); + public function getJobs($job, ?int $limit, int $offset): array; /** * get the next job in the list * - * @param bool $onlyTimeSensitive - * @return \OCP\BackgroundJob\IJob|null * @since 7.0.0 - In 24.0.0 parameter $onlyTimeSensitive got added */ public function getNext(bool $onlyTimeSensitive = false): ?IJob; /** - * @param int $id - * @return \OCP\BackgroundJob\IJob|null * @since 7.0.0 */ - public function getById($id); + public function getById(int $id): ?IJob; /** - * @param int $id - * @return array|null * @since 23.0.0 */ public function getDetailsById(int $id): ?array; @@ -108,40 +114,34 @@ interface IJobList { /** * set the job that was last ran to the current time * - * @param \OCP\BackgroundJob\IJob $job * @since 7.0.0 */ - public function setLastJob(IJob $job); + public function setLastJob(IJob $job): void; /** * Remove the reservation for a job * - * @param IJob $job * @since 9.1.0 */ - public function unlockJob(IJob $job); + public function unlockJob(IJob $job): void; /** * set the lastRun of $job to now * - * @param IJob $job * @since 7.0.0 */ - public function setLastRun(IJob $job); + public function setLastRun(IJob $job): void; /** * set the run duration of $job * - * @param IJob $job - * @param $timeTaken * @since 12.0.0 */ - public function setExecutionTime(IJob $job, $timeTaken); + public function setExecutionTime(IJob $job, int $timeTaken): void; /** * Reset the $job so it executes on the next trigger * - * @param IJob $job * @since 23.0.0 */ public function resetBackgroundJob(IJob $job): void; diff --git a/tests/lib/BackgroundJob/DummyJobList.php b/tests/lib/BackgroundJob/DummyJobList.php index 0751409f62c..be9c06257b7 100644 --- a/tests/lib/BackgroundJob/DummyJobList.php +++ b/tests/lib/BackgroundJob/DummyJobList.php @@ -19,20 +19,20 @@ class DummyJobList extends \OC\BackgroundJob\JobList { /** * @var IJob[] */ - private $jobs = []; + private array $jobs = []; - private $last = 0; + private int $last = 0; public function __construct() { } /** - * @param IJob|string $job + * @param IJob|class-string<IJob> $job * @param mixed $argument */ - public function add($job, $argument = null) { + public function add($job, $argument = null): void { if (is_string($job)) { - /** @var \OC\BackgroundJob\Job $job */ + /** @var IJob $job */ $job = new $job; } $job->setArgument($argument); @@ -45,7 +45,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { * @param IJob|string $job * @param mixed $argument */ - public function remove($job, $argument = null) { + public function remove($job, $argument = null): void { $index = array_search($job, $this->jobs); if ($index !== false) { unset($this->jobs[$index]); @@ -59,7 +59,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { * @param mixed $argument * @return bool */ - public function has($job, $argument) { + public function has($job, $argument): bool { return array_search($job, $this->jobs) !== false; } @@ -68,15 +68,28 @@ class DummyJobList extends \OC\BackgroundJob\JobList { * * @return IJob[] */ - public function getAll() { + public function getAll(): array { return $this->jobs; } + public function getJobs($job, ?int $limit, int $offset): array { + if ($job instanceof IJob) { + $jobClass = get_class($job); + } else { + $jobClass = $job; + } + return array_slice( + array_filter( + $this->jobs, + fn ($job) => ($jobClass === null) || (get_class($job) == $jobClass) + ), + $offset, + $limit + ); + } + /** * get the next job in the list - * - * @param bool $onlyTimeSensitive - * @return IJob|null */ public function getNext(bool $onlyTimeSensitive = false): ?IJob { if (count($this->jobs) > 0) { @@ -96,7 +109,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { * * @param \OC\BackgroundJob\Job $job */ - public function setLastJob(IJob $job) { + public function setLastJob(IJob $job): void { $i = array_search($job, $this->jobs); if ($i !== false) { $this->last = $i; @@ -105,11 +118,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { } } - /** - * @param int $id - * @return IJob - */ - public function getById($id) { + public function getById(int $id): IJob { foreach ($this->jobs as $job) { if ($job->getId() === $id) { return $job; @@ -122,16 +131,11 @@ class DummyJobList extends \OC\BackgroundJob\JobList { return null; } - /** - * set the lastRun of $job to now - * - * @param IJob $job - */ - public function setLastRun(IJob $job) { + public function setLastRun(IJob $job): void { $job->setLastRun(time()); } - public function setExecutionTime(IJob $job, $timeTaken) { + public function setExecutionTime(IJob $job, $timeTaken): void { } public function resetBackgroundJob(IJob $job): void { |