summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/settings/css/settings.css2
-rw-r--r--apps/settings/css/settings.css.map2
-rw-r--r--apps/settings/css/settings.scss13
-rw-r--r--apps/settings/src/components/UserList.vue178
-rw-r--r--apps/settings/src/components/UserList/UserRow.vue128
-rw-r--r--apps/settings/src/components/UserList/UserRowSimple.vue53
-rw-r--r--dist/settings-users-8351.js4
-rw-r--r--dist/settings-users-8351.js.map2
-rw-r--r--dist/settings-vue-settings-apps-users-management.js4
-rw-r--r--dist/settings-vue-settings-apps-users-management.js.map2
-rw-r--r--tests/acceptance/features/bootstrap/UsersSettingsContext.php6
11 files changed, 189 insertions, 205 deletions
diff --git a/apps/settings/css/settings.css b/apps/settings/css/settings.css
index b82b0050a30..621068049df 100644
--- a/apps/settings/css/settings.css
+++ b/apps/settings/css/settings.css
@@ -1 +1 @@
-input#openid,input#webdav{width:20em}.clear{clear:both}.nav-icon-personal-settings{background-image:var(--icon-personal-dark)}.nav-icon-security{background-image:var(--icon-toggle-filelist-dark)}.nav-icon-clientsbox{background-image:var(--icon-change-dark)}.nav-icon-federated-cloud{background-image:var(--icon-share-dark)}.nav-icon-second-factor-backup-codes,.nav-icon-ssl-root-certificate{background-image:var(--icon-password-dark)}#personal-settings-avatar-container{display:inline-grid;grid-template-columns:1fr;grid-template-rows:2fr 1fr 2fr;vertical-align:top}.profile-settings-container{display:inline-grid;grid-template-columns:1fr 1fr 1fr}.personal-show-container{width:100%}.personal-settings-setting-box .section{padding:10px 30px}.personal-settings-setting-box .section .headerbar-label{margin-bottom:0}.personal-settings-setting-box .section input[type=text],.personal-settings-setting-box .section input[type=email],.personal-settings-setting-box .section input[type=tel],.personal-settings-setting-box .section input[type=url]{width:100%}.personal-settings-setting-box-profile{grid-row:3/5}.personal-settings-setting-box-detail{grid-row:5}.personal-settings-setting-box-detail--without-profile{grid-row:3}select#timezone{width:100%}#personal-settings{display:grid;padding:20px;max-width:1700px;grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));grid-column-gap:10px}#personal-settings .section{padding:10px 10px;border:0}#personal-settings .section h2{margin-bottom:12px}#personal-settings .section h3>label{font-weight:bold}#personal-settings .personal-info{margin-right:10%;margin-bottom:12px;margin-top:12px}#personal-settings .personal-info[class^=icon-],#personal-settings .personal-info[class*=" icon-"]{background-position:0px 2px;padding-left:30px;opacity:.7}.development-notice{text-align:center}.development-notice a:not(.link-button){text-decoration:underline}.development-notice a:not(.link-button):hover{background-color:var(--color-primary-element-hover)}.link-button{display:inline-block;margin:16px;padding:14px 20px;background-color:var(--color-primary-element);color:#fff;border-radius:var(--border-radius-pill);border:1px solid var(--color-primary-element);box-shadow:0 2px 9px var(--color-box-shadow)}.link-button:active,.link-button:hover,.link-button:focus{color:var(--color-primary-element);background-color:var(--color-primary-element-text);border-color:var(--color-primary-element) !important}.link-button.icon-file{padding-left:48px;background-position:24px}.personal-settings-container{display:inline-grid;grid-template-columns:1fr 1fr 1fr}.personal-settings-container:after{clear:both}.personal-settings-container>div h3{position:relative;display:inline-flex;flex-wrap:nowrap;justify-content:flex-start;width:100%;align-items:center;gap:8px}.personal-settings-container>div h3>label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-settings-container>div>form span[class^=icon-checkmark],.personal-settings-container>div>form span[class^=icon-error]{position:relative;right:8px;top:-28px;pointer-events:none;float:right}.personal-settings-container .verify{position:relative;left:100%;top:0;height:0}.personal-settings-container .verify img{padding:12px 7px 6px}.personal-settings-container .verify-action{cursor:pointer}.personal-settings-container input:disabled{background-color:#fff;color:#000;border:none;opacity:100}.verification-dialog{display:none;right:-9px;top:40px;width:275px}.verification-dialog p{padding:10px}.verification-dialog .verificationCode{font-family:monospace;display:block;overflow-wrap:break-word}.federation-menu{position:relative;cursor:pointer;width:44px;height:44px;padding:10px;margin:0;background:none;border:none}.federation-menu:hover,.federation-menu:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill)}.federation-menu:hover .icon-federation-menu,.federation-menu:focus .icon-federation-menu{opacity:.8}.federation-menu .icon-federation-menu{padding-left:16px;background-size:16px;background-position:left center;opacity:.3;cursor:inherit}.federation-menu .icon-federation-menu .icon-triangle-s{display:inline-block;vertical-align:middle;cursor:inherit}.federation-menu .federationScopeMenu{top:44px}.federation-menu .federationScopeMenu.popovermenu .menuitem{font-size:12.8px;line-height:1.6em}.federation-menu .federationScopeMenu.popovermenu .menuitem .menuitem-text-detail{opacity:.75}.federation-menu .federationScopeMenu.popovermenu .menuitem.active{box-shadow:inset 2px 0 var(--color-primary-element)}.federation-menu .federationScopeMenu.popovermenu .menuitem.active .menuitem-text{font-weight:bold}.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled{opacity:.5;cursor:default}.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled *{cursor:default}.clientsbox img{height:60px}#sslCertificate tr.expired{background-color:rgba(255,0,0,.5)}#sslCertificate td{padding:5px}#displaynameerror,#displaynamechanged{display:none}input#identity{width:20em}#showWizard{display:inline-block}.msg.success{color:#fff;background-color:#47a447;padding:3px}.msg.error{color:#fff;background-color:#d2322d;padding:3px}table.nostyle label{margin-right:2em}table.nostyle td{padding:.2em 0}#security-password #passwordform{display:flex;flex-wrap:wrap;flex-direction:column;gap:1rem}#security-password #passwordform .input-control{display:flex;flex-wrap:wrap;flex-direction:column}#security-password #passwordform .input-control label{margin-bottom:.5rem}#security-password #passwordform #pass1,#security-password #passwordform .personal-show-container{flex-shrink:1;width:300px;min-width:150px}#security-password #passwordform .personal-show-container #pass2{position:relative;top:.5rem}#security-password #passwordform .personal-show-container .personal-show-label{top:34px !important;margin-right:0;margin-top:0 !important;right:3px}#security-password #passwordform #pass2{width:100%}#security-password #passwordform .password-state{display:inline-block}#security-password #passwordform .strengthify-wrapper{position:absolute;left:0;width:100%;border-radius:0 0 2px 2px;margin-top:5px;overflow:hidden;height:3px}#two-factor-auth h3{margin-top:24px}#two-factor-auth li>div{margin-left:20px}#two-factor-auth .two-factor-provider-settings-icon{width:16px;height:16px;vertical-align:sub;filter:var(--background-invert-if-dark)}.isgroup .groupname{width:85%;display:block;overflow:hidden;text-overflow:ellipsis}.isgroup.active .groupname{width:65%}li.active .delete,li.active .rename{display:block}.app-navigation-entry-utils .delete,.app-navigation-entry-utils .rename{display:none}#usersearchform{position:absolute;top:2px;right:0}#usersearchform input{width:150px}#usersearchform label{font-weight:bold}table.grid{width:100%}table.grid th{height:2em;color:#999;border-bottom:1px solid var(--color-border);padding:0 .5em;padding-left:.8em;text-align:left;font-weight:normal}table.grid td{border-bottom:1px solid var(--color-border);padding:0 .5em;padding-left:.8em;text-align:left;font-weight:normal}td.name,th.name{padding-left:.8em;min-width:5em;max-width:12em;text-overflow:ellipsis;overflow:hidden}td.password,th.password{padding-left:.8em}td.password>img,th.password>img{visibility:hidden}td.displayName>img,th.displayName>img{visibility:hidden}td.password,td.mailAddress,th.password,th.mailAddress{min-width:5em;max-width:12em;cursor:pointer}td.password span,td.mailAddress span,th.password span,th.mailAddress span{width:90%;display:inline-block;text-overflow:ellipsis;overflow:hidden}td.mailAddress,th.mailAddress{cursor:pointer}td.password>span,th.password>span{margin-right:1.2em;color:#c7c7c7}span.usersLastLoginTooltip{white-space:nowrap}#app-content>svg.app-filter{float:left;height:0;width:0}#app-category-app-bundles{margin-bottom:20px}.appinfo{margin:1em 40px}#app-navigation img{margin-bottom:-3px;margin-right:6px;width:16px}#app-navigation li span.no-icon{padding-left:32px}#app-navigation ul li.active>span.utils .delete,#app-navigation ul li.active>span.utils .rename{display:block}#app-navigation .appwarning{background:#fcc}#app-navigation.appwarning:hover{background:#fbb}#app-navigation .app-external{color:var(--color-text-maxcontrast)}span.version{margin-left:1em;margin-right:1em;color:var(--color-text-maxcontrast)}.app-version{color:var(--color-text-maxcontrast)}.app-level span{color:var(--color-text-maxcontrast);background-color:rgba(0,0,0,0);border:1px solid var(--color-text-maxcontrast);border-radius:var(--border-radius);padding:3px 6px}.app-level a{padding:10px;margin:-6px;white-space:nowrap}.app-level .official{background-position:left center;background-position:5px center;padding-left:25px}.app-level .supported{border-color:var(--color-success);background-position:left center;background-position:5px center;padding-left:25px;color:var(--color-success)}.app-score{position:relative;top:4px;opacity:.5}.app-settings-content #searchresults{display:none}#apps-list.store .section{border:0}#apps-list.store .app-name{display:block;margin:5px 0}#apps-list.store .app-name,#apps-list.store .app-image *{cursor:pointer}#apps-list.store .app-summary{opacity:.7}#apps-list.store .app-image-icon .icon-settings-dark{width:100%;height:150px;background-size:45px;opacity:.5}#apps-list.store .app-score-image{height:14px}#apps-list.store .actions{margin-top:10px}#app-sidebar #app-details-view h2 .icon-settings-dark,#app-sidebar #app-details-view h2 svg{display:inline-block;width:16px;height:16px;margin-right:10px;opacity:.7}#app-sidebar #app-details-view .app-level{clear:right;width:100%}#app-sidebar #app-details-view .app-level .supported,#app-sidebar #app-details-view .app-level .official{vertical-align:top}#app-sidebar #app-details-view .app-level .app-score-image{float:right}#app-sidebar #app-details-view .app-author,#app-sidebar #app-details-view .app-licence{color:var(--color-text-maxcontrast)}#app-sidebar #app-details-view .app-dependencies{margin:10px 0}#app-sidebar #app-details-view .app-description p{margin:10px 0}#app-sidebar #app-details-view .close{position:absolute;top:0;right:0;padding:14px;opacity:.5;z-index:1;width:44px;height:44px}#app-sidebar #app-details-view .actions{display:flex;align-items:center}#app-sidebar #app-details-view .actions .app-groups{padding:5px}#app-sidebar #app-details-view .appslink{text-decoration:underline;margin-right:5px}#app-sidebar #app-details-view .app-level,#app-sidebar #app-details-view .actions,#app-sidebar #app-details-view .documentation,#app-sidebar #app-details-view .app-dependencies,#app-sidebar #app-details-view .app-description{margin:20px 0}@media only screen and (min-width: 1601px){.store .section{width:25%}.with-app-sidebar .store .section{width:33%}}@media only screen and (max-width: 1600px){.store .section{width:25%}.with-app-sidebar .store .section{width:33%}}@media only screen and (max-width: 1400px){.store .section{width:33%}.with-app-sidebar .store .section{width:50%}}@media only screen and (max-width: 900px){.store .section{width:50%}.with-app-sidebar .store .section{width:100%}}@media only screen and (max-width: 1024px){.store .section{width:50%}}@media only screen and (max-width: 480px){.store .section{width:100%}}@media only screen and (max-width: 900px){.apps-list.installed .app-version,.apps-list.installed .app-level{display:none !important}}@media only screen and (max-width: 500px){.apps-list.installed .app-groups{display:none !important}}.section{margin-bottom:0}.section:not(:last-child){border-bottom:1px solid var(--color-border)}.section h2{margin-bottom:22px}.section h2 .icon-info{padding:6px 20px;vertical-align:text-bottom;display:inline-block}.followupsection{display:block;padding:0 30px 30px 30px}.app-image{position:relative;height:150px;opacity:1;overflow:hidden}.app-name,.app-version,.app-score,.app-level{display:inline-block}.app-description-toggle-show,.app-description-toggle-hide{clear:both;padding:7px 0;cursor:pointer;opacity:.5}.app-description-container{clear:both;position:relative;top:7px}.app-description{clear:both}#app-category-1{margin-bottom:18px}#app-category-925{text-transform:capitalize}.app-dependencies{color:#ce3702}.missing-dependencies{list-style:initial;list-style-type:initial;list-style-position:inside}.apps-list{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list .section{cursor:pointer}.apps-list .app-list-move{transition:transform 1s}.apps-list #app-list-update-all{margin-left:10px}.apps-list .toolbar{height:60px;padding:8px;padding-left:60px;width:100%;background-color:var(--color-main-background);position:sticky;top:0;z-index:1;display:flex;align-items:center}.apps-list.installed{margin-bottom:100px}.apps-list.installed .apps-list-container{display:table;width:100%;height:auto;margin-top:60px}.apps-list.installed .section{display:table-row;padding:0;margin:0}.apps-list.installed .section>*{display:table-cell;height:initial;vertical-align:middle;float:none;border-bottom:1px solid var(--color-border);padding:6px;box-sizing:border-box}.apps-list.installed .section.selected{background-color:var(--color-background-dark)}.apps-list.installed .groups-enable{margin-top:0}.apps-list.installed .groups-enable label{margin-right:3px}.apps-list.installed .app-image{width:44px;height:auto;text-align:right}.apps-list.installed .app-image-icon svg,.apps-list.installed .app-image-icon .icon-settings-dark{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.apps-list.installed .actions{text-align:right}.apps-list.installed .actions .icon-loading-small{display:inline-block;top:4px;margin-right:10px}.apps-list:not(.installed) .app-image-icon svg{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.apps-list.hidden{display:none}.apps-list .section{position:relative;flex:0 0 auto}.apps-list .section h2.app-name{display:block;margin:8px 0}.apps-list .section:hover{background-color:var(--color-background-dark)}.apps-list .app-description p{margin:10px 0}.apps-list .app-description ul{list-style:disc}.apps-list .app-description ol{list-style:decimal}.apps-list .app-description ol ol,.apps-list .app-description ol ul{padding-left:15px}.apps-list .app-description>ul,.apps-list .app-description>ol{margin-left:19px}.apps-list .app-description ul ol,.apps-list .app-description ul ul{padding-left:15px}.apps-list .apps-header{display:table-row;position:relative}.apps-list .apps-header div{display:table-cell;height:70px}.apps-list .apps-header h2{display:table-cell;position:absolute;padding-left:6px;padding-top:15px}.apps-list .apps-header h2 .enable{position:relative;top:-1px;margin-left:12px}.apps-list .apps-header h2+.section{margin-top:50px}#apps-list-search .section h2{margin-bottom:0}#log{white-space:normal;margin-bottom:14px}#lessLog{display:none}table.grid td.date{white-space:nowrap}#log-section p{margin-top:20px}#security-warning-state-ok span,#security-warning-state-warning span,#security-warning-state-failure span,#security-warning-state-loading span{vertical-align:middle}#security-warning-state-ok span.message,#security-warning-state-warning span.message,#security-warning-state-failure span.message,#security-warning-state-loading span.message{padding:12px}#security-warning-state-ok span.icon,#security-warning-state-warning span.icon,#security-warning-state-failure span.icon,#security-warning-state-loading span.icon{width:32px;height:32px;background-position:center center;display:inline-block;border-radius:50%}#security-warning-state-ok span.icon-checkmark-white,#security-warning-state-warning span.icon-checkmark-white,#security-warning-state-failure span.icon-checkmark-white,#security-warning-state-loading span.icon-checkmark-white{background-color:var(--color-success)}#security-warning-state-ok span.icon-error-white,#security-warning-state-warning span.icon-error-white,#security-warning-state-failure span.icon-error-white,#security-warning-state-loading span.icon-error-white{background-color:var(--color-warning)}#security-warning-state-ok span.icon-close-white,#security-warning-state-warning span.icon-close-white,#security-warning-state-failure span.icon-close-white,#security-warning-state-loading span.icon-close-white{background-color:var(--color-error)}#shareAPI.loading>div{display:none}#shareAPI p{padding-bottom:.8em}#shareAPI .indent{padding-left:28px}#shareAPI .double-indent{padding-left:56px}#shareAPI .nocheckbox{padding-left:20px}#shareApiDefaultPermissionsSection label{margin-right:20px}#fileSharingSettings h3{display:inline-block}#publicShareDisclaimerText{width:calc(100% - 23px);max-width:600px;height:150px;margin-left:20px;box-sizing:border-box}.icon-info{padding:11px 20px;vertical-align:text-bottom;opacity:.5}#two-factor-auth h2,#shareAPI h2,#mail_general_settings h2{display:inline-block}.mail_settings p label:first-child{display:inline-block;width:300px;text-align:right}.mail_settings p select:nth-child(2),.mail_settings p input:not([type=button]){width:143px}#mail_smtpport{width:60px}.cronlog{margin-left:10px}.status{display:inline-block;height:16px;width:16px;vertical-align:text-bottom}.status.success{border-radius:50%}#selectGroups select{box-sizing:border-box;display:inline-block;height:36px;padding:7px 10px}#log .log-message{word-break:break-all;min-width:180px}span.success{background-color:var(--color-success);border-radius:var(--border-radius)}span.error{background-color:var(--color-error)}span.indeterminate{background-color:var(--color-warning);border-radius:40% 0}doesnotexist:-o-prefocus,.strengthify-wrapper{left:185px;width:129px}.trusted-domain-warning{color:#fff;padding:5px;background:#ce3702;border-radius:5px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}#postsetupchecks ul{margin-left:44px;list-style:disc}#postsetupchecks ul li{margin:10px 0}#postsetupchecks ul ul{list-style:circle}#postsetupchecks .loading{height:50px;background-position:left center}#postsetupchecks .errors,#postsetupchecks .errors a{color:var(--color-error)}#postsetupchecks .warnings,#postsetupchecks .warnings a{color:var(--color-warning)}#postsetupchecks .hint{margin:20px 0}#security-warning a{text-decoration:underline}#security-warning .extra-top-margin{margin-top:12px}#admin-tips li{list-style:initial}#admin-tips li a{display:inline-block;padding:3px 0}#warning{color:red}.settings-hint{margin-top:-12px;margin-bottom:12px;opacity:.7}#body-settings #app-content.user-list-grid{display:grid;grid-column-gap:20px;grid-auto-rows:minmax(60px, max-content)}#body-settings #app-content.user-list-grid .row{display:flex;display:grid;min-height:60px;grid-row-start:span 1;grid-gap:3px;align-items:center;grid-template-columns:44px minmax(190px, 1fr) minmax(160px, 1fr) minmax(160px, 1fr) minmax(240px, 1fr) minmax(240px, 1fr) minmax(160px, 1fr) minmax(240px, 1fr) repeat(auto-fit, minmax(160px, 1fr));border-bottom:var(--color-border) 1px solid}#body-settings #app-content.user-list-grid .row.disabled{opacity:.5}#body-settings #app-content.user-list-grid .row .name,#body-settings #app-content.user-list-grid .row .password,#body-settings #app-content.user-list-grid .row .mailAddress,#body-settings #app-content.user-list-grid .row .languages,#body-settings #app-content.user-list-grid .row .storageLocation,#body-settings #app-content.user-list-grid .row .userBackend,#body-settings #app-content.user-list-grid .row .lastLogin{min-width:160px}#body-settings #app-content.user-list-grid .row .name doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .name .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .password doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .password .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .mailAddress doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .mailAddress .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .languages doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .languages .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .storageLocation doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .storageLocation .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .userBackend doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .userBackend .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .lastLogin doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .lastLogin .strengthify-wrapper{color:var(--color-text-dark);vertical-align:baseline;text-overflow:ellipsis}#body-settings #app-content.user-list-grid .row:not(.row--editable).name,#body-settings #app-content.user-list-grid .row:not(.row--editable).password,#body-settings #app-content.user-list-grid .row:not(.row--editable).displayName,#body-settings #app-content.user-list-grid .row:not(.row--editable).mailAddress,#body-settings #app-content.user-list-grid .row:not(.row--editable).userBackend,#body-settings #app-content.user-list-grid .row:not(.row--editable).languages{overflow:hidden}#body-settings #app-content.user-list-grid .row:not(.row--editable) .groups,#body-settings #app-content.user-list-grid .row:not(.row--editable) .subadmins{overflow:auto;max-height:100%}#body-settings #app-content.user-list-grid .row .managers,#body-settings #app-content.user-list-grid .row .groups,#body-settings #app-content.user-list-grid .row .subadmins,#body-settings #app-content.user-list-grid .row .quota{min-width:160px}#body-settings #app-content.user-list-grid .row .managers .multiselect,#body-settings #app-content.user-list-grid .row .groups .multiselect,#body-settings #app-content.user-list-grid .row .subadmins .multiselect,#body-settings #app-content.user-list-grid .row .quota .multiselect{width:100%;color:var(--color-text-dark);vertical-align:baseline}#body-settings #app-content.user-list-grid .row .managers progress,#body-settings #app-content.user-list-grid .row .groups progress,#body-settings #app-content.user-list-grid .row .subadmins progress,#body-settings #app-content.user-list-grid .row .quota progress{max-width:95%}#body-settings #app-content.user-list-grid .row .obfuscated{width:400px;opacity:.7}#body-settings #app-content.user-list-grid .row .userActions{display:flex;justify-content:flex-end;right:0px;min-width:88px}#body-settings #app-content.user-list-grid .row .subtitle{color:var(--color-text-maxcontrast);vertical-align:baseline}#body-settings #app-content.user-list-grid .row#grid-header{position:sticky;align-self:normal;background-color:var(--color-main-background);z-index:100;top:0}#body-settings #app-content.user-list-grid .row#grid-header.sticky{box-shadow:0 -2px 10px 1px var(--color-box-shadow)}#body-settings #app-content.user-list-grid .row#grid-header{color:var(--color-text-maxcontrast);border-bottom-width:thin}#body-settings #app-content.user-list-grid .row#grid-header #headerDisplayName,#body-settings #app-content.user-list-grid .row#grid-header #headerPassword,#body-settings #app-content.user-list-grid .row#grid-header #headerAddress,#body-settings #app-content.user-list-grid .row#grid-header #headerGroups,#body-settings #app-content.user-list-grid .row#grid-header #headerSubAdmins,#body-settings #app-content.user-list-grid .row#grid-header #theHeaderUserBackend,#body-settings #app-content.user-list-grid .row#grid-header #theHeaderLastLogin,#body-settings #app-content.user-list-grid .row#grid-header #headerQuota,#body-settings #app-content.user-list-grid .row#grid-header #theHeaderStorageLocation,#body-settings #app-content.user-list-grid .row#grid-header #headerLanguages{padding-left:7px;text-transform:none;color:var(--color-text-maxcontrast);vertical-align:baseline}#body-settings #app-content.user-list-grid .row:hover:not(#grid-header){box-shadow:5px 0 0 var(--color-primary-element) inset}#body-settings #app-content.user-list-grid .row>form{width:100%}#body-settings #app-content.user-list-grid .row>td,#body-settings #app-content.user-list-grid .row>form{grid-row:1;display:inline-flex;color:var(--color-text-lighter);flex-grow:1}#body-settings #app-content.user-list-grid .row>td>input:not(:focus):not(:active),#body-settings #app-content.user-list-grid .row>form>input:not(:focus):not(:active){border-color:rgba(0,0,0,0);cursor:pointer}#body-settings #app-content.user-list-grid .row>td>input:focus+.icon-confirm,#body-settings #app-content.user-list-grid .row>td>input:active+.icon-confirm,#body-settings #app-content.user-list-grid .row>form>input:focus+.icon-confirm,#body-settings #app-content.user-list-grid .row>form>input:active+.icon-confirm{display:block !important}#body-settings #app-content.user-list-grid .row>td:not(.userActions)>input:not([type=submit]),#body-settings #app-content.user-list-grid .row>form:not(.userActions)>input:not([type=submit]){width:100%;min-width:0}#body-settings #app-content.user-list-grid .row>td.name,#body-settings #app-content.user-list-grid .row>form.name{word-break:break-all}#body-settings #app-content.user-list-grid .row>td.displayName>input,#body-settings #app-content.user-list-grid .row>td.mailAddress>input,#body-settings #app-content.user-list-grid .row>form.displayName>input,#body-settings #app-content.user-list-grid .row>form.mailAddress>input{text-overflow:ellipsis;flex-grow:1}#body-settings #app-content.user-list-grid .row>td.name,#body-settings #app-content.user-list-grid .row>td.userBackend,#body-settings #app-content.user-list-grid .row>form.name,#body-settings #app-content.user-list-grid .row>form.userBackend{line-height:1.3em;max-height:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}#body-settings #app-content.user-list-grid .row>td.name .subtitle,#body-settings #app-content.user-list-grid .row>form.name .subtitle{color:var(--color-main-text)}#body-settings #app-content.user-list-grid .row>td.quota,#body-settings #app-content.user-list-grid .row>form.quota{display:flex;justify-content:left;white-space:nowrap;position:relative}#body-settings #app-content.user-list-grid .row>td.quota progress,#body-settings #app-content.user-list-grid .row>form.quota progress{width:150px;margin-top:35px;height:3px}#body-settings #app-content.user-list-grid .row>td .icon-confirm,#body-settings #app-content.user-list-grid .row>form .icon-confirm{flex:0 0 auto;cursor:pointer}#body-settings #app-content.user-list-grid .row>td .icon-confirm:not(:active),#body-settings #app-content.user-list-grid .row>form .icon-confirm:not(:active){display:none}#body-settings #app-content.user-list-grid .row>td.avatar,#body-settings #app-content.user-list-grid .row>form.avatar{height:32px;width:32px;margin:6px}#body-settings #app-content.user-list-grid .row>td.avatar img,#body-settings #app-content.user-list-grid .row>form.avatar img{display:block}#body-settings #app-content.user-list-grid .row>td.userActions,#body-settings #app-content.user-list-grid .row>form.userActions{display:flex;justify-content:flex-end}#body-settings #app-content.user-list-grid .row>td.userActions #newsubmit,#body-settings #app-content.user-list-grid .row>form.userActions #newsubmit{width:100%}#body-settings #app-content.user-list-grid .row>td.userActions .toggleUserActions,#body-settings #app-content.user-list-grid .row>form.userActions .toggleUserActions{position:relative;display:flex;align-items:center;background-color:var(--color-main-background)}#body-settings #app-content.user-list-grid .row>td.userActions .toggleUserActions .icon-more,#body-settings #app-content.user-list-grid .row>form.userActions .toggleUserActions .icon-more{width:44px;height:44px;opacity:.5;cursor:pointer}#body-settings #app-content.user-list-grid .row>td.userActions .toggleUserActions .icon-more:focus,#body-settings #app-content.user-list-grid .row>td.userActions .toggleUserActions .icon-more:hover,#body-settings #app-content.user-list-grid .row>td.userActions .toggleUserActions .icon-more:active,#body-settings #app-content.user-list-grid .row>form.userActions .toggleUserActions .icon-more:focus,#body-settings #app-content.user-list-grid .row>form.userActions .toggleUserActions .icon-more:hover,#body-settings #app-content.user-list-grid .row>form.userActions .toggleUserActions .icon-more:active{opacity:.7;background-color:var(--color-background-dark)}#body-settings #app-content.user-list-grid .row>td.userActions .feedback,#body-settings #app-content.user-list-grid .row>form.userActions .feedback{display:flex;align-items:center;white-space:nowrap;transition:opacity 200ms ease-in-out}#body-settings #app-content.user-list-grid .row>td.userActions .feedback .icon-checkmark,#body-settings #app-content.user-list-grid .row>form.userActions .feedback .icon-checkmark{opacity:.5;margin-right:5px}#body-settings #app-content.user-list-grid .row>td .multiselect.multiselect-vue,#body-settings #app-content.user-list-grid .row>form .multiselect.multiselect-vue{min-width:100%;width:100%}#body-settings #app-content.user-list-grid .infinite-loading-container{display:flex;align-items:center;justify-content:center;grid-row-start:span 4}#body-settings #app-content.user-list-grid .users-list-end{opacity:.5;user-select:none}.animated{animation:blink-animation 1s steps(5, start) 4}@keyframes blink-animation{to{opacity:.6}}@-webkit-keyframes blink-animation{to{opacity:1}}/*# sourceMappingURL=settings.css.map */
+input#openid,input#webdav{width:20em}.clear{clear:both}.nav-icon-personal-settings{background-image:var(--icon-personal-dark)}.nav-icon-security{background-image:var(--icon-toggle-filelist-dark)}.nav-icon-clientsbox{background-image:var(--icon-change-dark)}.nav-icon-federated-cloud{background-image:var(--icon-share-dark)}.nav-icon-second-factor-backup-codes,.nav-icon-ssl-root-certificate{background-image:var(--icon-password-dark)}#personal-settings-avatar-container{display:inline-grid;grid-template-columns:1fr;grid-template-rows:2fr 1fr 2fr;vertical-align:top}.profile-settings-container{display:inline-grid;grid-template-columns:1fr 1fr 1fr}.personal-show-container{width:100%}.personal-settings-setting-box .section{padding:10px 30px}.personal-settings-setting-box .section .headerbar-label{margin-bottom:0}.personal-settings-setting-box .section input[type=text],.personal-settings-setting-box .section input[type=email],.personal-settings-setting-box .section input[type=tel],.personal-settings-setting-box .section input[type=url]{width:100%}.personal-settings-setting-box-profile{grid-row:3/5}.personal-settings-setting-box-detail{grid-row:5}.personal-settings-setting-box-detail--without-profile{grid-row:3}select#timezone{width:100%}#personal-settings{display:grid;padding:20px;max-width:1700px;grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));grid-column-gap:10px}#personal-settings .section{padding:10px 10px;border:0}#personal-settings .section h2{margin-bottom:12px}#personal-settings .section h3>label{font-weight:bold}#personal-settings .personal-info{margin-right:10%;margin-bottom:12px;margin-top:12px}#personal-settings .personal-info[class^=icon-],#personal-settings .personal-info[class*=" icon-"]{background-position:0px 2px;padding-left:30px;opacity:.7}.development-notice{text-align:center}.development-notice a:not(.link-button){text-decoration:underline}.development-notice a:not(.link-button):hover{background-color:var(--color-primary-element-hover)}.link-button{display:inline-block;margin:16px;padding:14px 20px;background-color:var(--color-primary-element);color:#fff;border-radius:var(--border-radius-pill);border:1px solid var(--color-primary-element);box-shadow:0 2px 9px var(--color-box-shadow)}.link-button:active,.link-button:hover,.link-button:focus{color:var(--color-primary-element);background-color:var(--color-primary-element-text);border-color:var(--color-primary-element) !important}.link-button.icon-file{padding-left:48px;background-position:24px}.personal-settings-container{display:inline-grid;grid-template-columns:1fr 1fr 1fr}.personal-settings-container:after{clear:both}.personal-settings-container>div h3{position:relative;display:inline-flex;flex-wrap:nowrap;justify-content:flex-start;width:100%;align-items:center;gap:8px}.personal-settings-container>div h3>label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-settings-container>div>form span[class^=icon-checkmark],.personal-settings-container>div>form span[class^=icon-error]{position:relative;right:8px;top:-28px;pointer-events:none;float:right}.personal-settings-container .verify{position:relative;left:100%;top:0;height:0}.personal-settings-container .verify img{padding:12px 7px 6px}.personal-settings-container .verify-action{cursor:pointer}.personal-settings-container input:disabled{background-color:#fff;color:#000;border:none;opacity:100}.verification-dialog{display:none;right:-9px;top:40px;width:275px}.verification-dialog p{padding:10px}.verification-dialog .verificationCode{font-family:monospace;display:block;overflow-wrap:break-word}.federation-menu{position:relative;cursor:pointer;width:44px;height:44px;padding:10px;margin:0;background:none;border:none}.federation-menu:hover,.federation-menu:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill)}.federation-menu:hover .icon-federation-menu,.federation-menu:focus .icon-federation-menu{opacity:.8}.federation-menu .icon-federation-menu{padding-left:16px;background-size:16px;background-position:left center;opacity:.3;cursor:inherit}.federation-menu .icon-federation-menu .icon-triangle-s{display:inline-block;vertical-align:middle;cursor:inherit}.federation-menu .federationScopeMenu{top:44px}.federation-menu .federationScopeMenu.popovermenu .menuitem{font-size:12.8px;line-height:1.6em}.federation-menu .federationScopeMenu.popovermenu .menuitem .menuitem-text-detail{opacity:.75}.federation-menu .federationScopeMenu.popovermenu .menuitem.active{box-shadow:inset 2px 0 var(--color-primary-element)}.federation-menu .federationScopeMenu.popovermenu .menuitem.active .menuitem-text{font-weight:bold}.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled{opacity:.5;cursor:default}.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled *{cursor:default}.clientsbox img{height:60px}#sslCertificate tr.expired{background-color:rgba(255,0,0,.5)}#sslCertificate td{padding:5px}#displaynameerror,#displaynamechanged{display:none}input#identity{width:20em}#showWizard{display:inline-block}.msg.success{color:#fff;background-color:#47a447;padding:3px}.msg.error{color:#fff;background-color:#d2322d;padding:3px}table.nostyle label{margin-right:2em}table.nostyle td{padding:.2em 0}#security-password #passwordform{display:flex;flex-wrap:wrap;flex-direction:column;gap:1rem}#security-password #passwordform .input-control{display:flex;flex-wrap:wrap;flex-direction:column}#security-password #passwordform .input-control label{margin-bottom:.5rem}#security-password #passwordform #pass1,#security-password #passwordform .personal-show-container{flex-shrink:1;width:300px;min-width:150px}#security-password #passwordform .personal-show-container #pass2{position:relative;top:.5rem}#security-password #passwordform .personal-show-container .personal-show-label{top:34px !important;margin-right:0;margin-top:0 !important;right:3px}#security-password #passwordform #pass2{width:100%}#security-password #passwordform .password-state{display:inline-block}#security-password #passwordform .strengthify-wrapper{position:absolute;left:0;width:100%;border-radius:0 0 2px 2px;margin-top:5px;overflow:hidden;height:3px}#two-factor-auth h3{margin-top:24px}#two-factor-auth li>div{margin-left:20px}#two-factor-auth .two-factor-provider-settings-icon{width:16px;height:16px;vertical-align:sub;filter:var(--background-invert-if-dark)}.isgroup .groupname{width:85%;display:block;overflow:hidden;text-overflow:ellipsis}.isgroup.active .groupname{width:65%}li.active .delete,li.active .rename{display:block}.app-navigation-entry-utils .delete,.app-navigation-entry-utils .rename{display:none}#usersearchform{position:absolute;top:2px;right:0}#usersearchform input{width:150px}#usersearchform label{font-weight:bold}table.grid{width:100%}table.grid th{height:2em;color:#999;border-bottom:1px solid var(--color-border);padding:0 .5em;padding-left:.8em;text-align:left;font-weight:normal}table.grid td{border-bottom:1px solid var(--color-border);padding:0 .5em;padding-left:.8em;text-align:left;font-weight:normal}td.name,th.name{padding-left:.8em;min-width:5em;max-width:12em;text-overflow:ellipsis;overflow:hidden}td.password,th.password{padding-left:.8em}td.password>img,th.password>img{visibility:hidden}td.displayName>img,th.displayName>img{visibility:hidden}td.password,td.mailAddress,th.password,th.mailAddress{min-width:5em;max-width:12em;cursor:pointer}td.password span,td.mailAddress span,th.password span,th.mailAddress span{width:90%;display:inline-block;text-overflow:ellipsis;overflow:hidden}td.mailAddress,th.mailAddress{cursor:pointer}td.password>span,th.password>span{margin-right:1.2em;color:#c7c7c7}span.usersLastLoginTooltip{white-space:nowrap}#app-content>svg.app-filter{float:left;height:0;width:0}#app-category-app-bundles{margin-bottom:20px}.appinfo{margin:1em 40px}#app-navigation img{margin-bottom:-3px;margin-right:6px;width:16px}#app-navigation li span.no-icon{padding-left:32px}#app-navigation ul li.active>span.utils .delete,#app-navigation ul li.active>span.utils .rename{display:block}#app-navigation .appwarning{background:#fcc}#app-navigation.appwarning:hover{background:#fbb}#app-navigation .app-external{color:var(--color-text-maxcontrast)}span.version{margin-left:1em;margin-right:1em;color:var(--color-text-maxcontrast)}.app-version{color:var(--color-text-maxcontrast)}.app-level span{color:var(--color-text-maxcontrast);background-color:rgba(0,0,0,0);border:1px solid var(--color-text-maxcontrast);border-radius:var(--border-radius);padding:3px 6px}.app-level a{padding:10px;margin:-6px;white-space:nowrap}.app-level .official{background-position:left center;background-position:5px center;padding-left:25px}.app-level .supported{border-color:var(--color-success);background-position:left center;background-position:5px center;padding-left:25px;color:var(--color-success)}.app-score{position:relative;top:4px;opacity:.5}.app-settings-content #searchresults{display:none}#apps-list.store .section{border:0}#apps-list.store .app-name{display:block;margin:5px 0}#apps-list.store .app-name,#apps-list.store .app-image *{cursor:pointer}#apps-list.store .app-summary{opacity:.7}#apps-list.store .app-image-icon .icon-settings-dark{width:100%;height:150px;background-size:45px;opacity:.5}#apps-list.store .app-score-image{height:14px}#apps-list.store .actions{margin-top:10px}#app-sidebar #app-details-view h2 .icon-settings-dark,#app-sidebar #app-details-view h2 svg{display:inline-block;width:16px;height:16px;margin-right:10px;opacity:.7}#app-sidebar #app-details-view .app-level{clear:right;width:100%}#app-sidebar #app-details-view .app-level .supported,#app-sidebar #app-details-view .app-level .official{vertical-align:top}#app-sidebar #app-details-view .app-level .app-score-image{float:right}#app-sidebar #app-details-view .app-author,#app-sidebar #app-details-view .app-licence{color:var(--color-text-maxcontrast)}#app-sidebar #app-details-view .app-dependencies{margin:10px 0}#app-sidebar #app-details-view .app-description p{margin:10px 0}#app-sidebar #app-details-view .close{position:absolute;top:0;right:0;padding:14px;opacity:.5;z-index:1;width:44px;height:44px}#app-sidebar #app-details-view .actions{display:flex;align-items:center}#app-sidebar #app-details-view .actions .app-groups{padding:5px}#app-sidebar #app-details-view .appslink{text-decoration:underline;margin-right:5px}#app-sidebar #app-details-view .app-level,#app-sidebar #app-details-view .actions,#app-sidebar #app-details-view .documentation,#app-sidebar #app-details-view .app-dependencies,#app-sidebar #app-details-view .app-description{margin:20px 0}@media only screen and (min-width: 1601px){.store .section{width:25%}.with-app-sidebar .store .section{width:33%}}@media only screen and (max-width: 1600px){.store .section{width:25%}.with-app-sidebar .store .section{width:33%}}@media only screen and (max-width: 1400px){.store .section{width:33%}.with-app-sidebar .store .section{width:50%}}@media only screen and (max-width: 900px){.store .section{width:50%}.with-app-sidebar .store .section{width:100%}}@media only screen and (max-width: 1024px){.store .section{width:50%}}@media only screen and (max-width: 480px){.store .section{width:100%}}@media only screen and (max-width: 900px){.apps-list.installed .app-version,.apps-list.installed .app-level{display:none !important}}@media only screen and (max-width: 500px){.apps-list.installed .app-groups{display:none !important}}.section{margin-bottom:0}.section:not(:last-child){border-bottom:1px solid var(--color-border)}.section h2{margin-bottom:22px}.section h2 .icon-info{padding:6px 20px;vertical-align:text-bottom;display:inline-block}.followupsection{display:block;padding:0 30px 30px 30px}.app-image{position:relative;height:150px;opacity:1;overflow:hidden}.app-name,.app-version,.app-score,.app-level{display:inline-block}.app-description-toggle-show,.app-description-toggle-hide{clear:both;padding:7px 0;cursor:pointer;opacity:.5}.app-description-container{clear:both;position:relative;top:7px}.app-description{clear:both}#app-category-1{margin-bottom:18px}#app-category-925{text-transform:capitalize}.app-dependencies{color:#ce3702}.missing-dependencies{list-style:initial;list-style-type:initial;list-style-position:inside}.apps-list{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list .section{cursor:pointer}.apps-list .app-list-move{transition:transform 1s}.apps-list #app-list-update-all{margin-left:10px}.apps-list .toolbar{height:60px;padding:8px;padding-left:60px;width:100%;background-color:var(--color-main-background);position:sticky;top:0;z-index:1;display:flex;align-items:center}.apps-list.installed{margin-bottom:100px}.apps-list.installed .apps-list-container{display:table;width:100%;height:auto;margin-top:60px}.apps-list.installed .section{display:table-row;padding:0;margin:0}.apps-list.installed .section>*{display:table-cell;height:initial;vertical-align:middle;float:none;border-bottom:1px solid var(--color-border);padding:6px;box-sizing:border-box}.apps-list.installed .section.selected{background-color:var(--color-background-dark)}.apps-list.installed .groups-enable{margin-top:0}.apps-list.installed .groups-enable label{margin-right:3px}.apps-list.installed .app-image{width:44px;height:auto;text-align:right}.apps-list.installed .app-image-icon svg,.apps-list.installed .app-image-icon .icon-settings-dark{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.apps-list.installed .actions{text-align:right}.apps-list.installed .actions .icon-loading-small{display:inline-block;top:4px;margin-right:10px}.apps-list:not(.installed) .app-image-icon svg{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.apps-list.hidden{display:none}.apps-list .section{position:relative;flex:0 0 auto}.apps-list .section h2.app-name{display:block;margin:8px 0}.apps-list .section:hover{background-color:var(--color-background-dark)}.apps-list .app-description p{margin:10px 0}.apps-list .app-description ul{list-style:disc}.apps-list .app-description ol{list-style:decimal}.apps-list .app-description ol ol,.apps-list .app-description ol ul{padding-left:15px}.apps-list .app-description>ul,.apps-list .app-description>ol{margin-left:19px}.apps-list .app-description ul ol,.apps-list .app-description ul ul{padding-left:15px}.apps-list .apps-header{display:table-row;position:relative}.apps-list .apps-header div{display:table-cell;height:70px}.apps-list .apps-header h2{display:table-cell;position:absolute;padding-left:6px;padding-top:15px}.apps-list .apps-header h2 .enable{position:relative;top:-1px;margin-left:12px}.apps-list .apps-header h2+.section{margin-top:50px}#apps-list-search .section h2{margin-bottom:0}#log{white-space:normal;margin-bottom:14px}#lessLog{display:none}table.grid td.date{white-space:nowrap}#log-section p{margin-top:20px}#security-warning-state-ok span,#security-warning-state-warning span,#security-warning-state-failure span,#security-warning-state-loading span{vertical-align:middle}#security-warning-state-ok span.message,#security-warning-state-warning span.message,#security-warning-state-failure span.message,#security-warning-state-loading span.message{padding:12px}#security-warning-state-ok span.icon,#security-warning-state-warning span.icon,#security-warning-state-failure span.icon,#security-warning-state-loading span.icon{width:32px;height:32px;background-position:center center;display:inline-block;border-radius:50%}#security-warning-state-ok span.icon-checkmark-white,#security-warning-state-warning span.icon-checkmark-white,#security-warning-state-failure span.icon-checkmark-white,#security-warning-state-loading span.icon-checkmark-white{background-color:var(--color-success)}#security-warning-state-ok span.icon-error-white,#security-warning-state-warning span.icon-error-white,#security-warning-state-failure span.icon-error-white,#security-warning-state-loading span.icon-error-white{background-color:var(--color-warning)}#security-warning-state-ok span.icon-close-white,#security-warning-state-warning span.icon-close-white,#security-warning-state-failure span.icon-close-white,#security-warning-state-loading span.icon-close-white{background-color:var(--color-error)}#shareAPI.loading>div{display:none}#shareAPI p{padding-bottom:.8em}#shareAPI .indent{padding-left:28px}#shareAPI .double-indent{padding-left:56px}#shareAPI .nocheckbox{padding-left:20px}#shareApiDefaultPermissionsSection label{margin-right:20px}#fileSharingSettings h3{display:inline-block}#publicShareDisclaimerText{width:calc(100% - 23px);max-width:600px;height:150px;margin-left:20px;box-sizing:border-box}.icon-info{padding:11px 20px;vertical-align:text-bottom;opacity:.5}#two-factor-auth h2,#shareAPI h2,#mail_general_settings h2{display:inline-block}.mail_settings p label:first-child{display:inline-block;width:300px;text-align:right}.mail_settings p select:nth-child(2),.mail_settings p input:not([type=button]){width:143px}#mail_smtpport{width:60px}.cronlog{margin-left:10px}.status{display:inline-block;height:16px;width:16px;vertical-align:text-bottom}.status.success{border-radius:50%}#selectGroups select{box-sizing:border-box;display:inline-block;height:36px;padding:7px 10px}#log .log-message{word-break:break-all;min-width:180px}span.success{background-color:var(--color-success);border-radius:var(--border-radius)}span.error{background-color:var(--color-error)}span.indeterminate{background-color:var(--color-warning);border-radius:40% 0}doesnotexist:-o-prefocus,.strengthify-wrapper{left:185px;width:129px}.trusted-domain-warning{color:#fff;padding:5px;background:#ce3702;border-radius:5px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}#postsetupchecks ul{margin-left:44px;list-style:disc}#postsetupchecks ul li{margin:10px 0}#postsetupchecks ul ul{list-style:circle}#postsetupchecks .loading{height:50px;background-position:left center}#postsetupchecks .errors,#postsetupchecks .errors a{color:var(--color-error)}#postsetupchecks .warnings,#postsetupchecks .warnings a{color:var(--color-warning)}#postsetupchecks .hint{margin:20px 0}#security-warning a{text-decoration:underline}#security-warning .extra-top-margin{margin-top:12px}#admin-tips li{list-style:initial}#admin-tips li a{display:inline-block;padding:3px 0}#warning{color:red}.settings-hint{margin-top:-12px;margin-bottom:12px;opacity:.7}#body-settings #app-content.user-list-grid{display:grid;grid-column-gap:20px;grid-auto-rows:minmax(60px, max-content)}#body-settings #app-content.user-list-grid .row{display:flex;display:grid;min-height:60px;grid-row-start:span 1;grid-gap:3px;align-items:center;grid-template-columns:44px minmax(190px, 1fr) minmax(160px, 1fr) minmax(160px, 1fr) minmax(240px, 1fr) minmax(240px, 1fr) minmax(160px, 1fr) minmax(240px, 1fr) repeat(auto-fit, minmax(160px, 1fr));border-bottom:var(--color-border) 1px solid}#body-settings #app-content.user-list-grid .row.disabled{opacity:.5}#body-settings #app-content.user-list-grid .row .name,#body-settings #app-content.user-list-grid .row .password,#body-settings #app-content.user-list-grid .row .mailAddress,#body-settings #app-content.user-list-grid .row .languages,#body-settings #app-content.user-list-grid .row .storageLocation,#body-settings #app-content.user-list-grid .row .userBackend,#body-settings #app-content.user-list-grid .row .lastLogin{min-width:160px}#body-settings #app-content.user-list-grid .row .name doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .name .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .password doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .password .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .mailAddress doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .mailAddress .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .languages doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .languages .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .storageLocation doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .storageLocation .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .userBackend doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .userBackend .strengthify-wrapper,#body-settings #app-content.user-list-grid .row .lastLogin doesnotexist:-o-prefocus,#body-settings #app-content.user-list-grid .row .lastLogin .strengthify-wrapper{color:var(--color-text-dark);vertical-align:baseline;text-overflow:ellipsis}#body-settings #app-content.user-list-grid .row:not(.row--editable).name,#body-settings #app-content.user-list-grid .row:not(.row--editable).password,#body-settings #app-content.user-list-grid .row:not(.row--editable).displayName,#body-settings #app-content.user-list-grid .row:not(.row--editable).mailAddress,#body-settings #app-content.user-list-grid .row:not(.row--editable).userBackend,#body-settings #app-content.user-list-grid .row:not(.row--editable).languages{overflow:hidden}#body-settings #app-content.user-list-grid .row:not(.row--editable) .groups,#body-settings #app-content.user-list-grid .row:not(.row--editable) .subadmins{overflow:auto;max-height:100%}#body-settings #app-content.user-list-grid .row .managers,#body-settings #app-content.user-list-grid .row .groups,#body-settings #app-content.user-list-grid .row .subadmins,#body-settings #app-content.user-list-grid .row .quota{min-width:160px}#body-settings #app-content.user-list-grid .row .managers .multiselect,#body-settings #app-content.user-list-grid .row .groups .multiselect,#body-settings #app-content.user-list-grid .row .subadmins .multiselect,#body-settings #app-content.user-list-grid .row .quota .multiselect{width:100%;color:var(--color-text-dark);vertical-align:baseline}#body-settings #app-content.user-list-grid .row .managers progress,#body-settings #app-content.user-list-grid .row .groups progress,#body-settings #app-content.user-list-grid .row .subadmins progress,#body-settings #app-content.user-list-grid .row .quota progress{max-width:95%}#body-settings #app-content.user-list-grid .row .obfuscated{width:400px;opacity:.7}#body-settings #app-content.user-list-grid .row .userActions{display:flex;justify-content:flex-end;position:sticky;right:0px;min-width:88px;background-color:var(--color-main-background)}#body-settings #app-content.user-list-grid .row.row--editable .userActions{z-index:10}#body-settings #app-content.user-list-grid .row .subtitle{color:var(--color-text-maxcontrast);vertical-align:baseline}#body-settings #app-content.user-list-grid .row#grid-header{position:sticky;align-self:normal;background-color:var(--color-main-background);z-index:100;top:0}#body-settings #app-content.user-list-grid .row#grid-header.sticky{box-shadow:0 -2px 10px 1px var(--color-box-shadow)}#body-settings #app-content.user-list-grid .row#grid-header{color:var(--color-text-maxcontrast);border-bottom-width:thin}#body-settings #app-content.user-list-grid .row#grid-header #headerDisplayName,#body-settings #app-content.user-list-grid .row#grid-header #headerPassword,#body-settings #app-content.user-list-grid .row#grid-header #headerAddress,#body-settings #app-content.user-list-grid .row#grid-header #headerGroups,#body-settings #app-content.user-list-grid .row#grid-header #headerSubAdmins,#body-settings #app-content.user-list-grid .row#grid-header #theHeaderUserBackend,#body-settings #app-content.user-list-grid .row#grid-header #theHeaderLastLogin,#body-settings #app-content.user-list-grid .row#grid-header #headerQuota,#body-settings #app-content.user-list-grid .row#grid-header #theHeaderStorageLocation,#body-settings #app-content.user-list-grid .row#grid-header #headerLanguages{padding-left:7px;text-transform:none;color:var(--color-text-maxcontrast);vertical-align:baseline}#body-settings #app-content.user-list-grid .row:hover input:not([type=submit]):not(:focus):not(:active){border-color:var(--color-border) !important}#body-settings #app-content.user-list-grid .row:hover:not(#grid-header){box-shadow:5px 0 0 var(--color-primary-element) inset}#body-settings #app-content.user-list-grid .row>form{width:100%}#body-settings #app-content.user-list-grid .row>div,#body-settings #app-content.user-list-grid .row>.displayName>form,#body-settings #app-content.user-list-grid .row>form{grid-row:1;display:inline-flex;color:var(--color-text-lighter);flex-grow:1}#body-settings #app-content.user-list-grid .row>div>input:not(:focus):not(:active),#body-settings #app-content.user-list-grid .row>.displayName>form>input:not(:focus):not(:active),#body-settings #app-content.user-list-grid .row>form>input:not(:focus):not(:active){border-color:rgba(0,0,0,0);cursor:pointer}#body-settings #app-content.user-list-grid .row>div>input:focus+.icon-confirm,#body-settings #app-content.user-list-grid .row>div>input:active+.icon-confirm,#body-settings #app-content.user-list-grid .row>.displayName>form>input:focus+.icon-confirm,#body-settings #app-content.user-list-grid .row>.displayName>form>input:active+.icon-confirm,#body-settings #app-content.user-list-grid .row>form>input:focus+.icon-confirm,#body-settings #app-content.user-list-grid .row>form>input:active+.icon-confirm{display:block !important}#body-settings #app-content.user-list-grid .row>div:not(.userActions)>input:not([type=submit]),#body-settings #app-content.user-list-grid .row>.displayName>form:not(.userActions)>input:not([type=submit]),#body-settings #app-content.user-list-grid .row>form:not(.userActions)>input:not([type=submit]){width:100%;min-width:0}#body-settings #app-content.user-list-grid .row>div.name,#body-settings #app-content.user-list-grid .row>.displayName>form.name,#body-settings #app-content.user-list-grid .row>form.name{word-break:break-all}#body-settings #app-content.user-list-grid .row>div.displayName>input,#body-settings #app-content.user-list-grid .row>div.mailAddress>input,#body-settings #app-content.user-list-grid .row>.displayName>form.displayName>input,#body-settings #app-content.user-list-grid .row>.displayName>form.mailAddress>input,#body-settings #app-content.user-list-grid .row>form.displayName>input,#body-settings #app-content.user-list-grid .row>form.mailAddress>input{text-overflow:ellipsis;flex-grow:1}#body-settings #app-content.user-list-grid .row>div.name,#body-settings #app-content.user-list-grid .row>div.userBackend,#body-settings #app-content.user-list-grid .row>.displayName>form.name,#body-settings #app-content.user-list-grid .row>.displayName>form.userBackend,#body-settings #app-content.user-list-grid .row>form.name,#body-settings #app-content.user-list-grid .row>form.userBackend{line-height:1.3em;max-height:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}#body-settings #app-content.user-list-grid .row>div.name .subtitle,#body-settings #app-content.user-list-grid .row>.displayName>form.name .subtitle,#body-settings #app-content.user-list-grid .row>form.name .subtitle{color:var(--color-main-text)}#body-settings #app-content.user-list-grid .row>div.quota,#body-settings #app-content.user-list-grid .row>.displayName>form.quota,#body-settings #app-content.user-list-grid .row>form.quota{display:flex;justify-content:left;white-space:nowrap;position:relative}#body-settings #app-content.user-list-grid .row>div.quota progress,#body-settings #app-content.user-list-grid .row>.displayName>form.quota progress,#body-settings #app-content.user-list-grid .row>form.quota progress{width:150px;margin-top:35px;height:3px}#body-settings #app-content.user-list-grid .row>div .icon-confirm,#body-settings #app-content.user-list-grid .row>.displayName>form .icon-confirm,#body-settings #app-content.user-list-grid .row>form .icon-confirm{flex:0 0 auto;cursor:pointer}#body-settings #app-content.user-list-grid .row>div .icon-confirm:not(:active),#body-settings #app-content.user-list-grid .row>.displayName>form .icon-confirm:not(:active),#body-settings #app-content.user-list-grid .row>form .icon-confirm:not(:active){display:none}#body-settings #app-content.user-list-grid .row>div.avatar,#body-settings #app-content.user-list-grid .row>.displayName>form.avatar,#body-settings #app-content.user-list-grid .row>form.avatar{height:32px;width:32px;margin:6px}#body-settings #app-content.user-list-grid .row>div.avatar img,#body-settings #app-content.user-list-grid .row>.displayName>form.avatar img,#body-settings #app-content.user-list-grid .row>form.avatar img{display:block}#body-settings #app-content.user-list-grid .row>div.userActions,#body-settings #app-content.user-list-grid .row>.displayName>form.userActions,#body-settings #app-content.user-list-grid .row>form.userActions{display:flex;justify-content:flex-end}#body-settings #app-content.user-list-grid .row>div.userActions #newsubmit,#body-settings #app-content.user-list-grid .row>.displayName>form.userActions #newsubmit,#body-settings #app-content.user-list-grid .row>form.userActions #newsubmit{width:100%}#body-settings #app-content.user-list-grid .row>div.userActions .toggleUserActions,#body-settings #app-content.user-list-grid .row>.displayName>form.userActions .toggleUserActions,#body-settings #app-content.user-list-grid .row>form.userActions .toggleUserActions{position:relative;display:flex;align-items:center;background-color:var(--color-main-background)}#body-settings #app-content.user-list-grid .row>div.userActions .toggleUserActions .icon-more,#body-settings #app-content.user-list-grid .row>.displayName>form.userActions .toggleUserActions .icon-more,#body-settings #app-content.user-list-grid .row>form.userActions .toggleUserActions .icon-more{width:44px;height:44px;opacity:.5;cursor:pointer}#body-settings #app-content.user-list-grid .row>div.userActions .toggleUserActions .icon-more:focus,#body-settings #app-content.user-list-grid .row>div.userActions .toggleUserActions .icon-more:hover,#body-settings #app-content.user-list-grid .row>div.userActions .toggleUserActions .icon-more:active,#body-settings #app-content.user-list-grid .row>.displayName>form.userActions .toggleUserActions .icon-more:focus,#body-settings #app-content.user-list-grid .row>.displayName>form.userActions .toggleUserActions .icon-more:hover,#body-settings #app-content.user-list-grid .row>.displayName>form.userActions .toggleUserActions .icon-more:active,#body-settings #app-content.user-list-grid .row>form.userActions .toggleUserActions .icon-more:focus,#body-settings #app-content.user-list-grid .row>form.userActions .toggleUserActions .icon-more:hover,#body-settings #app-content.user-list-grid .row>form.userActions .toggleUserActions .icon-more:active{opacity:.7;background-color:var(--color-background-dark)}#body-settings #app-content.user-list-grid .row>div.userActions .feedback,#body-settings #app-content.user-list-grid .row>.displayName>form.userActions .feedback,#body-settings #app-content.user-list-grid .row>form.userActions .feedback{display:flex;align-items:center;white-space:nowrap;transition:opacity 200ms ease-in-out}#body-settings #app-content.user-list-grid .row>div.userActions .feedback .icon-checkmark,#body-settings #app-content.user-list-grid .row>.displayName>form.userActions .feedback .icon-checkmark,#body-settings #app-content.user-list-grid .row>form.userActions .feedback .icon-checkmark{opacity:.5;margin-right:5px}#body-settings #app-content.user-list-grid .row>div .multiselect.multiselect-vue,#body-settings #app-content.user-list-grid .row>.displayName>form .multiselect.multiselect-vue,#body-settings #app-content.user-list-grid .row>form .multiselect.multiselect-vue{min-width:100%;width:100%}#body-settings #app-content.user-list-grid .infinite-loading-container{display:flex;align-items:center;justify-content:center;grid-row-start:span 4}#body-settings #app-content.user-list-grid .users-list-end{opacity:.5;user-select:none}.animated{animation:blink-animation 1s steps(5, start) 4}@keyframes blink-animation{to{opacity:.6}}@-webkit-keyframes blink-animation{to{opacity:1}}/*# sourceMappingURL=settings.css.map */
diff --git a/apps/settings/css/settings.css.map b/apps/settings/css/settings.css.map
index f1c0ac94318..3e7d8587aa1 100644
--- a/apps/settings/css/settings.css.map
+++ b/apps/settings/css/settings.css.map
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["settings.scss","../../../core/css/functions.scss"],"names":[],"mappings":"AAOC,0BACC,WAKF,OACC,WAID,4BC+CC,2CD3CD,mBC2CC,kDDvCD,qBCuCC,yCDnCD,0BCmCC,wCD/BD,oEC+BC,2CD3BD,oCACC,oBACA,0BACA,+BACA,mBAGD,4BACC,oBACA,kCAGD,yBACC,WAIA,wCACC,kBACA,yDACC,gBAIA,mOACC,WAKH,uCACC,aAGD,sCACC,WAED,uDACC,WAKD,gBACC,WAIF,mBACC,aACA,aACA,iBACA,4DACA,qBAEA,4BACC,kBACA,SAEA,+BACC,mBAIA,qCACC,iBAKH,kCACC,iBACA,mBACA,gBAGD,mGACC,4BACA,kBACA,WAMF,oBACC,kBACA,wCACC,0BACA,8CACC,oDAKH,aACC,qBACA,YACA,kBACA,8CACA,WACA,wCACA,8CACA,6CAEA,0DAGC,mCACA,mDACA,qDAGD,uBACC,kBACA,yBAIF,6BACC,oBACA,kCAEA,mCACC,WAIA,oCACC,kBACA,oBACA,iBACA,2BACA,WACA,mBACA,QAEA,0CACC,mBACA,uBACA,gBAKD,gIACC,kBACA,UACA,UACA,oBACA,YAKH,qCACC,kBACA,UACA,MACA,SAEA,yCACC,qBAIF,4CACC,eAGD,4CACC,sBACA,WACA,YACA,YAMF,qBACC,aACA,WACA,SACA,YAEA,uBACC,aAGD,uCACC,sBACA,cACA,yBAIF,iBACC,kBACA,eACA,WACA,YACA,aACA,SACA,gBACA,YAEA,8CAEC,+CACA,wCAEA,0FACC,WAIF,uCACC,kBACA,qBACA,gCACA,WACA,eAEA,wDACC,qBACA,sBACA,eAIF,sCACC,SAGC,4DAEC,iBACA,kBAEA,kFACC,YAGD,mEACC,oDAEA,kFACC,iBAIF,qEACC,WAEA,eAEA,uEACC,eAQN,gBACC,YAIA,2BACC,kCAGD,mBACC,YAIF,sCAEC,aAGD,eACC,WAGD,YACC,qBAIA,aACC,WACA,yBACA,YAGD,WACC,WACA,yBACA,YAMD,oBACC,iBAGD,iBACC,eAKD,iCACC,aACA,eACA,sBACA,SACA,gDACC,aACA,eACA,sBACA,sDACC,oBAIF,kGACC,cACA,YACA,gBAKA,iEACC,kBACA,UAED,+EACC,oBACA,eACA,wBACA,UAIF,wCACC,WAGD,iDACC,qBAGD,sDACC,kBACA,OACA,WACA,0BACA,eACA,gBACA,WAQF,oBACC,gBAGD,wBACC,iBAGD,oDACC,WACA,YACA,mBACA,wCAOD,oBACC,UACA,cACA,gBACA,uBAGD,2BACC,UAKD,oCAEC,cAKD,wEAEC,aAIF,gBACC,kBACA,QACA,QAEA,sBACC,YAGD,sBACC,iBAKF,WACC,WAEA,cACC,WACA,WACA,4CACA,eACA,kBACA,gBACA,mBAGD,cACC,4CACA,eACA,kBACA,gBACA,mBAKD,gBACC,kBACA,cACA,eACA,uBACA,gBAGD,wBACC,kBAEA,gCACC,kBAIF,sCACC,kBAGD,sDAEC,cACA,eACA,eAEA,0EACC,UACA,qBACA,uBACA,gBAIF,8BACC,eAGD,kCACC,mBACA,cAIF,2BACC,mBAID,4BACC,WACA,SACA,QAGD,0BACC,mBAGD,SACC,gBAKA,oBACC,mBACA,iBACA,WAGD,gCACC,kBAIA,gGACC,cAIF,4BACC,gBAGD,iCACC,gBAGD,8BACC,oCAIF,aACC,gBACA,iBACA,oCAGD,aACC,oCAIA,gBACC,oCACA,+BACA,+CACA,mCACA,gBAGD,aACC,aACA,YACA,mBAGD,qBACC,gCACA,+BACA,kBAGD,sBACC,kCACA,gCACA,+BACA,kBACA,2BAIF,WACC,kBACA,QACA,WAIA,qCACC,aAMD,0BACC,SAGD,2BACC,cACA,aAGD,yDACC,eAGD,8BACC,WAGD,qDACC,WACA,aACA,qBACA,WAGD,kCACC,YAGD,0BACC,gBAMA,4FAEC,qBACA,WACA,YACA,kBACA,WAIF,0CACC,YACA,WAEA,yGAEC,mBAGD,2DACC,YAIF,uFACC,oCAGD,iDACC,cAGD,kDACC,cAGD,sCACC,kBACA,MACA,QACA,aACA,WACA,UACA,WACA,YAGD,wCACC,aACA,mBAEA,oDACC,YAIF,yCACC,0BACA,iBAGD,iOAKC,cAIF,2CACC,gBACC,UAED,kCACC,WAIF,2CACC,gBACC,UAED,kCACC,WAIF,2CACC,gBACC,UAED,kCACC,WAIF,0CACC,gBACC,UAED,kCACC,YAIF,2CACC,gBACC,WAIF,0CACC,gBACC,YAKF,0CAEE,kEACC,yBAKH,0CACC,iCACC,yBAIF,SACC,gBAEA,0BACC,4CAID,YACC,mBAEA,uBACC,iBACA,2BACA,qBAKH,iBACC,cACA,yBAGD,WACC,kBACA,aACA,UACA,gBAGD,6CACC,qBAGD,0DACC,WACA,cACA,eACA,WAGD,2BACC,WACA,kBACA,QAGD,iBACC,WAGD,gBACC,mBAKD,kBACC,0BAGD,kBACC,cAGD,sBACC,mBACA,wBACA,2BAGD,WAyGC,aACA,eACA,yBAvGA,oBACC,eAGD,0BACC,wBAGD,gCACC,iBAGD,oBACC,OAfgB,KAgBhB,QAjBiB,IAmBjB,aAlBgB,KAmBhB,WACA,8CACA,gBACA,MACA,UACA,aACA,mBAGD,qBAQC,oBAPA,0CACC,cACA,WACA,YACA,WAjCe,KAsChB,8BACC,kBACA,UACA,SAEA,gCACC,mBACA,eACA,sBACA,WACA,4CACA,YACA,sBAGD,uCACC,8CAKF,oCACC,aAEA,0CACC,iBAIF,gCACC,WACA,YACA,iBAGD,kGAEC,eACA,WACA,YACA,WACA,sBACA,qBAGD,8BACC,iBAEA,kDACC,qBACA,QACA,kBAKH,+CACC,kBACA,YAEA,WACA,YACA,WAOD,kBACC,aAGD,oBACC,kBACA,cAEA,gCACC,cACA,aAGD,0BACC,8CAKD,8BACC,cAGD,+BACC,gBAGD,+BACC,mBAEA,oEACC,kBAKD,8DACC,iBAKD,oEACC,kBAMH,wBACC,kBACA,kBAEA,4BACC,mBACA,YAGD,2BACC,mBACA,kBACA,iBACA,iBAEA,mCACC,kBACA,SACA,iBAGD,oCACC,gBAQF,8BACC,gBAMH,KACC,mBACA,mBAGD,SACC,aAGD,mBACC,mBAGD,eACC,gBAOA,+IACC,sBAEA,+KACC,aAGD,mKACC,WACA,YACA,kCACA,qBACA,kBAGD,mOACC,sCAGD,mNACC,sCAGD,mNACC,oCAMF,sBACC,aAGD,YACC,oBAGD,kBACC,kBAGD,yBACC,kBAGD,sBACC,kBAIF,yCACC,kBAGD,wBACC,qBAGD,2BACC,wBAEA,gBACA,aACA,iBACA,sBAKD,WACC,kBACA,2BACA,WAGD,2DAGC,qBAIA,mCACC,qBACA,YACA,iBAGD,+EAEC,YAIF,eACC,WAGD,SACC,iBAGD,QACC,qBACA,YACA,WACA,2BAEA,gBACC,kBAIF,qBACC,sBACA,qBACA,YACA,iBAGD,kBACC,qBACA,gBAIA,aACC,sCACA,mCAGD,WACC,oCAGD,mBACC,sCACA,oBAMF,8CACC,WACA,YAGD,wBACC,WACA,YACA,mBACA,kBACA,+DAIA,oBACC,iBACA,gBAEA,uBACC,cAGD,uBACC,kBAIF,0BACC,YACA,gCAGD,oDACC,yBAGD,wDACC,2BAGD,uBACC,cAKD,oBACC,0BAGD,oCACC,gBAIF,eACC,mBAEA,iBACC,qBACA,cAIF,SACC,UAGD,eACC,iBACA,mBACA,WASA,2CACC,aACA,qBACA,yCAEA,gDAGC,aACA,aACA,WAbgB,KAchB,sBACA,aACA,mBAGA,sBACE,+KASF,4CAEA,yDACC,WAID,iaAOC,UA1CkB,MA4ClB,ooCACC,6BACA,wBACA,uBAKD,odAMC,gBAMD,2JAEC,cACA,gBAIF,oOAIC,UA3EkB,MA6ElB,wRACC,WACA,6BACA,wBAGD,wQACC,cAIF,4DACC,YACA,WAGD,6DACC,aACA,yBACA,UACA,eAGD,0DACC,oCACA,wBAID,4DACC,gBACA,kBACA,8CACA,YACA,MAEA,mEACC,mDAIF,4DACC,oCACA,yBAEA,2wBAWC,iBACA,oBACA,oCACA,wBAKD,wEACC,sDAIF,qDACC,WAGD,wGAEC,WACA,oBACA,gCACA,YAEA,sKACC,2BACA,eAIA,0TACC,yBAKF,8LACC,WACA,YAGD,kHACC,qBAKA,wRACC,uBACA,YAIF,kPAGC,kBACA,gBACA,gBAIA,uBACA,oBACA,qBACA,4BAGD,sIACC,6BAGD,oHACC,aACA,qBACA,mBACA,kBAEA,sIACC,YACA,gBACA,WAIF,oIACC,cACA,eAEA,8JACC,aAIF,sHACC,YACA,WACA,WAEA,8HACC,cAIF,gIACC,aACA,yBAEA,sJACC,WAGD,sKACC,kBACA,aACA,mBACA,8CAEA,4LACC,WACA,YACA,WACA,eAEA,0lBAGC,WACA,8CAKH,oJACC,aACA,mBACA,mBACA,qCAEA,oLACC,WACA,iBAMH,kKACC,eACA,WAKH,uEACC,aACA,mBACA,uBACA,sBAGD,2DACC,WACA,iBAKH,UACI,+CAGJ,2BACE,GACE,YAGJ,mCACE,GACE","file":"settings.css"} \ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["settings.scss","../../../core/css/functions.scss"],"names":[],"mappings":"AAOC,0BACC,WAKF,OACC,WAID,4BC+CC,2CD3CD,mBC2CC,kDDvCD,qBCuCC,yCDnCD,0BCmCC,wCD/BD,oEC+BC,2CD3BD,oCACC,oBACA,0BACA,+BACA,mBAGD,4BACC,oBACA,kCAGD,yBACC,WAIA,wCACC,kBACA,yDACC,gBAIA,mOACC,WAKH,uCACC,aAGD,sCACC,WAED,uDACC,WAKD,gBACC,WAIF,mBACC,aACA,aACA,iBACA,4DACA,qBAEA,4BACC,kBACA,SAEA,+BACC,mBAIA,qCACC,iBAKH,kCACC,iBACA,mBACA,gBAGD,mGACC,4BACA,kBACA,WAMF,oBACC,kBACA,wCACC,0BACA,8CACC,oDAKH,aACC,qBACA,YACA,kBACA,8CACA,WACA,wCACA,8CACA,6CAEA,0DAGC,mCACA,mDACA,qDAGD,uBACC,kBACA,yBAIF,6BACC,oBACA,kCAEA,mCACC,WAIA,oCACC,kBACA,oBACA,iBACA,2BACA,WACA,mBACA,QAEA,0CACC,mBACA,uBACA,gBAKD,gIACC,kBACA,UACA,UACA,oBACA,YAKH,qCACC,kBACA,UACA,MACA,SAEA,yCACC,qBAIF,4CACC,eAGD,4CACC,sBACA,WACA,YACA,YAMF,qBACC,aACA,WACA,SACA,YAEA,uBACC,aAGD,uCACC,sBACA,cACA,yBAIF,iBACC,kBACA,eACA,WACA,YACA,aACA,SACA,gBACA,YAEA,8CAEC,+CACA,wCAEA,0FACC,WAIF,uCACC,kBACA,qBACA,gCACA,WACA,eAEA,wDACC,qBACA,sBACA,eAIF,sCACC,SAGC,4DAEC,iBACA,kBAEA,kFACC,YAGD,mEACC,oDAEA,kFACC,iBAIF,qEACC,WAEA,eAEA,uEACC,eAQN,gBACC,YAIA,2BACC,kCAGD,mBACC,YAIF,sCAEC,aAGD,eACC,WAGD,YACC,qBAIA,aACC,WACA,yBACA,YAGD,WACC,WACA,yBACA,YAMD,oBACC,iBAGD,iBACC,eAKD,iCACC,aACA,eACA,sBACA,SACA,gDACC,aACA,eACA,sBACA,sDACC,oBAIF,kGACC,cACA,YACA,gBAKA,iEACC,kBACA,UAED,+EACC,oBACA,eACA,wBACA,UAIF,wCACC,WAGD,iDACC,qBAGD,sDACC,kBACA,OACA,WACA,0BACA,eACA,gBACA,WAQF,oBACC,gBAGD,wBACC,iBAGD,oDACC,WACA,YACA,mBACA,wCAOD,oBACC,UACA,cACA,gBACA,uBAGD,2BACC,UAKD,oCAEC,cAKD,wEAEC,aAIF,gBACC,kBACA,QACA,QAEA,sBACC,YAGD,sBACC,iBAKF,WACC,WAEA,cACC,WACA,WACA,4CACA,eACA,kBACA,gBACA,mBAGD,cACC,4CACA,eACA,kBACA,gBACA,mBAKD,gBACC,kBACA,cACA,eACA,uBACA,gBAGD,wBACC,kBAEA,gCACC,kBAIF,sCACC,kBAGD,sDAEC,cACA,eACA,eAEA,0EACC,UACA,qBACA,uBACA,gBAIF,8BACC,eAGD,kCACC,mBACA,cAIF,2BACC,mBAID,4BACC,WACA,SACA,QAGD,0BACC,mBAGD,SACC,gBAKA,oBACC,mBACA,iBACA,WAGD,gCACC,kBAIA,gGACC,cAIF,4BACC,gBAGD,iCACC,gBAGD,8BACC,oCAIF,aACC,gBACA,iBACA,oCAGD,aACC,oCAIA,gBACC,oCACA,+BACA,+CACA,mCACA,gBAGD,aACC,aACA,YACA,mBAGD,qBACC,gCACA,+BACA,kBAGD,sBACC,kCACA,gCACA,+BACA,kBACA,2BAIF,WACC,kBACA,QACA,WAIA,qCACC,aAMD,0BACC,SAGD,2BACC,cACA,aAGD,yDACC,eAGD,8BACC,WAGD,qDACC,WACA,aACA,qBACA,WAGD,kCACC,YAGD,0BACC,gBAMA,4FAEC,qBACA,WACA,YACA,kBACA,WAIF,0CACC,YACA,WAEA,yGAEC,mBAGD,2DACC,YAIF,uFACC,oCAGD,iDACC,cAGD,kDACC,cAGD,sCACC,kBACA,MACA,QACA,aACA,WACA,UACA,WACA,YAGD,wCACC,aACA,mBAEA,oDACC,YAIF,yCACC,0BACA,iBAGD,iOAKC,cAIF,2CACC,gBACC,UAED,kCACC,WAIF,2CACC,gBACC,UAED,kCACC,WAIF,2CACC,gBACC,UAED,kCACC,WAIF,0CACC,gBACC,UAED,kCACC,YAIF,2CACC,gBACC,WAIF,0CACC,gBACC,YAKF,0CAEE,kEACC,yBAKH,0CACC,iCACC,yBAIF,SACC,gBAEA,0BACC,4CAID,YACC,mBAEA,uBACC,iBACA,2BACA,qBAKH,iBACC,cACA,yBAGD,WACC,kBACA,aACA,UACA,gBAGD,6CACC,qBAGD,0DACC,WACA,cACA,eACA,WAGD,2BACC,WACA,kBACA,QAGD,iBACC,WAGD,gBACC,mBAKD,kBACC,0BAGD,kBACC,cAGD,sBACC,mBACA,wBACA,2BAGD,WAyGC,aACA,eACA,yBAvGA,oBACC,eAGD,0BACC,wBAGD,gCACC,iBAGD,oBACC,OAfgB,KAgBhB,QAjBiB,IAmBjB,aAlBgB,KAmBhB,WACA,8CACA,gBACA,MACA,UACA,aACA,mBAGD,qBAQC,oBAPA,0CACC,cACA,WACA,YACA,WAjCe,KAsChB,8BACC,kBACA,UACA,SAEA,gCACC,mBACA,eACA,sBACA,WACA,4CACA,YACA,sBAGD,uCACC,8CAKF,oCACC,aAEA,0CACC,iBAIF,gCACC,WACA,YACA,iBAGD,kGAEC,eACA,WACA,YACA,WACA,sBACA,qBAGD,8BACC,iBAEA,kDACC,qBACA,QACA,kBAKH,+CACC,kBACA,YAEA,WACA,YACA,WAOD,kBACC,aAGD,oBACC,kBACA,cAEA,gCACC,cACA,aAGD,0BACC,8CAKD,8BACC,cAGD,+BACC,gBAGD,+BACC,mBAEA,oEACC,kBAKD,8DACC,iBAKD,oEACC,kBAMH,wBACC,kBACA,kBAEA,4BACC,mBACA,YAGD,2BACC,mBACA,kBACA,iBACA,iBAEA,mCACC,kBACA,SACA,iBAGD,oCACC,gBAQF,8BACC,gBAMH,KACC,mBACA,mBAGD,SACC,aAGD,mBACC,mBAGD,eACC,gBAOA,+IACC,sBAEA,+KACC,aAGD,mKACC,WACA,YACA,kCACA,qBACA,kBAGD,mOACC,sCAGD,mNACC,sCAGD,mNACC,oCAMF,sBACC,aAGD,YACC,oBAGD,kBACC,kBAGD,yBACC,kBAGD,sBACC,kBAIF,yCACC,kBAGD,wBACC,qBAGD,2BACC,wBAEA,gBACA,aACA,iBACA,sBAKD,WACC,kBACA,2BACA,WAGD,2DAGC,qBAIA,mCACC,qBACA,YACA,iBAGD,+EAEC,YAIF,eACC,WAGD,SACC,iBAGD,QACC,qBACA,YACA,WACA,2BAEA,gBACC,kBAIF,qBACC,sBACA,qBACA,YACA,iBAGD,kBACC,qBACA,gBAIA,aACC,sCACA,mCAGD,WACC,oCAGD,mBACC,sCACA,oBAMF,8CACC,WACA,YAGD,wBACC,WACA,YACA,mBACA,kBACA,+DAIA,oBACC,iBACA,gBAEA,uBACC,cAGD,uBACC,kBAIF,0BACC,YACA,gCAGD,oDACC,yBAGD,wDACC,2BAGD,uBACC,cAKD,oBACC,0BAGD,oCACC,gBAIF,eACC,mBAEA,iBACC,qBACA,cAIF,SACC,UAGD,eACC,iBACA,mBACA,WASA,2CACC,aACA,qBACA,yCAEA,gDAGC,aACA,aACA,WAbgB,KAchB,sBACA,aACA,mBAGA,sBACE,+KASF,4CAEA,yDACC,WAID,iaAOC,UA1CkB,MA4ClB,ooCACC,6BACA,wBACA,uBAKD,odAMC,gBAMD,2JAEC,cACA,gBAIF,oOAIC,UA3EkB,MA6ElB,wRACC,WACA,6BACA,wBAGD,wQACC,cAIF,4DACC,YACA,WAGD,6DACC,aACA,yBACA,gBACA,UACA,eACA,8CAGD,2EACC,WAGD,0DACC,oCACA,wBAID,4DACC,gBACA,kBACA,8CACA,YACA,MAEA,mEACC,mDAIF,4DACC,oCACA,yBAEA,2wBAWC,iBACA,oBACA,oCACA,wBAKD,wGACC,4CAGD,wEACC,sDAIF,qDACC,WAGD,2KAGC,WACA,oBACA,gCACA,YAEA,wQACC,2BACA,eAIA,qfACC,yBAKF,4SACC,WACA,YAGD,0LACC,qBAKA,kcACC,uBACA,YAIF,yYAGC,kBACA,gBACA,gBAIA,uBACA,oBACA,qBACA,4BAGD,wNACC,6BAGD,6LACC,aACA,qBACA,mBACA,kBAEA,wNACC,YACA,gBACA,WAIF,qNACC,cACA,eAEA,4PACC,aAIF,gMACC,YACA,WACA,WAEA,4MACC,cAIF,+MACC,aACA,yBAEA,gPACC,WAGD,wQACC,kBACA,aACA,mBACA,8CAEA,ySACC,WACA,YACA,WACA,eAEA,o7BAGC,WACA,8CAKH,6OACC,aACA,mBACA,mBACA,qCAEA,6RACC,WACA,iBAMH,kQACC,eACA,WAKH,uEACC,aACA,mBACA,uBACA,sBAGD,2DACC,WACA,iBAKH,UACI,+CAGJ,2BACE,GACE,YAGJ,mCACE,GACE","file":"settings.css"} \ No newline at end of file
diff --git a/apps/settings/css/settings.scss b/apps/settings/css/settings.scss
index 69f9125ae1f..63aceca3f0a 100644
--- a/apps/settings/css/settings.scss
+++ b/apps/settings/css/settings.scss
@@ -1417,8 +1417,14 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
.userActions {
display: flex;
justify-content: flex-end;
+ position: sticky;
right: 0px;
min-width: 88px;
+ background-color: var(--color-main-background);
+ }
+
+ &.row--editable .userActions {
+ z-index: 10;
}
.subtitle {
@@ -1462,6 +1468,10 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
}
&:hover {
+ input:not([type='submit']):not(:focus):not(:active) {
+ border-color: var(--color-border) !important;
+ }
+
&:not(#grid-header) {
box-shadow: 5px 0 0 var(--color-primary-element) inset;
}
@@ -1471,7 +1481,8 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
width: 100%;
}
- > td,
+ > div,
+ > .displayName > form,
> form {
grid-row: 1;
display: inline-flex;
diff --git a/apps/settings/src/components/UserList.vue b/apps/settings/src/components/UserList.vue
index e2674a9740c..9a97aff085f 100644
--- a/apps/settings/src/components/UserList.vue
+++ b/apps/settings/src/components/UserList.vue
@@ -21,7 +21,7 @@
-->
<template>
- <table id="app-content"
+ <div id="app-content"
role="grid"
:aria-label="t('settings', 'User\'s table')"
class="user-list-grid"
@@ -154,9 +154,9 @@
:options="possibleManagers"
:placeholder="t('settings', 'Select user manager')"
class="multiselect-vue"
- @search-change="searchUserManager"
label="displayname"
- track-by="id">
+ track-by="id"
+ @search-change="searchUserManager">
<span slot="noResult">{{ t('settings', 'No results') }}</span>
</NcMultiselect>
</div>
@@ -170,95 +170,89 @@
</div>
</form>
</NcModal>
- <tbody>
- <tr id="grid-header"
- :class="{'sticky': scrolled && !showConfig.showNewUserForm}"
- class="row">
- <th id="headerAvatar" class="avatar">
- <span class="hidden-visually"> {{ t('settings', 'Avatar') }} </span>
- </th>
- <th id="headerName" class="name">
- <div class="subtitle">
- <strong>
- {{ t('settings', 'Display name') }}
- </strong>
- </div>
- {{ t('settings', 'Username') }}
- </th>
- <th id="headerPassword" class="password">
- {{ t('settings', 'Password') }}
- </th>
- <th id="headerAddress" class="mailAddress">
- {{ t('settings', 'Email') }}
- </th>
- <th id="headerGroups" class="groups">
- {{ t('settings', 'Groups') }}
- </th>
- <th v-if="subAdminsGroups.length>0 && settings.isAdmin"
- id="headerSubAdmins"
- class="subadmins">
- {{ t('settings', 'Group admin for') }}
- </th>
- <th id="headerQuota" class="quota">
- {{ t('settings', 'Quota') }}
- </th>
- <th v-if="showConfig.showLanguages"
- id="headerLanguages"
- class="languages">
- {{ t('settings', 'Language') }}
- </th>
-
- <th v-if="showConfig.showUserBackend || showConfig.showStoragePath"
- class="headerUserBackend userBackend">
- <div v-if="showConfig.showUserBackend" class="userBackend">
- {{ t('settings', 'User backend') }}
- </div>
- <div v-if="showConfig.showStoragePath"
- class="subtitle storageLocation">
- {{ t('settings', 'Storage location') }}
- </div>
- </th>
- <th v-if="showConfig.showLastLogin"
- class="headerLastLogin lastLogin">
- {{ t('settings', 'Last login') }}
- </th>
- <th id="headerManager" class="manager">
- {{ t('settings', 'Manager') }}
- </th>
- <th class="userActions hidden-visually">
- {{ t('settings', 'User actions') }}
- </th>
- </tr>
-
- <user-row v-for="user in filteredUsers"
- :key="user.id"
- :external-actions="externalActions"
- :groups="groups"
- :languages="languages"
- :quota-options="quotaOptions"
- :settings="settings"
- :show-config="showConfig"
- :sub-admins-groups="subAdminsGroups"
- :user="user"
- :users="users"
- :is-dark-theme="isDarkTheme" />
+ <div id="grid-header"
+ :class="{'sticky': scrolled && !showConfig.showNewUserForm}"
+ class="row">
+ <div id="headerAvatar" class="avatar" />
+ <div id="headerName" class="name">
+ <div class="subtitle">
+ <strong>
+ {{ t('settings', 'Display name') }}
+ </strong>
+ </div>
+ {{ t('settings', 'Username') }}
+ </div>
+ <div id="headerPassword" class="password">
+ {{ t('settings', 'Password') }}
+ </div>
+ <div id="headerAddress" class="mailAddress">
+ {{ t('settings', 'Email') }}
+ </div>
+ <div id="headerGroups" class="groups">
+ {{ t('settings', 'Groups') }}
+ </div>
+ <div v-if="subAdminsGroups.length>0 && settings.isAdmin"
+ id="headerSubAdmins"
+ class="subadmins">
+ {{ t('settings', 'Group admin for') }}
+ </div>
+ <div id="headerQuota" class="quota">
+ {{ t('settings', 'Quota') }}
+ </div>
+ <div v-if="showConfig.showLanguages"
+ id="headerLanguages"
+ class="languages">
+ {{ t('settings', 'Language') }}
+ </div>
- <InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">
- <div slot="spinner">
- <div class="users-icon-loading icon-loading" />
+ <div v-if="showConfig.showUserBackend || showConfig.showStoragePath"
+ class="headerUserBackend userBackend">
+ <div v-if="showConfig.showUserBackend" class="userBackend">
+ {{ t('settings', 'User backend') }}
</div>
- <div slot="no-more">
- <div class="users-list-end" />
+ <div v-if="showConfig.showStoragePath"
+ class="subtitle storageLocation">
+ {{ t('settings', 'Storage location') }}
</div>
- <div slot="no-results">
- <div id="emptycontent">
- <div class="icon-contacts-dark" />
- <h2>{{ t('settings', 'No users in here') }}</h2>
- </div>
+ </div>
+ <div v-if="showConfig.showLastLogin"
+ class="headerLastLogin lastLogin">
+ {{ t('settings', 'Last login') }}
+ </div>
+ <div id="headerManager" class="manager">
+ {{ t('settings', 'Manager') }}
+ </div>
+ <div class="userActions" />
+ </div>
+
+ <user-row v-for="user in filteredUsers"
+ :key="user.id"
+ :external-actions="externalActions"
+ :groups="groups"
+ :languages="languages"
+ :quota-options="quotaOptions"
+ :settings="settings"
+ :show-config="showConfig"
+ :sub-admins-groups="subAdminsGroups"
+ :user="user"
+ :users="users"
+ :is-dark-theme="isDarkTheme" />
+
+ <InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">
+ <div slot="spinner">
+ <div class="users-icon-loading icon-loading" />
+ </div>
+ <div slot="no-more">
+ <div class="users-list-end" />
+ </div>
+ <div slot="no-results">
+ <div id="emptycontent">
+ <div class="icon-contacts-dark" />
+ <h2>{{ t('settings', 'No users in here') }}</h2>
</div>
- </InfiniteLoading>
- </tbody>
- </table>
+ </div>
+ </InfiniteLoading>
+ </div>
</template>
<script>
@@ -685,12 +679,4 @@ export default {
* prevent it). */
width: 0;
}
-
- #app-content tbody tr {
- &:hover,
- &:focus,
- &:active {
- background-color: var(--color-main-background);
- }
- }
</style>
diff --git a/apps/settings/src/components/UserList/UserRow.vue b/apps/settings/src/components/UserList/UserRow.vue
index 72b0629eaf5..11b4c90042c 100644
--- a/apps/settings/src/components/UserList/UserRow.vue
+++ b/apps/settings/src/components/UserList/UserRow.vue
@@ -56,23 +56,23 @@
:user="user"
:is-dark-theme="isDarkTheme"
:class="{'row--menu-opened': openedMenu}" />
- <tr v-else
+ <div v-else
:class="{
'disabled': loading.delete || loading.disable,
'row--menu-opened': openedMenu
}"
:data-id="user.id"
class="row row--editable">
- <td :class="{'icon-loading-small': loading.delete || loading.disable || loading.wipe}"
+ <div :class="{'icon-loading-small': loading.delete || loading.disable || loading.wipe}"
class="avatar">
<img v-if="!loading.delete && !loading.disable && !loading.wipe"
:src="generateAvatar(user.id, isDarkTheme)"
alt=""
height="32"
width="32">
- </td>
+ </div>
<!-- dirty hack to ellipsis on two lines -->
- <td v-if="user.backendCapabilities.setDisplayName" class="displayName">
+ <div v-if="user.backendCapabilities.setDisplayName" class="displayName">
<form :class="{'icon-loading-small': loading.displayName}"
class="displayName"
@submit.prevent="updateDisplayName">
@@ -90,56 +90,53 @@
type="submit"
value="">
</form>
- </td>
- <td v-else class="name">
+ </div>
+ <div v-else class="name">
{{ user.id }}
<div class="displayName subtitle">
<div :title="user.displayname.length > 20 ? user.displayname : ''" class="cellText">
{{ user.displayname }}
</div>
</div>
- </td>
- <td v-if="settings.canChangePassword && user.backendCapabilities.setPassword">
- <form :class="{'icon-loading-small': loading.password}"
- class="password"
- @submit.prevent="updatePassword">
- <label class="hidden-visually" :for="'password'+user.id+rand">{{ t('settings', 'Add new password') }}</label>
- <input :id="'password'+user.id+rand"
- ref="password"
- :disabled="loading.password || loading.all"
- :minlength="minPasswordLength"
- maxlength="469"
- :placeholder="t('settings', 'Add new password')"
- autocapitalize="off"
- autocomplete="new-password"
- autocorrect="off"
- required
- spellcheck="false"
- type="password"
- value="">
- <input class="icon-confirm" type="submit" value="">
- </form>
- </td>
- <td v-else />
- <td>
- <form :class="{'icon-loading-small': loading.mailAddress}"
- class="mailAddress"
- @submit.prevent="updateEmail">
- <label class="hidden-visually" :for="'mailAddress'+user.id+rand">{{ t('settings', 'Add new email address') }}</label>
- <input :id="'mailAddress'+user.id+rand"
- ref="mailAddress"
- :disabled="loading.mailAddress||loading.all"
- :placeholder="t('settings', 'Add new email address')"
- :value="user.email"
- autocapitalize="off"
- autocomplete="new-password"
- autocorrect="off"
- spellcheck="false"
- type="email">
- <input class="icon-confirm" type="submit" value="">
- </form>
- </td>
- <td :class="{'icon-loading-small': loading.groups}" class="groups">
+ </div>
+ <form v-if="settings.canChangePassword && user.backendCapabilities.setPassword"
+ :class="{'icon-loading-small': loading.password}"
+ class="password"
+ @submit.prevent="updatePassword">
+ <label class="hidden-visually" :for="'password'+user.id+rand">{{ t('settings', 'Add new password') }}</label>
+ <input :id="'password'+user.id+rand"
+ ref="password"
+ :disabled="loading.password || loading.all"
+ :minlength="minPasswordLength"
+ maxlength="469"
+ :placeholder="t('settings', 'Add new password')"
+ autocapitalize="off"
+ autocomplete="new-password"
+ autocorrect="off"
+ required
+ spellcheck="false"
+ type="password"
+ value="">
+ <input class="icon-confirm" type="submit" value="">
+ </form>
+ <div v-else />
+ <form :class="{'icon-loading-small': loading.mailAddress}"
+ class="mailAddress"
+ @submit.prevent="updateEmail">
+ <label class="hidden-visually" :for="'mailAddress'+user.id+rand">{{ t('settings', 'Add new email address') }}</label>
+ <input :id="'mailAddress'+user.id+rand"
+ ref="mailAddress"
+ :disabled="loading.mailAddress||loading.all"
+ :placeholder="t('settings', 'Add new email address')"
+ :value="user.email"
+ autocapitalize="off"
+ autocomplete="new-password"
+ autocorrect="off"
+ spellcheck="false"
+ type="email">
+ <input class="icon-confirm" type="submit" value="">
+ </form>
+ <div :class="{'icon-loading-small': loading.groups}" class="groups">
<label class="hidden-visually" :for="'groups'+user.id+rand">{{ t('settings', 'Add user to group') }}</label>
<NcMultiselect :id="'groups'+user.id+rand"
:close-on-select="false"
@@ -160,8 +157,8 @@
@tag="createGroup">
<span slot="noResult">{{ t('settings', 'No results') }}</span>
</NcMultiselect>
- </td>
- <td v-if="subAdminsGroups.length>0 && settings.isAdmin"
+ </div>
+ <div v-if="subAdminsGroups.length>0 && settings.isAdmin"
:class="{'icon-loading-small': loading.subadmins}"
class="subadmins">
<label class="hidden-visually" :for="'subadmins'+user.id+rand">{{ t('settings', 'Set user as admin for') }}</label>
@@ -181,8 +178,8 @@
@select="addUserSubAdmin">
<span slot="noResult">{{ t('settings', 'No results') }}</span>
</NcMultiselect>
- </td>
- <td :title="usedSpace"
+ </div>
+ <div :title="usedSpace"
:class="{'icon-loading-small': loading.quota}"
class="quota">
<label class="hidden-visually" :for="'quota'+user.id+rand">{{ t('settings', 'Select user quota') }}</label>
@@ -199,8 +196,8 @@
track-by="id"
@input="setUserQuota"
@tag="validateQuota" />
- </td>
- <td v-if="showConfig.showLanguages"
+ </div>
+ <div v-if="showConfig.showLanguages"
:class="{'icon-loading-small': loading.languages}"
class="languages">
<label class="hidden-visually" :for="'language'+user.id+rand">{{ t('settings', 'Set the language') }}</label>
@@ -216,8 +213,8 @@
label="name"
track-by="code"
@input="setUserLanguage" />
- </td>
- <td :class="{'icon-loading-small': loading.manager}" class="managers">
+ </div>
+ <div :class="{'icon-loading-small': loading.manager}" class="managers">
<NcMultiselect ref="manager"
v-model="currentManager"
:close-on-select="true"
@@ -232,14 +229,14 @@
@select="updateUserManager">
<span slot="noResult">{{ t('settings', 'No results') }}</span>
</NcMultiselect>
- </td>
+ </div>
<!-- don't show this on edit mode -->
- <td v-if="showConfig.showStoragePath || showConfig.showUserBackend"
+ <div v-if="showConfig.showStoragePath || showConfig.showUserBackend"
class="storageLocation" />
- <td v-if="showConfig.showLastLogin" />
+ <div v-if="showConfig.showLastLogin" />
- <td class="userActions">
+ <div class="userActions">
<div v-if="!loading.all"
class="toggleUserActions">
<NcActions>
@@ -263,8 +260,8 @@
<div class="icon-checkmark" />
{{ feedbackMessage }}
</div>
- </td>
- </tr>
+ </div>
+ </div>
</template>
<script>
@@ -760,11 +757,4 @@ export default {
.row::v-deep .multiselect__single {
z-index: auto !important;
}
- .displayName input,
- .password input,
- .mailAddress input {
- width: 100%;
- height: 44px!important;
- border: 2px solid var(--color-border-dark);
- }
</style>
diff --git a/apps/settings/src/components/UserList/UserRowSimple.vue b/apps/settings/src/components/UserList/UserRowSimple.vue
index c65a877ad9d..20a3e96d54f 100644
--- a/apps/settings/src/components/UserList/UserRowSimple.vue
+++ b/apps/settings/src/components/UserList/UserRowSimple.vue
@@ -1,16 +1,16 @@
<template>
- <tr class="row"
+ <div class="row"
:class="{'disabled': loading.delete || loading.disable}"
:data-id="user.id">
- <td class="avatar" :class="{'icon-loading-small': loading.delete || loading.disable || loading.wipe}">
+ <div class="avatar" :class="{'icon-loading-small': loading.delete || loading.disable || loading.wipe}">
<img v-if="!loading.delete && !loading.disable && !loading.wipe"
alt=""
width="32"
height="32"
:src="generateAvatar(user.id, isDarkTheme)">
- </td>
+ </div>
<!-- dirty hack to ellipsis on two lines -->
- <td class="name">
+ <div class="name">
<div class="displayName subtitle">
<div :title="user.displayname.length > 20 ? user.displayname : ''" class="cellText">
<strong>
@@ -19,20 +19,20 @@
</div>
</div>
{{ user.id }}
- </td>
- <td />
- <td class="mailAddress">
+ </div>
+ <div />
+ <div class="mailAddress">
<div :title="user.email !== null && user.email.length > 20 ? user.email : ''" class="cellText">
{{ user.email }}
</div>
- </td>
- <td class="groups">
+ </div>
+ <div class="groups">
{{ userGroupsLabels }}
- </td>
- <td v-if="subAdminsGroups.length > 0 && settings.isAdmin" class="subAdminsGroups">
+ </div>
+ <div v-if="subAdminsGroups.length > 0 && settings.isAdmin" class="subAdminsGroups">
{{ userSubAdminsGroupsLabels }}
- </td>
- <td class="userQuota">
+ </div>
+ <div class="userQuota">
<div class="quota">
{{ userQuota }} ({{ usedSpace }})
<progress class="quota-user-progress"
@@ -40,25 +40,25 @@
:value="usedQuota"
max="100" />
</div>
- </td>
- <td v-if="showConfig.showLanguages" class="languages">
+ </div>
+ <div v-if="showConfig.showLanguages" class="languages">
{{ userLanguage.name }}
- </td>
- <td v-if="showConfig.showUserBackend || showConfig.showStoragePath" class="userBackend">
+ </div>
+ <div v-if="showConfig.showUserBackend || showConfig.showStoragePath" class="userBackend">
<div v-if="showConfig.showUserBackend" class="userBackend">
{{ user.backend }}
</div>
<div v-if="showConfig.showStoragePath" :title="user.storageLocation" class="storageLocation subtitle">
{{ user.storageLocation }}
</div>
- </td>
- <td v-if="showConfig.showLastLogin" :title="userLastLoginTooltip" class="lastLogin">
+ </div>
+ <div v-if="showConfig.showLastLogin" :title="userLastLoginTooltip" class="lastLogin">
{{ userLastLogin }}
- </td>
- <td class="managers">
+ </div>
+ <div class="managers">
{{ user.manager }}
- </td>
- <td class="userActions">
+ </div>
+ <div class="userActions">
<div v-if="canEdit && !loading.all" class="toggleUserActions">
<NcActions>
<NcActionButton icon="icon-rename"
@@ -81,8 +81,8 @@
<div class="icon-checkmark" />
{{ feedbackMessage }}
</div>
- </td>
- </tr>
+ </div>
+ </div>
</template>
<script>
@@ -205,7 +205,4 @@ export default {
background-color: var(--color-main-background);
border: 0;
}
- .row .name {
- padding-left: 0px!important;
- }
</style>
diff --git a/dist/settings-users-8351.js b/dist/settings-users-8351.js
index 0785b8712c3..baa86c93bc6 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],{47671:(e,t,s)=>{s.d(t,{Z:()=>o});var a=s(87537),i=s.n(a),n=s(23645),r=s.n(n)()(i());r.push([e.id,".modal-wrapper[data-v-a4fba162]{margin:2vh 0;align-items:flex-start}.modal__content[data-v-a4fba162]{display:flex;padding:20px;flex-direction:column;align-items:center;text-align:center}.modal__item[data-v-a4fba162]{margin-bottom:16px;width:100%}.modal__item[data-v-a4fba162]:not(:focus):not(:active){border-color:var(--color-border-dark)}.modal__item[data-v-a4fba162] .multiselect{width:100%}.user-actions[data-v-a4fba162]{margin-top:20px}.modal__content[data-v-a4fba162] .multiselect__single{text-align:left;box-sizing:border-box}.modal__content[data-v-a4fba162] .multiselect__content-wrapper{box-sizing:border-box}.row[data-v-a4fba162] .multiselect__single{z-index:auto !important}input#newgroups[data-v-a4fba162]{position:absolute;opacity:0;width:0}#app-content tbody tr[data-v-a4fba162]:hover,#app-content tbody tr[data-v-a4fba162]:focus,#app-content tbody tr[data-v-a4fba162]:active{background-color:var(--color-main-background)}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList.vue"],names:[],mappings:"AACA,gCACC,YAAA,CACA,sBAAA,CAED,iCACC,YAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CAED,8BACC,kBAAA,CACA,UAAA,CAED,uDACC,qCAAA,CAED,2CACC,UAAA,CAED,+BACC,eAAA,CAED,sDACC,eAAA,CACA,qBAAA,CAED,+DACC,qBAAA,CAED,2CACC,uBAAA,CAID,iCACC,iBAAA,CACA,SAAA,CAMA,OAAA,CAIA,wIAGC,6CAAA",sourcesContent:['\n.modal-wrapper {\n\tmargin: 2vh 0;\n\talign-items: flex-start;\n}\n.modal__content {\n\tdisplay: flex;\n\tpadding: 20px;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n}\n.modal__item {\n\tmargin-bottom: 16px;\n\twidth: 100%;\n}\n.modal__item:not(:focus):not(:active) {\n\tborder-color: var(--color-border-dark);\n}\n.modal__item::v-deep .multiselect {\n\twidth: 100%;\n}\n.user-actions {\n\tmargin-top: 20px;\n}\n.modal__content::v-deep .multiselect__single {\n\ttext-align: left;\n\tbox-sizing: border-box;\n}\n.modal__content::v-deep .multiselect__content-wrapper {\n\tbox-sizing: border-box;\n}\n.row::v-deep .multiselect__single {\n\tz-index: auto !important;\n}\n\n/* fake input for groups validation */\ninput#newgroups {\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\n#app-content tbody tr {\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-main-background);\n\t}\n}\n'],sourceRoot:""}]);const o=r},90186:(e,t,s)=>{s.d(t,{Z:()=>o});var a=s(87537),i=s.n(a),n=s(23645),r=s.n(n)()(i());r.push([e.id,".row--menu-opened[data-v-42c6b8a3]{z-index:1 !important}.row[data-v-42c6b8a3] .multiselect__single{z-index:auto !important}.displayName input[data-v-42c6b8a3],.password input[data-v-42c6b8a3],.mailAddress input[data-v-42c6b8a3]{width:100%;height:44px !important;border:2px solid var(--color-border-dark)}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRow.vue"],names:[],mappings:"AAEA,mCACC,oBAAA,CAED,2CACC,uBAAA,CAED,yGAGE,UAAA,CACA,sBAAA,CACD,yCAAA",sourcesContent:["\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.displayName input,\n.password input,\n.mailAddress input {\n width: 100%;\n height: 44px!important;\n\tborder: 2px solid var(--color-border-dark);\n}\n"],sourceRoot:""}]);const o=r},46546:(e,t,s)=>{s.d(t,{Z:()=>o});var a=s(87537),i=s.n(a),n=s(23645),r=s.n(n)()(i());r.push([e.id,".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}.row .name{padding-left:0px !important}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRowSimple.vue"],names:[],mappings:"AACC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA,CAED,WACC,2BAAA",sourcesContent:["\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\t.row .name {\n\t\tpadding-left: 0px!important;\n\t}\n"],sourceRoot:""}]);const o=r},69049:(e,t,s)=>{s.d(t,{Z:()=>o});var a=s(87537),i=s.n(a),n=s(23645),r=s.n(n)()(i());r.push([e.id,".app-navigation__list #addgroup[data-v-c70f3f58] .app-navigation-entry__utils{display:none}","",{version:3,sources:["webpack://./apps/settings/src/views/Users.vue"],names:[],mappings:"AAEA,8EACC,YAAA",sourcesContent:["\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:""}]);const o=r},70260:(e,s,a)=>{a.r(s),a.d(s,{default:()=>qe});var i=a(69680),n=a.n(i),r=a(55209),o=a.n(r),l=a(88696),d=a.n(l),u=a(53110),c=a.n(u),g=a(14032),p=a.n(g),h=a(73190),m=a.n(h),v=a(44439),w=a.n(v),f=a(93041),A=a.n(f),b=a(4820),_=a(27472),C=a.n(_),y=a(79753),U=a(98266),k=a.n(U),N=a(20144),M=a(87369),L=a.n(M),G=a(79570),x=a.n(G),S=a(45400),$=a.n(S),q=a(97039),D=a.n(q);const O={name:"GroupListItem",components:{NcActionInput:x(),NcActionButton:$(),NcCounterBubble:D(),NcAppNavigationItem:p()},props:{id:{type:String,required:!0},title:{type:String,required:!0},count:{type:Number,required:!1}},data:()=>({loadingRenameGroup:!1,openGroupMenu:!1}),computed:{settings(){return this.$store.getters.getServerData}},methods:{handleGroupMenuOpen(){this.openGroupMenu=!0},async renameGroup(e){if(""===e.trim())return;const t=this.$refs.displayNameInput.$el.querySelector('input[type="text"]').value;if(""!==t.trim())try{this.openGroupMenu=!1,this.loadingRenameGroup=!0,await this.$store.dispatch("renameGroup",{groupid:e.trim(),displayName:t.trim()}),this.loadingRenameGroup=!1}catch{this.openGroupMenu=!0,this.loadingRenameGroup=!1}},removeGroup(e){const s=this;OC.dialogs.confirm(t("settings","You are about to remove the group {group}. The users will NOT be deleted.",{group:e}),t("settings","Please confirm the group removal "),(function(t){t&&s.$store.dispatch("removeGroup",e)}))}}};var P=a(51900);const B=(0,P.Z)(O,(function(){var e=this,t=e._self._c;return t("NcAppNavigationItem",{key:e.id,attrs:{exact:!0,title:e.title,to:{name:"group",params:{selectedGroup:encodeURIComponent(e.id)}},icon:"icon-group",loading:e.loadingRenameGroup,"menu-open":e.openGroupMenu},on:{"update:menuOpen":e.handleGroupMenuOpen},scopedSlots:e._u([{key:"counter",fn:function(){return[e.count?t("NcCounterBubble",[e._v("\n\t\t\t"+e._s(e.count)+"\n\t\t")]):e._e()]},proxy:!0},{key:"actions",fn:function(){return["admin"!==e.id&&"disabled"!==e.id&&e.settings.isAdmin?t("NcActionInput",{ref:"displayNameInput",attrs:{icon:"icon-edit",type:"text",value:e.title},on:{submit:function(t){return e.renameGroup(e.id)}}},[e._v("\n\t\t\t"+e._s(e.t("settings","Rename group"))+"\n\t\t")]):e._e(),e._v(" "),"admin"!==e.id&&"disabled"!==e.id&&e.settings.isAdmin?t("NcActionButton",{attrs:{icon:"icon-delete"},on:{click:function(t){return e.removeGroup(e.id)}}},[e._v("\n\t\t\t"+e._s(e.t("settings","Remove group"))+"\n\t\t")]):e._e()]},proxy:!0}])})}),[],!1,null,null,null).exports;var Q=a(78595),z=a(30306),I=a.n(z),E=a(70110),R=a.n(E),T=a(10861),F=a.n(T),Z=a(2649),j=a.n(Z),W=a(15961),Y=a(32996),H=a.n(Y),V=a(12945),J=a.n(V),K=a(45994);const X={props:{user:{type:Object,required:!0},settings:{type:Object,default:()=>({})},groups:{type:Array,default:()=>[]},subAdminsGroups:{type:Array,default:()=>[]},quotaOptions:{type:Array,default:()=>[]},showConfig:{type:Object,default:()=>({})},languages:{type:Array,required:!0},externalActions:{type:Array,default:()=>[]}},computed:{userGroups(){return this.groups.filter((e=>this.user.groups.includes(e.id)))},userSubAdminsGroups(){return this.subAdminsGroups.filter((e=>this.user.subadmin.includes(e.id)))},availableGroups(){return this.groups.map((e=>{const t=Object.assign({},e);return t.$isDisabled=!1===e.canAdd&&!this.user.groups.includes(e.id)||!1===e.canRemove&&this.user.groups.includes(e.id),t}))},usedSpace(){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(){let e=this.user.quota.quota;return e=e>0?Math.min(100,Math.round(this.user.quota.used/e*100)):95*(1-1/(this.user.quota.used/(10*Math.pow(2,30))+1)),isNaN(e)?0:e},userQuota(){if(this.user.quota.quota>=0){const e=OC.Util.humanFileSize(this.user.quota.quota);return this.quotaOptions.find((t=>t.id===e))||{id:e,label:e}}return"default"===this.user.quota.quota?this.quotaOptions[0]:this.quotaOptions[1]},minPasswordLength(){return this.$store.getters.getPasswordPolicyMinLength},userLanguage(){const e=this.languages[0].languages.concat(this.languages[1].languages).find((e=>e.code===this.user.language));return"object"!=typeof e&&""!==this.user.language?{code:this.user.language,name:this.user.language}:""!==this.user.language&&e},userLastLoginTooltip(){return this.user.lastLogin>0?OC.Util.formatDate(this.user.lastLogin):""},userLastLogin(){return this.user.lastLogin>0?OC.Util.relativeModifiedDate(this.user.lastLogin):t("settings","Never")}},methods:{generateAvatar:(e,t)=>t?(0,y.generateUrl)("/avatar/{user}/64/dark?v={version}",{user:e,version:oc_userconfig.avatar.version}):(0,y.generateUrl)("/avatar/{user}/64?v={version}",{user:e,version:oc_userconfig.avatar.version})}},ee={name:"UserRowSimple",components:{NcPopoverMenu:H(),NcActionButton:$(),NcActions:J()},directives:{ClickOutside:j()},mixins:[X],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},isDarkTheme:{type:Boolean,required:!0}},computed:{userGroupsLabels(){return this.userGroups.map((e=>e.name)).join(", ")},userSubAdminsGroupsLabels(){return this.userSubAdminsGroups.map((e=>e.name)).join(", ")},usedSpace(){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(){return(0,K.ts)().uid!==this.user.id||this.settings.isAdmin},userQuota(){let e=this.user.quota.quota;return"default"===e&&(e=this.settings.defaultQuota,"none"!==e&&(e=OC.Util.computerFileSize(e))),"none"===e||-3===e?t("settings","Unlimited"):e>=0?OC.Util.humanFileSize(e):OC.Util.humanFileSize(0)}},methods:{toggleMenu(){this.$emit("update:openedMenu",!this.openedMenu)},hideMenu(){this.$emit("update:openedMenu",!1)},toggleEdit(){this.$emit("update:editing",!0)}}};var te=a(93379),se=a.n(te),ae=a(7795),ie=a.n(ae),ne=a(90569),re=a.n(ne),oe=a(3565),le=a.n(oe),de=a(19216),ue=a.n(de),ce=a(44589),ge=a.n(ce),pe=a(46546),he={};he.styleTagTransform=ge(),he.setAttributes=le(),he.insert=re().bind(null,"head"),he.domAPI=ie(),he.insertStyleElement=ue(),se()(pe.Z,he),pe.Z&&pe.Z.locals&&pe.Z.locals;const me=(0,P.Z)(ee,(function(){var e=this,t=e._self._c;return t("tr",{staticClass:"row",class:{disabled:e.loading.delete||e.loading.disable},attrs:{"data-id":e.user.id}},[t("td",{staticClass:"avatar",class:{"icon-loading-small":e.loading.delete||e.loading.disable||e.loading.wipe}},[e.loading.delete||e.loading.disable||e.loading.wipe?e._e():t("img",{attrs:{alt:"",width:"32",height:"32",src:e.generateAvatar(e.user.id,e.isDarkTheme)}})]),e._v(" "),t("td",{staticClass:"name"},[t("div",{staticClass:"displayName subtitle"},[t("div",{staticClass:"cellText",attrs:{title:e.user.displayname.length>20?e.user.displayname:""}},[t("strong",[e._v("\n\t\t\t\t\t"+e._s(e.user.displayname)+"\n\t\t\t\t")])])]),e._v("\n\t\t"+e._s(e.user.id)+"\n\t")]),e._v(" "),t("td"),e._v(" "),t("td",{staticClass:"mailAddress"},[t("div",{staticClass:"cellText",attrs:{title:null!==e.user.email&&e.user.email.length>20?e.user.email:""}},[e._v("\n\t\t\t"+e._s(e.user.email)+"\n\t\t")])]),e._v(" "),t("td",{staticClass:"groups"},[e._v("\n\t\t"+e._s(e.userGroupsLabels)+"\n\t")]),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?t("td",{staticClass:"subAdminsGroups"},[e._v("\n\t\t"+e._s(e.userSubAdminsGroupsLabels)+"\n\t")]):e._e(),e._v(" "),t("td",{staticClass:"userQuota"},[t("div",{staticClass:"quota"},[e._v("\n\t\t\t"+e._s(e.userQuota)+" ("+e._s(e.usedSpace)+")\n\t\t\t"),t("progress",{staticClass:"quota-user-progress",class:{warn:e.usedQuota>80},attrs:{max:"100"},domProps:{value:e.usedQuota}})])]),e._v(" "),e.showConfig.showLanguages?t("td",{staticClass:"languages"},[e._v("\n\t\t"+e._s(e.userLanguage.name)+"\n\t")]):e._e(),e._v(" "),e.showConfig.showUserBackend||e.showConfig.showStoragePath?t("td",{staticClass:"userBackend"},[e.showConfig.showUserBackend?t("div",{staticClass:"userBackend"},[e._v("\n\t\t\t"+e._s(e.user.backend)+"\n\t\t")]):e._e(),e._v(" "),e.showConfig.showStoragePath?t("div",{staticClass:"storageLocation subtitle",attrs:{title:e.user.storageLocation}},[e._v("\n\t\t\t"+e._s(e.user.storageLocation)+"\n\t\t")]):e._e()]):e._e(),e._v(" "),e.showConfig.showLastLogin?t("td",{staticClass:"lastLogin",attrs:{title:e.userLastLoginTooltip}},[e._v("\n\t\t"+e._s(e.userLastLogin)+"\n\t")]):e._e(),e._v(" "),t("td",{staticClass:"managers"},[e._v("\n\t\t"+e._s(e.user.manager)+"\n\t")]),e._v(" "),t("td",{staticClass:"userActions"},[e.canEdit&&!e.loading.all?t("div",{staticClass:"toggleUserActions"},[t("NcActions",[t("NcActionButton",{attrs:{icon:"icon-rename",title:e.t("settings","Edit User"),"aria-label":e.t("settings","Edit User")},on:{click:e.toggleEdit}})],1),e._v(" "),t("div",{staticClass:"userPopoverMenuWrapper"},[t("button",{directives:[{name:"click-outside",rawName:"v-click-outside",value:e.hideMenu,expression:"hideMenu"}],staticClass:"icon-more",attrs:{"aria-expanded":e.openedMenu,"aria-label":e.t("settings","Toggle user actions menu")},on:{click:function(t){return t.preventDefault(),e.toggleMenu.apply(null,arguments)}}}),e._v(" "),t("div",{staticClass:"popovermenu",class:{open:e.openedMenu}},[t("NcPopoverMenu",{attrs:{menu:e.userActions}})],1)])],1):e._e(),e._v(" "),t("div",{staticClass:"feedback",style:{opacity:""!==e.feedbackMessage?1:0}},[t("div",{staticClass:"icon-checkmark"}),e._v("\n\t\t\t"+e._s(e.feedbackMessage)+"\n\t\t")])])])}),[],!1,null,null,null).exports;var ve=a(25108);const we={name:"UserRow",components:{UserRowSimple:me,NcPopoverMenu:W.Rs,NcActions:W.O3,NcActionButton:W.Js,NcMultiselect:W.Z2},directives:{ClickOutside:j()},mixins:[X],props:{users:{type:Array,required:!0},user:{type:Object,required:!0},settings:{type:Object,default:()=>({})},groups:{type:Array,default:()=>[]},subAdminsGroups:{type:Array,default:()=>[]},quotaOptions:{type:Array,default:()=>[]},showConfig:{type:Object,default:()=>({})},languages:{type:Array,required:!0},externalActions:{type:Array,default:()=>[]},isDarkTheme:{type:Boolean,required:!0}},data:()=>({rand:parseInt(1e3*Math.random()),openedMenu:!1,feedbackMessage:"",possibleManagers:[],currentManager:"",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,manager:!1}}),computed:{userActions(){const e=[{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&&e.push({icon:"icon-mail",text:t("settings","Resend welcome email"),action:this.sendWelcomeMail}),e.concat(this.externalActions)}},async beforeMount(){await this.searchUserManager(),this.user.manager&&await this.initManager(this.user.manager)},methods:{toggleMenu(){this.openedMenu=!this.openedMenu},hideMenu(){this.openedMenu=!1},wipeUserDevices(){const 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")},(t=>{t&&(this.loading.wipe=!0,this.loading.all=!0,this.$store.dispatch("wipeUserDevices",e).then((()=>{this.loading.wipe=!1,this.loading.all=!1})))}),!0)},filterManagers(e){return e.filter((e=>e.id!==this.user.id))},async initManager(e){await this.$store.dispatch("getUser",e).then((e=>{this.currentManager=null==e?void 0:e.data.ocs.data}))},async searchUserManager(e){await this.$store.dispatch("searchUsers",{offset:0,limit:10,search:e}).then((e=>{const t=null!=e&&e.data?this.filterManagers(Object.values(null==e?void 0:e.data.ocs.data.users)):[];t.length>0&&(this.possibleManagers=t)}))},updateUserManager(e){this.loading.manager=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"manager",value:this.currentManager?this.currentManager.id:""}).then((()=>{this.loading.manager=!1}))},deleteUser(){const 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")},(t=>{if(t)return this.loading.delete=!0,this.loading.all=!0,this.$store.dispatch("deleteUser",e).then((()=>{this.loading.delete=!1,this.loading.all=!1}))}),!0)},enableDisableUser(){this.loading.delete=!0,this.loading.all=!0;const e=this.user.id,t=!this.user.enabled;return this.$store.dispatch("enableDisableUser",{userid:e,enabled:t}).then((()=>{this.loading.delete=!1,this.loading.all=!1}))},updateDisplayName(){const e=this.$refs.displayName.value;this.loading.displayName=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"displayname",value:e}).then((()=>{this.loading.displayName=!1,this.$refs.displayName.value=e}))},updatePassword(){const e=this.$refs.password.value;this.loading.password=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"password",value:e}).then((()=>{this.loading.password=!1,this.$refs.password.value=""}))},updateEmail(){const e=this.$refs.mailAddress.value;this.loading.mailAddress=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"email",value:e}).then((()=>{this.loading.mailAddress=!1,this.$refs.mailAddress.value=e}))},async createGroup(e){this.loading={groups:!0,subadmins:!0};try{await this.$store.dispatch("addGroup",e);const t=this.user.id;await this.$store.dispatch("addUserGroup",{userid:t,gid:e})}catch(e){ve.error(e)}finally{this.loading={groups:!1,subadmins:!1}}return this.$store.getters.getGroups[this.groups.length]},async addUserGroup(e){if(!1===e.canAdd)return!1;this.loading.groups=!0;const t=this.user.id,s=e.id;try{await this.$store.dispatch("addUserGroup",{userid:t,gid:s})}catch(e){ve.error(e)}finally{this.loading.groups=!1}},async removeUserGroup(e){if(!1===e.canRemove)return!1;this.loading.groups=!0;const t=this.user.id,s=e.id;try{await this.$store.dispatch("removeUserGroup",{userid:t,gid:s}),this.loading.groups=!1,this.$route.params.selectedGroup===s&&this.$store.commit("deleteUser",t)}catch{this.loading.groups=!1}},async addUserSubAdmin(e){this.loading.subadmins=!0;const t=this.user.id,s=e.id;try{await this.$store.dispatch("addUserSubAdmin",{userid:t,gid:s}),this.loading.subadmins=!1}catch(e){ve.error(e)}},async removeUserSubAdmin(e){this.loading.subadmins=!0;const t=this.user.id,s=e.id;try{await this.$store.dispatch("removeUserSubAdmin",{userid:t,gid:s})}catch(e){ve.error(e)}finally{this.loading.subadmins=!1}},async setUserQuota(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";this.loading.quota=!0,e=e.id?e.id:e;try{await this.$store.dispatch("setUserData",{userid:this.user.id,key:"quota",value:e})}catch(e){ve.error(e)}finally{this.loading.quota=!1}return e},validateQuota(e){const t=OC.Util.computerFileSize(e);return null!==t&&t>=0&&this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(e)))},async setUserLanguage(e){this.loading.languages=!0;try{await this.$store.dispatch("setUserData",{userid:this.user.id,key:"language",value:e.code})}catch(e){ve.error(e)}finally{this.loading.languages=!1}return e},sendWelcomeMail(){this.loading.all=!0,this.$store.dispatch("sendWelcomeMail",this.user.id).then((e=>{e&&(this.feedbackMessage=t("setting","Welcome mail sent!"),setTimeout((()=>{this.feedbackMessage=""}),2e3)),this.loading.all=!1}))}}};var fe=a(90186),Ae={};Ae.styleTagTransform=ge(),Ae.setAttributes=le(),Ae.insert=re().bind(null,"head"),Ae.domAPI=ie(),Ae.insertStyleElement=ue(),se()(fe.Z,Ae),fe.Z&&fe.Z.locals&&fe.Z.locals;const be=(0,P.Z)(we,(function(){var e=this,t=e._self._c;return 1===Object.keys(e.user).length?t("div",{staticClass:"row",attrs:{"data-id":e.user.id}},[t("div",{staticClass:"avatar",class:{"icon-loading-small":e.loading.delete||e.loading.disable||e.loading.wipe}},[e.loading.delete||e.loading.disable||e.loading.wipe?e._e():t("img",{attrs:{src:e.generateAvatar(e.user.id,e.isDarkTheme),alt:"",height:"32",width:"32"}})]),e._v(" "),t("div",{staticClass:"name"},[e._v("\n\t\t"+e._s(e.user.id)+"\n\t")]),e._v(" "),t("div",{staticClass:"obfuscated"},[e._v("\n\t\t"+e._s(e.t("settings","You do not have permissions to see the details of this user"))+"\n\t")])]):e.editing?t("tr",{staticClass:"row row--editable",class:{disabled:e.loading.delete||e.loading.disable,"row--menu-opened":e.openedMenu},attrs:{"data-id":e.user.id}},[t("td",{staticClass:"avatar",class:{"icon-loading-small":e.loading.delete||e.loading.disable||e.loading.wipe}},[e.loading.delete||e.loading.disable||e.loading.wipe?e._e():t("img",{attrs:{src:e.generateAvatar(e.user.id,e.isDarkTheme),alt:"",height:"32",width:"32"}})]),e._v(" "),e.user.backendCapabilities.setDisplayName?t("td",{staticClass:"displayName"},[t("form",{staticClass:"displayName",class:{"icon-loading-small":e.loading.displayName},on:{submit:function(t){return t.preventDefault(),e.updateDisplayName.apply(null,arguments)}}},[t("label",{staticClass:"hidden-visually",attrs:{for:"displayName"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Edit display name")))]),e._v(" "),t("input",{ref:"displayName",attrs:{id:"displayName"+e.user.id+e.rand,disabled:e.loading.displayName||e.loading.all,autocapitalize:"off",autocomplete:"off",autocorrect:"off",spellcheck:"false",type:"text"},domProps:{value:e.user.displayname}}),e._v(" "),t("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})])]):t("td",{staticClass:"name"},[e._v("\n\t\t"+e._s(e.user.id)+"\n\t\t"),t("div",{staticClass:"displayName subtitle"},[t("div",{staticClass:"cellText",attrs:{title:e.user.displayname.length>20?e.user.displayname:""}},[e._v("\n\t\t\t\t"+e._s(e.user.displayname)+"\n\t\t\t")])])]),e._v(" "),e.settings.canChangePassword&&e.user.backendCapabilities.setPassword?t("td",[t("form",{staticClass:"password",class:{"icon-loading-small":e.loading.password},on:{submit:function(t){return t.preventDefault(),e.updatePassword.apply(null,arguments)}}},[t("label",{staticClass:"hidden-visually",attrs:{for:"password"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Add new password")))]),e._v(" "),t("input",{ref:"password",attrs:{id:"password"+e.user.id+e.rand,disabled:e.loading.password||e.loading.all,minlength:e.minPasswordLength,maxlength:"469",placeholder:e.t("settings","Add new password"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",required:"",spellcheck:"false",type:"password",value:""}}),e._v(" "),t("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})])]):t("td"),e._v(" "),t("td",[t("form",{staticClass:"mailAddress",class:{"icon-loading-small":e.loading.mailAddress},on:{submit:function(t){return t.preventDefault(),e.updateEmail.apply(null,arguments)}}},[t("label",{staticClass:"hidden-visually",attrs:{for:"mailAddress"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Add new email address")))]),e._v(" "),t("input",{ref:"mailAddress",attrs:{id:"mailAddress"+e.user.id+e.rand,disabled:e.loading.mailAddress||e.loading.all,placeholder:e.t("settings","Add new email address"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",spellcheck:"false",type:"email"},domProps:{value:e.user.email}}),e._v(" "),t("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})])]),e._v(" "),t("td",{staticClass:"groups",class:{"icon-loading-small":e.loading.groups}},[t("label",{staticClass:"hidden-visually",attrs:{for:"groups"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Add user to group")))]),e._v(" "),t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{id:"groups"+e.user.id+e.rand,"close-on-select":!1,disabled:e.loading.groups||e.loading.all,limit:2,multiple:!0,options:e.availableGroups,placeholder:e.t("settings","Add user to group"),"tag-width":60,taggable:e.settings.isAdmin,value:e.userGroups,label:"name","tag-placeholder":"create","track-by":"id"},on:{remove:e.removeUserGroup,select:e.addUserGroup,tag:e.createGroup}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?t("td",{staticClass:"subadmins",class:{"icon-loading-small":e.loading.subadmins}},[t("label",{staticClass:"hidden-visually",attrs:{for:"subadmins"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Set user as admin for")))]),e._v(" "),t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{id:"subadmins"+e.user.id+e.rand,"close-on-select":!1,disabled:e.loading.subadmins||e.loading.all,limit:2,multiple:!0,options:e.subAdminsGroups,placeholder:e.t("settings","Set user as admin for"),"tag-width":60,value:e.userSubAdminsGroups,label:"name","track-by":"id"},on:{remove:e.removeUserSubAdmin,select:e.addUserSubAdmin}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1):e._e(),e._v(" "),t("td",{staticClass:"quota",class:{"icon-loading-small":e.loading.quota},attrs:{title:e.usedSpace}},[t("label",{staticClass:"hidden-visually",attrs:{for:"quota"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Select user quota")))]),e._v(" "),t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{id:"quota"+e.user.id+e.rand,"allow-empty":!1,disabled:e.loading.quota||e.loading.all,options:e.quotaOptions,placeholder:e.t("settings","Select user quota"),taggable:!0,value:e.userQuota,label:"label","tag-placeholder":"create","track-by":"id"},on:{input:e.setUserQuota,tag:e.validateQuota}})],1),e._v(" "),e.showConfig.showLanguages?t("td",{staticClass:"languages",class:{"icon-loading-small":e.loading.languages}},[t("label",{staticClass:"hidden-visually",attrs:{for:"language"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Set the language")))]),e._v(" "),t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{id:"language"+e.user.id+e.rand,"allow-empty":!1,disabled:e.loading.languages||e.loading.all,options:e.languages,placeholder:e.t("settings","No language set"),value:e.userLanguage,"group-label":"label","group-values":"languages",label:"name","track-by":"code"},on:{input:e.setUserLanguage}})],1):e._e(),e._v(" "),t("td",{staticClass:"managers",class:{"icon-loading-small":e.loading.manager}},[t("NcMultiselect",{ref:"manager",staticClass:"multiselect-vue",attrs:{"close-on-select":!0,"user-select":!0,options:e.possibleManagers,placeholder:e.t("settings","Select manager"),label:"displayname","track-by":"id"},on:{"search-change":e.searchUserManager,remove:e.updateUserManager,select:e.updateUserManager},model:{value:e.currentManager,callback:function(t){e.currentManager=t},expression:"currentManager"}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1),e._v(" "),e.showConfig.showStoragePath||e.showConfig.showUserBackend?t("td",{staticClass:"storageLocation"}):e._e(),e._v(" "),e.showConfig.showLastLogin?t("td"):e._e(),e._v(" "),t("td",{staticClass:"userActions"},[e.loading.all?e._e():t("div",{staticClass:"toggleUserActions"},[t("NcActions",[t("NcActionButton",{attrs:{icon:"icon-checkmark",title:e.t("settings","Done"),"aria-label":e.t("settings","Done")},on:{click:function(t){e.editing=!1}}})],1),e._v(" "),t("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:e.hideMenu,expression:"hideMenu"}],staticClass:"userPopoverMenuWrapper"},[t("button",{staticClass:"icon-more",attrs:{"aria-expanded":e.openedMenu,"aria-label":e.t("settings","Toggle user actions menu")},on:{click:function(t){return t.preventDefault(),e.toggleMenu.apply(null,arguments)}}}),e._v(" "),t("div",{staticClass:"popovermenu",class:{open:e.openedMenu}},[t("NcPopoverMenu",{attrs:{menu:e.userActions}})],1)])],1),e._v(" "),t("div",{staticClass:"feedback",style:{opacity:""!==e.feedbackMessage?1:0}},[t("div",{staticClass:"icon-checkmark"}),e._v("\n\t\t\t"+e._s(e.feedbackMessage)+"\n\t\t")])])]):t("UserRowSimple",{class:{"row--menu-opened":e.openedMenu},attrs:{editing:e.editing,"feedback-message":e.feedbackMessage,groups:e.groups,languages:e.languages,loading:e.loading,"opened-menu":e.openedMenu,settings:e.settings,"show-config":e.showConfig,"sub-admins-groups":e.subAdminsGroups,"user-actions":e.userActions,user:e.user,"is-dark-theme":e.isDarkTheme},on:{"update:editing":function(t){e.editing=t},"update:openedMenu":function(t){e.openedMenu=t},"update:opened-menu":function(t){e.openedMenu=t}}})}),[],!1,null,"42c6b8a3",null).exports,_e={id:"none",label:t("settings","Unlimited")},Ce={id:"default",label:t("settings","Default quota")},ye={id:"",displayName:"",password:"",mailAddress:"",groups:[],manager:"",subAdminsGroups:[],quota:Ce,language:{code:"en",name:t("settings","Default language")}},Ue={name:"UserList",components:{NcModal:R(),userRow:be,NcMultiselect:k(),InfiniteLoading:I(),NcButton:F()},props:{users:{type:Array,default:()=>[]},showConfig:{type:Object,required:!0},selectedGroup:{type:String,default:null},externalActions:{type:Array,default:()=>[]}},data:()=>({unlimitedQuota:_e,defaultQuota:Ce,loading:{all:!1,groups:!1},scrolled:!1,possibleManagers:[],searchQuery:"",newUser:Object.assign({},ye)}),computed:{settings(){return this.$store.getters.getServerData},selectedGroupDecoded(){return decodeURIComponent(this.selectedGroup)},filteredUsers(){return"disabled"===this.selectedGroup?this.users.filter((e=>!1===e.enabled)):(this.settings.isAdmin,this.users.filter((e=>!1!==e.enabled)))},groups(){return this.$store.getters.getGroups.filter((e=>"disabled"!==e.id)).sort(((e,t)=>e.name.localeCompare(t.name)))},canAddGroups(){return this.groups.map((e=>((e=Object.assign({},e)).$isDisabled=!1===e.canAdd,e)))},subAdminsGroups(){return this.$store.getters.getSubadminGroups},quotaOptions(){const e=this.settings.quotaPreset.reduce(((e,t)=>e.concat({id:t,label:t})),[]);return this.settings.allowUnlimitedQuota&&e.unshift(this.unlimitedQuota),e.unshift(this.defaultQuota),e},minPasswordLength(){return this.$store.getters.getPasswordPolicyMinLength},usersOffset(){return this.$store.getters.getUsersOffset},usersLimit(){return this.$store.getters.getUsersLimit},usersCount(){return this.users.length},languages(){return[{label:t("settings","Common languages"),languages:this.settings.languages.commonLanguages},{label:t("settings","Other languages"),languages:this.settings.languages.otherLanguages}]},isDarkTheme(){return"invert(100%)"===window.getComputedStyle(this.$el).getPropertyValue("--background-invert-if-dark")}},watch:{selectedGroup(e,t){this.redirectIfDisabled(),this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset(),this.setNewUserDefaultGroup(e)},usersCount(e,t){0===e&&1===t?this.$refs.infiniteLoading.stateChanger.reset():1===e&&0===t&&this.$refs.infiniteLoading.stateChanger.loaded()}},async beforeMount(){await this.searchUserManager()},mounted(){this.settings.canChangePassword||OC.Notification.showTemporary(t("settings","Password change is disabled because the master key is disabled")),this.resetForm(),(0,Q.Ld)("nextcloud:unified-search.search",this.search),(0,Q.Ld)("nextcloud:unified-search.reset",this.resetSearch),this.redirectIfDisabled()},beforeDestroy(){(0,Q.r1)("nextcloud:unified-search.search",this.search),(0,Q.r1)("nextcloud:unified-search.reset",this.resetSearch)},methods:{async searchUserManager(e){await this.$store.dispatch("searchUsers",{offset:0,limit:10,search:e}).then((e=>{const t=null!=e&&e.data?Object.values(null==e?void 0:e.data.ocs.data.users):[];t.length>0&&(this.possibleManagers=t)}))},onScroll(e){this.scrolled=e.target.scrollTo>0},validateQuota(e){const t=OC.Util.computerFileSize(e);return null!==t&&t>=0?(e=OC.Util.humanFileSize(OC.Util.computerFileSize(e)),this.newUser.quota={id:e,label:e},this.newUser.quota):(this.newUser.quota=this.quotaOptions[0],this.quotaOptions[0])},infiniteHandler(e){this.$store.dispatch("getUsers",{offset:this.usersOffset,limit:this.usersLimit,group:"disabled"!==this.selectedGroup?this.selectedGroup:"",search:this.searchQuery}).then((t=>{t>0&&e.loaded(),t<this.usersLimit&&e.complete()}))},search(e){let{query:t}=e;this.searchQuery=t,this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset()},resetSearch(){this.search({query:""})},resetForm(){this.newUser=Object.assign({},ye),this.settings.defaultLanguage&&N.default.set(this.newUser.language,"code",this.settings.defaultLanguage),this.setNewUserDefaultGroup(this.selectedGroup),this.loading.all=!1},createUser(){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((e=>e.id)),subadmin:this.newUser.subAdminsGroups.map((e=>e.id)),quota:this.newUser.quota.id,language:this.newUser.language.code,manager:this.newUser.manager.id}).then((()=>{this.resetForm(),this.$refs.newusername.focus(),this.closeModal()})).catch((e=>{if(this.loading.all=!1,e.response&&e.response.data&&e.response.data.ocs&&e.response.data.ocs.meta){const t=e.response.data.ocs.meta.statuscode;102===t?this.$refs.newusername.focus():107===t&&this.$refs.newuserpassword.focus()}}))},setNewUserDefaultGroup(e){if(e&&e.length>0){const t=this.groups.find((t=>t.id===e));if(t)return void(this.newUser.groups=[t])}this.newUser.groups=[]},createGroup(e){return this.loading.groups=!0,this.$store.dispatch("addGroup",e).then((t=>{this.newUser.groups.push(this.groups.find((t=>t.id===e))),this.loading.groups=!1})).catch((()=>{this.loading.groups=!1})),this.$store.getters.getGroups[this.groups.length]},redirectIfDisabled(){const e=this.$store.getters.getGroups;"disabled"===this.selectedGroup&&e.findIndex((e=>"disabled"===e.id&&0===e.usercount))>-1&&(this.$router.push({name:"users"}),this.$refs.infiniteLoading.stateChanger.reset())},closeModal(){this.showConfig.showNewUserForm=!1}}};var ke=a(47671),Ne={};Ne.styleTagTransform=ge(),Ne.setAttributes=le(),Ne.insert=re().bind(null,"head"),Ne.domAPI=ie(),Ne.insertStyleElement=ue(),se()(ke.Z,Ne),ke.Z&&ke.Z.locals&&ke.Z.locals;const Me=(0,P.Z)(Ue,(function(){var e=this,t=e._self._c;return t("table",{staticClass:"user-list-grid",attrs:{id:"app-content",role:"grid","aria-label":e.t("settings","User's table")},on:{"&scroll":function(t){return e.onScroll.apply(null,arguments)}}},[e.showConfig.showNewUserForm?t("NcModal",{attrs:{size:"small"},on:{close:e.closeModal}},[t("form",{staticClass:"modal__content",attrs:{id:"new-user",disabled:e.loading.all},on:{submit:function(t){return t.preventDefault(),e.createUser.apply(null,arguments)}}},[t("h2",[e._v(e._s(e.t("settings","New user")))]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.id,expression:"newUser.id"}],ref:"newusername",staticClass:"modal__item",attrs:{id:"newusername",disabled:e.settings.newUserGenerateUserID,placeholder:e.settings.newUserGenerateUserID?e.t("settings","Will be autogenerated"):e.t("settings","Username"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"username",pattern:"[a-zA-Z0-9 _\\.@\\-']+",required:"",type:"text"},domProps:{value:e.newUser.id},on:{input:function(t){t.target.composing||e.$set(e.newUser,"id",t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.displayName,expression:"newUser.displayName"}],staticClass:"modal__item",attrs:{id:"newdisplayname",placeholder:e.t("settings","Display name"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"displayname",type:"text"},domProps:{value:e.newUser.displayName},on:{input:function(t){t.target.composing||e.$set(e.newUser,"displayName",t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.password,expression:"newUser.password"}],ref:"newuserpassword",staticClass:"modal__item",attrs:{id:"newuserpassword",minlength:e.minPasswordLength,maxlength:469,placeholder:e.t("settings","Password"),required:""===e.newUser.mailAddress,autocapitalize:"none",autocomplete:"new-password",autocorrect:"off",name:"password",type:"password"},domProps:{value:e.newUser.password},on:{input:function(t){t.target.composing||e.$set(e.newUser,"password",t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.mailAddress,expression:"newUser.mailAddress"}],staticClass:"modal__item",attrs:{id:"newemail",placeholder:e.t("settings","Email"),required:""===e.newUser.password||e.settings.newUserRequireEmail,autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"email",type:"email"},domProps:{value:e.newUser.mailAddress},on:{input:function(t){t.target.composing||e.$set(e.newUser,"mailAddress",t.target.value)}}}),e._v(" "),t("div",{staticClass:"groups modal__item"},[e.settings.isAdmin?e._e():t("input",{class:{"icon-loading-small":e.loading.groups},attrs:{id:"newgroups",required:!e.settings.isAdmin,tabindex:"-1",type:"text"},domProps:{value:e.newUser.groups}}),e._v(" "),t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:e.loading.groups||e.loading.all,multiple:!0,options:e.canAddGroups,placeholder:e.t("settings","Add user to group"),"tag-width":60,taggable:!0,label:"name","tag-placeholder":"create","track-by":"id"},on:{tag:e.createGroup},model:{value:e.newUser.groups,callback:function(t){e.$set(e.newUser,"groups",t)},expression:"newUser.groups"}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?t("div",{staticClass:"subadmins modal__item"},[t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,multiple:!0,options:e.subAdminsGroups,placeholder:e.t("settings","Set user as admin for"),"tag-width":60,label:"name","track-by":"id"},model:{value:e.newUser.subAdminsGroups,callback:function(t){e.$set(e.newUser,"subAdminsGroups",t)},expression:"newUser.subAdminsGroups"}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1):e._e(),e._v(" "),t("div",{staticClass:"quota modal__item"},[t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:e.quotaOptions,placeholder:e.t("settings","Select user quota"),taggable:!0,label:"label","track-by":"id"},on:{tag:e.validateQuota},model:{value:e.newUser.quota,callback:function(t){e.$set(e.newUser,"quota",t)},expression:"newUser.quota"}})],1),e._v(" "),e.showConfig.showLanguages?t("div",{staticClass:"languages modal__item"},[t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:e.languages,placeholder:e.t("settings","Default language"),"group-label":"label","group-values":"languages",label:"name","track-by":"code"},model:{value:e.newUser.language,callback:function(t){e.$set(e.newUser,"language",t)},expression:"newUser.language"}})],1):e._e(),e._v(" "),e.showConfig.showStoragePath?t("div",{staticClass:"storageLocation"}):e._e(),e._v(" "),e.showConfig.showUserBackend?t("div",{staticClass:"userBackend"}):e._e(),e._v(" "),e.showConfig.showLastLogin?t("div",{staticClass:"lastLogin"}):e._e(),e._v(" "),t("div",{staticClass:"modal__item managers",class:{"icon-loading-small":e.loading.manager}},[t("NcMultiselect",{ref:"manager",staticClass:"multiselect-vue",attrs:{"close-on-select":!0,"user-select":!0,options:e.possibleManagers,placeholder:e.t("settings","Select user manager"),label:"displayname","track-by":"id"},on:{"search-change":e.searchUserManager},model:{value:e.newUser.manager,callback:function(t){e.$set(e.newUser,"manager",t)},expression:"newUser.manager"}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1),e._v(" "),t("div",{staticClass:"user-actions"},[t("NcButton",{attrs:{id:"newsubmit",type:"primary","native-type":"submit",value:""}},[e._v("\n\t\t\t\t\t"+e._s(e.t("settings","Add a new user"))+"\n\t\t\t\t")])],1)])]):e._e(),e._v(" "),t("tbody",[t("tr",{staticClass:"row",class:{sticky:e.scrolled&&!e.showConfig.showNewUserForm},attrs:{id:"grid-header"}},[t("th",{staticClass:"avatar",attrs:{id:"headerAvatar"}},[t("span",{staticClass:"hidden-visually"},[e._v(" "+e._s(e.t("settings","Avatar"))+" ")])]),e._v(" "),t("th",{staticClass:"name",attrs:{id:"headerName"}},[t("div",{staticClass:"subtitle"},[t("strong",[e._v("\n\t\t\t\t\t\t"+e._s(e.t("settings","Display name"))+"\n\t\t\t\t\t")])]),e._v("\n\t\t\t\t"+e._s(e.t("settings","Username"))+"\n\t\t\t")]),e._v(" "),t("th",{staticClass:"password",attrs:{id:"headerPassword"}},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Password"))+"\n\t\t\t")]),e._v(" "),t("th",{staticClass:"mailAddress",attrs:{id:"headerAddress"}},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Email"))+"\n\t\t\t")]),e._v(" "),t("th",{staticClass:"groups",attrs:{id:"headerGroups"}},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Groups"))+"\n\t\t\t")]),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?t("th",{staticClass:"subadmins",attrs:{id:"headerSubAdmins"}},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Group admin for"))+"\n\t\t\t")]):e._e(),e._v(" "),t("th",{staticClass:"quota",attrs:{id:"headerQuota"}},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Quota"))+"\n\t\t\t")]),e._v(" "),e.showConfig.showLanguages?t("th",{staticClass:"languages",attrs:{id:"headerLanguages"}},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Language"))+"\n\t\t\t")]):e._e(),e._v(" "),e.showConfig.showUserBackend||e.showConfig.showStoragePath?t("th",{staticClass:"headerUserBackend userBackend"},[e.showConfig.showUserBackend?t("div",{staticClass:"userBackend"},[e._v("\n\t\t\t\t\t"+e._s(e.t("settings","User backend"))+"\n\t\t\t\t")]):e._e(),e._v(" "),e.showConfig.showStoragePath?t("div",{staticClass:"subtitle storageLocation"},[e._v("\n\t\t\t\t\t"+e._s(e.t("settings","Storage location"))+"\n\t\t\t\t")]):e._e()]):e._e(),e._v(" "),e.showConfig.showLastLogin?t("th",{staticClass:"headerLastLogin lastLogin"},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Last login"))+"\n\t\t\t")]):e._e(),e._v(" "),t("th",{staticClass:"manager",attrs:{id:"headerManager"}},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Manager"))+"\n\t\t\t")]),e._v(" "),t("th",{staticClass:"userActions hidden-visually"},[e._v("\n\t\t\t\t"+e._s(e.t("settings","User actions"))+"\n\t\t\t")])]),e._v(" "),e._l(e.filteredUsers,(function(s){return t("user-row",{key:s.id,attrs:{"external-actions":e.externalActions,groups:e.groups,languages:e.languages,"quota-options":e.quotaOptions,settings:e.settings,"show-config":e.showConfig,"sub-admins-groups":e.subAdminsGroups,user:s,users:e.users,"is-dark-theme":e.isDarkTheme}})})),e._v(" "),t("InfiniteLoading",{ref:"infiniteLoading",on:{infinite:e.infiniteHandler}},[t("div",{attrs:{slot:"spinner"},slot:"spinner"},[t("div",{staticClass:"users-icon-loading icon-loading"})]),e._v(" "),t("div",{attrs:{slot:"no-more"},slot:"no-more"},[t("div",{staticClass:"users-list-end"})]),e._v(" "),t("div",{attrs:{slot:"no-results"},slot:"no-results"},[t("div",{attrs:{id:"emptycontent"}},[t("div",{staticClass:"icon-contacts-dark"}),e._v(" "),t("h2",[e._v(e._s(e.t("settings","No users in here")))])])])])],2)],1)}),[],!1,null,"a4fba162",null).exports;var Le=a(61149),Ge=a(25108);N.default.use(L());const xe={name:"Users",components:{NcAppContent:n(),NcAppNavigation:o(),NcAppNavigationCaption:d(),NcAppNavigationCounter:c(),NcAppNavigationItem:p(),NcAppNavigationNew:m(),NcAppNavigationNewItem:w(),NcAppNavigationSettings:A(),NcContent:C(),GroupListItem:B,NcMultiselect:k(),Plus:Le.Z,UserList:Me},props:{selectedGroup:{type:String,default:null}},data:()=>({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(){return this.selectedGroup?decodeURIComponent(this.selectedGroup):null},users(){return this.$store.getters.getUsers},groups(){return this.$store.getters.getGroups},usersOffset(){return this.$store.getters.getUsersOffset},usersLimit(){return this.$store.getters.getUsersLimit},showLanguages:{get(){return this.getLocalstorage("showLanguages")},set(e){this.setLocalStorage("showLanguages",e)}},showLastLogin:{get(){return this.getLocalstorage("showLastLogin")},set(e){this.setLocalStorage("showLastLogin",e)}},showUserBackend:{get(){return this.getLocalstorage("showUserBackend")},set(e){this.setLocalStorage("showUserBackend",e)}},showStoragePath:{get(){return this.getLocalstorage("showStoragePath")},set(e){this.setLocalStorage("showStoragePath",e)}},userCount(){return this.$store.getters.getUserCount},settings(){return this.$store.getters.getServerData},quotaOptions(){const e=this.settings.quotaPreset.reduce(((e,t)=>e.concat({id:t,label:t})),[]);return this.settings.allowUnlimitedQuota&&e.unshift(this.unlimitedQuota),e},defaultQuota:{get(){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(e){this.selectedQuota=e}},sendWelcomeMail:{get(){return this.settings.newUserSendEmail},async set(e){try{this.loadingSendMail=!0,this.$store.commit("setServerData",{...this.settings,newUserSendEmail:e}),await b.default.post((0,y.generateUrl)("/settings/users/preferences/newUser.sendEmail"),{value:e?"yes":"no"})}catch(e){Ge.error("could not update newUser.sendEmail preference: "+e.message,e)}finally{this.loadingSendMail=!1}}},groupList(){return(Array.isArray(this.groups)?this.groups:[]).filter((e=>"disabled"!==e.id&&"admin"!==e.id)).map((e=>this.formatGroupMenu(e)))},adminGroupMenu(){return this.formatGroupMenu(this.groups.find((e=>"admin"===e.id)))},disabledGroupMenu(){return this.formatGroupMenu(this.groups.find((e=>"disabled"===e.id)))}},beforeMount(){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(){Object.assign(OCA,{Settings:{UserList:{registerAction:this.registerAction}}})},methods:{showNewUserMenu(){this.showConfig.showNewUserForm=!0,this.showConfig.showNewUserForm&&N.default.nextTick((()=>{window.newusername.focus()}))},getLocalstorage(e){const t=this.$localStorage.get(e);return this.showConfig[e]=null!==t?"true"===t:this.showConfig[e],this.showConfig[e]},setLocalStorage(e,t){return this.showConfig[e]=t,this.$localStorage.set(e,t),t},setDefaultQuota(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";this.$store.dispatch("setAppConfig",{app:"files",key:"default_quota",value:e.id?e.id:e}).then((()=>{"object"!=typeof e&&(e={id:e,label:e}),this.defaultQuota=e}))},validateQuota(e){return null===OC.Util.computerFileSize(e)?this.setDefaultQuota("none"):this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(e)))},registerAction(e,t,s){return this.externalActions.push({icon:e,text:t,action:s}),this.externalActions},async createGroup(e){if(""!==e.trim())try{this.loadingAddGroup=!0,await this.$store.dispatch("addGroup",e.trim()),this.hideAddGroupForm(),await this.$router.push({name:"group",params:{selectedGroup:encodeURIComponent(e.trim())}})}catch{this.showAddGroupForm()}finally{this.loadingAddGroup=!1}},showAddGroupForm(){this.$refs.addGroup.newItemActive=!0,this.$nextTick((()=>{this.$refs.addGroup.$refs.newItemInput.focusInput()}))},hideAddGroupForm(){this.$refs.addGroup.newItemActive=!1,this.$refs.addGroup.newItemValue=""},formatGroupMenu(e){const t={};return void 0===e?{}:(t.id=e.id,t.title=e.name,t.usercount=e.usercount,e.usercount-e.disabled>0&&(t.count=e.usercount-e.disabled),t)}}};var Se=a(69049),$e={};$e.styleTagTransform=ge(),$e.setAttributes=le(),$e.insert=re().bind(null,"head"),$e.domAPI=ie(),$e.insertStyleElement=ue(),se()(Se.Z,$e),Se.Z&&Se.Z.locals&&Se.Z.locals;const qe=(0,P.Z)(xe,(function(){var e=this,t=e._self._c;return t("NcContent",{attrs:{"app-name":"settings","navigation-class":{"icon-loading":e.loadingAddGroup}}},[t("NcAppNavigation",{scopedSlots:e._u([{key:"list",fn:function(){return[t("NcAppNavigationNewItem",{ref:"addGroup",attrs:{id:"addgroup","edit-placeholder":e.t("settings","Enter group name"),editable:!0,loading:e.loadingAddGroup,title:e.t("settings","Add group")},on:{click:e.showAddGroupForm,"new-item":e.createGroup},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Plus",{attrs:{size:20}})]},proxy:!0}])}),e._v(" "),t("NcAppNavigationItem",{attrs:{id:"everyone",exact:!0,title:e.t("settings","Active users"),to:{name:"users"},icon:"icon-contacts-dark"}},[e.userCount>0?t("NcAppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[e._v("\n\t\t\t\t\t"+e._s(e.userCount)+"\n\t\t\t\t")]):e._e()],1),e._v(" "),e.settings.isAdmin?t("NcAppNavigationItem",{attrs:{id:"admin",exact:!0,title:e.t("settings","Admins"),to:{name:"group",params:{selectedGroup:"admin"}},icon:"icon-user-admin"}},[e.adminGroupMenu.count?t("NcAppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[e._v("\n\t\t\t\t\t"+e._s(e.adminGroupMenu.count)+"\n\t\t\t\t")]):e._e()],1):e._e(),e._v(" "),e.disabledGroupMenu.usercount>0||-1===e.disabledGroupMenu.usercount?t("NcAppNavigationItem",{attrs:{id:"disabled",exact:!0,title:e.t("settings","Disabled users"),to:{name:"group",params:{selectedGroup:"disabled"}},icon:"icon-disabled-users"}},[e.disabledGroupMenu.usercount>0?t("NcAppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[e._v("\n\t\t\t\t\t"+e._s(e.disabledGroupMenu.usercount)+"\n\t\t\t\t")]):e._e()],1):e._e(),e._v(" "),e.groupList.length>0?t("NcAppNavigationCaption",{attrs:{title:e.t("settings","Groups")}}):e._e(),e._v(" "),e._l(e.groupList,(function(e){return t("GroupListItem",{key:e.id,attrs:{id:e.id,title:e.title,count:e.count}})}))]},proxy:!0},{key:"footer",fn:function(){return[t("NcAppNavigationSettings",[t("div",[t("p",[e._v(e._s(e.t("settings","Default quota:")))]),e._v(" "),t("NcMultiselect",{attrs:{value:e.defaultQuota,options:e.quotaOptions,"tag-placeholder":"create",placeholder:e.t("settings","Select default quota"),label:"label","track-by":"id","allow-empty":!1,taggable:!0},on:{tag:e.validateQuota,input:e.setDefaultQuota}})],1),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.showLanguages,expression:"showLanguages"}],staticClass:"checkbox",attrs:{id:"showLanguages",type:"checkbox"},domProps:{checked:Array.isArray(e.showLanguages)?e._i(e.showLanguages,null)>-1:e.showLanguages},on:{change:function(t){var s=e.showLanguages,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showLanguages=s.concat([null])):n>-1&&(e.showLanguages=s.slice(0,n).concat(s.slice(n+1)))}else e.showLanguages=i}}}),e._v(" "),t("label",{attrs:{for:"showLanguages"}},[e._v(e._s(e.t("settings","Show Languages")))])]),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.showLastLogin,expression:"showLastLogin"}],staticClass:"checkbox",attrs:{id:"showLastLogin",type:"checkbox"},domProps:{checked:Array.isArray(e.showLastLogin)?e._i(e.showLastLogin,null)>-1:e.showLastLogin},on:{change:function(t){var s=e.showLastLogin,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showLastLogin=s.concat([null])):n>-1&&(e.showLastLogin=s.slice(0,n).concat(s.slice(n+1)))}else e.showLastLogin=i}}}),e._v(" "),t("label",{attrs:{for:"showLastLogin"}},[e._v(e._s(e.t("settings","Show last login")))])]),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.showUserBackend,expression:"showUserBackend"}],staticClass:"checkbox",attrs:{id:"showUserBackend",type:"checkbox"},domProps:{checked:Array.isArray(e.showUserBackend)?e._i(e.showUserBackend,null)>-1:e.showUserBackend},on:{change:function(t){var s=e.showUserBackend,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showUserBackend=s.concat([null])):n>-1&&(e.showUserBackend=s.slice(0,n).concat(s.slice(n+1)))}else e.showUserBackend=i}}}),e._v(" "),t("label",{attrs:{for:"showUserBackend"}},[e._v(e._s(e.t("settings","Show user backend")))])]),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.showStoragePath,expression:"showStoragePath"}],staticClass:"checkbox",attrs:{id:"showStoragePath",type:"checkbox"},domProps:{checked:Array.isArray(e.showStoragePath)?e._i(e.showStoragePath,null)>-1:e.showStoragePath},on:{change:function(t){var s=e.showStoragePath,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showStoragePath=s.concat([null])):n>-1&&(e.showStoragePath=s.slice(0,n).concat(s.slice(n+1)))}else e.showStoragePath=i}}}),e._v(" "),t("label",{attrs:{for:"showStoragePath"}},[e._v(e._s(e.t("settings","Show storage path")))])]),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.sendWelcomeMail,expression:"sendWelcomeMail"}],staticClass:"checkbox",attrs:{id:"sendWelcomeMail",disabled:e.loadingSendMail,type:"checkbox"},domProps:{checked:Array.isArray(e.sendWelcomeMail)?e._i(e.sendWelcomeMail,null)>-1:e.sendWelcomeMail},on:{change:function(t){var s=e.sendWelcomeMail,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.sendWelcomeMail=s.concat([null])):n>-1&&(e.sendWelcomeMail=s.slice(0,n).concat(s.slice(n+1)))}else e.sendWelcomeMail=i}}}),e._v(" "),t("label",{attrs:{for:"sendWelcomeMail"}},[e._v(e._s(e.t("settings","Send email to new user")))])])])]},proxy:!0}])},[t("NcAppNavigationNew",{attrs:{"button-id":"new-user-button",text:e.t("settings","New user"),"button-class":"icon-add"},on:{click:e.showNewUserMenu,keyup:[function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.showNewUserMenu.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])?null:e.showNewUserMenu.apply(null,arguments)}]}})],1),e._v(" "),t("NcAppContent",[t("UserList",{attrs:{users:e.users,"show-config":e.showConfig,"selected-group":e.selectedGroupDecoded,"external-actions":e.externalActions}})],1)],1)}),[],!1,null,"c70f3f58",null).exports}}]);
-//# sourceMappingURL=settings-users-8351.js.map?v=706ed004a7f00d5c5655 \ No newline at end of file
+"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8351],{21849:(e,t,s)=>{s.d(t,{Z:()=>o});var a=s(87537),i=s.n(a),n=s(23645),r=s.n(n)()(i());r.push([e.id,".modal-wrapper[data-v-228801f0]{margin:2vh 0;align-items:flex-start}.modal__content[data-v-228801f0]{display:flex;padding:20px;flex-direction:column;align-items:center;text-align:center}.modal__item[data-v-228801f0]{margin-bottom:16px;width:100%}.modal__item[data-v-228801f0]:not(:focus):not(:active){border-color:var(--color-border-dark)}.modal__item[data-v-228801f0] .multiselect{width:100%}.user-actions[data-v-228801f0]{margin-top:20px}.modal__content[data-v-228801f0] .multiselect__single{text-align:left;box-sizing:border-box}.modal__content[data-v-228801f0] .multiselect__content-wrapper{box-sizing:border-box}.row[data-v-228801f0] .multiselect__single{z-index:auto !important}input#newgroups[data-v-228801f0]{position:absolute;opacity:0;width:0}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList.vue"],names:[],mappings:"AACA,gCACC,YAAA,CACA,sBAAA,CAED,iCACC,YAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CAED,8BACC,kBAAA,CACA,UAAA,CAED,uDACC,qCAAA,CAED,2CACC,UAAA,CAED,+BACC,eAAA,CAED,sDACC,eAAA,CACA,qBAAA,CAED,+DACC,qBAAA,CAED,2CACC,uBAAA,CAID,iCACC,iBAAA,CACA,SAAA,CAMA,OAAA",sourcesContent:['\n.modal-wrapper {\n\tmargin: 2vh 0;\n\talign-items: flex-start;\n}\n.modal__content {\n\tdisplay: flex;\n\tpadding: 20px;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n}\n.modal__item {\n\tmargin-bottom: 16px;\n\twidth: 100%;\n}\n.modal__item:not(:focus):not(:active) {\n\tborder-color: var(--color-border-dark);\n}\n.modal__item::v-deep .multiselect {\n\twidth: 100%;\n}\n.user-actions {\n\tmargin-top: 20px;\n}\n.modal__content::v-deep .multiselect__single {\n\ttext-align: left;\n\tbox-sizing: border-box;\n}\n.modal__content::v-deep .multiselect__content-wrapper {\n\tbox-sizing: border-box;\n}\n.row::v-deep .multiselect__single {\n\tz-index: auto !important;\n}\n\n/* fake input for groups validation */\ninput#newgroups {\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'],sourceRoot:""}]);const o=r},61106:(e,t,s)=>{s.d(t,{Z:()=>o});var a=s(87537),i=s.n(a),n=s(23645),r=s.n(n)()(i());r.push([e.id,".row--menu-opened[data-v-07523524]{z-index:1 !important}.row[data-v-07523524] .multiselect__single{z-index:auto !important}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRow.vue"],names:[],mappings:"AAEA,mCACC,oBAAA,CAED,2CACC,uBAAA",sourcesContent:["\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:""}]);const o=r},11582:(e,t,s)=>{s.d(t,{Z:()=>o});var a=s(87537),i=s.n(a),n=s(23645),r=s.n(n)()(i());r.push([e.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:"AACC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA",sourcesContent:["\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:""}]);const o=r},69049:(e,t,s)=>{s.d(t,{Z:()=>o});var a=s(87537),i=s.n(a),n=s(23645),r=s.n(n)()(i());r.push([e.id,".app-navigation__list #addgroup[data-v-c70f3f58] .app-navigation-entry__utils{display:none}","",{version:3,sources:["webpack://./apps/settings/src/views/Users.vue"],names:[],mappings:"AAEA,8EACC,YAAA",sourcesContent:["\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:""}]);const o=r},13538:(e,s,a)=>{a.r(s),a.d(s,{default:()=>qe});var i=a(69680),n=a.n(i),r=a(55209),o=a.n(r),l=a(88696),d=a.n(l),u=a(53110),c=a.n(u),g=a(14032),p=a.n(g),h=a(73190),m=a.n(h),v=a(44439),w=a.n(v),f=a(93041),_=a.n(f),A=a(4820),b=a(27472),C=a.n(b),y=a(79753),U=a(98266),k=a.n(U),N=a(20144),M=a(87369),L=a.n(M),G=a(79570),S=a.n(G),x=a(45400),$=a.n(x),q=a(97039),D=a.n(q);const O={name:"GroupListItem",components:{NcActionInput:S(),NcActionButton:$(),NcCounterBubble:D(),NcAppNavigationItem:p()},props:{id:{type:String,required:!0},title:{type:String,required:!0},count:{type:Number,required:!1}},data:()=>({loadingRenameGroup:!1,openGroupMenu:!1}),computed:{settings(){return this.$store.getters.getServerData}},methods:{handleGroupMenuOpen(){this.openGroupMenu=!0},async renameGroup(e){if(""===e.trim())return;const t=this.$refs.displayNameInput.$el.querySelector('input[type="text"]').value;if(""!==t.trim())try{this.openGroupMenu=!1,this.loadingRenameGroup=!0,await this.$store.dispatch("renameGroup",{groupid:e.trim(),displayName:t.trim()}),this.loadingRenameGroup=!1}catch{this.openGroupMenu=!0,this.loadingRenameGroup=!1}},removeGroup(e){const s=this;OC.dialogs.confirm(t("settings","You are about to remove the group {group}. The users will NOT be deleted.",{group:e}),t("settings","Please confirm the group removal "),(function(t){t&&s.$store.dispatch("removeGroup",e)}))}}};var P=a(51900);const B=(0,P.Z)(O,(function(){var e=this,t=e._self._c;return t("NcAppNavigationItem",{key:e.id,attrs:{exact:!0,title:e.title,to:{name:"group",params:{selectedGroup:encodeURIComponent(e.id)}},icon:"icon-group",loading:e.loadingRenameGroup,"menu-open":e.openGroupMenu},on:{"update:menuOpen":e.handleGroupMenuOpen},scopedSlots:e._u([{key:"counter",fn:function(){return[e.count?t("NcCounterBubble",[e._v("\n\t\t\t"+e._s(e.count)+"\n\t\t")]):e._e()]},proxy:!0},{key:"actions",fn:function(){return["admin"!==e.id&&"disabled"!==e.id&&e.settings.isAdmin?t("NcActionInput",{ref:"displayNameInput",attrs:{icon:"icon-edit",type:"text",value:e.title},on:{submit:function(t){return e.renameGroup(e.id)}}},[e._v("\n\t\t\t"+e._s(e.t("settings","Rename group"))+"\n\t\t")]):e._e(),e._v(" "),"admin"!==e.id&&"disabled"!==e.id&&e.settings.isAdmin?t("NcActionButton",{attrs:{icon:"icon-delete"},on:{click:function(t){return e.removeGroup(e.id)}}},[e._v("\n\t\t\t"+e._s(e.t("settings","Remove group"))+"\n\t\t")]):e._e()]},proxy:!0}])})}),[],!1,null,null,null).exports;var Q=a(78595),z=a(30306),I=a.n(z),R=a(70110),E=a.n(R),T=a(10861),F=a.n(T),Z=a(2649),j=a.n(Z),W=a(15961),Y=a(32996),H=a.n(Y),V=a(12945),J=a.n(V),K=a(45994);const X={props:{user:{type:Object,required:!0},settings:{type:Object,default:()=>({})},groups:{type:Array,default:()=>[]},subAdminsGroups:{type:Array,default:()=>[]},quotaOptions:{type:Array,default:()=>[]},showConfig:{type:Object,default:()=>({})},languages:{type:Array,required:!0},externalActions:{type:Array,default:()=>[]}},computed:{userGroups(){return this.groups.filter((e=>this.user.groups.includes(e.id)))},userSubAdminsGroups(){return this.subAdminsGroups.filter((e=>this.user.subadmin.includes(e.id)))},availableGroups(){return this.groups.map((e=>{const t=Object.assign({},e);return t.$isDisabled=!1===e.canAdd&&!this.user.groups.includes(e.id)||!1===e.canRemove&&this.user.groups.includes(e.id),t}))},usedSpace(){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(){let e=this.user.quota.quota;return e=e>0?Math.min(100,Math.round(this.user.quota.used/e*100)):95*(1-1/(this.user.quota.used/(10*Math.pow(2,30))+1)),isNaN(e)?0:e},userQuota(){if(this.user.quota.quota>=0){const e=OC.Util.humanFileSize(this.user.quota.quota);return this.quotaOptions.find((t=>t.id===e))||{id:e,label:e}}return"default"===this.user.quota.quota?this.quotaOptions[0]:this.quotaOptions[1]},minPasswordLength(){return this.$store.getters.getPasswordPolicyMinLength},userLanguage(){const e=this.languages[0].languages.concat(this.languages[1].languages).find((e=>e.code===this.user.language));return"object"!=typeof e&&""!==this.user.language?{code:this.user.language,name:this.user.language}:""!==this.user.language&&e},userLastLoginTooltip(){return this.user.lastLogin>0?OC.Util.formatDate(this.user.lastLogin):""},userLastLogin(){return this.user.lastLogin>0?OC.Util.relativeModifiedDate(this.user.lastLogin):t("settings","Never")}},methods:{generateAvatar:(e,t)=>t?(0,y.generateUrl)("/avatar/{user}/64/dark?v={version}",{user:e,version:oc_userconfig.avatar.version}):(0,y.generateUrl)("/avatar/{user}/64?v={version}",{user:e,version:oc_userconfig.avatar.version})}},ee={name:"UserRowSimple",components:{NcPopoverMenu:H(),NcActionButton:$(),NcActions:J()},directives:{ClickOutside:j()},mixins:[X],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},isDarkTheme:{type:Boolean,required:!0}},computed:{userGroupsLabels(){return this.userGroups.map((e=>e.name)).join(", ")},userSubAdminsGroupsLabels(){return this.userSubAdminsGroups.map((e=>e.name)).join(", ")},usedSpace(){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(){return(0,K.ts)().uid!==this.user.id||this.settings.isAdmin},userQuota(){let e=this.user.quota.quota;return"default"===e&&(e=this.settings.defaultQuota,"none"!==e&&(e=OC.Util.computerFileSize(e))),"none"===e||-3===e?t("settings","Unlimited"):e>=0?OC.Util.humanFileSize(e):OC.Util.humanFileSize(0)}},methods:{toggleMenu(){this.$emit("update:openedMenu",!this.openedMenu)},hideMenu(){this.$emit("update:openedMenu",!1)},toggleEdit(){this.$emit("update:editing",!0)}}};var te=a(93379),se=a.n(te),ae=a(7795),ie=a.n(ae),ne=a(90569),re=a.n(ne),oe=a(3565),le=a.n(oe),de=a(19216),ue=a.n(de),ce=a(44589),ge=a.n(ce),pe=a(11582),he={};he.styleTagTransform=ge(),he.setAttributes=le(),he.insert=re().bind(null,"head"),he.domAPI=ie(),he.insertStyleElement=ue(),se()(pe.Z,he),pe.Z&&pe.Z.locals&&pe.Z.locals;const me=(0,P.Z)(ee,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"row",class:{disabled:e.loading.delete||e.loading.disable},attrs:{"data-id":e.user.id}},[t("div",{staticClass:"avatar",class:{"icon-loading-small":e.loading.delete||e.loading.disable||e.loading.wipe}},[e.loading.delete||e.loading.disable||e.loading.wipe?e._e():t("img",{attrs:{alt:"",width:"32",height:"32",src:e.generateAvatar(e.user.id,e.isDarkTheme)}})]),e._v(" "),t("div",{staticClass:"name"},[t("div",{staticClass:"displayName subtitle"},[t("div",{staticClass:"cellText",attrs:{title:e.user.displayname.length>20?e.user.displayname:""}},[t("strong",[e._v("\n\t\t\t\t\t"+e._s(e.user.displayname)+"\n\t\t\t\t")])])]),e._v("\n\t\t"+e._s(e.user.id)+"\n\t")]),e._v(" "),t("div"),e._v(" "),t("div",{staticClass:"mailAddress"},[t("div",{staticClass:"cellText",attrs:{title:null!==e.user.email&&e.user.email.length>20?e.user.email:""}},[e._v("\n\t\t\t"+e._s(e.user.email)+"\n\t\t")])]),e._v(" "),t("div",{staticClass:"groups"},[e._v("\n\t\t"+e._s(e.userGroupsLabels)+"\n\t")]),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?t("div",{staticClass:"subAdminsGroups"},[e._v("\n\t\t"+e._s(e.userSubAdminsGroupsLabels)+"\n\t")]):e._e(),e._v(" "),t("div",{staticClass:"userQuota"},[t("div",{staticClass:"quota"},[e._v("\n\t\t\t"+e._s(e.userQuota)+" ("+e._s(e.usedSpace)+")\n\t\t\t"),t("progress",{staticClass:"quota-user-progress",class:{warn:e.usedQuota>80},attrs:{max:"100"},domProps:{value:e.usedQuota}})])]),e._v(" "),e.showConfig.showLanguages?t("div",{staticClass:"languages"},[e._v("\n\t\t"+e._s(e.userLanguage.name)+"\n\t")]):e._e(),e._v(" "),e.showConfig.showUserBackend||e.showConfig.showStoragePath?t("div",{staticClass:"userBackend"},[e.showConfig.showUserBackend?t("div",{staticClass:"userBackend"},[e._v("\n\t\t\t"+e._s(e.user.backend)+"\n\t\t")]):e._e(),e._v(" "),e.showConfig.showStoragePath?t("div",{staticClass:"storageLocation subtitle",attrs:{title:e.user.storageLocation}},[e._v("\n\t\t\t"+e._s(e.user.storageLocation)+"\n\t\t")]):e._e()]):e._e(),e._v(" "),e.showConfig.showLastLogin?t("div",{staticClass:"lastLogin",attrs:{title:e.userLastLoginTooltip}},[e._v("\n\t\t"+e._s(e.userLastLogin)+"\n\t")]):e._e(),e._v(" "),t("div",{staticClass:"managers"},[e._v("\n\t\t"+e._s(e.user.manager)+"\n\t")]),e._v(" "),t("div",{staticClass:"userActions"},[e.canEdit&&!e.loading.all?t("div",{staticClass:"toggleUserActions"},[t("NcActions",[t("NcActionButton",{attrs:{icon:"icon-rename",title:e.t("settings","Edit User"),"aria-label":e.t("settings","Edit User")},on:{click:e.toggleEdit}})],1),e._v(" "),t("div",{staticClass:"userPopoverMenuWrapper"},[t("button",{directives:[{name:"click-outside",rawName:"v-click-outside",value:e.hideMenu,expression:"hideMenu"}],staticClass:"icon-more",attrs:{"aria-expanded":e.openedMenu,"aria-label":e.t("settings","Toggle user actions menu")},on:{click:function(t){return t.preventDefault(),e.toggleMenu.apply(null,arguments)}}}),e._v(" "),t("div",{staticClass:"popovermenu",class:{open:e.openedMenu}},[t("NcPopoverMenu",{attrs:{menu:e.userActions}})],1)])],1):e._e(),e._v(" "),t("div",{staticClass:"feedback",style:{opacity:""!==e.feedbackMessage?1:0}},[t("div",{staticClass:"icon-checkmark"}),e._v("\n\t\t\t"+e._s(e.feedbackMessage)+"\n\t\t")])])])}),[],!1,null,null,null).exports;var ve=a(25108);const we={name:"UserRow",components:{UserRowSimple:me,NcPopoverMenu:W.Rs,NcActions:W.O3,NcActionButton:W.Js,NcMultiselect:W.Z2},directives:{ClickOutside:j()},mixins:[X],props:{users:{type:Array,required:!0},user:{type:Object,required:!0},settings:{type:Object,default:()=>({})},groups:{type:Array,default:()=>[]},subAdminsGroups:{type:Array,default:()=>[]},quotaOptions:{type:Array,default:()=>[]},showConfig:{type:Object,default:()=>({})},languages:{type:Array,required:!0},externalActions:{type:Array,default:()=>[]},isDarkTheme:{type:Boolean,required:!0}},data:()=>({rand:parseInt(1e3*Math.random()),openedMenu:!1,feedbackMessage:"",possibleManagers:[],currentManager:"",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,manager:!1}}),computed:{userActions(){const e=[{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&&e.push({icon:"icon-mail",text:t("settings","Resend welcome email"),action:this.sendWelcomeMail}),e.concat(this.externalActions)}},async beforeMount(){await this.searchUserManager(),this.user.manager&&await this.initManager(this.user.manager)},methods:{toggleMenu(){this.openedMenu=!this.openedMenu},hideMenu(){this.openedMenu=!1},wipeUserDevices(){const 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")},(t=>{t&&(this.loading.wipe=!0,this.loading.all=!0,this.$store.dispatch("wipeUserDevices",e).then((()=>{this.loading.wipe=!1,this.loading.all=!1})))}),!0)},filterManagers(e){return e.filter((e=>e.id!==this.user.id))},async initManager(e){await this.$store.dispatch("getUser",e).then((e=>{this.currentManager=null==e?void 0:e.data.ocs.data}))},async searchUserManager(e){await this.$store.dispatch("searchUsers",{offset:0,limit:10,search:e}).then((e=>{const t=null!=e&&e.data?this.filterManagers(Object.values(null==e?void 0:e.data.ocs.data.users)):[];t.length>0&&(this.possibleManagers=t)}))},updateUserManager(e){this.loading.manager=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"manager",value:this.currentManager?this.currentManager.id:""}).then((()=>{this.loading.manager=!1}))},deleteUser(){const 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")},(t=>{if(t)return this.loading.delete=!0,this.loading.all=!0,this.$store.dispatch("deleteUser",e).then((()=>{this.loading.delete=!1,this.loading.all=!1}))}),!0)},enableDisableUser(){this.loading.delete=!0,this.loading.all=!0;const e=this.user.id,t=!this.user.enabled;return this.$store.dispatch("enableDisableUser",{userid:e,enabled:t}).then((()=>{this.loading.delete=!1,this.loading.all=!1}))},updateDisplayName(){const e=this.$refs.displayName.value;this.loading.displayName=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"displayname",value:e}).then((()=>{this.loading.displayName=!1,this.$refs.displayName.value=e}))},updatePassword(){const e=this.$refs.password.value;this.loading.password=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"password",value:e}).then((()=>{this.loading.password=!1,this.$refs.password.value=""}))},updateEmail(){const e=this.$refs.mailAddress.value;this.loading.mailAddress=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"email",value:e}).then((()=>{this.loading.mailAddress=!1,this.$refs.mailAddress.value=e}))},async createGroup(e){this.loading={groups:!0,subadmins:!0};try{await this.$store.dispatch("addGroup",e);const t=this.user.id;await this.$store.dispatch("addUserGroup",{userid:t,gid:e})}catch(e){ve.error(e)}finally{this.loading={groups:!1,subadmins:!1}}return this.$store.getters.getGroups[this.groups.length]},async addUserGroup(e){if(!1===e.canAdd)return!1;this.loading.groups=!0;const t=this.user.id,s=e.id;try{await this.$store.dispatch("addUserGroup",{userid:t,gid:s})}catch(e){ve.error(e)}finally{this.loading.groups=!1}},async removeUserGroup(e){if(!1===e.canRemove)return!1;this.loading.groups=!0;const t=this.user.id,s=e.id;try{await this.$store.dispatch("removeUserGroup",{userid:t,gid:s}),this.loading.groups=!1,this.$route.params.selectedGroup===s&&this.$store.commit("deleteUser",t)}catch{this.loading.groups=!1}},async addUserSubAdmin(e){this.loading.subadmins=!0;const t=this.user.id,s=e.id;try{await this.$store.dispatch("addUserSubAdmin",{userid:t,gid:s}),this.loading.subadmins=!1}catch(e){ve.error(e)}},async removeUserSubAdmin(e){this.loading.subadmins=!0;const t=this.user.id,s=e.id;try{await this.$store.dispatch("removeUserSubAdmin",{userid:t,gid:s})}catch(e){ve.error(e)}finally{this.loading.subadmins=!1}},async setUserQuota(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";this.loading.quota=!0,e=e.id?e.id:e;try{await this.$store.dispatch("setUserData",{userid:this.user.id,key:"quota",value:e})}catch(e){ve.error(e)}finally{this.loading.quota=!1}return e},validateQuota(e){const t=OC.Util.computerFileSize(e);return null!==t&&t>=0&&this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(e)))},async setUserLanguage(e){this.loading.languages=!0;try{await this.$store.dispatch("setUserData",{userid:this.user.id,key:"language",value:e.code})}catch(e){ve.error(e)}finally{this.loading.languages=!1}return e},sendWelcomeMail(){this.loading.all=!0,this.$store.dispatch("sendWelcomeMail",this.user.id).then((e=>{e&&(this.feedbackMessage=t("setting","Welcome mail sent!"),setTimeout((()=>{this.feedbackMessage=""}),2e3)),this.loading.all=!1}))}}};var fe=a(61106),_e={};_e.styleTagTransform=ge(),_e.setAttributes=le(),_e.insert=re().bind(null,"head"),_e.domAPI=ie(),_e.insertStyleElement=ue(),se()(fe.Z,_e),fe.Z&&fe.Z.locals&&fe.Z.locals;const Ae=(0,P.Z)(we,(function(){var e=this,t=e._self._c;return 1===Object.keys(e.user).length?t("div",{staticClass:"row",attrs:{"data-id":e.user.id}},[t("div",{staticClass:"avatar",class:{"icon-loading-small":e.loading.delete||e.loading.disable||e.loading.wipe}},[e.loading.delete||e.loading.disable||e.loading.wipe?e._e():t("img",{attrs:{src:e.generateAvatar(e.user.id,e.isDarkTheme),alt:"",height:"32",width:"32"}})]),e._v(" "),t("div",{staticClass:"name"},[e._v("\n\t\t"+e._s(e.user.id)+"\n\t")]),e._v(" "),t("div",{staticClass:"obfuscated"},[e._v("\n\t\t"+e._s(e.t("settings","You do not have permissions to see the details of this user"))+"\n\t")])]):e.editing?t("div",{staticClass:"row row--editable",class:{disabled:e.loading.delete||e.loading.disable,"row--menu-opened":e.openedMenu},attrs:{"data-id":e.user.id}},[t("div",{staticClass:"avatar",class:{"icon-loading-small":e.loading.delete||e.loading.disable||e.loading.wipe}},[e.loading.delete||e.loading.disable||e.loading.wipe?e._e():t("img",{attrs:{src:e.generateAvatar(e.user.id,e.isDarkTheme),alt:"",height:"32",width:"32"}})]),e._v(" "),e.user.backendCapabilities.setDisplayName?t("div",{staticClass:"displayName"},[t("form",{staticClass:"displayName",class:{"icon-loading-small":e.loading.displayName},on:{submit:function(t){return t.preventDefault(),e.updateDisplayName.apply(null,arguments)}}},[t("label",{staticClass:"hidden-visually",attrs:{for:"displayName"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Edit display name")))]),e._v(" "),t("input",{ref:"displayName",attrs:{id:"displayName"+e.user.id+e.rand,disabled:e.loading.displayName||e.loading.all,autocapitalize:"off",autocomplete:"off",autocorrect:"off",spellcheck:"false",type:"text"},domProps:{value:e.user.displayname}}),e._v(" "),t("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})])]):t("div",{staticClass:"name"},[e._v("\n\t\t"+e._s(e.user.id)+"\n\t\t"),t("div",{staticClass:"displayName subtitle"},[t("div",{staticClass:"cellText",attrs:{title:e.user.displayname.length>20?e.user.displayname:""}},[e._v("\n\t\t\t\t"+e._s(e.user.displayname)+"\n\t\t\t")])])]),e._v(" "),e.settings.canChangePassword&&e.user.backendCapabilities.setPassword?t("form",{staticClass:"password",class:{"icon-loading-small":e.loading.password},on:{submit:function(t){return t.preventDefault(),e.updatePassword.apply(null,arguments)}}},[t("label",{staticClass:"hidden-visually",attrs:{for:"password"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Add new password")))]),e._v(" "),t("input",{ref:"password",attrs:{id:"password"+e.user.id+e.rand,disabled:e.loading.password||e.loading.all,minlength:e.minPasswordLength,maxlength:"469",placeholder:e.t("settings","Add new password"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",required:"",spellcheck:"false",type:"password",value:""}}),e._v(" "),t("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]):t("div"),e._v(" "),t("form",{staticClass:"mailAddress",class:{"icon-loading-small":e.loading.mailAddress},on:{submit:function(t){return t.preventDefault(),e.updateEmail.apply(null,arguments)}}},[t("label",{staticClass:"hidden-visually",attrs:{for:"mailAddress"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Add new email address")))]),e._v(" "),t("input",{ref:"mailAddress",attrs:{id:"mailAddress"+e.user.id+e.rand,disabled:e.loading.mailAddress||e.loading.all,placeholder:e.t("settings","Add new email address"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",spellcheck:"false",type:"email"},domProps:{value:e.user.email}}),e._v(" "),t("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]),e._v(" "),t("div",{staticClass:"groups",class:{"icon-loading-small":e.loading.groups}},[t("label",{staticClass:"hidden-visually",attrs:{for:"groups"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Add user to group")))]),e._v(" "),t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{id:"groups"+e.user.id+e.rand,"close-on-select":!1,disabled:e.loading.groups||e.loading.all,limit:2,multiple:!0,options:e.availableGroups,placeholder:e.t("settings","Add user to group"),"tag-width":60,taggable:e.settings.isAdmin,value:e.userGroups,label:"name","tag-placeholder":"create","track-by":"id"},on:{remove:e.removeUserGroup,select:e.addUserGroup,tag:e.createGroup}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?t("div",{staticClass:"subadmins",class:{"icon-loading-small":e.loading.subadmins}},[t("label",{staticClass:"hidden-visually",attrs:{for:"subadmins"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Set user as admin for")))]),e._v(" "),t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{id:"subadmins"+e.user.id+e.rand,"close-on-select":!1,disabled:e.loading.subadmins||e.loading.all,limit:2,multiple:!0,options:e.subAdminsGroups,placeholder:e.t("settings","Set user as admin for"),"tag-width":60,value:e.userSubAdminsGroups,label:"name","track-by":"id"},on:{remove:e.removeUserSubAdmin,select:e.addUserSubAdmin}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1):e._e(),e._v(" "),t("div",{staticClass:"quota",class:{"icon-loading-small":e.loading.quota},attrs:{title:e.usedSpace}},[t("label",{staticClass:"hidden-visually",attrs:{for:"quota"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Select user quota")))]),e._v(" "),t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{id:"quota"+e.user.id+e.rand,"allow-empty":!1,disabled:e.loading.quota||e.loading.all,options:e.quotaOptions,placeholder:e.t("settings","Select user quota"),taggable:!0,value:e.userQuota,label:"label","tag-placeholder":"create","track-by":"id"},on:{input:e.setUserQuota,tag:e.validateQuota}})],1),e._v(" "),e.showConfig.showLanguages?t("div",{staticClass:"languages",class:{"icon-loading-small":e.loading.languages}},[t("label",{staticClass:"hidden-visually",attrs:{for:"language"+e.user.id+e.rand}},[e._v(e._s(e.t("settings","Set the language")))]),e._v(" "),t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{id:"language"+e.user.id+e.rand,"allow-empty":!1,disabled:e.loading.languages||e.loading.all,options:e.languages,placeholder:e.t("settings","No language set"),value:e.userLanguage,"group-label":"label","group-values":"languages",label:"name","track-by":"code"},on:{input:e.setUserLanguage}})],1):e._e(),e._v(" "),t("div",{staticClass:"managers",class:{"icon-loading-small":e.loading.manager}},[t("NcMultiselect",{ref:"manager",staticClass:"multiselect-vue",attrs:{"close-on-select":!0,"user-select":!0,options:e.possibleManagers,placeholder:e.t("settings","Select manager"),label:"displayname","track-by":"id"},on:{"search-change":e.searchUserManager,remove:e.updateUserManager,select:e.updateUserManager},model:{value:e.currentManager,callback:function(t){e.currentManager=t},expression:"currentManager"}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1),e._v(" "),e.showConfig.showStoragePath||e.showConfig.showUserBackend?t("div",{staticClass:"storageLocation"}):e._e(),e._v(" "),e.showConfig.showLastLogin?t("div"):e._e(),e._v(" "),t("div",{staticClass:"userActions"},[e.loading.all?e._e():t("div",{staticClass:"toggleUserActions"},[t("NcActions",[t("NcActionButton",{attrs:{icon:"icon-checkmark",title:e.t("settings","Done"),"aria-label":e.t("settings","Done")},on:{click:function(t){e.editing=!1}}})],1),e._v(" "),t("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:e.hideMenu,expression:"hideMenu"}],staticClass:"userPopoverMenuWrapper"},[t("button",{staticClass:"icon-more",attrs:{"aria-expanded":e.openedMenu,"aria-label":e.t("settings","Toggle user actions menu")},on:{click:function(t){return t.preventDefault(),e.toggleMenu.apply(null,arguments)}}}),e._v(" "),t("div",{staticClass:"popovermenu",class:{open:e.openedMenu}},[t("NcPopoverMenu",{attrs:{menu:e.userActions}})],1)])],1),e._v(" "),t("div",{staticClass:"feedback",style:{opacity:""!==e.feedbackMessage?1:0}},[t("div",{staticClass:"icon-checkmark"}),e._v("\n\t\t\t"+e._s(e.feedbackMessage)+"\n\t\t")])])]):t("UserRowSimple",{class:{"row--menu-opened":e.openedMenu},attrs:{editing:e.editing,"feedback-message":e.feedbackMessage,groups:e.groups,languages:e.languages,loading:e.loading,"opened-menu":e.openedMenu,settings:e.settings,"show-config":e.showConfig,"sub-admins-groups":e.subAdminsGroups,"user-actions":e.userActions,user:e.user,"is-dark-theme":e.isDarkTheme},on:{"update:editing":function(t){e.editing=t},"update:openedMenu":function(t){e.openedMenu=t},"update:opened-menu":function(t){e.openedMenu=t}}})}),[],!1,null,"07523524",null).exports,be={id:"none",label:t("settings","Unlimited")},Ce={id:"default",label:t("settings","Default quota")},ye={id:"",displayName:"",password:"",mailAddress:"",groups:[],manager:"",subAdminsGroups:[],quota:Ce,language:{code:"en",name:t("settings","Default language")}},Ue={name:"UserList",components:{NcModal:E(),userRow:Ae,NcMultiselect:k(),InfiniteLoading:I(),NcButton:F()},props:{users:{type:Array,default:()=>[]},showConfig:{type:Object,required:!0},selectedGroup:{type:String,default:null},externalActions:{type:Array,default:()=>[]}},data:()=>({unlimitedQuota:be,defaultQuota:Ce,loading:{all:!1,groups:!1},scrolled:!1,possibleManagers:[],searchQuery:"",newUser:Object.assign({},ye)}),computed:{settings(){return this.$store.getters.getServerData},selectedGroupDecoded(){return decodeURIComponent(this.selectedGroup)},filteredUsers(){return"disabled"===this.selectedGroup?this.users.filter((e=>!1===e.enabled)):(this.settings.isAdmin,this.users.filter((e=>!1!==e.enabled)))},groups(){return this.$store.getters.getGroups.filter((e=>"disabled"!==e.id)).sort(((e,t)=>e.name.localeCompare(t.name)))},canAddGroups(){return this.groups.map((e=>((e=Object.assign({},e)).$isDisabled=!1===e.canAdd,e)))},subAdminsGroups(){return this.$store.getters.getSubadminGroups},quotaOptions(){const e=this.settings.quotaPreset.reduce(((e,t)=>e.concat({id:t,label:t})),[]);return this.settings.allowUnlimitedQuota&&e.unshift(this.unlimitedQuota),e.unshift(this.defaultQuota),e},minPasswordLength(){return this.$store.getters.getPasswordPolicyMinLength},usersOffset(){return this.$store.getters.getUsersOffset},usersLimit(){return this.$store.getters.getUsersLimit},usersCount(){return this.users.length},languages(){return[{label:t("settings","Common languages"),languages:this.settings.languages.commonLanguages},{label:t("settings","Other languages"),languages:this.settings.languages.otherLanguages}]},isDarkTheme(){return"invert(100%)"===window.getComputedStyle(this.$el).getPropertyValue("--background-invert-if-dark")}},watch:{selectedGroup(e,t){this.redirectIfDisabled(),this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset(),this.setNewUserDefaultGroup(e)},usersCount(e,t){0===e&&1===t?this.$refs.infiniteLoading.stateChanger.reset():1===e&&0===t&&this.$refs.infiniteLoading.stateChanger.loaded()}},async beforeMount(){await this.searchUserManager()},mounted(){this.settings.canChangePassword||OC.Notification.showTemporary(t("settings","Password change is disabled because the master key is disabled")),this.resetForm(),(0,Q.Ld)("nextcloud:unified-search.search",this.search),(0,Q.Ld)("nextcloud:unified-search.reset",this.resetSearch),this.redirectIfDisabled()},beforeDestroy(){(0,Q.r1)("nextcloud:unified-search.search",this.search),(0,Q.r1)("nextcloud:unified-search.reset",this.resetSearch)},methods:{async searchUserManager(e){await this.$store.dispatch("searchUsers",{offset:0,limit:10,search:e}).then((e=>{const t=null!=e&&e.data?Object.values(null==e?void 0:e.data.ocs.data.users):[];t.length>0&&(this.possibleManagers=t)}))},onScroll(e){this.scrolled=e.target.scrollTo>0},validateQuota(e){const t=OC.Util.computerFileSize(e);return null!==t&&t>=0?(e=OC.Util.humanFileSize(OC.Util.computerFileSize(e)),this.newUser.quota={id:e,label:e},this.newUser.quota):(this.newUser.quota=this.quotaOptions[0],this.quotaOptions[0])},infiniteHandler(e){this.$store.dispatch("getUsers",{offset:this.usersOffset,limit:this.usersLimit,group:"disabled"!==this.selectedGroup?this.selectedGroup:"",search:this.searchQuery}).then((t=>{t>0&&e.loaded(),t<this.usersLimit&&e.complete()}))},search(e){let{query:t}=e;this.searchQuery=t,this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset()},resetSearch(){this.search({query:""})},resetForm(){this.newUser=Object.assign({},ye),this.settings.defaultLanguage&&N.default.set(this.newUser.language,"code",this.settings.defaultLanguage),this.setNewUserDefaultGroup(this.selectedGroup),this.loading.all=!1},createUser(){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((e=>e.id)),subadmin:this.newUser.subAdminsGroups.map((e=>e.id)),quota:this.newUser.quota.id,language:this.newUser.language.code,manager:this.newUser.manager.id}).then((()=>{this.resetForm(),this.$refs.newusername.focus(),this.closeModal()})).catch((e=>{if(this.loading.all=!1,e.response&&e.response.data&&e.response.data.ocs&&e.response.data.ocs.meta){const t=e.response.data.ocs.meta.statuscode;102===t?this.$refs.newusername.focus():107===t&&this.$refs.newuserpassword.focus()}}))},setNewUserDefaultGroup(e){if(e&&e.length>0){const t=this.groups.find((t=>t.id===e));if(t)return void(this.newUser.groups=[t])}this.newUser.groups=[]},createGroup(e){return this.loading.groups=!0,this.$store.dispatch("addGroup",e).then((t=>{this.newUser.groups.push(this.groups.find((t=>t.id===e))),this.loading.groups=!1})).catch((()=>{this.loading.groups=!1})),this.$store.getters.getGroups[this.groups.length]},redirectIfDisabled(){const e=this.$store.getters.getGroups;"disabled"===this.selectedGroup&&e.findIndex((e=>"disabled"===e.id&&0===e.usercount))>-1&&(this.$router.push({name:"users"}),this.$refs.infiniteLoading.stateChanger.reset())},closeModal(){this.showConfig.showNewUserForm=!1}}};var ke=a(21849),Ne={};Ne.styleTagTransform=ge(),Ne.setAttributes=le(),Ne.insert=re().bind(null,"head"),Ne.domAPI=ie(),Ne.insertStyleElement=ue(),se()(ke.Z,Ne),ke.Z&&ke.Z.locals&&ke.Z.locals;const Me=(0,P.Z)(Ue,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"user-list-grid",attrs:{id:"app-content",role:"grid","aria-label":e.t("settings","User's table")},on:{"&scroll":function(t){return e.onScroll.apply(null,arguments)}}},[e.showConfig.showNewUserForm?t("NcModal",{attrs:{size:"small"},on:{close:e.closeModal}},[t("form",{staticClass:"modal__content",attrs:{id:"new-user",disabled:e.loading.all},on:{submit:function(t){return t.preventDefault(),e.createUser.apply(null,arguments)}}},[t("h2",[e._v(e._s(e.t("settings","New user")))]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.id,expression:"newUser.id"}],ref:"newusername",staticClass:"modal__item",attrs:{id:"newusername",disabled:e.settings.newUserGenerateUserID,placeholder:e.settings.newUserGenerateUserID?e.t("settings","Will be autogenerated"):e.t("settings","Username"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"username",pattern:"[a-zA-Z0-9 _\\.@\\-']+",required:"",type:"text"},domProps:{value:e.newUser.id},on:{input:function(t){t.target.composing||e.$set(e.newUser,"id",t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.displayName,expression:"newUser.displayName"}],staticClass:"modal__item",attrs:{id:"newdisplayname",placeholder:e.t("settings","Display name"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"displayname",type:"text"},domProps:{value:e.newUser.displayName},on:{input:function(t){t.target.composing||e.$set(e.newUser,"displayName",t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.password,expression:"newUser.password"}],ref:"newuserpassword",staticClass:"modal__item",attrs:{id:"newuserpassword",minlength:e.minPasswordLength,maxlength:469,placeholder:e.t("settings","Password"),required:""===e.newUser.mailAddress,autocapitalize:"none",autocomplete:"new-password",autocorrect:"off",name:"password",type:"password"},domProps:{value:e.newUser.password},on:{input:function(t){t.target.composing||e.$set(e.newUser,"password",t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.mailAddress,expression:"newUser.mailAddress"}],staticClass:"modal__item",attrs:{id:"newemail",placeholder:e.t("settings","Email"),required:""===e.newUser.password||e.settings.newUserRequireEmail,autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"email",type:"email"},domProps:{value:e.newUser.mailAddress},on:{input:function(t){t.target.composing||e.$set(e.newUser,"mailAddress",t.target.value)}}}),e._v(" "),t("div",{staticClass:"groups modal__item"},[e.settings.isAdmin?e._e():t("input",{class:{"icon-loading-small":e.loading.groups},attrs:{id:"newgroups",required:!e.settings.isAdmin,tabindex:"-1",type:"text"},domProps:{value:e.newUser.groups}}),e._v(" "),t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:e.loading.groups||e.loading.all,multiple:!0,options:e.canAddGroups,placeholder:e.t("settings","Add user to group"),"tag-width":60,taggable:!0,label:"name","tag-placeholder":"create","track-by":"id"},on:{tag:e.createGroup},model:{value:e.newUser.groups,callback:function(t){e.$set(e.newUser,"groups",t)},expression:"newUser.groups"}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?t("div",{staticClass:"subadmins modal__item"},[t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,multiple:!0,options:e.subAdminsGroups,placeholder:e.t("settings","Set user as admin for"),"tag-width":60,label:"name","track-by":"id"},model:{value:e.newUser.subAdminsGroups,callback:function(t){e.$set(e.newUser,"subAdminsGroups",t)},expression:"newUser.subAdminsGroups"}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1):e._e(),e._v(" "),t("div",{staticClass:"quota modal__item"},[t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:e.quotaOptions,placeholder:e.t("settings","Select user quota"),taggable:!0,label:"label","track-by":"id"},on:{tag:e.validateQuota},model:{value:e.newUser.quota,callback:function(t){e.$set(e.newUser,"quota",t)},expression:"newUser.quota"}})],1),e._v(" "),e.showConfig.showLanguages?t("div",{staticClass:"languages modal__item"},[t("NcMultiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:e.languages,placeholder:e.t("settings","Default language"),"group-label":"label","group-values":"languages",label:"name","track-by":"code"},model:{value:e.newUser.language,callback:function(t){e.$set(e.newUser,"language",t)},expression:"newUser.language"}})],1):e._e(),e._v(" "),e.showConfig.showStoragePath?t("div",{staticClass:"storageLocation"}):e._e(),e._v(" "),e.showConfig.showUserBackend?t("div",{staticClass:"userBackend"}):e._e(),e._v(" "),e.showConfig.showLastLogin?t("div",{staticClass:"lastLogin"}):e._e(),e._v(" "),t("div",{staticClass:"modal__item managers",class:{"icon-loading-small":e.loading.manager}},[t("NcMultiselect",{ref:"manager",staticClass:"multiselect-vue",attrs:{"close-on-select":!0,"user-select":!0,options:e.possibleManagers,placeholder:e.t("settings","Select user manager"),label:"displayname","track-by":"id"},on:{"search-change":e.searchUserManager},model:{value:e.newUser.manager,callback:function(t){e.$set(e.newUser,"manager",t)},expression:"newUser.manager"}},[t("span",{attrs:{slot:"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1),e._v(" "),t("div",{staticClass:"user-actions"},[t("NcButton",{attrs:{id:"newsubmit",type:"primary","native-type":"submit",value:""}},[e._v("\n\t\t\t\t\t"+e._s(e.t("settings","Add a new user"))+"\n\t\t\t\t")])],1)])]):e._e(),e._v(" "),t("div",{staticClass:"row",class:{sticky:e.scrolled&&!e.showConfig.showNewUserForm},attrs:{id:"grid-header"}},[t("div",{staticClass:"avatar",attrs:{id:"headerAvatar"}}),e._v(" "),t("div",{staticClass:"name",attrs:{id:"headerName"}},[t("div",{staticClass:"subtitle"},[t("strong",[e._v("\n\t\t\t\t\t"+e._s(e.t("settings","Display name"))+"\n\t\t\t\t")])]),e._v("\n\t\t\t"+e._s(e.t("settings","Username"))+"\n\t\t")]),e._v(" "),t("div",{staticClass:"password",attrs:{id:"headerPassword"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Password"))+"\n\t\t")]),e._v(" "),t("div",{staticClass:"mailAddress",attrs:{id:"headerAddress"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Email"))+"\n\t\t")]),e._v(" "),t("div",{staticClass:"groups",attrs:{id:"headerGroups"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Groups"))+"\n\t\t")]),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?t("div",{staticClass:"subadmins",attrs:{id:"headerSubAdmins"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Group admin for"))+"\n\t\t")]):e._e(),e._v(" "),t("div",{staticClass:"quota",attrs:{id:"headerQuota"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Quota"))+"\n\t\t")]),e._v(" "),e.showConfig.showLanguages?t("div",{staticClass:"languages",attrs:{id:"headerLanguages"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Language"))+"\n\t\t")]):e._e(),e._v(" "),e.showConfig.showUserBackend||e.showConfig.showStoragePath?t("div",{staticClass:"headerUserBackend userBackend"},[e.showConfig.showUserBackend?t("div",{staticClass:"userBackend"},[e._v("\n\t\t\t\t"+e._s(e.t("settings","User backend"))+"\n\t\t\t")]):e._e(),e._v(" "),e.showConfig.showStoragePath?t("div",{staticClass:"subtitle storageLocation"},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Storage location"))+"\n\t\t\t")]):e._e()]):e._e(),e._v(" "),e.showConfig.showLastLogin?t("div",{staticClass:"headerLastLogin lastLogin"},[e._v("\n\t\t\t"+e._s(e.t("settings","Last login"))+"\n\t\t")]):e._e(),e._v(" "),t("div",{staticClass:"manager",attrs:{id:"headerManager"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Manager"))+"\n\t\t")]),e._v(" "),t("div",{staticClass:"userActions"})]),e._v(" "),e._l(e.filteredUsers,(function(s){return t("user-row",{key:s.id,attrs:{"external-actions":e.externalActions,groups:e.groups,languages:e.languages,"quota-options":e.quotaOptions,settings:e.settings,"show-config":e.showConfig,"sub-admins-groups":e.subAdminsGroups,user:s,users:e.users,"is-dark-theme":e.isDarkTheme}})})),e._v(" "),t("InfiniteLoading",{ref:"infiniteLoading",on:{infinite:e.infiniteHandler}},[t("div",{attrs:{slot:"spinner"},slot:"spinner"},[t("div",{staticClass:"users-icon-loading icon-loading"})]),e._v(" "),t("div",{attrs:{slot:"no-more"},slot:"no-more"},[t("div",{staticClass:"users-list-end"})]),e._v(" "),t("div",{attrs:{slot:"no-results"},slot:"no-results"},[t("div",{attrs:{id:"emptycontent"}},[t("div",{staticClass:"icon-contacts-dark"}),e._v(" "),t("h2",[e._v(e._s(e.t("settings","No users in here")))])])])])],2)}),[],!1,null,"228801f0",null).exports;var Le=a(61149),Ge=a(25108);N.default.use(L());const Se={name:"Users",components:{NcAppContent:n(),NcAppNavigation:o(),NcAppNavigationCaption:d(),NcAppNavigationCounter:c(),NcAppNavigationItem:p(),NcAppNavigationNew:m(),NcAppNavigationNewItem:w(),NcAppNavigationSettings:_(),NcContent:C(),GroupListItem:B,NcMultiselect:k(),Plus:Le.Z,UserList:Me},props:{selectedGroup:{type:String,default:null}},data:()=>({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(){return this.selectedGroup?decodeURIComponent(this.selectedGroup):null},users(){return this.$store.getters.getUsers},groups(){return this.$store.getters.getGroups},usersOffset(){return this.$store.getters.getUsersOffset},usersLimit(){return this.$store.getters.getUsersLimit},showLanguages:{get(){return this.getLocalstorage("showLanguages")},set(e){this.setLocalStorage("showLanguages",e)}},showLastLogin:{get(){return this.getLocalstorage("showLastLogin")},set(e){this.setLocalStorage("showLastLogin",e)}},showUserBackend:{get(){return this.getLocalstorage("showUserBackend")},set(e){this.setLocalStorage("showUserBackend",e)}},showStoragePath:{get(){return this.getLocalstorage("showStoragePath")},set(e){this.setLocalStorage("showStoragePath",e)}},userCount(){return this.$store.getters.getUserCount},settings(){return this.$store.getters.getServerData},quotaOptions(){const e=this.settings.quotaPreset.reduce(((e,t)=>e.concat({id:t,label:t})),[]);return this.settings.allowUnlimitedQuota&&e.unshift(this.unlimitedQuota),e},defaultQuota:{get(){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(e){this.selectedQuota=e}},sendWelcomeMail:{get(){return this.settings.newUserSendEmail},async set(e){try{this.loadingSendMail=!0,this.$store.commit("setServerData",{...this.settings,newUserSendEmail:e}),await A.default.post((0,y.generateUrl)("/settings/users/preferences/newUser.sendEmail"),{value:e?"yes":"no"})}catch(e){Ge.error("could not update newUser.sendEmail preference: "+e.message,e)}finally{this.loadingSendMail=!1}}},groupList(){return(Array.isArray(this.groups)?this.groups:[]).filter((e=>"disabled"!==e.id&&"admin"!==e.id)).map((e=>this.formatGroupMenu(e)))},adminGroupMenu(){return this.formatGroupMenu(this.groups.find((e=>"admin"===e.id)))},disabledGroupMenu(){return this.formatGroupMenu(this.groups.find((e=>"disabled"===e.id)))}},beforeMount(){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(){Object.assign(OCA,{Settings:{UserList:{registerAction:this.registerAction}}})},methods:{showNewUserMenu(){this.showConfig.showNewUserForm=!0,this.showConfig.showNewUserForm&&N.default.nextTick((()=>{window.newusername.focus()}))},getLocalstorage(e){const t=this.$localStorage.get(e);return this.showConfig[e]=null!==t?"true"===t:this.showConfig[e],this.showConfig[e]},setLocalStorage(e,t){return this.showConfig[e]=t,this.$localStorage.set(e,t),t},setDefaultQuota(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";this.$store.dispatch("setAppConfig",{app:"files",key:"default_quota",value:e.id?e.id:e}).then((()=>{"object"!=typeof e&&(e={id:e,label:e}),this.defaultQuota=e}))},validateQuota(e){return null===OC.Util.computerFileSize(e)?this.setDefaultQuota("none"):this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(e)))},registerAction(e,t,s){return this.externalActions.push({icon:e,text:t,action:s}),this.externalActions},async createGroup(e){if(""!==e.trim())try{this.loadingAddGroup=!0,await this.$store.dispatch("addGroup",e.trim()),this.hideAddGroupForm(),await this.$router.push({name:"group",params:{selectedGroup:encodeURIComponent(e.trim())}})}catch{this.showAddGroupForm()}finally{this.loadingAddGroup=!1}},showAddGroupForm(){this.$refs.addGroup.newItemActive=!0,this.$nextTick((()=>{this.$refs.addGroup.$refs.newItemInput.focusInput()}))},hideAddGroupForm(){this.$refs.addGroup.newItemActive=!1,this.$refs.addGroup.newItemValue=""},formatGroupMenu(e){const t={};return void 0===e?{}:(t.id=e.id,t.title=e.name,t.usercount=e.usercount,e.usercount-e.disabled>0&&(t.count=e.usercount-e.disabled),t)}}};var xe=a(69049),$e={};$e.styleTagTransform=ge(),$e.setAttributes=le(),$e.insert=re().bind(null,"head"),$e.domAPI=ie(),$e.insertStyleElement=ue(),se()(xe.Z,$e),xe.Z&&xe.Z.locals&&xe.Z.locals;const qe=(0,P.Z)(Se,(function(){var e=this,t=e._self._c;return t("NcContent",{attrs:{"app-name":"settings","navigation-class":{"icon-loading":e.loadingAddGroup}}},[t("NcAppNavigation",{scopedSlots:e._u([{key:"list",fn:function(){return[t("NcAppNavigationNewItem",{ref:"addGroup",attrs:{id:"addgroup","edit-placeholder":e.t("settings","Enter group name"),editable:!0,loading:e.loadingAddGroup,title:e.t("settings","Add group")},on:{click:e.showAddGroupForm,"new-item":e.createGroup},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Plus",{attrs:{size:20}})]},proxy:!0}])}),e._v(" "),t("NcAppNavigationItem",{attrs:{id:"everyone",exact:!0,title:e.t("settings","Active users"),to:{name:"users"},icon:"icon-contacts-dark"}},[e.userCount>0?t("NcAppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[e._v("\n\t\t\t\t\t"+e._s(e.userCount)+"\n\t\t\t\t")]):e._e()],1),e._v(" "),e.settings.isAdmin?t("NcAppNavigationItem",{attrs:{id:"admin",exact:!0,title:e.t("settings","Admins"),to:{name:"group",params:{selectedGroup:"admin"}},icon:"icon-user-admin"}},[e.adminGroupMenu.count?t("NcAppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[e._v("\n\t\t\t\t\t"+e._s(e.adminGroupMenu.count)+"\n\t\t\t\t")]):e._e()],1):e._e(),e._v(" "),e.disabledGroupMenu.usercount>0||-1===e.disabledGroupMenu.usercount?t("NcAppNavigationItem",{attrs:{id:"disabled",exact:!0,title:e.t("settings","Disabled users"),to:{name:"group",params:{selectedGroup:"disabled"}},icon:"icon-disabled-users"}},[e.disabledGroupMenu.usercount>0?t("NcAppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[e._v("\n\t\t\t\t\t"+e._s(e.disabledGroupMenu.usercount)+"\n\t\t\t\t")]):e._e()],1):e._e(),e._v(" "),e.groupList.length>0?t("NcAppNavigationCaption",{attrs:{title:e.t("settings","Groups")}}):e._e(),e._v(" "),e._l(e.groupList,(function(e){return t("GroupListItem",{key:e.id,attrs:{id:e.id,title:e.title,count:e.count}})}))]},proxy:!0},{key:"footer",fn:function(){return[t("NcAppNavigationSettings",[t("div",[t("p",[e._v(e._s(e.t("settings","Default quota:")))]),e._v(" "),t("NcMultiselect",{attrs:{value:e.defaultQuota,options:e.quotaOptions,"tag-placeholder":"create",placeholder:e.t("settings","Select default quota"),label:"label","track-by":"id","allow-empty":!1,taggable:!0},on:{tag:e.validateQuota,input:e.setDefaultQuota}})],1),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.showLanguages,expression:"showLanguages"}],staticClass:"checkbox",attrs:{id:"showLanguages",type:"checkbox"},domProps:{checked:Array.isArray(e.showLanguages)?e._i(e.showLanguages,null)>-1:e.showLanguages},on:{change:function(t){var s=e.showLanguages,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showLanguages=s.concat([null])):n>-1&&(e.showLanguages=s.slice(0,n).concat(s.slice(n+1)))}else e.showLanguages=i}}}),e._v(" "),t("label",{attrs:{for:"showLanguages"}},[e._v(e._s(e.t("settings","Show Languages")))])]),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.showLastLogin,expression:"showLastLogin"}],staticClass:"checkbox",attrs:{id:"showLastLogin",type:"checkbox"},domProps:{checked:Array.isArray(e.showLastLogin)?e._i(e.showLastLogin,null)>-1:e.showLastLogin},on:{change:function(t){var s=e.showLastLogin,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showLastLogin=s.concat([null])):n>-1&&(e.showLastLogin=s.slice(0,n).concat(s.slice(n+1)))}else e.showLastLogin=i}}}),e._v(" "),t("label",{attrs:{for:"showLastLogin"}},[e._v(e._s(e.t("settings","Show last login")))])]),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.showUserBackend,expression:"showUserBackend"}],staticClass:"checkbox",attrs:{id:"showUserBackend",type:"checkbox"},domProps:{checked:Array.isArray(e.showUserBackend)?e._i(e.showUserBackend,null)>-1:e.showUserBackend},on:{change:function(t){var s=e.showUserBackend,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showUserBackend=s.concat([null])):n>-1&&(e.showUserBackend=s.slice(0,n).concat(s.slice(n+1)))}else e.showUserBackend=i}}}),e._v(" "),t("label",{attrs:{for:"showUserBackend"}},[e._v(e._s(e.t("settings","Show user backend")))])]),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.showStoragePath,expression:"showStoragePath"}],staticClass:"checkbox",attrs:{id:"showStoragePath",type:"checkbox"},domProps:{checked:Array.isArray(e.showStoragePath)?e._i(e.showStoragePath,null)>-1:e.showStoragePath},on:{change:function(t){var s=e.showStoragePath,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showStoragePath=s.concat([null])):n>-1&&(e.showStoragePath=s.slice(0,n).concat(s.slice(n+1)))}else e.showStoragePath=i}}}),e._v(" "),t("label",{attrs:{for:"showStoragePath"}},[e._v(e._s(e.t("settings","Show storage path")))])]),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.sendWelcomeMail,expression:"sendWelcomeMail"}],staticClass:"checkbox",attrs:{id:"sendWelcomeMail",disabled:e.loadingSendMail,type:"checkbox"},domProps:{checked:Array.isArray(e.sendWelcomeMail)?e._i(e.sendWelcomeMail,null)>-1:e.sendWelcomeMail},on:{change:function(t){var s=e.sendWelcomeMail,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.sendWelcomeMail=s.concat([null])):n>-1&&(e.sendWelcomeMail=s.slice(0,n).concat(s.slice(n+1)))}else e.sendWelcomeMail=i}}}),e._v(" "),t("label",{attrs:{for:"sendWelcomeMail"}},[e._v(e._s(e.t("settings","Send email to new user")))])])])]},proxy:!0}])},[t("NcAppNavigationNew",{attrs:{"button-id":"new-user-button",text:e.t("settings","New user"),"button-class":"icon-add"},on:{click:e.showNewUserMenu,keyup:[function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.showNewUserMenu.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])?null:e.showNewUserMenu.apply(null,arguments)}]}})],1),e._v(" "),t("NcAppContent",[t("UserList",{attrs:{users:e.users,"show-config":e.showConfig,"selected-group":e.selectedGroupDecoded,"external-actions":e.externalActions}})],1)],1)}),[],!1,null,"c70f3f58",null).exports}}]);
+//# sourceMappingURL=settings-users-8351.js.map?v=f5ee6c080845314c02b2 \ No newline at end of file
diff --git a/dist/settings-users-8351.js.map b/dist/settings-users-8351.js.map
index aab19f13c48..fcdb88acbbf 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=706ed004a7f00d5c5655","mappings":";2JAGIA,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,06BAA26B,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,yDAAyD,MAAQ,GAAG,SAAW,uRAAuR,eAAiB,CAAC,yuCAA6uC,WAAa,MAEjmF,+ECJIH,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,mTAAoT,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iEAAiE,MAAQ,GAAG,SAAW,0EAA0E,eAAiB,CAAC,6TAA6T,WAAa,MAEr3B,+ECJIH,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,gLAAiL,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uEAAuE,MAAQ,GAAG,SAAW,iFAAiF,eAAiB,CAAC,wPAAwP,WAAa,MAE1rB,+ECJIH,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,8FAA+F,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iDAAiD,MAAQ,GAAG,SAAW,kBAAkB,eAAiB,CAAC,+JAA+J,WAAa,MAE1b,0DCPA,4TC4DA,MC5D0L,ED4D1L,CACAC,KAAA,gBACAC,WAAA,CACAC,cAAA,IACAC,eAAA,IACAC,gBAAA,IACAC,oBAAAA,KAEAC,MAAA,CACAP,GAAA,CACAQ,KAAAC,OACAC,UAAA,GAEAC,MAAA,CACAH,KAAAC,OACAC,UAAA,GAEAE,MAAA,CACAJ,KAAAK,OACAH,UAAA,IAGAI,KAAAA,KACA,CACAC,oBAAA,EACAC,eAAA,IAGAC,SAAA,CACAC,WACA,YAAAC,OAAAC,QAAAC,aACA,GAEAC,QAAA,CACAC,sBACA,KAAAP,eAAA,CACA,EACA,kBAAAQ,GAEA,QAAAA,EAAAC,OACA,OAGA,MAAAC,EAAA,KAAAC,MAAAC,iBAAAC,IAAAC,cAAA,sBAAAC,MAGA,QAAAL,EAAAD,OAIA,IACA,KAAAT,eAAA,EACA,KAAAD,oBAAA,QACA,KAAAI,OAAAa,SAAA,eACAC,QAAAT,EAAAC,OACAC,YAAAA,EAAAD,SAGA,KAAAV,oBAAA,CACA,OACA,KAAAC,eAAA,EACA,KAAAD,oBAAA,CACA,CACA,EACAmB,YAAAD,GACA,MAAAE,EAAA,KAEAC,GAAAC,QAAAC,QACAC,EAAA,wFAAAC,MAAAP,IACAM,EAAA,iDACA,SAAAE,GACAA,GACAN,EAAAhB,OAAAa,SAAA,cAAAC,EAEA,GAEA,mBEtHA,SAXgB,OACd,GCRW,WAAkB,IAAIS,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,sBAAsB,CAACE,IAAIJ,EAAI1C,GAAG+C,MAAM,CAAC,OAAQ,EAAK,MAAQL,EAAI/B,MAAM,GAAK,CAAEV,KAAM,QAAS+C,OAAQ,CAAEC,cAAeC,mBAAmBR,EAAI1C,MAAQ,KAAO,aAAa,QAAU0C,EAAI3B,mBAAmB,YAAY2B,EAAI1B,eAAemC,GAAG,CAAC,kBAAkBT,EAAInB,qBAAqB6B,YAAYV,EAAIW,GAAG,CAAC,CAACP,IAAI,UAAUQ,GAAG,WAAW,MAAO,CAAEZ,EAAI9B,MAAOgC,EAAG,kBAAkB,CAACF,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAI9B,OAAO,YAAY8B,EAAIe,KAAK,EAAEC,OAAM,GAAM,CAACZ,IAAI,UAAUQ,GAAG,WAAW,MAAO,CAAa,UAAXZ,EAAI1C,IAA6B,aAAX0C,EAAI1C,IAAqB0C,EAAIxB,SAASyC,QAASf,EAAG,gBAAgB,CAACgB,IAAI,mBAAmBb,MAAM,CAAC,KAAO,YAAY,KAAO,OAAO,MAAQL,EAAI/B,OAAOwC,GAAG,CAAC,OAAS,SAASU,GAAQ,OAAOnB,EAAIoB,YAAYpB,EAAI1C,GAAG,IAAI,CAAC0C,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,iBAAiB,YAAYG,EAAIe,KAAKf,EAAIa,GAAG,KAAiB,UAAXb,EAAI1C,IAA6B,aAAX0C,EAAI1C,IAAqB0C,EAAIxB,SAASyC,QAASf,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,eAAeI,GAAG,CAAC,MAAQ,SAASU,GAAQ,OAAOnB,EAAIR,YAAYQ,EAAI1C,GAAG,IAAI,CAAC0C,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,iBAAiB,YAAYG,EAAIe,KAAK,EAAEC,OAAM,MACjoC,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QElBhC,4JC0BA,SACCnD,MAAO,CACNwD,KAAM,CACLvD,KAAMwD,OACNtD,UAAU,GAEXQ,SAAU,CACTV,KAAMwD,OACNC,QAASA,KAAA,CAAS,IAEnBC,OAAQ,CACP1D,KAAM2D,MACNF,QAASA,IAAM,IAEhBG,gBAAiB,CAChB5D,KAAM2D,MACNF,QAASA,IAAM,IAEhBI,aAAc,CACb7D,KAAM2D,MACNF,QAASA,IAAM,IAEhBK,WAAY,CACX9D,KAAMwD,OACNC,QAASA,KAAA,CAAS,IAEnBM,UAAW,CACV/D,KAAM2D,MACNzD,UAAU,GAEX8D,gBAAiB,CAChBhE,KAAM2D,MACNF,QAASA,IAAM,KAGjBhD,SAAU,CAETwD,aAEC,OADmB9B,KAAKuB,OAAOQ,QAAOlC,GAASG,KAAKoB,KAAKG,OAAOS,SAASnC,EAAMxC,KAEhF,EACA4E,sBAEC,OAD4BjC,KAAKyB,gBAAgBM,QAAOlC,GAASG,KAAKoB,KAAKc,SAASF,SAASnC,EAAMxC,KAEpG,EACA8E,kBACC,OAAOnC,KAAKuB,OAAOa,KAAKvC,IAGvB,MAAMwC,EAAahB,OAAOiB,OAAO,CAAC,EAAGzC,GAUrC,OALAwC,EAAWE,aACU,IAAjB1C,EAAM2C,SACJxC,KAAKoB,KAAKG,OAAOS,SAASnC,EAAMxC,MACb,IAApBwC,EAAM4C,WACNzC,KAAKoB,KAAKG,OAAOS,SAASnC,EAAMxC,IAC9BgF,CAAU,GAEnB,EAGAK,YACC,OAAI1C,KAAKoB,KAAKuB,MAAMC,KACZhD,EAAE,WAAY,cAAe,CAAEiD,KAAMpD,GAAGqD,KAAKC,cAAc/C,KAAKoB,KAAKuB,MAAMC,QAE5EhD,EAAE,WAAY,cAAe,CAAEiD,KAAMpD,GAAGqD,KAAKC,cAAc,IACnE,EACAC,YACC,IAAIL,EAAQ3C,KAAKoB,KAAKuB,MAAMA,MAQ5B,OANCA,EADGA,EAAQ,EACHM,KAAKC,IAAI,IAAKD,KAAKE,MAAMnD,KAAKoB,KAAKuB,MAAMC,KAAOD,EAAQ,MAIxD,IAAM,EAAK,GAFF3C,KAAKoB,KAAKuB,MAAMC,MAAQ,GAAKK,KAAKG,IAAI,EAAG,KAEvB,IAE7BC,MAAMV,GAAS,EAAIA,CAC3B,EAEAW,YACC,GAAItD,KAAKoB,KAAKuB,MAAMA,OAAS,EAAG,CAE/B,MAAMY,EAAa9D,GAAGqD,KAAKC,cAAc/C,KAAKoB,KAAKuB,MAAMA,OAEzD,OADkB3C,KAAK0B,aAAa8B,MAAKb,GAASA,EAAMtF,KAAOkG,KAC3C,CAAElG,GAAIkG,EAAYE,MAAOF,EAC9C,CAAO,MAA8B,YAA1BvD,KAAKoB,KAAKuB,MAAMA,MAEnB3C,KAAK0B,aAAa,GAEnB1B,KAAK0B,aAAa,EAC1B,EAGAgC,oBACC,OAAO1D,KAAKxB,OAAOC,QAAQkF,0BAC5B,EAGAC,eACC,MACMC,EADqB7D,KAAK4B,UAAU,GAAGA,UAAUkC,OAAO9D,KAAK4B,UAAU,GAAGA,WAC5C4B,MAAKO,GAAQA,EAAKC,OAAShE,KAAKoB,KAAK6C,WACzE,MAAwB,iBAAbJ,GAAgD,KAAvB7D,KAAKoB,KAAK6C,SACtC,CACND,KAAMhE,KAAKoB,KAAK6C,SAChB3G,KAAM0C,KAAKoB,KAAK6C,UAEgB,KAAvBjE,KAAKoB,KAAK6C,UAGdJ,CACR,EAGAK,uBACC,OAAIlE,KAAKoB,KAAK+C,UAAY,EAClB1E,GAAGqD,KAAKsB,WAAWpE,KAAKoB,KAAK+C,WAE9B,EACR,EACAE,gBACC,OAAIrE,KAAKoB,KAAK+C,UAAY,EAClB1E,GAAGqD,KAAKwB,qBAAqBtE,KAAKoB,KAAK+C,WAExCvE,EAAE,WAAY,QACtB,GAEDjB,QAAS,CAQR4F,eAAcA,CAACnD,EAAMoD,IAChBA,GACIC,EAAAA,EAAAA,aACN,qCACA,CACCrD,OACAsD,QAASC,cAAcC,OAAOF,WAIzBD,EAAAA,EAAAA,aACN,gCACA,CACCrD,OACAsD,QAASC,cAAcC,OAAOF,YCjL4J,GC8FhM,CACApH,KAAA,gBACAC,WAAA,CACAsH,cAAA,IACApH,eAAA,IACAqH,UAAAA,KAEAC,WAAA,CACAC,aAAAA,KAEAC,OAAA,CAAAC,GACAtH,MAAA,CACAwD,KAAA,CACAvD,KAAAwD,OACAtD,UAAA,GAEAoH,QAAA,CACAtH,KAAAwD,OACAtD,UAAA,GAEA4D,WAAA,CACA9D,KAAAwD,OACAtD,UAAA,GAEAqH,YAAA,CACAvH,KAAA2D,MACAzD,UAAA,GAEAsH,WAAA,CACAxH,KAAAyH,QACAvH,UAAA,GAEAwH,gBAAA,CACA1H,KAAAC,OACAC,UAAA,GAEA0D,gBAAA,CACA5D,KAAA2D,MACAzD,UAAA,GAEAQ,SAAA,CACAV,KAAAwD,OACAtD,UAAA,GAEAyG,YAAA,CACA3G,KAAAyH,QACAvH,UAAA,IAGAO,SAAA,CACAkH,mBACA,YAAA1D,WACAM,KAAAvC,GAAAA,EAAAvC,OACAmI,KAAA,KACA,EACAC,4BACA,YAAAzD,oBACAG,KAAAvC,GAAAA,EAAAvC,OACAmI,KAAA,KACA,EACA/C,YACA,YAAAtB,KAAAuB,MAAAC,KACAhD,EAAA,0BAAAiD,KAAApD,GAAAqD,KAAAC,cAAA,KAAA3B,KAAAuB,MAAAC,QAEAhD,EAAA,0BAAAiD,KAAApD,GAAAqD,KAAAC,cAAA,IACA,EACA4C,UACA,OAAAC,EAAAA,EAAAA,MAAAC,MAAA,KAAAzE,KAAA/D,IAAA,KAAAkB,SAAAyC,OACA,EACAsC,YACA,IAAAX,EAAA,KAAAvB,KAAAuB,MAAAA,MAWA,MATA,YAAAA,IACAA,EAAA,KAAApE,SAAAuH,aACA,SAAAnD,IAEAA,EAAAlD,GAAAqD,KAAAiD,iBAAApD,KAKA,SAAAA,IAAA,IAAAA,EACA/C,EAAA,wBACA+C,GAAA,EACAlD,GAAAqD,KAAAC,cAAAJ,GAEAlD,GAAAqD,KAAAC,cAAA,EACA,GAEApE,QAAA,CACAqH,aACA,KAAAC,MAAA,0BAAAZ,WACA,EACAa,WACA,KAAAD,MAAA,uBACA,EACAE,aACA,KAAAF,MAAA,oBACA,4JCrLIG,GAAU,CAAC,EAEfA,GAAQC,kBAAoB,KAC5BD,GAAQE,cAAgB,KAElBF,GAAQG,OAAS,UAAc,KAAM,QAE3CH,GAAQI,OAAS,KACjBJ,GAAQK,mBAAqB,KAEhB,KAAI,KAASL,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,ICTW,WAAkB,IAAIrG,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,KAAK,CAACyG,YAAY,MAAMC,MAAM,CAAC,SAAY5G,EAAIoF,QAAQyB,QAAU7G,EAAIoF,QAAQ0B,SAASzG,MAAM,CAAC,UAAUL,EAAIqB,KAAK/D,KAAK,CAAC4C,EAAG,KAAK,CAACyG,YAAY,SAASC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQyB,QAAU7G,EAAIoF,QAAQ0B,SAAW9G,EAAIoF,QAAQ2B,OAAO,CAAG/G,EAAIoF,QAAQyB,QAAW7G,EAAIoF,QAAQ0B,SAAY9G,EAAIoF,QAAQ2B,KAAqH/G,EAAIe,KAAnHb,EAAG,MAAM,CAACG,MAAM,CAAC,IAAM,GAAG,MAAQ,KAAK,OAAS,KAAK,IAAML,EAAIwE,eAAexE,EAAIqB,KAAK/D,GAAI0C,EAAIyE,kBAA2BzE,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,QAAQ,CAACzG,EAAG,MAAM,CAACyG,YAAY,wBAAwB,CAACzG,EAAG,MAAM,CAACyG,YAAY,WAAWtG,MAAM,CAAC,MAAQL,EAAIqB,KAAK2F,YAAYC,OAAS,GAAKjH,EAAIqB,KAAK2F,YAAc,KAAK,CAAC9G,EAAG,SAAS,CAACF,EAAIa,GAAG,eAAeb,EAAIc,GAAGd,EAAIqB,KAAK2F,aAAa,oBAAoBhH,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIqB,KAAK/D,IAAI,UAAU0C,EAAIa,GAAG,KAAKX,EAAG,MAAMF,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,eAAe,CAACzG,EAAG,MAAM,CAACyG,YAAY,WAAWtG,MAAM,CAAC,MAA2B,OAAnBL,EAAIqB,KAAK6F,OAAkBlH,EAAIqB,KAAK6F,MAAMD,OAAS,GAAKjH,EAAIqB,KAAK6F,MAAQ,KAAK,CAAClH,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIqB,KAAK6F,OAAO,cAAclH,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,UAAU,CAAC3G,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIyF,kBAAkB,UAAUzF,EAAIa,GAAG,KAAMb,EAAI0B,gBAAgBuF,OAAS,GAAKjH,EAAIxB,SAASyC,QAASf,EAAG,KAAK,CAACyG,YAAY,mBAAmB,CAAC3G,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAI2F,2BAA2B,UAAU3F,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,aAAa,CAACzG,EAAG,MAAM,CAACyG,YAAY,SAAS,CAAC3G,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIuD,WAAW,KAAKvD,EAAIc,GAAGd,EAAI2C,WAAW,aAAazC,EAAG,WAAW,CAACyG,YAAY,sBAAsBC,MAAM,CAAC,KAAQ5G,EAAIiD,UAAY,IAAI5C,MAAM,CAAC,IAAM,OAAO8G,SAAS,CAAC,MAAQnH,EAAIiD,iBAAiBjD,EAAIa,GAAG,KAAMb,EAAI4B,WAAWwF,cAAelH,EAAG,KAAK,CAACyG,YAAY,aAAa,CAAC3G,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAI6D,aAAatG,MAAM,UAAUyC,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAI4B,WAAWyF,iBAAmBrH,EAAI4B,WAAW0F,gBAAiBpH,EAAG,KAAK,CAACyG,YAAY,eAAe,CAAE3G,EAAI4B,WAAWyF,gBAAiBnH,EAAG,MAAM,CAACyG,YAAY,eAAe,CAAC3G,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIqB,KAAKkG,SAAS,YAAYvH,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAI4B,WAAW0F,gBAAiBpH,EAAG,MAAM,CAACyG,YAAY,2BAA2BtG,MAAM,CAAC,MAAQL,EAAIqB,KAAKmG,kBAAkB,CAACxH,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIqB,KAAKmG,iBAAiB,YAAYxH,EAAIe,OAAOf,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAI4B,WAAW6F,cAAevH,EAAG,KAAK,CAACyG,YAAY,YAAYtG,MAAM,CAAC,MAAQL,EAAImE,uBAAuB,CAACnE,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIsE,eAAe,UAAUtE,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,YAAY,CAAC3G,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIqB,KAAKqG,SAAS,UAAU1H,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,eAAe,CAAE3G,EAAI4F,UAAY5F,EAAIoF,QAAQuC,IAAKzH,EAAG,MAAM,CAACyG,YAAY,qBAAqB,CAACzG,EAAG,YAAY,CAACA,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,cAAc,MAAQL,EAAIH,EAAE,WAAY,aAAa,aAAaG,EAAIH,EAAE,WAAY,cAAcY,GAAG,CAAC,MAAQT,EAAIoG,eAAe,GAAGpG,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,0BAA0B,CAACzG,EAAG,SAAS,CAAC8E,WAAW,CAAC,CAACzH,KAAK,gBAAgBqK,QAAQ,kBAAkBvI,MAAOW,EAAImG,SAAU0B,WAAW,aAAalB,YAAY,YAAYtG,MAAM,CAAC,gBAAgBL,EAAIsF,WAAW,aAAatF,EAAIH,EAAE,WAAY,6BAA6BY,GAAG,CAAC,MAAQ,SAASU,GAAgC,OAAxBA,EAAO2G,iBAAwB9H,EAAIiG,WAAW8B,MAAM,KAAMC,UAAU,KAAKhI,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,cAAcC,MAAM,CAAE,KAAQ5G,EAAIsF,aAAc,CAACpF,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAOL,EAAIqF,gBAAgB,MAAM,GAAGrF,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,WAAWsB,MAAO,CAACC,QAAiC,KAAxBlI,EAAIwF,gBAAyB,EAAI,IAAK,CAACtF,EAAG,MAAM,CAACyG,YAAY,mBAAmB3G,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIwF,iBAAiB,eAC/hH,GACsB,IDUpB,EACA,KACA,KACA,MAI8B,wBEsQhC,MCzR0L,GDyR1L,CACAjI,KAAA,UACAC,WAAA,CACA2K,cAAA,GACArD,cAAA,KACAC,UAAA,KACArH,eAAA,KACA0K,cAAAA,EAAAA,IAEApD,WAAA,CACAC,aAAAA,KAEAC,OAAA,CAAAC,GACAtH,MAAA,CACAwK,MAAA,CACAvK,KAAA2D,MACAzD,UAAA,GAEAqD,KAAA,CACAvD,KAAAwD,OACAtD,UAAA,GAEAQ,SAAA,CACAV,KAAAwD,OACAC,QAAAA,KAAA,KAEAC,OAAA,CACA1D,KAAA2D,MACAF,QAAAA,IAAA,IAEAG,gBAAA,CACA5D,KAAA2D,MACAF,QAAAA,IAAA,IAEAI,aAAA,CACA7D,KAAA2D,MACAF,QAAAA,IAAA,IAEAK,WAAA,CACA9D,KAAAwD,OACAC,QAAAA,KAAA,KAEAM,UAAA,CACA/D,KAAA2D,MACAzD,UAAA,GAEA8D,gBAAA,CACAhE,KAAA2D,MACAF,QAAAA,IAAA,IAEAkD,YAAA,CACA3G,KAAAyH,QACAvH,UAAA,IAGAI,KAAAA,KACA,CACAkK,KAAAC,SAAA,IAAArF,KAAAsF,UACAlD,YAAA,EACAE,gBAAA,GACAiD,iBAAA,GACAC,eAAA,GACAC,SAAA,EACAvD,QAAA,CACAuC,KAAA,EACA3I,aAAA,EACA4J,UAAA,EACAC,aAAA,EACArH,QAAA,EACAsH,WAAA,EACAlG,OAAA,EACAiE,QAAA,EACAC,SAAA,EACAjF,WAAA,EACAkF,MAAA,EACAW,SAAA,KAIAnJ,SAAA,CAGA8G,cACA,MAAA0D,EAAA,CACA,CACAC,KAAA,cACAC,KAAApJ,EAAA,0BACAqJ,OAAA,KAAAC,YAEA,CACAH,KAAA,cACAC,KAAApJ,EAAA,+BACAqJ,OAAA,KAAAE,iBAEA,CACAJ,KAAA,KAAA3H,KAAAgI,QAAA,wBACAJ,KAAA,KAAA5H,KAAAgI,QAAAxJ,EAAA,2BAAAA,EAAA,0BACAqJ,OAAA,KAAAI,oBAUA,OAPA,YAAAjI,KAAA6F,OAAA,UAAA7F,KAAA6F,OACA6B,EAAA3L,KAAA,CACA4L,KAAA,YACAC,KAAApJ,EAAA,mCACAqJ,OAAA,KAAAK,kBAGAR,EAAAhF,OAAA,KAAAjC,gBACA,GAEA,0BACA,KAAA0H,oBACA,KAAAnI,KAAAqG,eACA,KAAA+B,YAAA,KAAApI,KAAAqG,QAEA,EAEA9I,QAAA,CAEAqH,aACA,KAAAX,YAAA,KAAAA,UACA,EACAa,WACA,KAAAb,YAAA,CACA,EAEA8D,kBACA,MAAAM,EAAA,KAAArI,KAAA/D,GACAoC,GAAAC,QAAAgK,mBACA9J,EAAA,gNAAA6J,WACA7J,EAAA,qCACA,CACA/B,KAAA4B,GAAAC,QAAAiK,eACAhK,QAAAC,EAAA,sCAAA6J,WACAG,eAAA,QACAC,OAAAjK,EAAA,uBAEAkK,IACAA,IACA,KAAA3E,QAAA2B,MAAA,EACA,KAAA3B,QAAAuC,KAAA,EACA,KAAAlJ,OAAAa,SAAA,kBAAAoK,GACAM,MAAA,KACA,KAAA5E,QAAA2B,MAAA,EACA,KAAA3B,QAAAuC,KAAA,KAEA,IAEA,EAEA,EAEAsC,eAAAC,GACA,OAAAA,EAAAlI,QAAA0F,GAAAA,EAAApK,KAAA,KAAA+D,KAAA/D,IACA,EACA,kBAAA6M,SACA,KAAA1L,OAAAa,SAAA,UAAA6K,GAAAH,MAAAI,IACA,KAAA1B,eAAA0B,aAAA,EAAAA,EAAAhM,KAAAiM,IAAAjM,IAAA,GAEA,EACA,wBAAAkM,SACA,KAAA7L,OAAAa,SAAA,eAAAiL,OAAA,EAAAC,MAAA,GAAAC,OAAAH,IAAAN,MAAAI,IACA,MAAA/B,EAAA+B,SAAAA,EAAAhM,KAAA,KAAA6L,eAAA3I,OAAAoJ,OAAAN,aAAA,EAAAA,EAAAhM,KAAAiM,IAAAjM,KAAAiK,QAAA,GACAA,EAAApB,OAAA,IACA,KAAAwB,iBAAAJ,EACA,GAEA,EAEAsC,kBAAAjD,GACA,KAAAtC,QAAAsC,SAAA,EACA,KAAAjJ,OAAAa,SAAA,eACAoK,OAAA,KAAArI,KAAA/D,GACA8C,IAAA,UACAf,MAAA,KAAAqJ,eAAA,KAAAA,eAAApL,GAAA,KACA0M,MAAA,KACA,KAAA5E,QAAAsC,SAAA,IAEA,EAEAyB,aACA,MAAAO,EAAA,KAAArI,KAAA/D,GACAoC,GAAAC,QAAAgK,mBACA9J,EAAA,iGAAA6J,WACA7J,EAAA,+BACA,CACA/B,KAAA4B,GAAAC,QAAAiK,eACAhK,QAAAC,EAAA,wCAAA6J,WACAG,eAAA,QACAC,OAAAjK,EAAA,uBAEAkK,IACA,GAAAA,EAGA,OAFA,KAAA3E,QAAAyB,QAAA,EACA,KAAAzB,QAAAuC,KAAA,EACA,KAAAlJ,OAAAa,SAAA,aAAAoK,GACAM,MAAA,KACA,KAAA5E,QAAAyB,QAAA,EACA,KAAAzB,QAAAuC,KAAA,IAEA,IAEA,EAEA,EAEA2B,oBACA,KAAAlE,QAAAyB,QAAA,EACA,KAAAzB,QAAAuC,KAAA,EACA,MAAA+B,EAAA,KAAArI,KAAA/D,GACA+L,GAAA,KAAAhI,KAAAgI,QACA,YAAA5K,OAAAa,SAAA,qBACAoK,SACAL,YAEAW,MAAA,KACA,KAAA5E,QAAAyB,QAAA,EACA,KAAAzB,QAAAuC,KAAA,IAEA,EAOAiD,oBACA,MAAA5L,EAAA,KAAAC,MAAAD,YAAAK,MACA,KAAA+F,QAAApG,aAAA,EACA,KAAAP,OAAAa,SAAA,eACAoK,OAAA,KAAArI,KAAA/D,GACA8C,IAAA,cACAf,MAAAL,IACAgL,MAAA,KACA,KAAA5E,QAAApG,aAAA,EACA,KAAAC,MAAAD,YAAAK,MAAAL,CAAA,GAEA,EAOA6L,iBACA,MAAAjC,EAAA,KAAA3J,MAAA2J,SAAAvJ,MACA,KAAA+F,QAAAwD,UAAA,EACA,KAAAnK,OAAAa,SAAA,eACAoK,OAAA,KAAArI,KAAA/D,GACA8C,IAAA,WACAf,MAAAuJ,IACAoB,MAAA,KACA,KAAA5E,QAAAwD,UAAA,EACA,KAAA3J,MAAA2J,SAAAvJ,MAAA,KAEA,EAOAyL,cACA,MAAAjC,EAAA,KAAA5J,MAAA4J,YAAAxJ,MACA,KAAA+F,QAAAyD,aAAA,EACA,KAAApK,OAAAa,SAAA,eACAoK,OAAA,KAAArI,KAAA/D,GACA8C,IAAA,QACAf,MAAAwJ,IACAmB,MAAA,KACA,KAAA5E,QAAAyD,aAAA,EACA,KAAA5J,MAAA4J,YAAAxJ,MAAAwJ,CAAA,GAEA,EAOA,kBAAA/J,GACA,KAAAsG,QAAA,CAAA5D,QAAA,EAAAsH,WAAA,GACA,UACA,KAAArK,OAAAa,SAAA,WAAAR,GACA,MAAA4K,EAAA,KAAArI,KAAA/D,SACA,KAAAmB,OAAAa,SAAA,gBAAAoK,SAAA5K,OACA,OAAAiM,GACAC,GAAAD,MAAAA,EACA,SACA,KAAA3F,QAAA,CAAA5D,QAAA,EAAAsH,WAAA,EACA,CACA,YAAArK,OAAAC,QAAAuM,UAAA,KAAAzJ,OAAAyF,OACA,EAOA,mBAAAnH,GACA,QAAAA,EAAA2C,OACA,SAEA,KAAA2C,QAAA5D,QAAA,EACA,MAAAkI,EAAA,KAAArI,KAAA/D,GACAwB,EAAAgB,EAAAxC,GACA,UACA,KAAAmB,OAAAa,SAAA,gBAAAoK,SAAA5K,OACA,OAAAiM,GACAC,GAAAD,MAAAA,EACA,SACA,KAAA3F,QAAA5D,QAAA,CACA,CACA,EAOA,sBAAA1B,GACA,QAAAA,EAAA4C,UACA,SAGA,KAAA0C,QAAA5D,QAAA,EACA,MAAAkI,EAAA,KAAArI,KAAA/D,GACAwB,EAAAgB,EAAAxC,GAEA,UACA,KAAAmB,OAAAa,SAAA,mBACAoK,SACA5K,QAEA,KAAAsG,QAAA5D,QAAA,EAEA,KAAA0J,OAAA5K,OAAAC,gBAAAzB,GACA,KAAAL,OAAA0M,OAAA,aAAAzB,EAEA,OACA,KAAAtE,QAAA5D,QAAA,CACA,CACA,EAOA,sBAAA1B,GACA,KAAAsF,QAAA0D,WAAA,EACA,MAAAY,EAAA,KAAArI,KAAA/D,GACAwB,EAAAgB,EAAAxC,GAEA,UACA,KAAAmB,OAAAa,SAAA,mBACAoK,SACA5K,QAEA,KAAAsG,QAAA0D,WAAA,CACA,OAAAiC,GACAC,GAAAD,MAAAA,EACA,CACA,EAOA,yBAAAjL,GACA,KAAAsF,QAAA0D,WAAA,EACA,MAAAY,EAAA,KAAArI,KAAA/D,GACAwB,EAAAgB,EAAAxC,GAEA,UACA,KAAAmB,OAAAa,SAAA,sBACAoK,SACA5K,OAEA,OAAAiM,GACAC,GAAAD,MAAAA,EACA,SACA,KAAA3F,QAAA0D,WAAA,CACA,CACA,EAQA,yBAAAlG,EAAAoF,UAAAf,OAAA,QAAAmE,IAAApD,UAAA,GAAAA,UAAA,UACA,KAAA5C,QAAAxC,OAAA,EAEAA,EAAAA,EAAAtF,GAAAsF,EAAAtF,GAAAsF,EAEA,UACA,KAAAnE,OAAAa,SAAA,eACAoK,OAAA,KAAArI,KAAA/D,GACA8C,IAAA,QACAf,MAAAuD,GAEA,OAAAmI,GACAC,GAAAD,MAAAA,EACA,SACA,KAAA3F,QAAAxC,OAAA,CACA,CACA,OAAAA,CACA,EAQAyI,cAAAzI,GAEA,MAAA0I,EAAA5L,GAAAqD,KAAAiD,iBAAApD,GACA,cAAA0I,GAAAA,GAAA,GAEA,KAAAC,aAAA7L,GAAAqD,KAAAC,cAAAtD,GAAAqD,KAAAiD,iBAAApD,IAIA,EAQA,sBAAAoB,GACA,KAAAoB,QAAAvD,WAAA,EAEA,UACA,KAAApD,OAAAa,SAAA,eACAoK,OAAA,KAAArI,KAAA/D,GACA8C,IAAA,WACAf,MAAA2E,EAAAC,MAEA,OAAA8G,GACAC,GAAAD,MAAAA,EACA,SACA,KAAA3F,QAAAvD,WAAA,CACA,CACA,OAAAmC,CACA,EAKAuF,kBACA,KAAAnE,QAAAuC,KAAA,EACA,KAAAlJ,OAAAa,SAAA,uBAAA+B,KAAA/D,IACA0M,MAAAjK,IACAA,IAEA,KAAAyF,gBAAA3F,EAAA,gCACA2L,YAAA,KACA,KAAAhG,gBAAA,KACA,MAEA,KAAAJ,QAAAuC,KAAA,IAEA,oBEluBI,GAAU,CAAC,EAEf,GAAQrB,kBAAoB,KAC5B,GAAQC,cAAgB,KAElB,GAAQC,OAAS,UAAc,KAAM,QAE3C,GAAQC,OAAS,KACjB,GAAQC,mBAAqB,KAEhB,KAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,ICTW,WAAkB,IAAI1G,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAwC,IAAhCoB,OAAOmK,KAAKzL,EAAIqB,MAAM4F,OAAa/G,EAAG,MAAM,CAACyG,YAAY,MAAMtG,MAAM,CAAC,UAAUL,EAAIqB,KAAK/D,KAAK,CAAC4C,EAAG,MAAM,CAACyG,YAAY,SAASC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQyB,QAAU7G,EAAIoF,QAAQ0B,SAAW9G,EAAIoF,QAAQ2B,OAAO,CAAG/G,EAAIoF,QAAQyB,QAAW7G,EAAIoF,QAAQ0B,SAAY9G,EAAIoF,QAAQ2B,KAAqH/G,EAAIe,KAAnHb,EAAG,MAAM,CAACG,MAAM,CAAC,IAAML,EAAIwE,eAAexE,EAAIqB,KAAK/D,GAAI0C,EAAIyE,aAAa,IAAM,GAAG,OAAS,KAAK,MAAQ,UAAmBzE,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,QAAQ,CAAC3G,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIqB,KAAK/D,IAAI,UAAU0C,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,cAAc,CAAC3G,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIH,EAAE,WAAW,gEAAgE,YAAcG,EAAI2I,QAAglBzI,EAAG,KAAK,CAACyG,YAAY,oBAAoBC,MAAM,CAC91C,SAAY5G,EAAIoF,QAAQyB,QAAU7G,EAAIoF,QAAQ0B,QAC9C,mBAAoB9G,EAAIsF,YACvBjF,MAAM,CAAC,UAAUL,EAAIqB,KAAK/D,KAAK,CAAC4C,EAAG,KAAK,CAACyG,YAAY,SAASC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQyB,QAAU7G,EAAIoF,QAAQ0B,SAAW9G,EAAIoF,QAAQ2B,OAAO,CAAG/G,EAAIoF,QAAQyB,QAAW7G,EAAIoF,QAAQ0B,SAAY9G,EAAIoF,QAAQ2B,KAAqH/G,EAAIe,KAAnHb,EAAG,MAAM,CAACG,MAAM,CAAC,IAAML,EAAIwE,eAAexE,EAAIqB,KAAK/D,GAAI0C,EAAIyE,aAAa,IAAM,GAAG,OAAS,KAAK,MAAQ,UAAmBzE,EAAIa,GAAG,KAAMb,EAAIqB,KAAKqK,oBAAoBC,eAAgBzL,EAAG,KAAK,CAACyG,YAAY,eAAe,CAACzG,EAAG,OAAO,CAACyG,YAAY,cAAcC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQpG,aAAayB,GAAG,CAAC,OAAS,SAASU,GAAgC,OAAxBA,EAAO2G,iBAAwB9H,EAAI4K,kBAAkB7C,MAAM,KAAMC,UAAU,IAAI,CAAC9H,EAAG,QAAQ,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,IAAM,cAAcL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,OAAO,CAACtI,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,yBAAyBG,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACgB,IAAI,cAAcb,MAAM,CAAC,GAAK,cAAcL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,KAAK,SAAWtI,EAAIoF,QAAQpG,aAAagB,EAAIoF,QAAQuC,IAAI,eAAiB,MAAM,aAAe,MAAM,YAAc,MAAM,WAAa,QAAQ,KAAO,QAAQR,SAAS,CAAC,MAAQnH,EAAIqB,KAAK2F,eAAehH,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACyG,YAAY,eAAetG,MAAM,CAAC,KAAO,SAAS,MAAQ,UAAUH,EAAG,KAAK,CAACyG,YAAY,QAAQ,CAAC3G,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIqB,KAAK/D,IAAI,UAAU4C,EAAG,MAAM,CAACyG,YAAY,wBAAwB,CAACzG,EAAG,MAAM,CAACyG,YAAY,WAAWtG,MAAM,CAAC,MAAQL,EAAIqB,KAAK2F,YAAYC,OAAS,GAAKjH,EAAIqB,KAAK2F,YAAc,KAAK,CAAChH,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIqB,KAAK2F,aAAa,kBAAkBhH,EAAIa,GAAG,KAAMb,EAAIxB,SAASoN,mBAAqB5L,EAAIqB,KAAKqK,oBAAoBG,YAAa3L,EAAG,KAAK,CAACA,EAAG,OAAO,CAACyG,YAAY,WAAWC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQwD,UAAUnI,GAAG,CAAC,OAAS,SAASU,GAAgC,OAAxBA,EAAO2G,iBAAwB9H,EAAI6K,eAAe9C,MAAM,KAAMC,UAAU,IAAI,CAAC9H,EAAG,QAAQ,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,IAAM,WAAWL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,OAAO,CAACtI,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,wBAAwBG,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACgB,IAAI,WAAWb,MAAM,CAAC,GAAK,WAAWL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,KAAK,SAAWtI,EAAIoF,QAAQwD,UAAY5I,EAAIoF,QAAQuC,IAAI,UAAY3H,EAAI2D,kBAAkB,UAAY,MAAM,YAAc3D,EAAIH,EAAE,WAAY,oBAAoB,eAAiB,MAAM,aAAe,eAAe,YAAc,MAAM,SAAW,GAAG,WAAa,QAAQ,KAAO,WAAW,MAAQ,MAAMG,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACyG,YAAY,eAAetG,MAAM,CAAC,KAAO,SAAS,MAAQ,UAAUH,EAAG,MAAMF,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACA,EAAG,OAAO,CAACyG,YAAY,cAAcC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQyD,aAAapI,GAAG,CAAC,OAAS,SAASU,GAAgC,OAAxBA,EAAO2G,iBAAwB9H,EAAI8K,YAAY/C,MAAM,KAAMC,UAAU,IAAI,CAAC9H,EAAG,QAAQ,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,IAAM,cAAcL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,OAAO,CAACtI,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,6BAA6BG,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACgB,IAAI,cAAcb,MAAM,CAAC,GAAK,cAAcL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,KAAK,SAAWtI,EAAIoF,QAAQyD,aAAa7I,EAAIoF,QAAQuC,IAAI,YAAc3H,EAAIH,EAAE,WAAY,yBAAyB,eAAiB,MAAM,aAAe,eAAe,YAAc,MAAM,WAAa,QAAQ,KAAO,SAASsH,SAAS,CAAC,MAAQnH,EAAIqB,KAAK6F,SAASlH,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACyG,YAAY,eAAetG,MAAM,CAAC,KAAO,SAAS,MAAQ,UAAUL,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,SAASC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQ5D,SAAS,CAACtB,EAAG,QAAQ,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,IAAM,SAASL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,OAAO,CAACtI,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,yBAAyBG,EAAIa,GAAG,KAAKX,EAAG,gBAAgB,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,GAAK,SAASL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,KAAK,mBAAkB,EAAM,SAAWtI,EAAIoF,QAAQ5D,QAAQxB,EAAIoF,QAAQuC,IAAI,MAAQ,EAAE,UAAW,EAAK,QAAU3H,EAAIoC,gBAAgB,YAAcpC,EAAIH,EAAE,WAAY,qBAAqB,YAAY,GAAG,SAAWG,EAAIxB,SAASyC,QAAQ,MAAQjB,EAAI+B,WAAW,MAAQ,OAAO,kBAAkB,SAAS,WAAW,MAAMtB,GAAG,CAAC,OAAST,EAAI8L,gBAAgB,OAAS9L,EAAI+L,aAAa,IAAM/L,EAAIgM,cAAc,CAAC9L,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,YAAY4L,KAAK,YAAY,CAACjM,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,qBAAqB,GAAGG,EAAIa,GAAG,KAAMb,EAAI0B,gBAAgBuF,OAAO,GAAKjH,EAAIxB,SAASyC,QAASf,EAAG,KAAK,CAACyG,YAAY,YAAYC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQ0D,YAAY,CAAC5I,EAAG,QAAQ,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,IAAM,YAAYL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,OAAO,CAACtI,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,6BAA6BG,EAAIa,GAAG,KAAKX,EAAG,gBAAgB,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,GAAK,YAAYL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,KAAK,mBAAkB,EAAM,SAAWtI,EAAIoF,QAAQ0D,WAAW9I,EAAIoF,QAAQuC,IAAI,MAAQ,EAAE,UAAW,EAAK,QAAU3H,EAAI0B,gBAAgB,YAAc1B,EAAIH,EAAE,WAAY,yBAAyB,YAAY,GAAG,MAAQG,EAAIkC,oBAAoB,MAAQ,OAAO,WAAW,MAAMzB,GAAG,CAAC,OAAST,EAAIkM,mBAAmB,OAASlM,EAAImM,kBAAkB,CAACjM,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,YAAY4L,KAAK,YAAY,CAACjM,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,qBAAqB,GAAGG,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,QAAQC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQxC,OAAOvC,MAAM,CAAC,MAAQL,EAAI2C,YAAY,CAACzC,EAAG,QAAQ,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,IAAM,QAAQL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,OAAO,CAACtI,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,yBAAyBG,EAAIa,GAAG,KAAKX,EAAG,gBAAgB,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,GAAK,QAAQL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,KAAK,eAAc,EAAM,SAAWtI,EAAIoF,QAAQxC,OAAO5C,EAAIoF,QAAQuC,IAAI,QAAU3H,EAAI2B,aAAa,YAAc3B,EAAIH,EAAE,WAAY,qBAAqB,UAAW,EAAK,MAAQG,EAAIuD,UAAU,MAAQ,QAAQ,kBAAkB,SAAS,WAAW,MAAM9C,GAAG,CAAC,MAAQT,EAAIuL,aAAa,IAAMvL,EAAIqL,kBAAkB,GAAGrL,EAAIa,GAAG,KAAMb,EAAI4B,WAAWwF,cAAelH,EAAG,KAAK,CAACyG,YAAY,YAAYC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQvD,YAAY,CAAC3B,EAAG,QAAQ,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,IAAM,WAAWL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,OAAO,CAACtI,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,wBAAwBG,EAAIa,GAAG,KAAKX,EAAG,gBAAgB,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,GAAK,WAAWL,EAAIqB,KAAK/D,GAAG0C,EAAIsI,KAAK,eAAc,EAAM,SAAWtI,EAAIoF,QAAQvD,WAAW7B,EAAIoF,QAAQuC,IAAI,QAAU3H,EAAI6B,UAAU,YAAc7B,EAAIH,EAAE,WAAY,mBAAmB,MAAQG,EAAI6D,aAAa,cAAc,QAAQ,eAAe,YAAY,MAAQ,OAAO,WAAW,QAAQpD,GAAG,CAAC,MAAQT,EAAIoM,oBAAoB,GAAGpM,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,WAAWC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQsC,UAAU,CAACxH,EAAG,gBAAgB,CAACgB,IAAI,UAAUyF,YAAY,kBAAkBtG,MAAM,CAAC,mBAAkB,EAAK,eAAc,EAAK,QAAUL,EAAIyI,iBAAiB,YAAczI,EAAIH,EAAE,WAAY,kBAAkB,MAAQ,cAAc,WAAW,MAAMY,GAAG,CAAC,gBAAgBT,EAAIwJ,kBAAkB,OAASxJ,EAAI2K,kBAAkB,OAAS3K,EAAI2K,mBAAmB0B,MAAM,CAAChN,MAAOW,EAAI0I,eAAgB4D,SAAS,SAAUC,GAAMvM,EAAI0I,eAAe6D,CAAG,EAAE1E,WAAW,mBAAmB,CAAC3H,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,YAAY4L,KAAK,YAAY,CAACjM,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,qBAAqB,GAAGG,EAAIa,GAAG,KAAMb,EAAI4B,WAAW0F,iBAAmBtH,EAAI4B,WAAWyF,gBAAiBnH,EAAG,KAAK,CAACyG,YAAY,oBAAoB3G,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAI4B,WAAW6F,cAAevH,EAAG,MAAMF,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,eAAe,CAAG3G,EAAIoF,QAAQuC,IAA6xB3H,EAAIe,KAA5xBb,EAAG,MAAM,CAACyG,YAAY,qBAAqB,CAACzG,EAAG,YAAY,CAACA,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,iBAAiB,MAAQL,EAAIH,EAAE,WAAY,QAAQ,aAAaG,EAAIH,EAAE,WAAY,SAASY,GAAG,CAAC,MAAQ,SAASU,GAAQnB,EAAI2I,SAAU,CAAK,MAAM,GAAG3I,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAAC8E,WAAW,CAAC,CAACzH,KAAK,gBAAgBqK,QAAQ,kBAAkBvI,MAAOW,EAAImG,SAAU0B,WAAW,aAAalB,YAAY,0BAA0B,CAACzG,EAAG,SAAS,CAACyG,YAAY,YAAYtG,MAAM,CAAC,gBAAgBL,EAAIsF,WAAW,aAAatF,EAAIH,EAAE,WAAY,6BAA6BY,GAAG,CAAC,MAAQ,SAASU,GAAgC,OAAxBA,EAAO2G,iBAAwB9H,EAAIiG,WAAW8B,MAAM,KAAMC,UAAU,KAAKhI,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,cAAcC,MAAM,CAAE,KAAQ5G,EAAIsF,aAAc,CAACpF,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAOL,EAAIqF,gBAAgB,MAAM,GAAYrF,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,WAAWsB,MAAO,CAACC,QAAiC,KAAxBlI,EAAIwF,gBAAyB,EAAI,IAAK,CAACtF,EAAG,MAAM,CAACyG,YAAY,mBAAmB3G,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIwF,iBAAiB,gBAH5vOtF,EAAG,gBAAgB,CAAC0G,MAAM,CAAC,mBAAoB5G,EAAIsF,YAAYjF,MAAM,CAAC,QAAUL,EAAI2I,QAAQ,mBAAmB3I,EAAIwF,gBAAgB,OAASxF,EAAIwB,OAAO,UAAYxB,EAAI6B,UAAU,QAAU7B,EAAIoF,QAAQ,cAAcpF,EAAIsF,WAAW,SAAWtF,EAAIxB,SAAS,cAAcwB,EAAI4B,WAAW,oBAAoB5B,EAAI0B,gBAAgB,eAAe1B,EAAIqF,YAAY,KAAOrF,EAAIqB,KAAK,gBAAgBrB,EAAIyE,aAAahE,GAAG,CAAC,iBAAiB,SAASU,GAAQnB,EAAI2I,QAAQxH,CAAM,EAAE,oBAAoB,SAASA,GAAQnB,EAAIsF,WAAWnE,CAAM,EAAE,qBAAqB,SAASA,GAAQnB,EAAIsF,WAAWnE,CAAM,IAI5yC,GACsB,IDOpB,EACA,KACA,WACA,MAI8B,QE8PhCqL,GAAA,CACAlP,GAAA,OACAoG,MAAA7D,EAAA,yBAEAkG,GAAA,CACAzI,GAAA,UACAoG,MAAA7D,EAAA,6BAEA4M,GAAA,CACAnP,GAAA,GACA0B,YAAA,GACA4J,SAAA,GACAC,YAAA,GACArH,OAAA,GACAkG,QAAA,GACAhG,gBAAA,GACAkB,MAAAmD,GACA7B,SAAA,CACAD,KAAA,KACA1G,KAAAsC,EAAA,iCCpSqL,GDwSrL,CACAtC,KAAA,WACAC,WAAA,CACAkP,QAAA,IACAC,QAAA,GACAvE,cAAA,IACAwE,gBAAA,IACAC,SAAAA,KAEAhP,MAAA,CACAwK,MAAA,CACAvK,KAAA2D,MACAF,QAAAA,IAAA,IAEAK,WAAA,CACA9D,KAAAwD,OACAtD,UAAA,GAEAuC,cAAA,CACAzC,KAAAC,OACAwD,QAAA,MAEAO,gBAAA,CACAhE,KAAA2D,MACAF,QAAAA,IAAA,KAGAnD,KAAAA,KACA,CACAoO,kBACAzG,gBACAX,QAAA,CACAuC,KAAA,EACAnG,QAAA,GAEAsL,UAAA,EACArE,iBAAA,GACAsE,YAAA,GACAN,QAAAnL,OAAAiB,OAAA,GAAAkK,MAGAlO,SAAA,CACAC,WACA,YAAAC,OAAAC,QAAAC,aACA,EACAqO,uBACA,OAAAC,mBAAA,KAAA1M,cACA,EACA2M,gBACA,wBAAA3M,cACA,KAAA8H,MAAArG,QAAAX,IAAA,IAAAA,EAAAgI,WAEA,KAAA7K,SAAAyC,QAIA,KAAAoH,MAAArG,QAAAX,IAAA,IAAAA,EAAAgI,UACA,EACA7H,SAEA,YAAA/C,OAAAC,QAAAuM,UACAjJ,QAAAlC,GAAA,aAAAA,EAAAxC,KACA6P,MAAA,CAAAC,EAAAC,IAAAD,EAAA7P,KAAA+P,cAAAD,EAAA9P,OACA,EACAgQ,eAEA,YAAA/L,OAAAa,KAAAvC,KAGAA,EAAAwB,OAAAiB,OAAA,GAAAzC,IACA0C,aAAA,IAAA1C,EAAA2C,OACA3C,IAEA,EACA4B,kBAEA,YAAAjD,OAAAC,QAAA8O,iBACA,EACA7L,eAEA,MAAA8L,EAAA,KAAAjP,SAAAiP,YAAAC,QAAA,CAAAC,EAAAC,IAAAD,EAAA5J,OAAA,CACAzG,GAAAsQ,EACAlK,MAAAkK,KACA,IAMA,OAJA,KAAApP,SAAAqP,qBACAJ,EAAAK,QAAA,KAAAtB,gBAEAiB,EAAAK,QAAA,KAAA/H,cACA0H,CACA,EACA9J,oBACA,YAAAlF,OAAAC,QAAAkF,0BACA,EACAmK,cACA,YAAAtP,OAAAC,QAAAsP,cACA,EACAC,aACA,YAAAxP,OAAAC,QAAAwP,aACA,EACAC,aACA,YAAA9F,MAAApB,MACA,EAGApF,YACA,OACA,CACA6B,MAAA7D,EAAA,+BACAgC,UAAA,KAAArD,SAAAqD,UAAAuM,iBAEA,CACA1K,MAAA7D,EAAA,8BACAgC,UAAA,KAAArD,SAAAqD,UAAAwM,gBAGA,EACA5J,cACA,MACA,iBADA6J,OAAAC,iBAAA,KAAApP,KACAqP,iBAAA,8BACA,GAEAC,MAAA,CAEAlO,cAAAmO,EAAAC,GAEA,KAAAC,qBACA,KAAAnQ,OAAA0M,OAAA,cACA,KAAAlM,MAAA4P,gBAAAC,aAAAC,QACA,KAAAC,uBAAAN,EACA,EAIAP,WAAAO,EAAAC,GAEA,IAAAD,GAAA,IAAAC,EACA,KAAA1P,MAAA4P,gBAAAC,aAAAC,QAIA,IAAAL,GAAA,IAAAC,GACA,KAAA1P,MAAA4P,gBAAAC,aAAAG,QAEA,GAGA,0BACA,KAAAzF,mBACA,EAEA0F,UACA,KAAA1Q,SAAAoN,mBACAlM,GAAAyP,aAAAC,cAAAvP,EAAA,8EAMA,KAAAwP,aAKAC,EAAAA,EAAAA,IAAA,uCAAA7E,SACA6E,EAAAA,EAAAA,IAAA,sCAAAC,aAKA,KAAAX,oBACA,EACAY,iBACAC,EAAAA,EAAAA,IAAA,uCAAAhF,SACAgF,EAAAA,EAAAA,IAAA,sCAAAF,YACA,EAEA3Q,QAAA,CACA,wBAAA0L,SACA,KAAA7L,OAAAa,SAAA,eAAAiL,OAAA,EAAAC,MAAA,GAAAC,OAAAH,IAAAN,MAAAI,IACA,MAAA/B,EAAA+B,SAAAA,EAAAhM,KAAAkD,OAAAoJ,OAAAN,aAAA,EAAAA,EAAAhM,KAAAiM,IAAAjM,KAAAiK,OAAA,GACAA,EAAApB,OAAA,IACA,KAAAwB,iBAAAJ,EACA,GAEA,EACAqH,SAAAC,GACA,KAAA7C,SAAA6C,EAAAC,OAAAC,SAAA,CACA,EAQAxE,cAAAzI,GAEA,MAAA0I,EAAA5L,GAAAqD,KAAAiD,iBAAApD,GACA,cAAA0I,GAAAA,GAAA,GAEA1I,EAAAlD,GAAAqD,KAAAC,cAAAtD,GAAAqD,KAAAiD,iBAAApD,IACA,KAAA6J,QAAA7J,MAAA,CAAAtF,GAAAsF,EAAAc,MAAAd,GACA,KAAA6J,QAAA7J,QAGA,KAAA6J,QAAA7J,MAAA,KAAAjB,aAAA,GACA,KAAAA,aAAA,GACA,EAEAmO,gBAAAC,GACA,KAAAtR,OAAAa,SAAA,YACAiL,OAAA,KAAAwD,YACAvD,MAAA,KAAAyD,WACAnO,MAAA,kBAAAS,cAAA,KAAAA,cAAA,GACAkK,OAAA,KAAAsC,cAEA/C,MAAAmE,IACAA,EAAA,GACA4B,EAAAd,SAEAd,EAAA,KAAAF,YACA8B,EAAAC,UACA,GAEA,EAGAvF,OAAAwF,GAAA,UAAA3F,GAAA2F,EACA,KAAAlD,YAAAzC,EACA,KAAA7L,OAAA0M,OAAA,cACA,KAAAlM,MAAA4P,gBAAAC,aAAAC,OACA,EACAQ,cACA,KAAA9E,OAAA,CAAAH,MAAA,IACA,EAEA+E,YAEA,KAAA5C,QAAAnL,OAAAiB,OAAA,GAAAkK,IAOA,KAAAjO,SAAA0R,iBACAC,EAAAA,QAAAA,IAAA,KAAA1D,QAAAvI,SAAA,YAAA1F,SAAA0R,iBAOA,KAAAlB,uBAAA,KAAAzO,eAEA,KAAA6E,QAAAuC,KAAA,CACA,EACAyI,aACA,KAAAhL,QAAAuC,KAAA,EACA,KAAAlJ,OAAAa,SAAA,WACAoK,OAAA,KAAA+C,QAAAnP,GACAsL,SAAA,KAAA6D,QAAA7D,SACA5J,YAAA,KAAAyN,QAAAzN,YACAkI,MAAA,KAAAuF,QAAA5D,YACArH,OAAA,KAAAiL,QAAAjL,OAAAa,KAAAvC,GAAAA,EAAAxC,KACA6E,SAAA,KAAAsK,QAAA/K,gBAAAW,KAAAvC,GAAAA,EAAAxC,KACAsF,MAAA,KAAA6J,QAAA7J,MAAAtF,GACA4G,SAAA,KAAAuI,QAAAvI,SAAAD,KACAyD,QAAA,KAAA+E,QAAA/E,QAAApK,KAEA0M,MAAA,KACA,KAAAqF,YACA,KAAApQ,MAAAoR,YAAAC,QACA,KAAAC,YAAA,IAEAC,OAAAzF,IAEA,GADA,KAAA3F,QAAAuC,KAAA,EACAoD,EAAAX,UAAAW,EAAAX,SAAAhM,MAAA2M,EAAAX,SAAAhM,KAAAiM,KAAAU,EAAAX,SAAAhM,KAAAiM,IAAAoG,KAAA,CACA,MAAAC,EAAA3F,EAAAX,SAAAhM,KAAAiM,IAAAoG,KAAAC,WACA,MAAAA,EAEA,KAAAzR,MAAAoR,YAAAC,QACA,MAAAI,GAEA,KAAAzR,MAAA0R,gBAAAL,OAEA,IAEA,EACAtB,uBAAA3P,GACA,GAAAA,GAAAA,EAAA4H,OAAA,GAEA,MAAA2J,EAAA,KAAApP,OAAAiC,MAAA3D,GAAAA,EAAAxC,KAAA+B,IACA,GAAAuR,EAEA,YADA,KAAAnE,QAAAjL,OAAA,CAAAoP,GAGA,CAEA,KAAAnE,QAAAjL,OAAA,EACA,EAQAwK,YAAAlN,GAUA,OATA,KAAAsG,QAAA5D,QAAA,EACA,KAAA/C,OAAAa,SAAA,WAAAR,GACAkL,MAAAlK,IACA,KAAA2M,QAAAjL,OAAApE,KAAA,KAAAoE,OAAAiC,MAAA3D,GAAAA,EAAAxC,KAAAwB,KACA,KAAAsG,QAAA5D,QAAA,KAEAgP,OAAA,KACA,KAAApL,QAAA5D,QAAA,KAEA,KAAA/C,OAAAC,QAAAuM,UAAA,KAAAzJ,OAAAyF,OACA,EAQA2H,qBACA,MAAAiC,EAAA,KAAApS,OAAAC,QAAAuM,UACA,kBAAA1K,eACAsQ,EAAAC,WAAAhR,GAAA,aAAAA,EAAAxC,IAAA,IAAAwC,EAAAiR,aAAA,IAEA,KAAAC,QAAA5T,KAAA,CAAAG,KAAA,UACA,KAAA0B,MAAA4P,gBAAAC,aAAAC,QAEA,EACAwB,aAEA,KAAA3O,WAAAqP,iBAAA,CACA,oBEjnBI,GAAU,CAAC,EAEf,GAAQ3K,kBAAoB,KAC5B,GAAQC,cAAgB,KAElB,GAAQC,OAAS,UAAc,KAAM,QAE3C,GAAQC,OAAS,KACjB,GAAQC,mBAAqB,KAEhB,KAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IfTW,WAAkB,IAAI1G,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,QAAQ,CAACyG,YAAY,iBAAiBtG,MAAM,CAAC,GAAK,cAAc,KAAO,OAAO,aAAaL,EAAIH,EAAE,WAAY,iBAAkBY,GAAG,CAAC,UAAU,SAASU,GAAQ,OAAOnB,EAAI0P,SAAS3H,MAAM,KAAMC,UAAU,IAAI,CAAEhI,EAAI4B,WAAWqP,gBAAiB/Q,EAAG,UAAU,CAACG,MAAM,CAAC,KAAO,SAASI,GAAG,CAAC,MAAQT,EAAIuQ,aAAa,CAACrQ,EAAG,OAAO,CAACyG,YAAY,iBAAiBtG,MAAM,CAAC,GAAK,WAAW,SAAWL,EAAIoF,QAAQuC,KAAKlH,GAAG,CAAC,OAAS,SAASU,GAAgC,OAAxBA,EAAO2G,iBAAwB9H,EAAIoQ,WAAWrI,MAAM,KAAMC,UAAU,IAAI,CAAC9H,EAAG,KAAK,CAACF,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAW,gBAAgBG,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAAC8E,WAAW,CAAC,CAACzH,KAAK,QAAQqK,QAAQ,UAAUvI,MAAOW,EAAIyM,QAAQnP,GAAIuK,WAAW,eAAe3G,IAAI,cAAcyF,YAAY,cAActG,MAAM,CAAC,GAAK,cAAc,SAAWL,EAAIxB,SAAS0S,sBAAsB,YAAclR,EAAIxB,SAAS0S,sBAC92BlR,EAAIH,EAAE,WAAY,yBAClBG,EAAIH,EAAE,WAAY,YAAY,eAAiB,OAAO,aAAe,MAAM,YAAc,MAAM,KAAO,WAAW,QAAU,yBAAyB,SAAW,GAAG,KAAO,QAAQsH,SAAS,CAAC,MAASnH,EAAIyM,QAAQnP,IAAKmD,GAAG,CAAC,MAAQ,SAASU,GAAWA,EAAOyO,OAAOuB,WAAiBnR,EAAIoR,KAAKpR,EAAIyM,QAAS,KAAMtL,EAAOyO,OAAOvQ,MAAM,KAAKW,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAAC8E,WAAW,CAAC,CAACzH,KAAK,QAAQqK,QAAQ,UAAUvI,MAAOW,EAAIyM,QAAQzN,YAAa6I,WAAW,wBAAwBlB,YAAY,cAActG,MAAM,CAAC,GAAK,iBAAiB,YAAcL,EAAIH,EAAE,WAAY,gBAAgB,eAAiB,OAAO,aAAe,MAAM,YAAc,MAAM,KAAO,cAAc,KAAO,QAAQsH,SAAS,CAAC,MAASnH,EAAIyM,QAAQzN,aAAcyB,GAAG,CAAC,MAAQ,SAASU,GAAWA,EAAOyO,OAAOuB,WAAiBnR,EAAIoR,KAAKpR,EAAIyM,QAAS,cAAetL,EAAOyO,OAAOvQ,MAAM,KAAKW,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAAC8E,WAAW,CAAC,CAACzH,KAAK,QAAQqK,QAAQ,UAAUvI,MAAOW,EAAIyM,QAAQ7D,SAAUf,WAAW,qBAAqB3G,IAAI,kBAAkByF,YAAY,cAActG,MAAM,CAAC,GAAK,kBAAkB,UAAYL,EAAI2D,kBAAkB,UAAY,IAAI,YAAc3D,EAAIH,EAAE,WAAY,YAAY,SAAqC,KAA1BG,EAAIyM,QAAQ5D,YAAiB,eAAiB,OAAO,aAAe,eAAe,YAAc,MAAM,KAAO,WAAW,KAAO,YAAY1B,SAAS,CAAC,MAASnH,EAAIyM,QAAQ7D,UAAWnI,GAAG,CAAC,MAAQ,SAASU,GAAWA,EAAOyO,OAAOuB,WAAiBnR,EAAIoR,KAAKpR,EAAIyM,QAAS,WAAYtL,EAAOyO,OAAOvQ,MAAM,KAAKW,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAAC8E,WAAW,CAAC,CAACzH,KAAK,QAAQqK,QAAQ,UAAUvI,MAAOW,EAAIyM,QAAQ5D,YAAahB,WAAW,wBAAwBlB,YAAY,cAActG,MAAM,CAAC,GAAK,WAAW,YAAcL,EAAIH,EAAE,WAAY,SAAS,SAAkC,KAAvBG,EAAIyM,QAAQ7D,UAAiB5I,EAAIxB,SAAS6S,oBAAoB,eAAiB,OAAO,aAAe,MAAM,YAAc,MAAM,KAAO,QAAQ,KAAO,SAASlK,SAAS,CAAC,MAASnH,EAAIyM,QAAQ5D,aAAcpI,GAAG,CAAC,MAAQ,SAASU,GAAWA,EAAOyO,OAAOuB,WAAiBnR,EAAIoR,KAAKpR,EAAIyM,QAAS,cAAetL,EAAOyO,OAAOvQ,MAAM,KAAKW,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,sBAAsB,CAAG3G,EAAIxB,SAASyC,QAAsMjB,EAAIe,KAAjMb,EAAG,QAAQ,CAAC0G,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQ5D,QAAQnB,MAAM,CAAC,GAAK,YAAY,UAAYL,EAAIxB,SAASyC,QAAQ,SAAW,KAAK,KAAO,QAAQkG,SAAS,CAAC,MAAQnH,EAAIyM,QAAQjL,UAAmBxB,EAAIa,GAAG,KAAKX,EAAG,gBAAgB,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,mBAAkB,EAAM,SAAWL,EAAIoF,QAAQ5D,QAAQxB,EAAIoF,QAAQuC,IAAI,UAAW,EAAK,QAAU3H,EAAIuN,aAAa,YAAcvN,EAAIH,EAAE,WAAY,qBAAqB,YAAY,GAAG,UAAW,EAAK,MAAQ,OAAO,kBAAkB,SAAS,WAAW,MAAMY,GAAG,CAAC,IAAMT,EAAIgM,aAAaK,MAAM,CAAChN,MAAOW,EAAIyM,QAAQjL,OAAQ8K,SAAS,SAAUC,GAAMvM,EAAIoR,KAAKpR,EAAIyM,QAAS,SAAUF,EAAI,EAAE1E,WAAW,mBAAmB,CAAC3H,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,YAAY4L,KAAK,YAAY,CAACjM,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,qBAAqB,GAAGG,EAAIa,GAAG,KAAMb,EAAI0B,gBAAgBuF,OAAO,GAAKjH,EAAIxB,SAASyC,QAASf,EAAG,MAAM,CAACyG,YAAY,yBAAyB,CAACzG,EAAG,gBAAgB,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,mBAAkB,EAAM,UAAW,EAAK,QAAUL,EAAI0B,gBAAgB,YAAc1B,EAAIH,EAAE,WAAY,yBAAyB,YAAY,GAAG,MAAQ,OAAO,WAAW,MAAMwM,MAAM,CAAChN,MAAOW,EAAIyM,QAAQ/K,gBAAiB4K,SAAS,SAAUC,GAAMvM,EAAIoR,KAAKpR,EAAIyM,QAAS,kBAAmBF,EAAI,EAAE1E,WAAW,4BAA4B,CAAC3H,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,YAAY4L,KAAK,YAAY,CAACjM,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,qBAAqB,GAAGG,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,qBAAqB,CAACzG,EAAG,gBAAgB,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,eAAc,EAAM,QAAUL,EAAI2B,aAAa,YAAc3B,EAAIH,EAAE,WAAY,qBAAqB,UAAW,EAAK,MAAQ,QAAQ,WAAW,MAAMY,GAAG,CAAC,IAAMT,EAAIqL,eAAegB,MAAM,CAAChN,MAAOW,EAAIyM,QAAQ7J,MAAO0J,SAAS,SAAUC,GAAMvM,EAAIoR,KAAKpR,EAAIyM,QAAS,QAASF,EAAI,EAAE1E,WAAW,oBAAoB,GAAG7H,EAAIa,GAAG,KAAMb,EAAI4B,WAAWwF,cAAelH,EAAG,MAAM,CAACyG,YAAY,yBAAyB,CAACzG,EAAG,gBAAgB,CAACyG,YAAY,kBAAkBtG,MAAM,CAAC,eAAc,EAAM,QAAUL,EAAI6B,UAAU,YAAc7B,EAAIH,EAAE,WAAY,oBAAoB,cAAc,QAAQ,eAAe,YAAY,MAAQ,OAAO,WAAW,QAAQwM,MAAM,CAAChN,MAAOW,EAAIyM,QAAQvI,SAAUoI,SAAS,SAAUC,GAAMvM,EAAIoR,KAAKpR,EAAIyM,QAAS,WAAYF,EAAI,EAAE1E,WAAW,uBAAuB,GAAG7H,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAI4B,WAAW0F,gBAAiBpH,EAAG,MAAM,CAACyG,YAAY,oBAAoB3G,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAI4B,WAAWyF,gBAAiBnH,EAAG,MAAM,CAACyG,YAAY,gBAAgB3G,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAI4B,WAAW6F,cAAevH,EAAG,MAAM,CAACyG,YAAY,cAAc3G,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,uBAAuBC,MAAM,CAAC,qBAAsB5G,EAAIoF,QAAQsC,UAAU,CAACxH,EAAG,gBAAgB,CAACgB,IAAI,UAAUyF,YAAY,kBAAkBtG,MAAM,CAAC,mBAAkB,EAAK,eAAc,EAAK,QAAUL,EAAIyI,iBAAiB,YAAczI,EAAIH,EAAE,WAAY,uBAAuB,MAAQ,cAAc,WAAW,MAAMY,GAAG,CAAC,gBAAgBT,EAAIwJ,mBAAmB6C,MAAM,CAAChN,MAAOW,EAAIyM,QAAQ/E,QAAS4E,SAAS,SAAUC,GAAMvM,EAAIoR,KAAKpR,EAAIyM,QAAS,UAAWF,EAAI,EAAE1E,WAAW,oBAAoB,CAAC3H,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,YAAY4L,KAAK,YAAY,CAACjM,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,qBAAqB,GAAGG,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACyG,YAAY,gBAAgB,CAACzG,EAAG,WAAW,CAACG,MAAM,CAAC,GAAK,YAAY,KAAO,UAAU,cAAc,SAAS,MAAQ,KAAK,CAACL,EAAIa,GAAG,eAAeb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,mBAAmB,iBAAiB,OAAOG,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACA,EAAG,KAAK,CAACyG,YAAY,MAAMC,MAAM,CAAC,OAAU5G,EAAI8M,WAAa9M,EAAI4B,WAAWqP,iBAAiB5Q,MAAM,CAAC,GAAK,gBAAgB,CAACH,EAAG,KAAK,CAACyG,YAAY,SAAStG,MAAM,CAAC,GAAK,iBAAiB,CAACH,EAAG,OAAO,CAACyG,YAAY,mBAAmB,CAAC3G,EAAIa,GAAG,IAAIb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,WAAW,SAASG,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,OAAOtG,MAAM,CAAC,GAAK,eAAe,CAACH,EAAG,MAAM,CAACyG,YAAY,YAAY,CAACzG,EAAG,SAAS,CAACF,EAAIa,GAAG,iBAAiBb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,iBAAiB,oBAAoBG,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIH,EAAE,WAAY,aAAa,cAAcG,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,WAAWtG,MAAM,CAAC,GAAK,mBAAmB,CAACL,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIH,EAAE,WAAY,aAAa,cAAcG,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,cAActG,MAAM,CAAC,GAAK,kBAAkB,CAACL,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIH,EAAE,WAAY,UAAU,cAAcG,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,SAAStG,MAAM,CAAC,GAAK,iBAAiB,CAACL,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIH,EAAE,WAAY,WAAW,cAAcG,EAAIa,GAAG,KAAMb,EAAI0B,gBAAgBuF,OAAO,GAAKjH,EAAIxB,SAASyC,QAASf,EAAG,KAAK,CAACyG,YAAY,YAAYtG,MAAM,CAAC,GAAK,oBAAoB,CAACL,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIH,EAAE,WAAY,oBAAoB,cAAcG,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,QAAQtG,MAAM,CAAC,GAAK,gBAAgB,CAACL,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIH,EAAE,WAAY,UAAU,cAAcG,EAAIa,GAAG,KAAMb,EAAI4B,WAAWwF,cAAelH,EAAG,KAAK,CAACyG,YAAY,YAAYtG,MAAM,CAAC,GAAK,oBAAoB,CAACL,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIH,EAAE,WAAY,aAAa,cAAcG,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAI4B,WAAWyF,iBAAmBrH,EAAI4B,WAAW0F,gBAAiBpH,EAAG,KAAK,CAACyG,YAAY,iCAAiC,CAAE3G,EAAI4B,WAAWyF,gBAAiBnH,EAAG,MAAM,CAACyG,YAAY,eAAe,CAAC3G,EAAIa,GAAG,eAAeb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,iBAAiB,gBAAgBG,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAI4B,WAAW0F,gBAAiBpH,EAAG,MAAM,CAACyG,YAAY,4BAA4B,CAAC3G,EAAIa,GAAG,eAAeb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,qBAAqB,gBAAgBG,EAAIe,OAAOf,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAI4B,WAAW6F,cAAevH,EAAG,KAAK,CAACyG,YAAY,6BAA6B,CAAC3G,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIH,EAAE,WAAY,eAAe,cAAcG,EAAIe,KAAKf,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,UAAUtG,MAAM,CAAC,GAAK,kBAAkB,CAACL,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIH,EAAE,WAAY,YAAY,cAAcG,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACyG,YAAY,+BAA+B,CAAC3G,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIH,EAAE,WAAY,iBAAiB,gBAAgBG,EAAIa,GAAG,KAAKb,EAAIsR,GAAItR,EAAIkN,eAAe,SAAS7L,GAAM,OAAOnB,EAAG,WAAW,CAACE,IAAIiB,EAAK/D,GAAG+C,MAAM,CAAC,mBAAmBL,EAAI8B,gBAAgB,OAAS9B,EAAIwB,OAAO,UAAYxB,EAAI6B,UAAU,gBAAgB7B,EAAI2B,aAAa,SAAW3B,EAAIxB,SAAS,cAAcwB,EAAI4B,WAAW,oBAAoB5B,EAAI0B,gBAAgB,KAAOL,EAAK,MAAQrB,EAAIqI,MAAM,gBAAgBrI,EAAIyE,cAAc,IAAGzE,EAAIa,GAAG,KAAKX,EAAG,kBAAkB,CAACgB,IAAI,kBAAkBT,GAAG,CAAC,SAAWT,EAAI8P,kBAAkB,CAAC5P,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,WAAW4L,KAAK,WAAW,CAAC/L,EAAG,MAAM,CAACyG,YAAY,sCAAsC3G,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,WAAW4L,KAAK,WAAW,CAAC/L,EAAG,MAAM,CAACyG,YAAY,qBAAqB3G,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,cAAc4L,KAAK,cAAc,CAAC/L,EAAG,MAAM,CAACG,MAAM,CAAC,GAAK,iBAAiB,CAACH,EAAG,MAAM,CAACyG,YAAY,uBAAuB3G,EAAIa,GAAG,KAAKX,EAAG,KAAK,CAACF,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,+BAA+B,IAAI,EACxzR,GACsB,IeQpB,EACA,KACA,WACA,MAI8B,oCCmJhCsQ,EAAAA,QAAAA,IAAAoB,KAEA,MCxKkL,GDwKlL,CACAhU,KAAA,QACAC,WAAA,CACAgU,aAAA,IACAC,gBAAA,IACAC,uBAAA,IACAC,uBAAA,IACA/T,oBAAA,IACAgU,mBAAA,IACAC,uBAAA,IACAC,wBAAA,IACAC,UAAA,IACAC,cAAA,EACA5J,cAAA,IACA6J,KAAA,KACAC,SAAAA,IAEArU,MAAA,CACA0C,cAAA,CACAzC,KAAAC,OACAwD,QAAA,OAGAnD,KAAAA,KACA,CAEAoO,eAAA,CAAAlP,GAAA,OAAAoG,MAAA7D,EAAA,yBAEAsS,eAAA,EACArQ,gBAAA,GACAsQ,iBAAA,EACAC,iBAAA,EACAzQ,WAAA,CACA0F,iBAAA,EACAD,iBAAA,EACAI,eAAA,EACAwJ,iBAAA,EACA7J,eAAA,KAIA7I,SAAA,CACAyO,uBACA,YAAAzM,cAAA0M,mBAAA,KAAA1M,eAAA,IACA,EACA8H,QACA,YAAA5J,OAAAC,QAAA4T,QACA,EACA9Q,SACA,YAAA/C,OAAAC,QAAAuM,SACA,EACA8C,cACA,YAAAtP,OAAAC,QAAAsP,cACA,EACAC,aACA,YAAAxP,OAAAC,QAAAwP,aACA,EAGA9G,cAAA,CACAmL,MAAA,YAAAC,gBAAA,kBACAC,IAAAC,GACA,KAAAC,gBAAA,gBAAAD,EACA,GAEAjL,cAAA,CACA8K,MAAA,YAAAC,gBAAA,kBACAC,IAAAC,GACA,KAAAC,gBAAA,gBAAAD,EACA,GAEArL,gBAAA,CACAkL,MAAA,YAAAC,gBAAA,oBACAC,IAAAC,GACA,KAAAC,gBAAA,kBAAAD,EACA,GAEApL,gBAAA,CACAiL,MAAA,YAAAC,gBAAA,oBACAC,IAAAC,GACA,KAAAC,gBAAA,kBAAAD,EACA,GAGAE,YACA,YAAAnU,OAAAC,QAAAmU,YACA,EACArU,WACA,YAAAC,OAAAC,QAAAC,aACA,EAGAgD,eAEA,MAAA8L,EAAA,KAAAjP,SAAAiP,YAAAC,QAAA,CAAAC,EAAAC,IAAAD,EAAA5J,OAAA,CAAAzG,GAAAsQ,EAAAlK,MAAAkK,KAAA,IAKA,OAHA,KAAApP,SAAAqP,qBACAJ,EAAAK,QAAA,KAAAtB,gBAEAiB,CACA,EAEA1H,aAAA,CACAwM,MACA,gBAAAJ,cACA,KAAAA,cAEA,KAAA3T,SAAAuH,eAAA,KAAAyG,eAAAlP,IAAAoC,GAAAqD,KAAAiD,iBAAA,KAAAxH,SAAAuH,eAAA,EAEA,CAAAzI,GAAA,KAAAkB,SAAAuH,aAAArC,MAAA,KAAAlF,SAAAuH,cAEA,KAAAyG,cACA,EACAiG,IAAA7P,GACA,KAAAuP,cAAAvP,CACA,GAIA2G,gBAAA,CACAgJ,MACA,YAAA/T,SAAAsU,gBACA,EACA,UAAAzT,GACA,IACA,KAAAgT,iBAAA,EACA,KAAA5T,OAAA0M,OAAA,oBACA,KAAA3M,SACAsU,iBAAAzT,UAEA0T,EAAAA,QAAAA,MAAArO,EAAAA,EAAAA,aAAA,kDAAArF,MAAAA,EAAA,YACA,OAAA2T,GACAhI,GAAAD,MAAA,kDAAAiI,EAAAC,QAAAD,EACA,SACA,KAAAX,iBAAA,CACA,CACA,GAGAa,YAGA,OAFAzR,MAAA0R,QAAA,KAAA3R,QAAA,KAAAA,OAAA,IAIAQ,QAAAlC,GAAA,aAAAA,EAAAxC,IAAA,UAAAwC,EAAAxC,KACA+E,KAAAvC,GAAA,KAAAsT,gBAAAtT,IACA,EAEAuT,iBACA,YAAAD,gBAAA,KAAA5R,OAAAiC,MAAA3D,GAAA,UAAAA,EAAAxC,KACA,EACAgW,oBACA,YAAAF,gBAAA,KAAA5R,OAAAiC,MAAA3D,GAAA,aAAAA,EAAAxC,KACA,GAEAiW,cACA,KAAA9U,OAAA0M,OAAA,cACA3J,OAAA,KAAA/C,OAAAC,QAAAC,cAAA6C,OACAgS,QAAA,KAAA/U,OAAAC,QAAAC,cAAA8U,WACAb,UAAA,KAAAnU,OAAAC,QAAAC,cAAAiU,YAEA,KAAAnU,OAAAa,SAAA,6BACA,EACAoU,UAGApS,OAAAiB,OAAAoR,IAAA,CACAC,SAAA,CACA1B,SAAA,CACA2B,eAAA,KAAAA,kBAIA,EACAjV,QAAA,CACAkV,kBACA,KAAAlS,WAAAqP,iBAAA,EACA,KAAArP,WAAAqP,iBACAd,EAAAA,QAAAA,UAAA,KACA7B,OAAA+B,YAAAC,OAAA,GAGA,EACAkC,gBAAApS,GAEA,MAAA2T,EAAA,KAAAC,cAAAzB,IAAAnS,GAGA,OADA,KAAAwB,WAAAxB,GAAA,OAAA2T,EAAA,SAAAA,EAAA,KAAAnS,WAAAxB,GACA,KAAAwB,WAAAxB,EACA,EACAuS,gBAAAvS,EAAAsS,GAGA,OAFA,KAAA9Q,WAAAxB,GAAAsS,EACA,KAAAsB,cAAAvB,IAAArS,EAAAsS,GACAA,CACA,EAOAuB,kBAAA,IAAArR,EAAAoF,UAAAf,OAAA,QAAAmE,IAAApD,UAAA,GAAAA,UAAA,UACA,KAAAvJ,OAAAa,SAAA,gBACA4U,IAAA,QACA9T,IAAA,gBAEAf,MAAAuD,EAAAtF,GAAAsF,EAAAtF,GAAAsF,IACAoH,MAAA,KACA,iBAAApH,IACAA,EAAA,CAAAtF,GAAAsF,EAAAc,MAAAd,IAEA,KAAAmD,aAAAnD,CAAA,GAEA,EAQAyI,cAAAzI,GAGA,cADAlD,GAAAqD,KAAAiD,iBAAApD,GAEA,KAAAqR,gBAAA,QAGA,KAAAA,gBAAAvU,GAAAqD,KAAAC,cAAAtD,GAAAqD,KAAAiD,iBAAApD,IAEA,EAUAiR,eAAA7K,EAAAC,EAAAC,GAMA,OALA,KAAApH,gBAAA1E,KAAA,CACA4L,OACAC,OACAC,WAEA,KAAApH,eACA,EAOA,kBAAAhD,GAEA,QAAAA,EAAAC,OAIA,IACA,KAAAqT,iBAAA,QACA,KAAA3T,OAAAa,SAAA,WAAAR,EAAAC,QAEA,KAAAoV,yBACA,KAAAnD,QAAA5T,KAAA,CACAG,KAAA,QACA+C,OAAA,CACAC,cAAAC,mBAAA1B,EAAAC,UAGA,OACA,KAAAqV,kBACA,SACA,KAAAhC,iBAAA,CACA,CACA,EAEAgC,mBACA,KAAAnV,MAAAoV,SAAAC,eAAA,EACA,KAAAC,WAAA,KACA,KAAAtV,MAAAoV,SAAApV,MAAAuV,aAAAC,YAAA,GAEA,EAEAN,mBACA,KAAAlV,MAAAoV,SAAAC,eAAA,EACA,KAAArV,MAAAoV,SAAAK,aAAA,EACA,EAQAtB,gBAAAtT,GACA,MAAA6U,EAAA,GACA,gBAAA7U,EACA,IAGA6U,EAAArX,GAAAwC,EAAAxC,GACAqX,EAAA1W,MAAA6B,EAAAvC,KACAoX,EAAA5D,UAAAjR,EAAAiR,UAGAjR,EAAAiR,UAAAjR,EAAA8U,SAAA,IACAD,EAAAzW,MAAA4B,EAAAiR,UAAAjR,EAAA8U,UAGAD,EACA,oBErdI,GAAU,CAAC,EAEf,GAAQrO,kBAAoB,KAC5B,GAAQC,cAAgB,KAElB,GAAQC,OAAS,UAAc,KAAM,QAE3C,GAAQC,OAAS,KACjB,GAAQC,mBAAqB,KAEhB,KAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IxBTW,WAAkB,IAAI1G,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,YAAY,CAACG,MAAM,CAAC,WAAW,WAAW,mBAAmB,CAAE,eAAgBL,EAAIoS,mBAAoB,CAAClS,EAAG,kBAAkB,CAACQ,YAAYV,EAAIW,GAAG,CAAC,CAACP,IAAI,OAAOQ,GAAG,WAAW,MAAO,CAACV,EAAG,yBAAyB,CAACgB,IAAI,WAAWb,MAAM,CAAC,GAAK,WAAW,mBAAmBL,EAAIH,EAAE,WAAY,oBAAoB,UAAW,EAAK,QAAUG,EAAIoS,gBAAgB,MAAQpS,EAAIH,EAAE,WAAY,cAAcY,GAAG,CAAC,MAAQT,EAAIoU,iBAAiB,WAAWpU,EAAIgM,aAAatL,YAAYV,EAAIW,GAAG,CAAC,CAACP,IAAI,OAAOQ,GAAG,WAAW,MAAO,CAACV,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,MAAM,EAAEW,OAAM,OAAUhB,EAAIa,GAAG,KAAKX,EAAG,sBAAsB,CAACG,MAAM,CAAC,GAAK,WAAW,OAAQ,EAAK,MAAQL,EAAIH,EAAE,WAAY,gBAAgB,GAAK,CAAEtC,KAAM,SAAU,KAAO,uBAAuB,CAAEyC,EAAI4S,UAAY,EAAG1S,EAAG,yBAAyB,CAACG,MAAM,CAAC,KAAO,WAAW4L,KAAK,WAAW,CAACjM,EAAIa,GAAG,eAAeb,EAAIc,GAAGd,EAAI4S,WAAW,gBAAgB5S,EAAIe,MAAM,GAAGf,EAAIa,GAAG,KAAMb,EAAIxB,SAASyC,QAASf,EAAG,sBAAsB,CAACG,MAAM,CAAC,GAAK,QAAQ,OAAQ,EAAK,MAAQL,EAAIH,EAAE,WAAY,UAAU,GAAK,CAAEtC,KAAM,QAAS+C,OAAQ,CAAEC,cAAe,UAAY,KAAO,oBAAoB,CAAEP,EAAIqT,eAAenV,MAAOgC,EAAG,yBAAyB,CAACG,MAAM,CAAC,KAAO,WAAW4L,KAAK,WAAW,CAACjM,EAAIa,GAAG,eAAeb,EAAIc,GAAGd,EAAIqT,eAAenV,OAAO,gBAAgB8B,EAAIe,MAAM,GAAGf,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAIsT,kBAAkBvC,UAAY,IAA0C,IAArC/Q,EAAIsT,kBAAkBvC,UAAkB7Q,EAAG,sBAAsB,CAACG,MAAM,CAAC,GAAK,WAAW,OAAQ,EAAK,MAAQL,EAAIH,EAAE,WAAY,kBAAkB,GAAK,CAAEtC,KAAM,QAAS+C,OAAQ,CAAEC,cAAe,aAAe,KAAO,wBAAwB,CAAEP,EAAIsT,kBAAkBvC,UAAY,EAAG7Q,EAAG,yBAAyB,CAACG,MAAM,CAAC,KAAO,WAAW4L,KAAK,WAAW,CAACjM,EAAIa,GAAG,eAAeb,EAAIc,GAAGd,EAAIsT,kBAAkBvC,WAAW,gBAAgB/Q,EAAIe,MAAM,GAAGf,EAAIe,KAAKf,EAAIa,GAAG,KAAMb,EAAIkT,UAAUjM,OAAS,EAAG/G,EAAG,yBAAyB,CAACG,MAAM,CAAC,MAAQL,EAAIH,EAAE,WAAY,aAAaG,EAAIe,KAAKf,EAAIa,GAAG,KAAKb,EAAIsR,GAAItR,EAAIkT,WAAW,SAASpT,GAAO,OAAOI,EAAG,gBAAgB,CAACE,IAAIN,EAAMxC,GAAG+C,MAAM,CAAC,GAAKP,EAAMxC,GAAG,MAAQwC,EAAM7B,MAAM,MAAQ6B,EAAM5B,QAAQ,IAAG,EAAE8C,OAAM,GAAM,CAACZ,IAAI,SAASQ,GAAG,WAAW,MAAO,CAACV,EAAG,0BAA0B,CAACA,EAAG,MAAM,CAACA,EAAG,IAAI,CAACF,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,sBAAsBG,EAAIa,GAAG,KAAKX,EAAG,gBAAgB,CAACG,MAAM,CAAC,MAAQL,EAAI+F,aAAa,QAAU/F,EAAI2B,aAAa,kBAAkB,SAAS,YAAc3B,EAAIH,EAAE,WAAY,wBAAwB,MAAQ,QAAQ,WAAW,KAAK,eAAc,EAAM,UAAW,GAAMY,GAAG,CAAC,IAAMT,EAAIqL,cAAc,MAAQrL,EAAIiU,oBAAoB,GAAGjU,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACA,EAAG,QAAQ,CAAC8E,WAAW,CAAC,CAACzH,KAAK,QAAQqK,QAAQ,UAAUvI,MAAOW,EAAIoH,cAAeS,WAAW,kBAAkBlB,YAAY,WAAWtG,MAAM,CAAC,GAAK,gBAAgB,KAAO,YAAY8G,SAAS,CAAC,QAAU1F,MAAM0R,QAAQnT,EAAIoH,eAAepH,EAAI6U,GAAG7U,EAAIoH,cAAc,OAAO,EAAGpH,EAAIoH,eAAgB3G,GAAG,CAAC,OAAS,SAASU,GAAQ,IAAI2T,EAAI9U,EAAIoH,cAAc2N,EAAK5T,EAAOyO,OAAOoF,IAAID,EAAKE,QAAuB,GAAGxT,MAAM0R,QAAQ2B,GAAK,CAAC,IAAaI,EAAIlV,EAAI6U,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAIlV,EAAIoH,cAAc0N,EAAI/Q,OAAO,CAA/E,QAA4FmR,GAAK,IAAIlV,EAAIoH,cAAc0N,EAAIK,MAAM,EAAED,GAAKnR,OAAO+Q,EAAIK,MAAMD,EAAI,IAAK,MAAMlV,EAAIoH,cAAc4N,CAAI,KAAKhV,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAM,kBAAkB,CAACL,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,wBAAwBG,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACA,EAAG,QAAQ,CAAC8E,WAAW,CAAC,CAACzH,KAAK,QAAQqK,QAAQ,UAAUvI,MAAOW,EAAIyH,cAAeI,WAAW,kBAAkBlB,YAAY,WAAWtG,MAAM,CAAC,GAAK,gBAAgB,KAAO,YAAY8G,SAAS,CAAC,QAAU1F,MAAM0R,QAAQnT,EAAIyH,eAAezH,EAAI6U,GAAG7U,EAAIyH,cAAc,OAAO,EAAGzH,EAAIyH,eAAgBhH,GAAG,CAAC,OAAS,SAASU,GAAQ,IAAI2T,EAAI9U,EAAIyH,cAAcsN,EAAK5T,EAAOyO,OAAOoF,IAAID,EAAKE,QAAuB,GAAGxT,MAAM0R,QAAQ2B,GAAK,CAAC,IAAaI,EAAIlV,EAAI6U,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAIlV,EAAIyH,cAAcqN,EAAI/Q,OAAO,CAA/E,QAA4FmR,GAAK,IAAIlV,EAAIyH,cAAcqN,EAAIK,MAAM,EAAED,GAAKnR,OAAO+Q,EAAIK,MAAMD,EAAI,IAAK,MAAMlV,EAAIyH,cAAcuN,CAAI,KAAKhV,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAM,kBAAkB,CAACL,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,yBAAyBG,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACA,EAAG,QAAQ,CAAC8E,WAAW,CAAC,CAACzH,KAAK,QAAQqK,QAAQ,UAAUvI,MAAOW,EAAIqH,gBAAiBQ,WAAW,oBAAoBlB,YAAY,WAAWtG,MAAM,CAAC,GAAK,kBAAkB,KAAO,YAAY8G,SAAS,CAAC,QAAU1F,MAAM0R,QAAQnT,EAAIqH,iBAAiBrH,EAAI6U,GAAG7U,EAAIqH,gBAAgB,OAAO,EAAGrH,EAAIqH,iBAAkB5G,GAAG,CAAC,OAAS,SAASU,GAAQ,IAAI2T,EAAI9U,EAAIqH,gBAAgB0N,EAAK5T,EAAOyO,OAAOoF,IAAID,EAAKE,QAAuB,GAAGxT,MAAM0R,QAAQ2B,GAAK,CAAC,IAAaI,EAAIlV,EAAI6U,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAIlV,EAAIqH,gBAAgByN,EAAI/Q,OAAO,CAAjF,QAA8FmR,GAAK,IAAIlV,EAAIqH,gBAAgByN,EAAIK,MAAM,EAAED,GAAKnR,OAAO+Q,EAAIK,MAAMD,EAAI,IAAK,MAAMlV,EAAIqH,gBAAgB2N,CAAI,KAAKhV,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAM,oBAAoB,CAACL,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,2BAA2BG,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACA,EAAG,QAAQ,CAAC8E,WAAW,CAAC,CAACzH,KAAK,QAAQqK,QAAQ,UAAUvI,MAAOW,EAAIsH,gBAAiBO,WAAW,oBAAoBlB,YAAY,WAAWtG,MAAM,CAAC,GAAK,kBAAkB,KAAO,YAAY8G,SAAS,CAAC,QAAU1F,MAAM0R,QAAQnT,EAAIsH,iBAAiBtH,EAAI6U,GAAG7U,EAAIsH,gBAAgB,OAAO,EAAGtH,EAAIsH,iBAAkB7G,GAAG,CAAC,OAAS,SAASU,GAAQ,IAAI2T,EAAI9U,EAAIsH,gBAAgByN,EAAK5T,EAAOyO,OAAOoF,IAAID,EAAKE,QAAuB,GAAGxT,MAAM0R,QAAQ2B,GAAK,CAAC,IAAaI,EAAIlV,EAAI6U,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAIlV,EAAIsH,gBAAgBwN,EAAI/Q,OAAO,CAAjF,QAA8FmR,GAAK,IAAIlV,EAAIsH,gBAAgBwN,EAAIK,MAAM,EAAED,GAAKnR,OAAO+Q,EAAIK,MAAMD,EAAI,IAAK,MAAMlV,EAAIsH,gBAAgB0N,CAAI,KAAKhV,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAM,oBAAoB,CAACL,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,2BAA2BG,EAAIa,GAAG,KAAKX,EAAG,MAAM,CAACA,EAAG,QAAQ,CAAC8E,WAAW,CAAC,CAACzH,KAAK,QAAQqK,QAAQ,UAAUvI,MAAOW,EAAIuJ,gBAAiB1B,WAAW,oBAAoBlB,YAAY,WAAWtG,MAAM,CAAC,GAAK,kBAAkB,SAAWL,EAAIqS,gBAAgB,KAAO,YAAYlL,SAAS,CAAC,QAAU1F,MAAM0R,QAAQnT,EAAIuJ,iBAAiBvJ,EAAI6U,GAAG7U,EAAIuJ,gBAAgB,OAAO,EAAGvJ,EAAIuJ,iBAAkB9I,GAAG,CAAC,OAAS,SAASU,GAAQ,IAAI2T,EAAI9U,EAAIuJ,gBAAgBwL,EAAK5T,EAAOyO,OAAOoF,IAAID,EAAKE,QAAuB,GAAGxT,MAAM0R,QAAQ2B,GAAK,CAAC,IAAaI,EAAIlV,EAAI6U,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAIlV,EAAIuJ,gBAAgBuL,EAAI/Q,OAAO,CAAjF,QAA8FmR,GAAK,IAAIlV,EAAIuJ,gBAAgBuL,EAAIK,MAAM,EAAED,GAAKnR,OAAO+Q,EAAIK,MAAMD,EAAI,IAAK,MAAMlV,EAAIuJ,gBAAgByL,CAAI,KAAKhV,EAAIa,GAAG,KAAKX,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAM,oBAAoB,CAACL,EAAIa,GAAGb,EAAIc,GAAGd,EAAIH,EAAE,WAAY,kCAAkC,EAAEmB,OAAM,MAAS,CAACd,EAAG,qBAAqB,CAACG,MAAM,CAAC,YAAY,kBAAkB,KAAOL,EAAIH,EAAE,WAAW,YAAY,eAAe,YAAYY,GAAG,CAAC,MAAQT,EAAI8T,gBAAgB,MAAQ,CAAC,SAAS3S,GAAQ,OAAIA,EAAOrD,KAAKsX,QAAQ,QAAQpV,EAAIqV,GAAGlU,EAAOmU,QAAQ,QAAQ,GAAGnU,EAAOf,IAAI,SAAgB,KAAYJ,EAAI8T,gBAAgB/L,MAAM,KAAMC,UAAU,EAAE,SAAS7G,GAAQ,OAAIA,EAAOrD,KAAKsX,QAAQ,QAAQpV,EAAIqV,GAAGlU,EAAOmU,QAAQ,QAAQ,GAAGnU,EAAOf,IAAI,CAAC,IAAI,aAAoB,KAAYJ,EAAI8T,gBAAgB/L,MAAM,KAAMC,UAAU,OAAO,GAAGhI,EAAIa,GAAG,KAAKX,EAAG,eAAe,CAACA,EAAG,WAAW,CAACG,MAAM,CAAC,MAAQL,EAAIqI,MAAM,cAAcrI,EAAI4B,WAAW,iBAAiB5B,EAAIgN,qBAAqB,mBAAmBhN,EAAI8B,oBAAoB,IAAI,EACnjO,GACsB,IwBUpB,EACA,KACA,WACA,MAI8B","sources":["webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=a4fba162&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=42c6b8a3&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=2521fff5&prod&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=style&index=0&id=c70f3f58&prod&lang=scss&scoped=true&","webpack://nextcloud/./apps/settings/src/views/Users.vue?962b","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?9f48","webpack://nextcloud/./apps/settings/src/components/UserList.vue?c96e","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?d48f","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6d7a","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?1bee","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?6fa2","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?81d2","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?829f","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?949e","webpack://nextcloud/./apps/settings/src/components/UserList.vue?02a4","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?8dbf","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, \".modal-wrapper[data-v-a4fba162]{margin:2vh 0;align-items:flex-start}.modal__content[data-v-a4fba162]{display:flex;padding:20px;flex-direction:column;align-items:center;text-align:center}.modal__item[data-v-a4fba162]{margin-bottom:16px;width:100%}.modal__item[data-v-a4fba162]:not(:focus):not(:active){border-color:var(--color-border-dark)}.modal__item[data-v-a4fba162] .multiselect{width:100%}.user-actions[data-v-a4fba162]{margin-top:20px}.modal__content[data-v-a4fba162] .multiselect__single{text-align:left;box-sizing:border-box}.modal__content[data-v-a4fba162] .multiselect__content-wrapper{box-sizing:border-box}.row[data-v-a4fba162] .multiselect__single{z-index:auto !important}input#newgroups[data-v-a4fba162]{position:absolute;opacity:0;width:0}#app-content tbody tr[data-v-a4fba162]:hover,#app-content tbody tr[data-v-a4fba162]:focus,#app-content tbody tr[data-v-a4fba162]:active{background-color:var(--color-main-background)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,YAAA,CACA,sBAAA,CAED,iCACC,YAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CAED,8BACC,kBAAA,CACA,UAAA,CAED,uDACC,qCAAA,CAED,2CACC,UAAA,CAED,+BACC,eAAA,CAED,sDACC,eAAA,CACA,qBAAA,CAED,+DACC,qBAAA,CAED,2CACC,uBAAA,CAID,iCACC,iBAAA,CACA,SAAA,CAMA,OAAA,CAIA,wIAGC,6CAAA\",\"sourcesContent\":[\"\\n.modal-wrapper {\\n\\tmargin: 2vh 0;\\n\\talign-items: flex-start;\\n}\\n.modal__content {\\n\\tdisplay: flex;\\n\\tpadding: 20px;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n\\ttext-align: center;\\n}\\n.modal__item {\\n\\tmargin-bottom: 16px;\\n\\twidth: 100%;\\n}\\n.modal__item:not(:focus):not(:active) {\\n\\tborder-color: var(--color-border-dark);\\n}\\n.modal__item::v-deep .multiselect {\\n\\twidth: 100%;\\n}\\n.user-actions {\\n\\tmargin-top: 20px;\\n}\\n.modal__content::v-deep .multiselect__single {\\n\\ttext-align: left;\\n\\tbox-sizing: border-box;\\n}\\n.modal__content::v-deep .multiselect__content-wrapper {\\n\\tbox-sizing: border-box;\\n}\\n.row::v-deep .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\\n/* fake input for groups validation */\\ninput#newgroups {\\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\\n#app-content tbody tr {\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-main-background);\\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, \".row--menu-opened[data-v-42c6b8a3]{z-index:1 !important}.row[data-v-42c6b8a3] .multiselect__single{z-index:auto !important}.displayName input[data-v-42c6b8a3],.password input[data-v-42c6b8a3],.mailAddress input[data-v-42c6b8a3]{width:100%;height:44px !important;border:2px solid var(--color-border-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRow.vue\"],\"names\":[],\"mappings\":\"AAEA,mCACC,oBAAA,CAED,2CACC,uBAAA,CAED,yGAGE,UAAA,CACA,sBAAA,CACD,yCAAA\",\"sourcesContent\":[\"\\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.displayName input,\\n.password input,\\n.mailAddress input {\\n width: 100%;\\n height: 44px!important;\\n\\tborder: 2px solid var(--color-border-dark);\\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}.row .name{padding-left:0px !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRowSimple.vue\"],\"names\":[],\"mappings\":\"AACC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA,CAED,WACC,2BAAA\",\"sourcesContent\":[\"\\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\\t.row .name {\\n\\t\\tpadding-left: 0px!important;\\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-c70f3f58] .app-navigation-entry__utils{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/Users.vue\"],\"names\":[],\"mappings\":\"AAEA,8EACC,YAAA\",\"sourcesContent\":[\"\\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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcContent',{attrs:{\"app-name\":\"settings\",\"navigation-class\":{ 'icon-loading': _vm.loadingAddGroup }}},[_c('NcAppNavigation',{scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('NcAppNavigationNewItem',{ref:\"addGroup\",attrs:{\"id\":\"addgroup\",\"edit-placeholder\":_vm.t('settings', 'Enter group name'),\"editable\":true,\"loading\":_vm.loadingAddGroup,\"title\":_vm.t('settings', 'Add group')},on:{\"click\":_vm.showAddGroupForm,\"new-item\":_vm.createGroup},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"id\":\"everyone\",\"exact\":true,\"title\":_vm.t('settings', 'Active users'),\"to\":{ name: 'users' },\"icon\":\"icon-contacts-dark\"}},[(_vm.userCount > 0)?_c('NcAppNavigationCounter',{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('NcAppNavigationItem',{attrs:{\"id\":\"admin\",\"exact\":true,\"title\":_vm.t('settings', 'Admins'),\"to\":{ name: 'group', params: { selectedGroup: 'admin' } },\"icon\":\"icon-user-admin\"}},[(_vm.adminGroupMenu.count)?_c('NcAppNavigationCounter',{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('NcAppNavigationItem',{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('NcAppNavigationCounter',{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('NcAppNavigationCaption',{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('NcAppNavigationSettings',[_c('div',[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'Default quota:')))]),_vm._v(\" \"),_c('NcMultiselect',{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('NcAppNavigationNew',{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('NcAppContent',[_c('UserList',{attrs:{\"users\":_vm.users,\"show-config\":_vm.showConfig,\"selected-group\":_vm.selectedGroupDecoded,\"external-actions\":_vm.externalActions}})],1)],1)\n}\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<NcAppNavigationItem :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<NcCounterBubble v-if=\"count\">\n\t\t\t\t{{ count }}\n\t\t\t</NcCounterBubble>\n\t\t</template>\n\t\t<template #actions>\n\t\t\t<NcActionInput 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</NcActionInput>\n\t\t\t<NcActionButton 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</NcActionButton>\n\t\t</template>\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\n\nexport default {\n\tname: 'GroupListItem',\n\tcomponents: {\n\t\tNcActionInput,\n\t\tNcActionButton,\n\t\tNcCounterBubble,\n\t\tNcAppNavigationItem,\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=ae8c5094&\"\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 render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigationItem',{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('NcCounterBubble',[_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('NcActionInput',{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('NcActionButton',{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}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('table',{staticClass:\"user-list-grid\",attrs:{\"id\":\"app-content\",\"role\":\"grid\",\"aria-label\":_vm.t('settings', 'User\\'s table')},on:{\"&scroll\":function($event){return _vm.onScroll.apply(null, arguments)}}},[(_vm.showConfig.showNewUserForm)?_c('NcModal',{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,\"maxlength\":469,\"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('NcMultiselect',{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('NcMultiselect',{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('NcMultiselect',{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('NcMultiselect',{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:\"modal__item managers\",class:{'icon-loading-small': _vm.loading.manager}},[_c('NcMultiselect',{ref:\"manager\",staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":true,\"user-select\":true,\"options\":_vm.possibleManagers,\"placeholder\":_vm.t('settings', 'Select user manager'),\"label\":\"displayname\",\"track-by\":\"id\"},on:{\"search-change\":_vm.searchUserManager},model:{value:(_vm.newUser.manager),callback:function ($$v) {_vm.$set(_vm.newUser, \"manager\", $$v)},expression:\"newUser.manager\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),_c('div',{staticClass:\"user-actions\"},[_c('NcButton',{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('tbody',[_c('tr',{staticClass:\"row\",class:{'sticky': _vm.scrolled && !_vm.showConfig.showNewUserForm},attrs:{\"id\":\"grid-header\"}},[_c('th',{staticClass:\"avatar\",attrs:{\"id\":\"headerAvatar\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(\" \"+_vm._s(_vm.t('settings', 'Avatar'))+\" \")])]),_vm._v(\" \"),_c('th',{staticClass:\"name\",attrs:{\"id\":\"headerName\"}},[_c('div',{staticClass:\"subtitle\"},[_c('strong',[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Display name'))+\"\\n\\t\\t\\t\\t\\t\")])]),_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Username'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('th',{staticClass:\"password\",attrs:{\"id\":\"headerPassword\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Password'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('th',{staticClass:\"mailAddress\",attrs:{\"id\":\"headerAddress\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Email'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('th',{staticClass:\"groups\",attrs:{\"id\":\"headerGroups\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Groups'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('th',{staticClass:\"subadmins\",attrs:{\"id\":\"headerSubAdmins\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Group admin for'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('th',{staticClass:\"quota\",attrs:{\"id\":\"headerQuota\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Quota'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('th',{staticClass:\"languages\",attrs:{\"id\":\"headerLanguages\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Language'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('th',{staticClass:\"headerUserBackend userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'User backend'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"subtitle storageLocation\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Storage location'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('th',{staticClass:\"headerLastLogin lastLogin\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Last login'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('th',{staticClass:\"manager\",attrs:{\"id\":\"headerManager\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Manager'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('th',{staticClass:\"userActions hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'User actions'))+\"\\n\\t\\t\\t\")])]),_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,\"users\":_vm.users,\"is-dark-theme\":_vm.isDarkTheme}})}),_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)],1)\n}\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 {bool} isDarkTheme Whether the avatar should be the dark version\n\t\t * @return {string}\n\t\t */\n\t\tgenerateAvatar(user, isDarkTheme) {\n\t\t\tif (isDarkTheme) {\n\t\t\t\treturn generateUrl(\n\t\t\t\t\t'/avatar/{user}/64/dark?v={version}',\n\t\t\t\t\t{\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn generateUrl(\n\t\t\t\t\t'/avatar/{user}/64?v={version}',\n\t\t\t\t\t{\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t\t\t}\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<tr class=\"row\"\n\t\t:class=\"{'disabled': loading.delete || loading.disable}\"\n\t\t:data-id=\"user.id\">\n\t\t<td 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, isDarkTheme)\">\n\t\t</td>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<td class=\"name\">\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div :title=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t<strong>\n\t\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t\t</strong>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{{ user.id }}\n\t\t</td>\n\t\t<td />\n\t\t<td class=\"mailAddress\">\n\t\t\t<div :title=\"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</td>\n\t\t<td class=\"groups\">\n\t\t\t{{ userGroupsLabels }}\n\t\t</td>\n\t\t<td v-if=\"subAdminsGroups.length > 0 && settings.isAdmin\" class=\"subAdminsGroups\">\n\t\t\t{{ userSubAdminsGroupsLabels }}\n\t\t</td>\n\t\t<td 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</td>\n\t\t<td v-if=\"showConfig.showLanguages\" class=\"languages\">\n\t\t\t{{ userLanguage.name }}\n\t\t</td>\n\t\t<td 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\" :title=\"user.storageLocation\" class=\"storageLocation subtitle\">\n\t\t\t\t{{ user.storageLocation }}\n\t\t\t</div>\n\t\t</td>\n\t\t<td v-if=\"showConfig.showLastLogin\" :title=\"userLastLoginTooltip\" class=\"lastLogin\">\n\t\t\t{{ userLastLogin }}\n\t\t</td>\n\t\t<td class=\"managers\">\n\t\t\t{{ user.manager }}\n\t\t</td>\n\t\t<td class=\"userActions\">\n\t\t\t<div v-if=\"canEdit && !loading.all\" class=\"toggleUserActions\">\n\t\t\t\t<NcActions>\n\t\t\t\t\t<NcActionButton icon=\"icon-rename\"\n\t\t\t\t\t\t:title=\"t('settings', 'Edit User')\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Edit User')\"\n\t\t\t\t\t\t@click=\"toggleEdit\" />\n\t\t\t\t</NcActions>\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-expanded=\"openedMenu\"\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 }\">\n\t\t\t\t\t\t<NcPopoverMenu :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</td>\n\t</tr>\n</template>\n\n<script>\nimport NcPopoverMenu from '@nextcloud/vue/dist/Components/NcPopoverMenu.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport ClickOutside from 'vue-click-outside'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport UserRowMixin from '../../mixins/UserRowMixin.js'\nexport default {\n\tname: 'UserRowSimple',\n\tcomponents: {\n\t\tNcPopoverMenu,\n\t\tNcActionButton,\n\t\tNcActions,\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\tisDarkTheme: {\n\t\t\ttype: Boolean,\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\t.row .name {\n\t\tpadding-left: 0px!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!./UserRowSimple.vue?vue&type=style&index=0&id=2521fff5&prod&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&id=2521fff5&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=2521fff5&\"\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&id=2521fff5&prod&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 render(){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"row\",class:{'disabled': _vm.loading.delete || _vm.loading.disable},attrs:{\"data-id\":_vm.user.id}},[_c('td',{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, _vm.isDarkTheme)}}):_vm._e()]),_vm._v(\" \"),_c('td',{staticClass:\"name\"},[_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{staticClass:\"cellText\",attrs:{\"title\":_vm.user.displayname.length > 20 ? _vm.user.displayname : ''}},[_c('strong',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\\t\")])])]),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\")]),_vm._v(\" \"),_c('td'),_vm._v(\" \"),_c('td',{staticClass:\"mailAddress\"},[_c('div',{staticClass:\"cellText\",attrs:{\"title\":_vm.user.email !== null && _vm.user.email.length > 20 ? _vm.user.email : ''}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.email)+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('td',{staticClass:\"groups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userGroupsLabels)+\"\\n\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin)?_c('td',{staticClass:\"subAdminsGroups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userSubAdminsGroupsLabels)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('td',{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('td',{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('td',{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',{staticClass:\"storageLocation subtitle\",attrs:{\"title\":_vm.user.storageLocation}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.storageLocation)+\"\\n\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('td',{staticClass:\"lastLogin\",attrs:{\"title\":_vm.userLastLoginTooltip}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLastLogin)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('td',{staticClass:\"managers\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.manager)+\"\\n\\t\")]),_vm._v(\" \"),_c('td',{staticClass:\"userActions\"},[(_vm.canEdit && !_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('NcActions',[_c('NcActionButton',{attrs:{\"icon\":\"icon-rename\",\"title\":_vm.t('settings', 'Edit User'),\"aria-label\":_vm.t('settings', 'Edit User')},on:{\"click\":_vm.toggleEdit}})],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-expanded\":_vm.openedMenu,\"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 }},[_c('NcPopoverMenu',{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\")])])])\n}\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, isDarkTheme)\"\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:is-dark-theme=\"isDarkTheme\"\n\t\t:class=\"{'row--menu-opened': openedMenu}\" />\n\t<tr 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<td :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, isDarkTheme)\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</td>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<td 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<label class=\"hidden-visually\" :for=\"'displayName'+user.id+rand\">{{ t('settings', 'Edit display name') }}</label>\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</td>\n\t\t<td v-else class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div :title=\"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</td>\n\t\t<td v-if=\"settings.canChangePassword && user.backendCapabilities.setPassword\">\n\t\t\t<form :class=\"{'icon-loading-small': loading.password}\"\n\t\t\t\tclass=\"password\"\n\t\t\t\t@submit.prevent=\"updatePassword\">\n\t\t\t\t<label class=\"hidden-visually\" :for=\"'password'+user.id+rand\">{{ t('settings', 'Add new password') }}</label>\n\t\t\t\t<input :id=\"'password'+user.id+rand\"\n\t\t\t\t\tref=\"password\"\n\t\t\t\t\t:disabled=\"loading.password || loading.all\"\n\t\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t\tmaxlength=\"469\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Add new password')\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\trequired\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\ttype=\"password\"\n\t\t\t\t\tvalue=\"\">\n\t\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t\t</form>\n\t\t</td>\n\t\t<td v-else />\n\t\t<td>\n\t\t\t<form :class=\"{'icon-loading-small': loading.mailAddress}\"\n\t\t\t\tclass=\"mailAddress\"\n\t\t\t\t@submit.prevent=\"updateEmail\">\n\t\t\t\t<label class=\"hidden-visually\" :for=\"'mailAddress'+user.id+rand\">{{ t('settings', 'Add new email address') }}</label>\n\t\t\t\t<input :id=\"'mailAddress'+user.id+rand\"\n\t\t\t\t\tref=\"mailAddress\"\n\t\t\t\t\t:disabled=\"loading.mailAddress||loading.all\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Add new email address')\"\n\t\t\t\t\t:value=\"user.email\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\ttype=\"email\">\n\t\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t\t</form>\n\t\t</td>\n\t\t<td :class=\"{'icon-loading-small': loading.groups}\" class=\"groups\">\n\t\t\t<label class=\"hidden-visually\" :for=\"'groups'+user.id+rand\">{{ t('settings', 'Add user to group') }}</label>\n\t\t\t<NcMultiselect :id=\"'groups'+user.id+rand\"\n\t\t\t\t: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</NcMultiselect>\n\t\t</td>\n\t\t<td 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<label class=\"hidden-visually\" :for=\"'subadmins'+user.id+rand\">{{ t('settings', 'Set user as admin for') }}</label>\n\t\t\t<NcMultiselect :id=\"'subadmins'+user.id+rand\"\n\t\t\t\t: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</NcMultiselect>\n\t\t</td>\n\t\t<td :title=\"usedSpace\"\n\t\t\t:class=\"{'icon-loading-small': loading.quota}\"\n\t\t\tclass=\"quota\">\n\t\t\t<label class=\"hidden-visually\" :for=\"'quota'+user.id+rand\">{{ t('settings', 'Select user quota') }}</label>\n\t\t\t<NcMultiselect :id=\"'quota'+user.id+rand\"\n\t\t\t\t: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</td>\n\t\t<td v-if=\"showConfig.showLanguages\"\n\t\t\t:class=\"{'icon-loading-small': loading.languages}\"\n\t\t\tclass=\"languages\">\n\t\t\t<label class=\"hidden-visually\" :for=\"'language'+user.id+rand\">{{ t('settings', 'Set the language') }}</label>\n\t\t\t<NcMultiselect :id=\"'language'+user.id+rand\"\n\t\t\t\t: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</td>\n\t\t<td :class=\"{'icon-loading-small': loading.manager}\" class=\"managers\">\n\t\t\t<NcMultiselect ref=\"manager\"\n\t\t\t\tv-model=\"currentManager\"\n\t\t\t\t:close-on-select=\"true\"\n\t\t\t\t:user-select=\"true\"\n\t\t\t\t:options=\"possibleManagers\"\n\t\t\t\t:placeholder=\"t('settings', 'Select manager')\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"displayname\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@search-change=\"searchUserManager\"\n\t\t\t\t@remove=\"updateUserManager\"\n\t\t\t\t@select=\"updateUserManager\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</NcMultiselect>\n\t\t</td>\n\n\t\t<!-- don't show this on edit mode -->\n\t\t<td v-if=\"showConfig.showStoragePath || showConfig.showUserBackend\"\n\t\t\tclass=\"storageLocation\" />\n\t\t<td v-if=\"showConfig.showLastLogin\" />\n\n\t\t<td class=\"userActions\">\n\t\t\t<div v-if=\"!loading.all\"\n\t\t\t\tclass=\"toggleUserActions\">\n\t\t\t\t<NcActions>\n\t\t\t\t\t<NcActionButton icon=\"icon-checkmark\"\n\t\t\t\t\t\t:title=\"t('settings', 'Done')\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Done')\"\n\t\t\t\t\t\t@click=\"editing = false\" />\n\t\t\t\t</NcActions>\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:aria-expanded=\"openedMenu\"\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=\"{ 'open': openedMenu }\" class=\"popovermenu\">\n\t\t\t\t\t\t<NcPopoverMenu :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</td>\n\t</tr>\n</template>\n\n<script>\nimport ClickOutside from 'vue-click-outside'\n\nimport {\n\tNcPopoverMenu,\n\tNcMultiselect,\n\tNcActions,\n\tNcActionButton,\n} from '@nextcloud/vue'\nimport UserRowSimple from './UserRowSimple.vue'\nimport UserRowMixin from '../../mixins/UserRowMixin.js'\n\nexport default {\n\tname: 'UserRow',\n\tcomponents: {\n\t\tUserRowSimple,\n\t\tNcPopoverMenu,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\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\tisDarkTheme: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\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\tpossibleManagers: [],\n\t\t\tcurrentManager: '',\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\tmanager: false,\n\t\t\t},\n\t\t}\n\t},\n\tcomputed: {\n\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\tasync beforeMount() {\n\t\tawait this.searchUserManager()\n\t\tif (this.user.manager) {\n\t\t\tawait this.initManager(this.user.manager)\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\tfilterManagers(managers) {\n\t\t\treturn managers.filter((manager) => manager.id !== this.user.id)\n\t\t},\n\t\tasync initManager(userId) {\n\t\t\tawait this.$store.dispatch('getUser', userId).then(response => {\n\t\t\t\tthis.currentManager = response?.data.ocs.data\n\t\t\t})\n\t\t},\n\t\tasync searchUserManager(query) {\n\t\t\tawait this.$store.dispatch('searchUsers', { offset: 0, limit: 10, search: query }).then(response => {\n\t\t\t\tconst users = response?.data ? this.filterManagers(Object.values(response?.data.ocs.data.users)) : []\n\t\t\t\tif (users.length > 0) {\n\t\t\t\t\tthis.possibleManagers = users\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tupdateUserManager(manager) {\n\t\t\tthis.loading.manager = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'manager',\n\t\t\t\tvalue: this.currentManager ? this.currentManager.id : '',\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.manager = false\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 address\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 address\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\t.displayName input,\n\t.password input,\n\t.mailAddress input {\n\t width: 100%;\n\t height: 44px!important;\n\t\tborder: 2px solid var(--color-border-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!./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=42c6b8a3&prod&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=42c6b8a3&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=42c6b8a3&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=42c6b8a3&prod&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 \"42c6b8a3\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;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, _vm.isDarkTheme),\"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,\"is-dark-theme\":_vm.isDarkTheme},on:{\"update:editing\":function($event){_vm.editing=$event},\"update:openedMenu\":function($event){_vm.openedMenu=$event},\"update:opened-menu\":function($event){_vm.openedMenu=$event}}}):_c('tr',{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('td',{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, _vm.isDarkTheme),\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),(_vm.user.backendCapabilities.setDisplayName)?_c('td',{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('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'displayName'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Edit display name')))]),_vm._v(\" \"),_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('td',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{staticClass:\"cellText\",attrs:{\"title\":_vm.user.displayname.length > 20 ? _vm.user.displayname : ''}},[_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('td',[_c('form',{staticClass:\"password\",class:{'icon-loading-small': _vm.loading.password},on:{\"submit\":function($event){$event.preventDefault();return _vm.updatePassword.apply(null, arguments)}}},[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'password'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Add new password')))]),_vm._v(\" \"),_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('td'),_vm._v(\" \"),_c('td',[_c('form',{staticClass:\"mailAddress\",class:{'icon-loading-small': _vm.loading.mailAddress},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateEmail.apply(null, arguments)}}},[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'mailAddress'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Add new email address')))]),_vm._v(\" \"),_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('td',{staticClass:\"groups\",class:{'icon-loading-small': _vm.loading.groups}},[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'groups'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Add user to group')))]),_vm._v(\" \"),_c('NcMultiselect',{staticClass:\"multiselect-vue\",attrs:{\"id\":'groups'+_vm.user.id+_vm.rand,\"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('td',{staticClass:\"subadmins\",class:{'icon-loading-small': _vm.loading.subadmins}},[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'subadmins'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Set user as admin for')))]),_vm._v(\" \"),_c('NcMultiselect',{staticClass:\"multiselect-vue\",attrs:{\"id\":'subadmins'+_vm.user.id+_vm.rand,\"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('td',{staticClass:\"quota\",class:{'icon-loading-small': _vm.loading.quota},attrs:{\"title\":_vm.usedSpace}},[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'quota'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Select user quota')))]),_vm._v(\" \"),_c('NcMultiselect',{staticClass:\"multiselect-vue\",attrs:{\"id\":'quota'+_vm.user.id+_vm.rand,\"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('td',{staticClass:\"languages\",class:{'icon-loading-small': _vm.loading.languages}},[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'language'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Set the language')))]),_vm._v(\" \"),_c('NcMultiselect',{staticClass:\"multiselect-vue\",attrs:{\"id\":'language'+_vm.user.id+_vm.rand,\"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(\" \"),_c('td',{staticClass:\"managers\",class:{'icon-loading-small': _vm.loading.manager}},[_c('NcMultiselect',{ref:\"manager\",staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":true,\"user-select\":true,\"options\":_vm.possibleManagers,\"placeholder\":_vm.t('settings', 'Select manager'),\"label\":\"displayname\",\"track-by\":\"id\"},on:{\"search-change\":_vm.searchUserManager,\"remove\":_vm.updateUserManager,\"select\":_vm.updateUserManager},model:{value:(_vm.currentManager),callback:function ($$v) {_vm.currentManager=$$v},expression:\"currentManager\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend)?_c('td',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('td'):_vm._e(),_vm._v(\" \"),_c('td',{staticClass:\"userActions\"},[(!_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('NcActions',[_c('NcActionButton',{attrs:{\"icon\":\"icon-checkmark\",\"title\":_vm.t('settings', 'Done'),\"aria-label\":_vm.t('settings', 'Done')},on:{\"click\":function($event){_vm.editing = false}}})],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\",attrs:{\"aria-expanded\":_vm.openedMenu,\"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 }},[_c('NcPopoverMenu',{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\")])])])\n}\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<table id=\"app-content\"\n\t\trole=\"grid\"\n\t\t:aria-label=\"t('settings', 'User\\'s table')\"\n\t\tclass=\"user-list-grid\"\n\t\t@scroll.passive=\"onScroll\">\n\t\t<NcModal 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:maxlength=\"469\"\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<NcMultiselect 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</NcMultiselect>\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<NcMultiselect 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</NcMultiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"quota modal__item\">\n\t\t\t\t\t<NcMultiselect 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<NcMultiselect 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=\"{'icon-loading-small': loading.manager}\" class=\"modal__item managers\">\n\t\t\t\t\t<NcMultiselect ref=\"manager\"\n\t\t\t\t\t\tv-model=\"newUser.manager\"\n\t\t\t\t\t\t:close-on-select=\"true\"\n\t\t\t\t\t\t:user-select=\"true\"\n\t\t\t\t\t\t:options=\"possibleManagers\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Select user manager')\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\t@search-change=\"searchUserManager\"\n\t\t\t\t\t\tlabel=\"displayname\"\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</NcMultiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"user-actions\">\n\t\t\t\t\t<NcButton 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</NcButton>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</NcModal>\n\t\t<tbody>\n\t\t\t<tr id=\"grid-header\"\n\t\t\t\t:class=\"{'sticky': scrolled && !showConfig.showNewUserForm}\"\n\t\t\t\tclass=\"row\">\n\t\t\t\t<th id=\"headerAvatar\" class=\"avatar\">\n\t\t\t\t\t<span class=\"hidden-visually\"> {{ t('settings', 'Avatar') }} </span>\n\t\t\t\t</th>\n\t\t\t\t<th id=\"headerName\" class=\"name\">\n\t\t\t\t\t<div class=\"subtitle\">\n\t\t\t\t\t\t<strong>\n\t\t\t\t\t\t\t{{ t('settings', 'Display name') }}\n\t\t\t\t\t\t</strong>\n\t\t\t\t\t</div>\n\t\t\t\t\t{{ t('settings', 'Username') }}\n\t\t\t\t</th>\n\t\t\t\t<th id=\"headerPassword\" class=\"password\">\n\t\t\t\t\t{{ t('settings', 'Password') }}\n\t\t\t\t</th>\n\t\t\t\t<th id=\"headerAddress\" class=\"mailAddress\">\n\t\t\t\t\t{{ t('settings', 'Email') }}\n\t\t\t\t</th>\n\t\t\t\t<th id=\"headerGroups\" class=\"groups\">\n\t\t\t\t\t{{ t('settings', 'Groups') }}\n\t\t\t\t</th>\n\t\t\t\t<th v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\t\tid=\"headerSubAdmins\"\n\t\t\t\t\tclass=\"subadmins\">\n\t\t\t\t\t{{ t('settings', 'Group admin for') }}\n\t\t\t\t</th>\n\t\t\t\t<th id=\"headerQuota\" class=\"quota\">\n\t\t\t\t\t{{ t('settings', 'Quota') }}\n\t\t\t\t</th>\n\t\t\t\t<th v-if=\"showConfig.showLanguages\"\n\t\t\t\t\tid=\"headerLanguages\"\n\t\t\t\t\tclass=\"languages\">\n\t\t\t\t\t{{ t('settings', 'Language') }}\n\t\t\t\t</th>\n\n\t\t\t\t<th v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\"\n\t\t\t\t\tclass=\"headerUserBackend userBackend\">\n\t\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t\t\t{{ t('settings', 'User backend') }}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-if=\"showConfig.showStoragePath\"\n\t\t\t\t\t\tclass=\"subtitle storageLocation\">\n\t\t\t\t\t\t{{ t('settings', 'Storage location') }}\n\t\t\t\t\t</div>\n\t\t\t\t</th>\n\t\t\t\t<th v-if=\"showConfig.showLastLogin\"\n\t\t\t\t\tclass=\"headerLastLogin lastLogin\">\n\t\t\t\t\t{{ t('settings', 'Last login') }}\n\t\t\t\t</th>\n\t\t\t\t<th id=\"headerManager\" class=\"manager\">\n\t\t\t\t\t{{ t('settings', 'Manager') }}\n\t\t\t\t</th>\n\t\t\t\t<th class=\"userActions hidden-visually\">\n\t\t\t\t\t{{ t('settings', 'User actions') }}\n\t\t\t\t</th>\n\t\t\t</tr>\n\n\t\t\t<user-row v-for=\"user in filteredUsers\"\n\t\t\t\t:key=\"user.id\"\n\t\t\t\t:external-actions=\"externalActions\"\n\t\t\t\t:groups=\"groups\"\n\t\t\t\t:languages=\"languages\"\n\t\t\t\t:quota-options=\"quotaOptions\"\n\t\t\t\t:settings=\"settings\"\n\t\t\t\t:show-config=\"showConfig\"\n\t\t\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t\t\t:user=\"user\"\n\t\t\t\t:users=\"users\"\n\t\t\t\t:is-dark-theme=\"isDarkTheme\" />\n\n\t\t\t<InfiniteLoading ref=\"infiniteLoading\" @infinite=\"infiniteHandler\">\n\t\t\t\t<div slot=\"spinner\">\n\t\t\t\t\t<div class=\"users-icon-loading icon-loading\" />\n\t\t\t\t</div>\n\t\t\t\t<div slot=\"no-more\">\n\t\t\t\t\t<div class=\"users-list-end\" />\n\t\t\t\t</div>\n\t\t\t\t<div slot=\"no-results\">\n\t\t\t\t\t<div id=\"emptycontent\">\n\t\t\t\t\t\t<div class=\"icon-contacts-dark\" />\n\t\t\t\t\t\t<h2>{{ t('settings', 'No users in here') }}</h2>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</InfiniteLoading>\n\t\t</tbody>\n\t</table>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport InfiniteLoading from 'vue-infinite-loading'\nimport Vue from 'vue'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect.js'\n\nimport userRow from './UserList/UserRow.vue'\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\tmanager: '',\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\tNcModal,\n\t\tuserRow,\n\t\tNcMultiselect,\n\t\tInfiniteLoading,\n\t\tNcButton,\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\tpossibleManagers: [],\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\tisDarkTheme() {\n\t\t\treturn window.getComputedStyle(this.$el)\n\t\t\t\t.getPropertyValue('--background-invert-if-dark') === 'invert(100%)'\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\tasync beforeMount() {\n\t\tawait this.searchUserManager()\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\tasync searchUserManager(query) {\n\t\t\tawait this.$store.dispatch('searchUsers', { offset: 0, limit: 10, search: query }).then(response => {\n\t\t\t\tconst users = response?.data ? Object.values(response?.data.ocs.data.users) : []\n\t\t\t\tif (users.length > 0) {\n\t\t\t\t\tthis.possibleManagers = users\n\t\t\t\t}\n\t\t\t})\n\t\t},\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\tmanager: this.newUser.manager.id,\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 lang=\"scss\" 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\n\t#app-content tbody tr {\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\tbackground-color: var(--color-main-background);\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!./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/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=a4fba162&prod&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!./UserList.vue?vue&type=style&index=0&id=a4fba162&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=a4fba162&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=a4fba162&prod&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 \"a4fba162\",\n null\n \n)\n\nexport default component.exports","<!--\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<NcContent app-name=\"settings\" :navigation-class=\"{ 'icon-loading': loadingAddGroup }\">\n\t\t<NcAppNavigation>\n\t\t\t<NcAppNavigationNew 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<NcAppNavigationNewItem 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\t@click=\"showAddGroupForm\"\n\t\t\t\t\t@new-item=\"createGroup\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Plus :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationNewItem>\n\t\t\t\t<NcAppNavigationItem 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<NcAppNavigationCounter v-if=\"userCount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ userCount }}\n\t\t\t\t\t</NcAppNavigationCounter>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t\t<NcAppNavigationItem 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<NcAppNavigationCounter v-if=\"adminGroupMenu.count\" slot=\"counter\">\n\t\t\t\t\t\t{{ adminGroupMenu.count }}\n\t\t\t\t\t</NcAppNavigationCounter>\n\t\t\t\t</NcAppNavigationItem>\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<NcAppNavigationItem 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<NcAppNavigationCounter v-if=\"disabledGroupMenu.usercount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ disabledGroupMenu.usercount }}\n\t\t\t\t\t</NcAppNavigationCounter>\n\t\t\t\t</NcAppNavigationItem>\n\n\t\t\t\t<NcAppNavigationCaption 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<NcAppNavigationSettings>\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<NcMultiselect :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</NcAppNavigationSettings>\n\t\t\t</template>\n\t\t</NcAppNavigation>\n\t\t<NcAppContent>\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</NcAppContent>\n\t</NcContent>\n</template>\n\n<script>\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationCaption from '@nextcloud/vue/dist/Components/NcAppNavigationCaption.js'\nimport NcAppNavigationCounter from '@nextcloud/vue/dist/Components/NcAppNavigationCounter.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcAppNavigationNew from '@nextcloud/vue/dist/Components/NcAppNavigationNew.js'\nimport NcAppNavigationNewItem from '@nextcloud/vue/dist/Components/NcAppNavigationNewItem.js'\nimport NcAppNavigationSettings from '@nextcloud/vue/dist/Components/NcAppNavigationSettings.js'\nimport axios from '@nextcloud/axios'\nimport NcContent from '@nextcloud/vue/dist/Components/NcContent.js'\nimport { generateUrl } from '@nextcloud/router'\nimport NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect.js'\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\n\nimport GroupListItem from '../components/GroupListItem.vue'\nimport UserList from '../components/UserList.vue'\nimport Plus from 'vue-material-design-icons/Plus.vue'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Users',\n\tcomponents: {\n\t\tNcAppContent,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationCaption,\n\t\tNcAppNavigationCounter,\n\t\tNcAppNavigationItem,\n\t\tNcAppNavigationNew,\n\t\tNcAppNavigationNewItem,\n\t\tNcAppNavigationSettings,\n\t\tNcContent,\n\t\tGroupListItem,\n\t\tNcMultiselect,\n\t\tPlus,\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.newItemActive = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.addGroup.$refs.newItemInput.focusInput()\n\t\t\t})\n\t\t},\n\n\t\thideAddGroupForm() {\n\t\t\tthis.$refs.addGroup.newItemActive = false\n\t\t\tthis.$refs.addGroup.newItemValue = ''\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=c70f3f58&prod&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=c70f3f58&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=c70f3f58&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=c70f3f58&prod&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 \"c70f3f58\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","name","components","NcActionInput","NcActionButton","NcCounterBubble","NcAppNavigationItem","props","type","String","required","title","count","Number","data","loadingRenameGroup","openGroupMenu","computed","settings","$store","getters","getServerData","methods","handleGroupMenuOpen","gid","trim","displayName","$refs","displayNameInput","$el","querySelector","value","dispatch","groupid","removeGroup","self","OC","dialogs","confirm","t","group","success","_vm","this","_c","_self","key","attrs","params","selectedGroup","encodeURIComponent","on","scopedSlots","_u","fn","_v","_s","_e","proxy","isAdmin","ref","$event","renameGroup","user","Object","default","groups","Array","subAdminsGroups","quotaOptions","showConfig","languages","externalActions","userGroups","filter","includes","userSubAdminsGroups","subadmin","availableGroups","map","groupClone","assign","$isDisabled","canAdd","canRemove","usedSpace","quota","used","size","Util","humanFileSize","usedQuota","Math","min","round","pow","isNaN","userQuota","humanQuota","find","label","minPasswordLength","getPasswordPolicyMinLength","userLanguage","userLang","concat","lang","code","language","userLastLoginTooltip","lastLogin","formatDate","userLastLogin","relativeModifiedDate","generateAvatar","isDarkTheme","generateUrl","version","oc_userconfig","avatar","NcPopoverMenu","NcActions","directives","ClickOutside","mixins","UserRowMixin","loading","userActions","openedMenu","Boolean","feedbackMessage","userGroupsLabels","join","userSubAdminsGroupsLabels","canEdit","getCurrentUser","uid","defaultQuota","computerFileSize","toggleMenu","$emit","hideMenu","toggleEdit","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","staticClass","class","delete","disable","wipe","displayname","length","email","domProps","showLanguages","showUserBackend","showStoragePath","backend","storageLocation","showLastLogin","manager","all","rawName","expression","preventDefault","apply","arguments","style","opacity","UserRowSimple","NcMultiselect","users","rand","parseInt","random","possibleManagers","currentManager","editing","password","mailAddress","subadmins","actions","icon","text","action","deleteUser","wipeUserDevices","enabled","enableDisableUser","sendWelcomeMail","searchUserManager","initManager","userid","confirmDestructive","YES_NO_BUTTONS","confirmClasses","cancel","result","then","filterManagers","managers","userId","response","ocs","query","offset","limit","search","values","updateUserManager","updateDisplayName","updatePassword","updateEmail","error","console","getGroups","$route","commit","undefined","validateQuota","validQuota","setUserQuota","setTimeout","keys","backendCapabilities","setDisplayName","canChangePassword","setPassword","removeUserGroup","addUserGroup","createGroup","slot","removeUserSubAdmin","addUserSubAdmin","setUserLanguage","model","callback","$$v","unlimitedQuota","newUser","NcModal","userRow","InfiniteLoading","NcButton","scrolled","searchQuery","selectedGroupDecoded","decodeURIComponent","filteredUsers","sort","a","b","localeCompare","canAddGroups","getSubadminGroups","quotaPreset","reduce","acc","cur","allowUnlimitedQuota","unshift","usersOffset","getUsersOffset","usersLimit","getUsersLimit","usersCount","commonLanguages","otherLanguages","window","getComputedStyle","getPropertyValue","watch","val","old","redirectIfDisabled","infiniteLoading","stateChanger","reset","setNewUserDefaultGroup","loaded","mounted","Notification","showTemporary","resetForm","subscribe","resetSearch","beforeDestroy","unsubscribe","onScroll","event","target","scrollTo","infiniteHandler","$state","complete","_ref","defaultLanguage","Vue","createUser","newusername","focus","closeModal","catch","meta","statuscode","newuserpassword","currentGroup","allGroups","findIndex","usercount","$router","showNewUserForm","newUserGenerateUserID","composing","$set","newUserRequireEmail","_l","VueLocalStorage","NcAppContent","NcAppNavigation","NcAppNavigationCaption","NcAppNavigationCounter","NcAppNavigationNew","NcAppNavigationNewItem","NcAppNavigationSettings","NcContent","GroupListItem","Plus","UserList","selectedQuota","loadingAddGroup","loadingSendMail","getUsers","get","getLocalstorage","set","status","setLocalStorage","userCount","getUserCount","newUserSendEmail","axios","e","message","groupList","isArray","formatGroupMenu","adminGroupMenu","disabledGroupMenu","beforeMount","orderBy","sortGroups","created","OCA","Settings","registerAction","showNewUserMenu","localConfig","$localStorage","setDefaultQuota","app","hideAddGroupForm","showAddGroupForm","addGroup","newItemActive","$nextTick","newItemInput","focusInput","newItemValue","item","disabled","_i","$$a","$$el","$$c","checked","$$i","slice","indexOf","_k","keyCode"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"settings-users-8351.js?v=f5ee6c080845314c02b2","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=228801f0&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=07523524&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=149523f4&prod&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=style&index=0&id=c70f3f58&prod&lang=scss&scoped=true&","webpack://nextcloud/./apps/settings/src/views/Users.vue?962b","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?9f48","webpack://nextcloud/./apps/settings/src/components/UserList.vue?c96e","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?7586","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6d7a","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?1bee","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?4035","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?81d2","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?829f","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?45a3","webpack://nextcloud/./apps/settings/src/components/UserList.vue?02a4","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?8dbf","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, \".modal-wrapper[data-v-228801f0]{margin:2vh 0;align-items:flex-start}.modal__content[data-v-228801f0]{display:flex;padding:20px;flex-direction:column;align-items:center;text-align:center}.modal__item[data-v-228801f0]{margin-bottom:16px;width:100%}.modal__item[data-v-228801f0]:not(:focus):not(:active){border-color:var(--color-border-dark)}.modal__item[data-v-228801f0] .multiselect{width:100%}.user-actions[data-v-228801f0]{margin-top:20px}.modal__content[data-v-228801f0] .multiselect__single{text-align:left;box-sizing:border-box}.modal__content[data-v-228801f0] .multiselect__content-wrapper{box-sizing:border-box}.row[data-v-228801f0] .multiselect__single{z-index:auto !important}input#newgroups[data-v-228801f0]{position:absolute;opacity:0;width:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,YAAA,CACA,sBAAA,CAED,iCACC,YAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CAED,8BACC,kBAAA,CACA,UAAA,CAED,uDACC,qCAAA,CAED,2CACC,UAAA,CAED,+BACC,eAAA,CAED,sDACC,eAAA,CACA,qBAAA,CAED,+DACC,qBAAA,CAED,2CACC,uBAAA,CAID,iCACC,iBAAA,CACA,SAAA,CAMA,OAAA\",\"sourcesContent\":[\"\\n.modal-wrapper {\\n\\tmargin: 2vh 0;\\n\\talign-items: flex-start;\\n}\\n.modal__content {\\n\\tdisplay: flex;\\n\\tpadding: 20px;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n\\ttext-align: center;\\n}\\n.modal__item {\\n\\tmargin-bottom: 16px;\\n\\twidth: 100%;\\n}\\n.modal__item:not(:focus):not(:active) {\\n\\tborder-color: var(--color-border-dark);\\n}\\n.modal__item::v-deep .multiselect {\\n\\twidth: 100%;\\n}\\n.user-actions {\\n\\tmargin-top: 20px;\\n}\\n.modal__content::v-deep .multiselect__single {\\n\\ttext-align: left;\\n\\tbox-sizing: border-box;\\n}\\n.modal__content::v-deep .multiselect__content-wrapper {\\n\\tbox-sizing: border-box;\\n}\\n.row::v-deep .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\\n/* fake input for groups validation */\\ninput#newgroups {\\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\"],\"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, \".row--menu-opened[data-v-07523524]{z-index:1 !important}.row[data-v-07523524] .multiselect__single{z-index:auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRow.vue\"],\"names\":[],\"mappings\":\"AAEA,mCACC,oBAAA,CAED,2CACC,uBAAA\",\"sourcesContent\":[\"\\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\":\"AACC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA\",\"sourcesContent\":[\"\\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-c70f3f58] .app-navigation-entry__utils{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/Users.vue\"],\"names\":[],\"mappings\":\"AAEA,8EACC,YAAA\",\"sourcesContent\":[\"\\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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcContent',{attrs:{\"app-name\":\"settings\",\"navigation-class\":{ 'icon-loading': _vm.loadingAddGroup }}},[_c('NcAppNavigation',{scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('NcAppNavigationNewItem',{ref:\"addGroup\",attrs:{\"id\":\"addgroup\",\"edit-placeholder\":_vm.t('settings', 'Enter group name'),\"editable\":true,\"loading\":_vm.loadingAddGroup,\"title\":_vm.t('settings', 'Add group')},on:{\"click\":_vm.showAddGroupForm,\"new-item\":_vm.createGroup},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"id\":\"everyone\",\"exact\":true,\"title\":_vm.t('settings', 'Active users'),\"to\":{ name: 'users' },\"icon\":\"icon-contacts-dark\"}},[(_vm.userCount > 0)?_c('NcAppNavigationCounter',{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('NcAppNavigationItem',{attrs:{\"id\":\"admin\",\"exact\":true,\"title\":_vm.t('settings', 'Admins'),\"to\":{ name: 'group', params: { selectedGroup: 'admin' } },\"icon\":\"icon-user-admin\"}},[(_vm.adminGroupMenu.count)?_c('NcAppNavigationCounter',{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('NcAppNavigationItem',{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('NcAppNavigationCounter',{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('NcAppNavigationCaption',{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('NcAppNavigationSettings',[_c('div',[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'Default quota:')))]),_vm._v(\" \"),_c('NcMultiselect',{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('NcAppNavigationNew',{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('NcAppContent',[_c('UserList',{attrs:{\"users\":_vm.users,\"show-config\":_vm.showConfig,\"selected-group\":_vm.selectedGroupDecoded,\"external-actions\":_vm.externalActions}})],1)],1)\n}\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<NcAppNavigationItem :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<NcCounterBubble v-if=\"count\">\n\t\t\t\t{{ count }}\n\t\t\t</NcCounterBubble>\n\t\t</template>\n\t\t<template #actions>\n\t\t\t<NcActionInput 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</NcActionInput>\n\t\t\t<NcActionButton 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</NcActionButton>\n\t\t</template>\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\n\nexport default {\n\tname: 'GroupListItem',\n\tcomponents: {\n\t\tNcActionInput,\n\t\tNcActionButton,\n\t\tNcCounterBubble,\n\t\tNcAppNavigationItem,\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=ae8c5094&\"\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 render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigationItem',{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('NcCounterBubble',[_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('NcActionInput',{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('NcActionButton',{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}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"user-list-grid\",attrs:{\"id\":\"app-content\",\"role\":\"grid\",\"aria-label\":_vm.t('settings', 'User\\'s table')},on:{\"&scroll\":function($event){return _vm.onScroll.apply(null, arguments)}}},[(_vm.showConfig.showNewUserForm)?_c('NcModal',{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,\"maxlength\":469,\"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('NcMultiselect',{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('NcMultiselect',{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('NcMultiselect',{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('NcMultiselect',{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:\"modal__item managers\",class:{'icon-loading-small': _vm.loading.manager}},[_c('NcMultiselect',{ref:\"manager\",staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":true,\"user-select\":true,\"options\":_vm.possibleManagers,\"placeholder\":_vm.t('settings', 'Select user manager'),\"label\":\"displayname\",\"track-by\":\"id\"},on:{\"search-change\":_vm.searchUserManager},model:{value:(_vm.newUser.manager),callback:function ($$v) {_vm.$set(_vm.newUser, \"manager\", $$v)},expression:\"newUser.manager\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),_c('div',{staticClass:\"user-actions\"},[_c('NcButton',{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\"}},[_c('div',{staticClass:\"subtitle\"},[_c('strong',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Display name'))+\"\\n\\t\\t\\t\\t\")])]),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Username'))+\"\\n\\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:\"manager\",attrs:{\"id\":\"headerManager\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Manager'))+\"\\n\\t\\t\")]),_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,\"users\":_vm.users,\"is-dark-theme\":_vm.isDarkTheme}})}),_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)\n}\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 {bool} isDarkTheme Whether the avatar should be the dark version\n\t\t * @return {string}\n\t\t */\n\t\tgenerateAvatar(user, isDarkTheme) {\n\t\t\tif (isDarkTheme) {\n\t\t\t\treturn generateUrl(\n\t\t\t\t\t'/avatar/{user}/64/dark?v={version}',\n\t\t\t\t\t{\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn generateUrl(\n\t\t\t\t\t'/avatar/{user}/64?v={version}',\n\t\t\t\t\t{\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t\t\t}\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, isDarkTheme)\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div class=\"name\">\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div :title=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t<strong>\n\t\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t\t</strong>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{{ user.id }}\n\t\t</div>\n\t\t<div />\n\t\t<div class=\"mailAddress\">\n\t\t\t<div :title=\"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\" :title=\"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\" :title=\"userLastLoginTooltip\" class=\"lastLogin\">\n\t\t\t{{ userLastLogin }}\n\t\t</div>\n\t\t<div class=\"managers\">\n\t\t\t{{ user.manager }}\n\t\t</div>\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"canEdit && !loading.all\" class=\"toggleUserActions\">\n\t\t\t\t<NcActions>\n\t\t\t\t\t<NcActionButton icon=\"icon-rename\"\n\t\t\t\t\t\t:title=\"t('settings', 'Edit User')\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Edit User')\"\n\t\t\t\t\t\t@click=\"toggleEdit\" />\n\t\t\t\t</NcActions>\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-expanded=\"openedMenu\"\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 }\">\n\t\t\t\t\t\t<NcPopoverMenu :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 NcPopoverMenu from '@nextcloud/vue/dist/Components/NcPopoverMenu.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport ClickOutside from 'vue-click-outside'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport UserRowMixin from '../../mixins/UserRowMixin.js'\nexport default {\n\tname: 'UserRowSimple',\n\tcomponents: {\n\t\tNcPopoverMenu,\n\t\tNcActionButton,\n\t\tNcActions,\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\tisDarkTheme: {\n\t\t\ttype: Boolean,\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&id=149523f4&prod&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&id=149523f4&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=149523f4&\"\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&id=149523f4&prod&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 render(){var _vm=this,_c=_vm._self._c;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, _vm.isDarkTheme)}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{staticClass:\"cellText\",attrs:{\"title\":_vm.user.displayname.length > 20 ? _vm.user.displayname : ''}},[_c('strong',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\\t\")])])]),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\")]),_vm._v(\" \"),_c('div'),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\"},[_c('div',{staticClass:\"cellText\",attrs:{\"title\":_vm.user.email !== null && _vm.user.email.length > 20 ? _vm.user.email : ''}},[_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',{staticClass:\"storageLocation subtitle\",attrs:{\"title\":_vm.user.storageLocation}},[_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',{staticClass:\"lastLogin\",attrs:{\"title\":_vm.userLastLoginTooltip}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLastLogin)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"managers\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.manager)+\"\\n\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(_vm.canEdit && !_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('NcActions',[_c('NcActionButton',{attrs:{\"icon\":\"icon-rename\",\"title\":_vm.t('settings', 'Edit User'),\"aria-label\":_vm.t('settings', 'Edit User')},on:{\"click\":_vm.toggleEdit}})],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-expanded\":_vm.openedMenu,\"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 }},[_c('NcPopoverMenu',{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\")])])])\n}\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, isDarkTheme)\"\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:is-dark-theme=\"isDarkTheme\"\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, isDarkTheme)\"\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<label class=\"hidden-visually\" :for=\"'displayName'+user.id+rand\">{{ t('settings', 'Edit display name') }}</label>\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 :title=\"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<label class=\"hidden-visually\" :for=\"'password'+user.id+rand\">{{ t('settings', 'Add new password') }}</label>\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<label class=\"hidden-visually\" :for=\"'mailAddress'+user.id+rand\">{{ t('settings', 'Add new email address') }}</label>\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<label class=\"hidden-visually\" :for=\"'groups'+user.id+rand\">{{ t('settings', 'Add user to group') }}</label>\n\t\t\t<NcMultiselect :id=\"'groups'+user.id+rand\"\n\t\t\t\t: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</NcMultiselect>\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<label class=\"hidden-visually\" :for=\"'subadmins'+user.id+rand\">{{ t('settings', 'Set user as admin for') }}</label>\n\t\t\t<NcMultiselect :id=\"'subadmins'+user.id+rand\"\n\t\t\t\t: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</NcMultiselect>\n\t\t</div>\n\t\t<div :title=\"usedSpace\"\n\t\t\t:class=\"{'icon-loading-small': loading.quota}\"\n\t\t\tclass=\"quota\">\n\t\t\t<label class=\"hidden-visually\" :for=\"'quota'+user.id+rand\">{{ t('settings', 'Select user quota') }}</label>\n\t\t\t<NcMultiselect :id=\"'quota'+user.id+rand\"\n\t\t\t\t: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<label class=\"hidden-visually\" :for=\"'language'+user.id+rand\">{{ t('settings', 'Set the language') }}</label>\n\t\t\t<NcMultiselect :id=\"'language'+user.id+rand\"\n\t\t\t\t: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\t\t<div :class=\"{'icon-loading-small': loading.manager}\" class=\"managers\">\n\t\t\t<NcMultiselect ref=\"manager\"\n\t\t\t\tv-model=\"currentManager\"\n\t\t\t\t:close-on-select=\"true\"\n\t\t\t\t:user-select=\"true\"\n\t\t\t\t:options=\"possibleManagers\"\n\t\t\t\t:placeholder=\"t('settings', 'Select manager')\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"displayname\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@search-change=\"searchUserManager\"\n\t\t\t\t@remove=\"updateUserManager\"\n\t\t\t\t@select=\"updateUserManager\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</NcMultiselect>\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<NcActions>\n\t\t\t\t\t<NcActionButton icon=\"icon-checkmark\"\n\t\t\t\t\t\t:title=\"t('settings', 'Done')\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Done')\"\n\t\t\t\t\t\t@click=\"editing = false\" />\n\t\t\t\t</NcActions>\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:aria-expanded=\"openedMenu\"\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=\"{ 'open': openedMenu }\" class=\"popovermenu\">\n\t\t\t\t\t\t<NcPopoverMenu :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'\n\nimport {\n\tNcPopoverMenu,\n\tNcMultiselect,\n\tNcActions,\n\tNcActionButton,\n} from '@nextcloud/vue'\nimport UserRowSimple from './UserRowSimple.vue'\nimport UserRowMixin from '../../mixins/UserRowMixin.js'\n\nexport default {\n\tname: 'UserRow',\n\tcomponents: {\n\t\tUserRowSimple,\n\t\tNcPopoverMenu,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\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\tisDarkTheme: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\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\tpossibleManagers: [],\n\t\t\tcurrentManager: '',\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\tmanager: false,\n\t\t\t},\n\t\t}\n\t},\n\tcomputed: {\n\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\tasync beforeMount() {\n\t\tawait this.searchUserManager()\n\t\tif (this.user.manager) {\n\t\t\tawait this.initManager(this.user.manager)\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\tfilterManagers(managers) {\n\t\t\treturn managers.filter((manager) => manager.id !== this.user.id)\n\t\t},\n\t\tasync initManager(userId) {\n\t\t\tawait this.$store.dispatch('getUser', userId).then(response => {\n\t\t\t\tthis.currentManager = response?.data.ocs.data\n\t\t\t})\n\t\t},\n\t\tasync searchUserManager(query) {\n\t\t\tawait this.$store.dispatch('searchUsers', { offset: 0, limit: 10, search: query }).then(response => {\n\t\t\t\tconst users = response?.data ? this.filterManagers(Object.values(response?.data.ocs.data.users)) : []\n\t\t\t\tif (users.length > 0) {\n\t\t\t\t\tthis.possibleManagers = users\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tupdateUserManager(manager) {\n\t\t\tthis.loading.manager = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'manager',\n\t\t\t\tvalue: this.currentManager ? this.currentManager.id : '',\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.manager = false\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 address\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 address\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=07523524&prod&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=07523524&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=07523524&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=07523524&prod&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 \"07523524\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;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, _vm.isDarkTheme),\"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,\"is-dark-theme\":_vm.isDarkTheme},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, _vm.isDarkTheme),\"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('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'displayName'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Edit display name')))]),_vm._v(\" \"),_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',{staticClass:\"cellText\",attrs:{\"title\":_vm.user.displayname.length > 20 ? _vm.user.displayname : ''}},[_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('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'password'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Add new password')))]),_vm._v(\" \"),_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('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'mailAddress'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Add new email address')))]),_vm._v(\" \"),_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('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'groups'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Add user to group')))]),_vm._v(\" \"),_c('NcMultiselect',{staticClass:\"multiselect-vue\",attrs:{\"id\":'groups'+_vm.user.id+_vm.rand,\"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('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'subadmins'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Set user as admin for')))]),_vm._v(\" \"),_c('NcMultiselect',{staticClass:\"multiselect-vue\",attrs:{\"id\":'subadmins'+_vm.user.id+_vm.rand,\"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',{staticClass:\"quota\",class:{'icon-loading-small': _vm.loading.quota},attrs:{\"title\":_vm.usedSpace}},[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'quota'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Select user quota')))]),_vm._v(\" \"),_c('NcMultiselect',{staticClass:\"multiselect-vue\",attrs:{\"id\":'quota'+_vm.user.id+_vm.rand,\"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('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'language'+_vm.user.id+_vm.rand}},[_vm._v(_vm._s(_vm.t('settings', 'Set the language')))]),_vm._v(\" \"),_c('NcMultiselect',{staticClass:\"multiselect-vue\",attrs:{\"id\":'language'+_vm.user.id+_vm.rand,\"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(\" \"),_c('div',{staticClass:\"managers\",class:{'icon-loading-small': _vm.loading.manager}},[_c('NcMultiselect',{ref:\"manager\",staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":true,\"user-select\":true,\"options\":_vm.possibleManagers,\"placeholder\":_vm.t('settings', 'Select manager'),\"label\":\"displayname\",\"track-by\":\"id\"},on:{\"search-change\":_vm.searchUserManager,\"remove\":_vm.updateUserManager,\"select\":_vm.updateUserManager},model:{value:(_vm.currentManager),callback:function ($$v) {_vm.currentManager=$$v},expression:\"currentManager\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_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('NcActions',[_c('NcActionButton',{attrs:{\"icon\":\"icon-checkmark\",\"title\":_vm.t('settings', 'Done'),\"aria-label\":_vm.t('settings', 'Done')},on:{\"click\":function($event){_vm.editing = false}}})],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\",attrs:{\"aria-expanded\":_vm.openedMenu,\"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 }},[_c('NcPopoverMenu',{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\")])])])\n}\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\"\n\t\trole=\"grid\"\n\t\t:aria-label=\"t('settings', 'User\\'s table')\"\n\t\tclass=\"user-list-grid\"\n\t\t@scroll.passive=\"onScroll\">\n\t\t<NcModal 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:maxlength=\"469\"\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<NcMultiselect 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</NcMultiselect>\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<NcMultiselect 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</NcMultiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"quota modal__item\">\n\t\t\t\t\t<NcMultiselect 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<NcMultiselect 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=\"{'icon-loading-small': loading.manager}\" class=\"modal__item managers\">\n\t\t\t\t\t<NcMultiselect ref=\"manager\"\n\t\t\t\t\t\tv-model=\"newUser.manager\"\n\t\t\t\t\t\t:close-on-select=\"true\"\n\t\t\t\t\t\t:user-select=\"true\"\n\t\t\t\t\t\t:options=\"possibleManagers\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Select user manager')\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"displayname\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@search-change=\"searchUserManager\">\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</NcMultiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"user-actions\">\n\t\t\t\t\t<NcButton 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</NcButton>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</NcModal>\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<div class=\"subtitle\">\n\t\t\t\t\t<strong>\n\t\t\t\t\t\t{{ t('settings', 'Display name') }}\n\t\t\t\t\t</strong>\n\t\t\t\t</div>\n\t\t\t\t{{ t('settings', 'Username') }}\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\t\t\t<div id=\"headerManager\" class=\"manager\">\n\t\t\t\t{{ t('settings', 'Manager') }}\n\t\t\t</div>\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\t:users=\"users\"\n\t\t\t:is-dark-theme=\"isDarkTheme\" />\n\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 NcModal from '@nextcloud/vue/dist/Components/NcModal.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect.js'\n\nimport userRow from './UserList/UserRow.vue'\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\tmanager: '',\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\tNcModal,\n\t\tuserRow,\n\t\tNcMultiselect,\n\t\tInfiniteLoading,\n\t\tNcButton,\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\tpossibleManagers: [],\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\tisDarkTheme() {\n\t\t\treturn window.getComputedStyle(this.$el)\n\t\t\t\t.getPropertyValue('--background-invert-if-dark') === 'invert(100%)'\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\tasync beforeMount() {\n\t\tawait this.searchUserManager()\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\tasync searchUserManager(query) {\n\t\t\tawait this.$store.dispatch('searchUsers', { offset: 0, limit: 10, search: query }).then(response => {\n\t\t\t\tconst users = response?.data ? Object.values(response?.data.ocs.data.users) : []\n\t\t\t\tif (users.length > 0) {\n\t\t\t\t\tthis.possibleManagers = users\n\t\t\t\t}\n\t\t\t})\n\t\t},\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\tmanager: this.newUser.manager.id,\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 lang=\"scss\" 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/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=228801f0&prod&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!./UserList.vue?vue&type=style&index=0&id=228801f0&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=228801f0&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=228801f0&prod&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 \"228801f0\",\n null\n \n)\n\nexport default component.exports","<!--\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<NcContent app-name=\"settings\" :navigation-class=\"{ 'icon-loading': loadingAddGroup }\">\n\t\t<NcAppNavigation>\n\t\t\t<NcAppNavigationNew 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<NcAppNavigationNewItem 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\t@click=\"showAddGroupForm\"\n\t\t\t\t\t@new-item=\"createGroup\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Plus :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationNewItem>\n\t\t\t\t<NcAppNavigationItem 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<NcAppNavigationCounter v-if=\"userCount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ userCount }}\n\t\t\t\t\t</NcAppNavigationCounter>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t\t<NcAppNavigationItem 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<NcAppNavigationCounter v-if=\"adminGroupMenu.count\" slot=\"counter\">\n\t\t\t\t\t\t{{ adminGroupMenu.count }}\n\t\t\t\t\t</NcAppNavigationCounter>\n\t\t\t\t</NcAppNavigationItem>\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<NcAppNavigationItem 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<NcAppNavigationCounter v-if=\"disabledGroupMenu.usercount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ disabledGroupMenu.usercount }}\n\t\t\t\t\t</NcAppNavigationCounter>\n\t\t\t\t</NcAppNavigationItem>\n\n\t\t\t\t<NcAppNavigationCaption 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<NcAppNavigationSettings>\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<NcMultiselect :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</NcAppNavigationSettings>\n\t\t\t</template>\n\t\t</NcAppNavigation>\n\t\t<NcAppContent>\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</NcAppContent>\n\t</NcContent>\n</template>\n\n<script>\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationCaption from '@nextcloud/vue/dist/Components/NcAppNavigationCaption.js'\nimport NcAppNavigationCounter from '@nextcloud/vue/dist/Components/NcAppNavigationCounter.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcAppNavigationNew from '@nextcloud/vue/dist/Components/NcAppNavigationNew.js'\nimport NcAppNavigationNewItem from '@nextcloud/vue/dist/Components/NcAppNavigationNewItem.js'\nimport NcAppNavigationSettings from '@nextcloud/vue/dist/Components/NcAppNavigationSettings.js'\nimport axios from '@nextcloud/axios'\nimport NcContent from '@nextcloud/vue/dist/Components/NcContent.js'\nimport { generateUrl } from '@nextcloud/router'\nimport NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect.js'\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\n\nimport GroupListItem from '../components/GroupListItem.vue'\nimport UserList from '../components/UserList.vue'\nimport Plus from 'vue-material-design-icons/Plus.vue'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Users',\n\tcomponents: {\n\t\tNcAppContent,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationCaption,\n\t\tNcAppNavigationCounter,\n\t\tNcAppNavigationItem,\n\t\tNcAppNavigationNew,\n\t\tNcAppNavigationNewItem,\n\t\tNcAppNavigationSettings,\n\t\tNcContent,\n\t\tGroupListItem,\n\t\tNcMultiselect,\n\t\tPlus,\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.newItemActive = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.addGroup.$refs.newItemInput.focusInput()\n\t\t\t})\n\t\t},\n\n\t\thideAddGroupForm() {\n\t\t\tthis.$refs.addGroup.newItemActive = false\n\t\t\tthis.$refs.addGroup.newItemValue = ''\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=c70f3f58&prod&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=c70f3f58&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=c70f3f58&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=c70f3f58&prod&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 \"c70f3f58\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","name","components","NcActionInput","NcActionButton","NcCounterBubble","NcAppNavigationItem","props","type","String","required","title","count","Number","data","loadingRenameGroup","openGroupMenu","computed","settings","$store","getters","getServerData","methods","handleGroupMenuOpen","gid","trim","displayName","$refs","displayNameInput","$el","querySelector","value","dispatch","groupid","removeGroup","self","OC","dialogs","confirm","t","group","success","_vm","this","_c","_self","key","attrs","params","selectedGroup","encodeURIComponent","on","scopedSlots","_u","fn","_v","_s","_e","proxy","isAdmin","ref","$event","renameGroup","user","Object","default","groups","Array","subAdminsGroups","quotaOptions","showConfig","languages","externalActions","userGroups","filter","includes","userSubAdminsGroups","subadmin","availableGroups","map","groupClone","assign","$isDisabled","canAdd","canRemove","usedSpace","quota","used","size","Util","humanFileSize","usedQuota","Math","min","round","pow","isNaN","userQuota","humanQuota","find","label","minPasswordLength","getPasswordPolicyMinLength","userLanguage","userLang","concat","lang","code","language","userLastLoginTooltip","lastLogin","formatDate","userLastLogin","relativeModifiedDate","generateAvatar","isDarkTheme","generateUrl","version","oc_userconfig","avatar","NcPopoverMenu","NcActions","directives","ClickOutside","mixins","UserRowMixin","loading","userActions","openedMenu","Boolean","feedbackMessage","userGroupsLabels","join","userSubAdminsGroupsLabels","canEdit","getCurrentUser","uid","defaultQuota","computerFileSize","toggleMenu","$emit","hideMenu","toggleEdit","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","staticClass","class","delete","disable","wipe","displayname","length","email","domProps","showLanguages","showUserBackend","showStoragePath","backend","storageLocation","showLastLogin","manager","all","rawName","expression","preventDefault","apply","arguments","style","opacity","UserRowSimple","NcMultiselect","users","rand","parseInt","random","possibleManagers","currentManager","editing","password","mailAddress","subadmins","actions","icon","text","action","deleteUser","wipeUserDevices","enabled","enableDisableUser","sendWelcomeMail","searchUserManager","initManager","userid","confirmDestructive","YES_NO_BUTTONS","confirmClasses","cancel","result","then","filterManagers","managers","userId","response","ocs","query","offset","limit","search","values","updateUserManager","updateDisplayName","updatePassword","updateEmail","error","console","getGroups","$route","commit","undefined","validateQuota","validQuota","setUserQuota","setTimeout","keys","backendCapabilities","setDisplayName","canChangePassword","setPassword","removeUserGroup","addUserGroup","createGroup","slot","removeUserSubAdmin","addUserSubAdmin","setUserLanguage","model","callback","$$v","unlimitedQuota","newUser","NcModal","userRow","InfiniteLoading","NcButton","scrolled","searchQuery","selectedGroupDecoded","decodeURIComponent","filteredUsers","sort","a","b","localeCompare","canAddGroups","getSubadminGroups","quotaPreset","reduce","acc","cur","allowUnlimitedQuota","unshift","usersOffset","getUsersOffset","usersLimit","getUsersLimit","usersCount","commonLanguages","otherLanguages","window","getComputedStyle","getPropertyValue","watch","val","old","redirectIfDisabled","infiniteLoading","stateChanger","reset","setNewUserDefaultGroup","loaded","mounted","Notification","showTemporary","resetForm","subscribe","resetSearch","beforeDestroy","unsubscribe","onScroll","event","target","scrollTo","infiniteHandler","$state","complete","_ref","defaultLanguage","Vue","createUser","newusername","focus","closeModal","catch","meta","statuscode","newuserpassword","currentGroup","allGroups","findIndex","usercount","$router","showNewUserForm","newUserGenerateUserID","composing","$set","newUserRequireEmail","_l","VueLocalStorage","NcAppContent","NcAppNavigation","NcAppNavigationCaption","NcAppNavigationCounter","NcAppNavigationNew","NcAppNavigationNewItem","NcAppNavigationSettings","NcContent","GroupListItem","Plus","UserList","selectedQuota","loadingAddGroup","loadingSendMail","getUsers","get","getLocalstorage","set","status","setLocalStorage","userCount","getUserCount","newUserSendEmail","axios","e","message","groupList","isArray","formatGroupMenu","adminGroupMenu","disabledGroupMenu","beforeMount","orderBy","sortGroups","created","OCA","Settings","registerAction","showNewUserMenu","localConfig","$localStorage","setDefaultQuota","app","hideAddGroupForm","showAddGroupForm","addGroup","newItemActive","$nextTick","newItemInput","focusInput","newItemValue","item","disabled","_i","$$a","$$el","$$c","checked","$$i","slice","indexOf","_k","keyCode"],"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 93cbf4eb19e..cc471d71acd 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 */
-(()=>{"use strict";var e,r,s,a={92652:(e,t,r)=>{r.d(t,{J:()=>a});var s=r(31352);const a=Object.freeze({enabled:(0,s.Iu)("settings","Active apps"),disabled:(0,s.Iu)("settings","Disabled apps"),updates:(0,s.Iu)("settings","Updates"),"app-bundles":(0,s.Iu)("settings","App bundles"),featured:(0,s.Iu)("settings","Featured apps")})},9685:(e,r,s)=>{var a=s(20144),o=s(2324),i=s(83678);const d={name:"App",beforeMount(){null!==document.getElementById("serverData")&&this.$store.commit("setServerData",JSON.parse(document.getElementById("serverData").dataset.server))}},c=(0,s(51900).Z)(d,(function(){return(0,this._self._c)("router-view")}),[],!1,null,null,null).exports;var u=s(78345),p=s(79753),l=s(92652),m=s(20629),g=s(4820),h=s(10128);s(65509);const f=function(e){return e.replace(/\/$/,"")},A=()=>(0,h.confirmPassword)(),I=(e,t)=>g.default.get(f(e),t),y=(e,t)=>g.default.post(f(e),t),b=(e,t)=>g.default.put(f(e),t),U=(e,t)=>g.default.delete(f(e),{params:t}),v=(0,s(17499).IY)().setApp("settings").detectUser().build();var L=s(25108);const C=function(e,t){return 1===t?e.sort(((e,t)=>e.usercount-e.disabled<t.usercount-t.disabled)):e.sort(((e,t)=>e.name.localeCompare(t.name)))},P={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},E={appendUsers(e,t){const r=e.users.concat(Object.keys(t).map((e=>t[e])));e.usersOffset+=e.usersLimit,e.users=r},setPasswordPolicyMinLength(e,t){e.minPasswordLength=""!==t?t:0},initGroups(e,t){let{groups:r,orderBy:s,userCount:a}=t;e.groups=r.map((e=>Object.assign({},P,e))),e.orderBy=s,e.userCount=a,e.groups=C(e.groups,e.orderBy)},addGroup(e,t){let{gid:r,displayName:s}=t;try{if(void 0!==e.groups.find((e=>e.id===r)))return;const t=Object.assign({},P,{id:r,name:s});e.groups.push(t),e.groups=C(e.groups,e.orderBy)}catch(e){L.error("Can't create group",e)}},renameGroup(e,t){let{gid:r,displayName:s}=t;const a=e.groups.findIndex((e=>e.id===r));if(a>=0){const t=e.groups[a];t.name=s,e.groups.splice(a,1,t),e.groups=C(e.groups,e.orderBy)}},removeGroup(e,t){const r=e.groups.findIndex((e=>e.id===t));r>=0&&e.groups.splice(r,1)},addUserGroup(e,t){let{userid:r,gid:s}=t;const a=e.groups.find((e=>e.id===s)),o=e.users.find((e=>e.id===r));a&&o.enabled&&e.userCount>0&&a.usercount++,o.groups.push(s),e.groups=C(e.groups,e.orderBy)},removeUserGroup(e,t){let{userid:r,gid:s}=t;const a=e.groups.find((e=>e.id===s)),o=e.users.find((e=>e.id===r));a&&o.enabled&&e.userCount>0&&a.usercount--;const i=o.groups;i.splice(i.indexOf(s),1),e.groups=C(e.groups,e.orderBy)},addUserSubAdmin(e,t){let{userid:r,gid:s}=t;e.users.find((e=>e.id===r)).subadmin.push(s)},removeUserSubAdmin(e,t){let{userid:r,gid:s}=t;const a=e.users.find((e=>e.id===r)).subadmin;a.splice(a.indexOf(s),1)},deleteUser(e,t){const r=e.users.findIndex((e=>e.id===t));this.commit("updateUserCounts",{user:e.users[r],actionType:"remove"}),e.users.splice(r,1)},addUserData(e,t){const r=t.data.ocs.data;e.users.push(r),this.commit("updateUserCounts",{user:r,actionType:"create"})},enableDisableUser(e,t){let{userid:r,enabled:s}=t;const a=e.users.find((e=>e.id===r));a.enabled=s,this.commit("updateUserCounts",{user:a,actionType:s?"enable":"disable"})},updateUserCounts(e,t){let{user:r,actionType:s}=t;const a=e.groups.find((e=>"disabled"===e.id));switch(s){case"enable":case"disable":a.usercount+=r.enabled?-1:1,e.userCount+=r.enabled?1:-1,r.groups.forEach((t=>{e.groups.find((e=>e.id===t)).disabled+=r.enabled?-1:1}));break;case"create":e.userCount++,r.groups.forEach((t=>{e.groups.find((e=>e.id===t)).usercount++}));break;case"remove":r.enabled?(e.userCount--,r.groups.forEach((t=>{const r=e.groups.find((e=>e.id===t));r?r.usercount--:L.warn("User group "+t+" does not exist during user removal")}))):(a.usercount--,r.groups.forEach((t=>{e.groups.find((e=>e.id===t)).disabled--})));break;default:v.error("Unknown action type in updateUserCounts: '".concat(s,"'"))}},setUserData(e,t){let{userid:r,key:s,value:a}=t;if("quota"===s){const t=OC.Util.computerFileSize(a);e.users.find((e=>e.id===r))[s][s]=null!==t?t:a}else e.users.find((e=>e.id===r))[s]=a},resetUsers(e){e.users=[],e.usersOffset=0}},w=g.default.CancelToken;let O=null;const _={state:{users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,userCount:0},mutations:E,getters:{getUsers:e=>e.users,getGroups:e=>e.groups,getSubadminGroups:e=>e.groups.filter((e=>"admin"!==e.id&&"disabled"!==e.id)),getPasswordPolicyMinLength:e=>e.minPasswordLength,getUsersOffset:e=>e.usersOffset,getUsersLimit:e=>e.usersLimit,getUserCount:e=>e.userCount},actions:{searchUsers(e,t){let{offset:r,limit:s,search:a}=t;return a="string"==typeof a?a:"",I((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:a})).catch((t=>{g.default.isCancel(t)||e.commit("API_FAILURE",t)}))},getUser:(e,t)=>I((0,p.generateOcsUrl)("cloud/users/".concat(t))).catch((t=>{g.default.isCancel(t)||e.commit("API_FAILURE",t)})),getUsers(e,t){let{offset:r,limit:s,search:a,group:o}=t;return O&&O.cancel("Operation canceled by another search request."),O=w.source(),a="string"==typeof a?a:"",o="string"==typeof o?o:"",""!==o?I((0,p.generateOcsUrl)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(o),offset:r,limit:s,search:a}),{cancelToken:O.token}).then((t=>{const r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((t=>{g.default.isCancel(t)||e.commit("API_FAILURE",t)})):I((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:a}),{cancelToken:O.token}).then((t=>{const r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((t=>{g.default.isCancel(t)||e.commit("API_FAILURE",t)}))},getGroups(e,t){let{offset:r,limit:s,search:a}=t;a="string"==typeof a?a:"";const o=-1===s?"":"&limit=".concat(s);return I((0,p.generateOcsUrl)("cloud/groups?offset={offset}&search={search}",{offset:r,search:a})+o).then((t=>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((t=>e.commit("API_FAILURE",t)))},getUsersFromList(e,t){let{offset:r,limit:s,search:a}=t;return a="string"==typeof a?a:"",I((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:a})).then((t=>Object.keys(t.data.ocs.data.users).length>0&&(e.commit("appendUsers",t.data.ocs.data.users),!0))).catch((t=>e.commit("API_FAILURE",t)))},getUsersFromGroup(e,t){let{groupid:r,offset:s,limit:a}=t;return I((0,p.generateOcsUrl)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:s,limit:a})).then((t=>e.commit("getUsersFromList",t.data.ocs.data.users))).catch((t=>e.commit("API_FAILURE",t)))},getPasswordPolicyMinLength:e=>!(!OC.getCapabilities().password_policy||!OC.getCapabilities().password_policy.minLength)&&(e.commit("setPasswordPolicyMinLength",OC.getCapabilities().password_policy.minLength),OC.getCapabilities().password_policy.minLength),addGroup:(e,t)=>A().then((r=>y((0,p.generateOcsUrl)("cloud/groups"),{groupid:t}).then((r=>(e.commit("addGroup",{gid:t,displayName:t}),{gid:t,displayName:t}))).catch((e=>{throw e})))).catch((r=>{throw e.commit("API_FAILURE",{gid:t,error:r}),r})),renameGroup(e,t){let{groupid:r,displayName:s}=t;return A().then((t=>b((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:s}).then((t=>(e.commit("renameGroup",{gid:r,displayName:s}),{groupid:r,displayName:s}))).catch((e=>{throw e})))).catch((t=>{throw e.commit("API_FAILURE",{groupid:r,error:t}),t}))},removeGroup:(e,t)=>A().then((r=>U((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(t)})).then((r=>e.commit("removeGroup",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{gid:t,error:r}))),addUserGroup(e,t){let{userid:r,gid:s}=t;return A().then((t=>y((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:s}).then((t=>e.commit("addUserGroup",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},removeUserGroup(e,t){let{userid:r,gid:s}=t;return A().then((t=>U((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:s}).then((t=>e.commit("removeUserGroup",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>{throw e.commit("API_FAILURE",{userid:r,error:t}),t}))},addUserSubAdmin(e,t){let{userid:r,gid:s}=t;return A().then((t=>y((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:s}).then((t=>e.commit("addUserSubAdmin",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},removeUserSubAdmin(e,t){let{userid:r,gid:s}=t;return A().then((t=>U((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:s}).then((t=>e.commit("removeUserSubAdmin",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},wipeUserDevices:(e,t)=>A().then((e=>y((0,p.generateOcsUrl)("cloud/users/{userid}/wipe",{userid:t})).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),deleteUser:(e,t)=>A().then((r=>U((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:t})).then((r=>e.commit("deleteUser",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),addUser(e,t){let{commit:r,dispatch:s}=e,{userid:a,password:o,displayName:i,email:n,groups:d,subadmin:c,quota:u,language:l,manager:m}=t;return A().then((e=>y((0,p.generateOcsUrl)("cloud/users"),{userid:a,password:o,displayName:i,email:n,groups:d,subadmin:c,quota:u,language:l,manager:m}).then((e=>s("addUserData",a||e.data.ocs.data.id))).catch((e=>{throw e})))).catch((e=>{throw r("API_FAILURE",{userid:a,error:e}),e}))},addUserData:(e,t)=>A().then((r=>I((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:t})).then((t=>e.commit("addUserData",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),enableDisableUser(e,t){let{userid:r,enabled:s=!0}=t;const a=s?"enable":"disable";return A().then((t=>b((0,p.generateOcsUrl)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:a})).then((t=>e.commit("enableDisableUser",{userid:r,enabled:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},setUserData(e,t){let{userid:r,key:s,value:a}=t;const o=["email","displayname","manager"];return-1!==["email","language","quota","displayname","password","manager"].indexOf(s)&&"string"==typeof a&&(-1===o.indexOf(s)&&a.length>0||-1!==o.indexOf(s))?A().then((t=>b((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:r}),{key:s,value:a}).then((t=>e.commit("setUserData",{userid:r,key:s,value:a}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t}))):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(e,t)=>A().then((e=>y((0,p.generateOcsUrl)("cloud/users/{userid}/welcome",{userid:t})).then((e=>!0)).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r})))}};var R=s(64024),D=(s(36144),s(25108));const F={APPS_API_FAILURE(e,r){(0,R.x2)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{isHTML:!0}),D.error(e,r)},initCategories(e,t){let{categories:r,updateCount:s}=t;e.categories=r,e.updateCount=s},updateCategories(e,t){e.gettingCategoriesPromise=t},setUpdateCount(e,t){e.updateCount=t},addCategory(e,t){e.categories.push(t)},appendCategories(e,t){e.categories=t},setAllApps(e,t){e.apps=t},setError(e,t){let{appId:r,error:s}=t;Array.isArray(r)||(r=[r]),r.forEach((t=>{e.apps.find((e=>e.id===t)).error=s}))},clearError(e,t){let{appId:r,error:s}=t;e.apps.find((e=>e.id===r)).error=null},enableApp(e,t){let{appId:r,groups:s}=t;const a=e.apps.find((e=>e.id===r));a.active=!0,a.groups=s},disableApp(e,t){const r=e.apps.find((e=>e.id===t));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp(e,t){e.apps.find((e=>e.id===t)).active=!1,e.apps.find((e=>e.id===t)).groups=[],e.apps.find((e=>e.id===t)).needsDownload=!0,e.apps.find((e=>e.id===t)).installed=!1,e.apps.find((e=>e.id===t)).canUnInstall=!1,e.apps.find((e=>e.id===t)).canInstall=!0},updateApp(e,t){const r=e.apps.find((e=>e.id===t)),s=r.update;r.update=null,r.version=s,e.updateCount--},resetApps(e){e.apps=[]},reset(e){e.apps=[],e.categories=[],e.updateCount=0},startLoading(e,t){Array.isArray(t)?t.forEach((t=>{a.default.set(e.loading,t,!0)})):a.default.set(e.loading,t,!0)},stopLoading(e,t){Array.isArray(t)?t.forEach((t=>{a.default.set(e.loading,t,!1)})):a.default.set(e.loading,t,!1)}},k={enableApp(e,r){let s,{appId:a,groups:o}=r;return s=Array.isArray(a)?a:[a],A().then((r=>(e.commit("startLoading",s),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/enable"),{appIds:s,groups:o}).then((r=>(e.commit("stopLoading",s),e.commit("stopLoading","install"),s.forEach((t=>{e.commit("enableApp",{appId:t,groups:o})})),I((0,p.generateUrl)("apps/files")).then((()=>{r.data.update_required&&((0,R.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:()=>window.location.reload(),close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(a)||e.commit("setError",{appId:s,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")})}))))).catch((t=>{e.commit("stopLoading",s),e.commit("stopLoading","install"),e.commit("setError",{appId:s,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:a,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:a,error:t})))},forceEnableApp(e,t){let r,{appId:s,groups:a}=t;return r=Array.isArray(s)?s:[s],A().then((()=>(e.commit("startLoading",r),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/force"),{appId:s}).then((e=>{location.reload()})).catch((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:s,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:s,error:t})))},disableApp(e,t){let r,{appId:s}=t;return r=Array.isArray(s)?s:[s],A().then((t=>(e.commit("startLoading",r),y((0,p.generateUrl)("settings/apps/disable"),{appIds:r}).then((t=>(e.commit("stopLoading",r),r.forEach((t=>{e.commit("disableApp",t)})),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:s,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:s,error:t})))},uninstallApp(e,t){let{appId:r}=t;return A().then((t=>(e.commit("startLoading",r),I((0,p.generateUrl)("settings/apps/uninstall/".concat(r))).then((t=>(e.commit("stopLoading",r),e.commit("uninstallApp",r),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:r,error:t})))},updateApp(e,t){let{appId:r}=t;return A().then((t=>(e.commit("startLoading",r),e.commit("startLoading","install"),I((0,p.generateUrl)("settings/apps/update/".concat(r))).then((t=>(e.commit("stopLoading","install"),e.commit("stopLoading",r),e.commit("updateApp",r),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:r,error:t})))},getAllApps:e=>(e.commit("startLoading","list"),I((0,p.generateUrl)("settings/apps/list")).then((t=>(e.commit("setAllApps",t.data.apps),e.commit("stopLoading","list"),!0))).catch((t=>e.commit("API_FAILURE",t)))),async getCategories(e){let{shouldRefetchCategories:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t||!e.state.gettingCategoriesPromise){e.commit("startLoading","categories");try{const t=I((0,p.generateUrl)("settings/apps/categories"));e.commit("updateCategories",t);const r=await t;return r.data.length>0?(e.commit("appendCategories",r.data),e.commit("stopLoading","categories"),!0):(e.commit("stopLoading","categories"),!1)}catch(t){e.commit("API_FAILURE",t)}}return e.state.gettingCategoriesPromise}},M={state:{apps:[],categories:[],updateCount:0,loading:{},loadingList:!1,gettingCategoriesPromise:null},mutations:F,getters:{loading:e=>function(t){return e.loading[t]},getCategories:e=>e.categories,getAllApps:e=>e.apps,getUpdateCount:e=>e.updateCount,getCategoryById:e=>t=>e.categories.find((e=>e.id===t))},actions:k},x={state:{serverData:{}},mutations:{setServerData(e,t){e.serverData=t}},getters:{getServerData:e=>e.serverData},actions:{}},j={state:{},mutations:{},getters:{},actions:{setAppConfig(e,t){let{app:r,key:s,value:a}=t;return A().then((e=>y((0,p.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:s}),{value:a}).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{app:r,key:s,value:a,error:t})))}}};var N=s(25108);a.default.use(m.ZP);const S={API_FAILURE(e,r){try{const e=r.error.response.data.ocs.meta.message;(0,R.x2)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+e,{isHTML:!0})}catch(e){(0,R.x2)(t("settings","An error occurred during the request. Unable to proceed."))}N.error(e,r)}},T=new m.yh({modules:{users:_,apps:M,settings:x,oc:j},strict:!1,mutations:S});s(79954);const G=()=>Promise.all([s.e(7874),s.e(8351)]).then(s.bind(s,70260)),B=()=>Promise.all([s.e(7874),s.e(7418)]).then(s.bind(s,72845));a.default.use(u.ZP);const Z=document.title,z=new u.ZP({mode:"history",base:(0,p.generateUrl)(""),linkActiveClass:"active",routes:[{path:"/:index(index.php/)?settings/users",component:G,props:!0,name:"users",meta:{title:()=>t("settings","Active users")},children:[{path:":selectedGroup",name:"group",meta:{title:e=>"admin"===e.params.selectedGroup?t("settings","Admins"):"disabled"===e.params.selectedGroup?t("settings","Disabled users"):decodeURIComponent(e.params.selectedGroup)},component:G}]},{path:"/:index(index.php/)?settings/apps",component:B,props:!0,name:"apps",meta:{title:()=>t("settings","Your apps")},children:[{path:":category",name:"apps-category",meta:{title:async e=>{if("apps"===e.name)return t("settings","Your apps");if(l.J[e.params.category])return l.J[e.params.category];await T.dispatch("getCategories");const r=T.getters.getCategoryById(e.params.category);return r.displayName?r.displayName:void 0}},component:B,children:[{path:":id",name:"apps-details",component:B}]}]}]});z.afterEach((async e=>{var t,r;const s=await(null===(t=(r=e.meta).title)||void 0===t?void 0:t.call(r,e));s?(document.title="".concat(s," - ").concat(Z),function(e){const t=document.getElementById("page-heading-level-1");t&&(t.textContent=e)}(s)):document.title=Z}));const H=z;a.default.use(o.default,{defaultHtml:!1}),(0,i.Z)(T,H),s.nc=btoa(OC.requestToken),a.default.prototype.t=t,a.default.prototype.n=n,a.default.prototype.OC=OC,a.default.prototype.OCA=OCA,a.default.prototype.oc_userconfig=oc_userconfig,new a.default({router:H,store:T,render:e=>e(c)}).$mount("#content")},81490:e=>{e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6Ii8+Cjwvc3ZnPgo="},90888:e=>{e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6IiBzdHlsZT0iZmlsbC1vcGFjaXR5OjE7ZmlsbDojZmZmZmZmIi8+Cjwvc3ZnPgo="}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={id:e,loaded:!1,exports:{}};return a[e].call(r.exports,r,r.exports,i),r.loaded=!0,r.exports}i.m=a,e=[],i.O=(t,r,s,a)=>{if(!r){var o=1/0;for(u=0;u<e.length;u++){r=e[u][0],s=e[u][1],a=e[u][2];for(var n=!0,d=0;d<r.length;d++)(!1&a||o>=a)&&Object.keys(i.O).every((e=>i.O[e](r[d])))?r.splice(d--,1):(n=!1,a<o&&(o=a));if(n){e.splice(u--,1);var c=s();void 0!==c&&(t=c)}}return t}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,s,a]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>({7418:"settings-apps-view",8351:"settings-users"}[e]+"-"+e+".js?v="+{7418:"faf2213249ab04354b2e",8351:"706ed004a7f00d5c5655"}[e]),i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},s="nextcloud:",i.l=(e,t,a,o)=>{if(r[e])r[e].push(t);else{var n,d;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u<c.length;u++){var p=c[u];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==s+a){n=p;break}}n||(d=!0,(n=document.createElement("script")).charset="utf-8",n.timeout=120,i.nc&&n.setAttribute("nonce",i.nc),n.setAttribute("data-webpack",s+a),n.src=e),r[e]=[t];var l=(t,s)=>{n.onerror=n.onload=null,clearTimeout(m);var a=r[e];if(delete r[e],n.parentNode&&n.parentNode.removeChild(n),a&&a.forEach((e=>e(s))),t)return t(s)},m=setTimeout(l.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=l.bind(null,n.onerror),n.onload=l.bind(null,n.onload),d&&document.head.appendChild(n)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),i.j=8562,(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var t=i.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(/\/[^\/]+$/,"/"),i.p=e})(),(()=>{i.b=document.baseURI||self.location.href;var e={8562:0};i.f.j=(t,r)=>{var s=i.o(e,t)?e[t]:void 0;if(0!==s)if(s)r.push(s[2]);else{var a=new Promise(((r,a)=>s=e[t]=[r,a]));r.push(s[2]=a);var o=i.p+i.u(t),n=new Error;i.l(o,(r=>{if(i.o(e,t)&&(0!==(s=e[t])&&(e[t]=void 0),s)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;n.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",n.name="ChunkLoadError",n.type=a,n.request=o,s[1](n)}}),"chunk-"+t,t)}},i.O.j=t=>0===e[t];var t=(t,r)=>{var s,a,o=r[0],n=r[1],d=r[2],c=0;if(o.some((t=>0!==e[t]))){for(s in n)i.o(n,s)&&(i.m[s]=n[s]);if(d)var u=d(i)}for(t&&t(r);c<o.length;c++)a=o[c],i.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return i.O(u)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),i.nc=void 0;var d=i.O(void 0,[7874],(()=>i(9685)));d=i.O(d)})();
-//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=dee7a880e3e6cb6e8571 \ No newline at end of file
+(()=>{"use strict";var e,r,s,a={92652:(e,t,r)=>{r.d(t,{J:()=>a});var s=r(31352);const a=Object.freeze({enabled:(0,s.Iu)("settings","Active apps"),disabled:(0,s.Iu)("settings","Disabled apps"),updates:(0,s.Iu)("settings","Updates"),"app-bundles":(0,s.Iu)("settings","App bundles"),featured:(0,s.Iu)("settings","Featured apps")})},9685:(e,r,s)=>{var a=s(20144),o=s(2324),i=s(83678);const d={name:"App",beforeMount(){null!==document.getElementById("serverData")&&this.$store.commit("setServerData",JSON.parse(document.getElementById("serverData").dataset.server))}},c=(0,s(51900).Z)(d,(function(){return(0,this._self._c)("router-view")}),[],!1,null,null,null).exports;var u=s(78345),p=s(79753),l=s(92652),m=s(20629),g=s(4820),h=s(10128);s(65509);const f=function(e){return e.replace(/\/$/,"")},A=()=>(0,h.confirmPassword)(),I=(e,t)=>g.default.get(f(e),t),y=(e,t)=>g.default.post(f(e),t),b=(e,t)=>g.default.put(f(e),t),U=(e,t)=>g.default.delete(f(e),{params:t}),v=(0,s(17499).IY)().setApp("settings").detectUser().build();var L=s(25108);const C=function(e,t){return 1===t?e.sort(((e,t)=>e.usercount-e.disabled<t.usercount-t.disabled)):e.sort(((e,t)=>e.name.localeCompare(t.name)))},P={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},E={appendUsers(e,t){const r=e.users.concat(Object.keys(t).map((e=>t[e])));e.usersOffset+=e.usersLimit,e.users=r},setPasswordPolicyMinLength(e,t){e.minPasswordLength=""!==t?t:0},initGroups(e,t){let{groups:r,orderBy:s,userCount:a}=t;e.groups=r.map((e=>Object.assign({},P,e))),e.orderBy=s,e.userCount=a,e.groups=C(e.groups,e.orderBy)},addGroup(e,t){let{gid:r,displayName:s}=t;try{if(void 0!==e.groups.find((e=>e.id===r)))return;const t=Object.assign({},P,{id:r,name:s});e.groups.push(t),e.groups=C(e.groups,e.orderBy)}catch(e){L.error("Can't create group",e)}},renameGroup(e,t){let{gid:r,displayName:s}=t;const a=e.groups.findIndex((e=>e.id===r));if(a>=0){const t=e.groups[a];t.name=s,e.groups.splice(a,1,t),e.groups=C(e.groups,e.orderBy)}},removeGroup(e,t){const r=e.groups.findIndex((e=>e.id===t));r>=0&&e.groups.splice(r,1)},addUserGroup(e,t){let{userid:r,gid:s}=t;const a=e.groups.find((e=>e.id===s)),o=e.users.find((e=>e.id===r));a&&o.enabled&&e.userCount>0&&a.usercount++,o.groups.push(s),e.groups=C(e.groups,e.orderBy)},removeUserGroup(e,t){let{userid:r,gid:s}=t;const a=e.groups.find((e=>e.id===s)),o=e.users.find((e=>e.id===r));a&&o.enabled&&e.userCount>0&&a.usercount--;const i=o.groups;i.splice(i.indexOf(s),1),e.groups=C(e.groups,e.orderBy)},addUserSubAdmin(e,t){let{userid:r,gid:s}=t;e.users.find((e=>e.id===r)).subadmin.push(s)},removeUserSubAdmin(e,t){let{userid:r,gid:s}=t;const a=e.users.find((e=>e.id===r)).subadmin;a.splice(a.indexOf(s),1)},deleteUser(e,t){const r=e.users.findIndex((e=>e.id===t));this.commit("updateUserCounts",{user:e.users[r],actionType:"remove"}),e.users.splice(r,1)},addUserData(e,t){const r=t.data.ocs.data;e.users.push(r),this.commit("updateUserCounts",{user:r,actionType:"create"})},enableDisableUser(e,t){let{userid:r,enabled:s}=t;const a=e.users.find((e=>e.id===r));a.enabled=s,this.commit("updateUserCounts",{user:a,actionType:s?"enable":"disable"})},updateUserCounts(e,t){let{user:r,actionType:s}=t;const a=e.groups.find((e=>"disabled"===e.id));switch(s){case"enable":case"disable":a.usercount+=r.enabled?-1:1,e.userCount+=r.enabled?1:-1,r.groups.forEach((t=>{e.groups.find((e=>e.id===t)).disabled+=r.enabled?-1:1}));break;case"create":e.userCount++,r.groups.forEach((t=>{e.groups.find((e=>e.id===t)).usercount++}));break;case"remove":r.enabled?(e.userCount--,r.groups.forEach((t=>{const r=e.groups.find((e=>e.id===t));r?r.usercount--:L.warn("User group "+t+" does not exist during user removal")}))):(a.usercount--,r.groups.forEach((t=>{e.groups.find((e=>e.id===t)).disabled--})));break;default:v.error("Unknown action type in updateUserCounts: '".concat(s,"'"))}},setUserData(e,t){let{userid:r,key:s,value:a}=t;if("quota"===s){const t=OC.Util.computerFileSize(a);e.users.find((e=>e.id===r))[s][s]=null!==t?t:a}else e.users.find((e=>e.id===r))[s]=a},resetUsers(e){e.users=[],e.usersOffset=0}},w=g.default.CancelToken;let O=null;const _={state:{users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,userCount:0},mutations:E,getters:{getUsers:e=>e.users,getGroups:e=>e.groups,getSubadminGroups:e=>e.groups.filter((e=>"admin"!==e.id&&"disabled"!==e.id)),getPasswordPolicyMinLength:e=>e.minPasswordLength,getUsersOffset:e=>e.usersOffset,getUsersLimit:e=>e.usersLimit,getUserCount:e=>e.userCount},actions:{searchUsers(e,t){let{offset:r,limit:s,search:a}=t;return a="string"==typeof a?a:"",I((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:a})).catch((t=>{g.default.isCancel(t)||e.commit("API_FAILURE",t)}))},getUser:(e,t)=>I((0,p.generateOcsUrl)("cloud/users/".concat(t))).catch((t=>{g.default.isCancel(t)||e.commit("API_FAILURE",t)})),getUsers(e,t){let{offset:r,limit:s,search:a,group:o}=t;return O&&O.cancel("Operation canceled by another search request."),O=w.source(),a="string"==typeof a?a:"",o="string"==typeof o?o:"",""!==o?I((0,p.generateOcsUrl)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(o),offset:r,limit:s,search:a}),{cancelToken:O.token}).then((t=>{const r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((t=>{g.default.isCancel(t)||e.commit("API_FAILURE",t)})):I((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:a}),{cancelToken:O.token}).then((t=>{const r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((t=>{g.default.isCancel(t)||e.commit("API_FAILURE",t)}))},getGroups(e,t){let{offset:r,limit:s,search:a}=t;a="string"==typeof a?a:"";const o=-1===s?"":"&limit=".concat(s);return I((0,p.generateOcsUrl)("cloud/groups?offset={offset}&search={search}",{offset:r,search:a})+o).then((t=>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((t=>e.commit("API_FAILURE",t)))},getUsersFromList(e,t){let{offset:r,limit:s,search:a}=t;return a="string"==typeof a?a:"",I((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:a})).then((t=>Object.keys(t.data.ocs.data.users).length>0&&(e.commit("appendUsers",t.data.ocs.data.users),!0))).catch((t=>e.commit("API_FAILURE",t)))},getUsersFromGroup(e,t){let{groupid:r,offset:s,limit:a}=t;return I((0,p.generateOcsUrl)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:s,limit:a})).then((t=>e.commit("getUsersFromList",t.data.ocs.data.users))).catch((t=>e.commit("API_FAILURE",t)))},getPasswordPolicyMinLength:e=>!(!OC.getCapabilities().password_policy||!OC.getCapabilities().password_policy.minLength)&&(e.commit("setPasswordPolicyMinLength",OC.getCapabilities().password_policy.minLength),OC.getCapabilities().password_policy.minLength),addGroup:(e,t)=>A().then((r=>y((0,p.generateOcsUrl)("cloud/groups"),{groupid:t}).then((r=>(e.commit("addGroup",{gid:t,displayName:t}),{gid:t,displayName:t}))).catch((e=>{throw e})))).catch((r=>{throw e.commit("API_FAILURE",{gid:t,error:r}),r})),renameGroup(e,t){let{groupid:r,displayName:s}=t;return A().then((t=>b((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:s}).then((t=>(e.commit("renameGroup",{gid:r,displayName:s}),{groupid:r,displayName:s}))).catch((e=>{throw e})))).catch((t=>{throw e.commit("API_FAILURE",{groupid:r,error:t}),t}))},removeGroup:(e,t)=>A().then((r=>U((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(t)})).then((r=>e.commit("removeGroup",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{gid:t,error:r}))),addUserGroup(e,t){let{userid:r,gid:s}=t;return A().then((t=>y((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:s}).then((t=>e.commit("addUserGroup",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},removeUserGroup(e,t){let{userid:r,gid:s}=t;return A().then((t=>U((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:s}).then((t=>e.commit("removeUserGroup",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>{throw e.commit("API_FAILURE",{userid:r,error:t}),t}))},addUserSubAdmin(e,t){let{userid:r,gid:s}=t;return A().then((t=>y((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:s}).then((t=>e.commit("addUserSubAdmin",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},removeUserSubAdmin(e,t){let{userid:r,gid:s}=t;return A().then((t=>U((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:s}).then((t=>e.commit("removeUserSubAdmin",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},wipeUserDevices:(e,t)=>A().then((e=>y((0,p.generateOcsUrl)("cloud/users/{userid}/wipe",{userid:t})).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),deleteUser:(e,t)=>A().then((r=>U((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:t})).then((r=>e.commit("deleteUser",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),addUser(e,t){let{commit:r,dispatch:s}=e,{userid:a,password:o,displayName:i,email:n,groups:d,subadmin:c,quota:u,language:l,manager:m}=t;return A().then((e=>y((0,p.generateOcsUrl)("cloud/users"),{userid:a,password:o,displayName:i,email:n,groups:d,subadmin:c,quota:u,language:l,manager:m}).then((e=>s("addUserData",a||e.data.ocs.data.id))).catch((e=>{throw e})))).catch((e=>{throw r("API_FAILURE",{userid:a,error:e}),e}))},addUserData:(e,t)=>A().then((r=>I((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:t})).then((t=>e.commit("addUserData",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),enableDisableUser(e,t){let{userid:r,enabled:s=!0}=t;const a=s?"enable":"disable";return A().then((t=>b((0,p.generateOcsUrl)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:a})).then((t=>e.commit("enableDisableUser",{userid:r,enabled:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},setUserData(e,t){let{userid:r,key:s,value:a}=t;const o=["email","displayname","manager"];return-1!==["email","language","quota","displayname","password","manager"].indexOf(s)&&"string"==typeof a&&(-1===o.indexOf(s)&&a.length>0||-1!==o.indexOf(s))?A().then((t=>b((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:r}),{key:s,value:a}).then((t=>e.commit("setUserData",{userid:r,key:s,value:a}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t}))):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(e,t)=>A().then((e=>y((0,p.generateOcsUrl)("cloud/users/{userid}/welcome",{userid:t})).then((e=>!0)).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r})))}};var R=s(64024),D=(s(36144),s(25108));const F={APPS_API_FAILURE(e,r){(0,R.x2)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{isHTML:!0}),D.error(e,r)},initCategories(e,t){let{categories:r,updateCount:s}=t;e.categories=r,e.updateCount=s},updateCategories(e,t){e.gettingCategoriesPromise=t},setUpdateCount(e,t){e.updateCount=t},addCategory(e,t){e.categories.push(t)},appendCategories(e,t){e.categories=t},setAllApps(e,t){e.apps=t},setError(e,t){let{appId:r,error:s}=t;Array.isArray(r)||(r=[r]),r.forEach((t=>{e.apps.find((e=>e.id===t)).error=s}))},clearError(e,t){let{appId:r,error:s}=t;e.apps.find((e=>e.id===r)).error=null},enableApp(e,t){let{appId:r,groups:s}=t;const a=e.apps.find((e=>e.id===r));a.active=!0,a.groups=s},disableApp(e,t){const r=e.apps.find((e=>e.id===t));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp(e,t){e.apps.find((e=>e.id===t)).active=!1,e.apps.find((e=>e.id===t)).groups=[],e.apps.find((e=>e.id===t)).needsDownload=!0,e.apps.find((e=>e.id===t)).installed=!1,e.apps.find((e=>e.id===t)).canUnInstall=!1,e.apps.find((e=>e.id===t)).canInstall=!0},updateApp(e,t){const r=e.apps.find((e=>e.id===t)),s=r.update;r.update=null,r.version=s,e.updateCount--},resetApps(e){e.apps=[]},reset(e){e.apps=[],e.categories=[],e.updateCount=0},startLoading(e,t){Array.isArray(t)?t.forEach((t=>{a.default.set(e.loading,t,!0)})):a.default.set(e.loading,t,!0)},stopLoading(e,t){Array.isArray(t)?t.forEach((t=>{a.default.set(e.loading,t,!1)})):a.default.set(e.loading,t,!1)}},k={enableApp(e,r){let s,{appId:a,groups:o}=r;return s=Array.isArray(a)?a:[a],A().then((r=>(e.commit("startLoading",s),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/enable"),{appIds:s,groups:o}).then((r=>(e.commit("stopLoading",s),e.commit("stopLoading","install"),s.forEach((t=>{e.commit("enableApp",{appId:t,groups:o})})),I((0,p.generateUrl)("apps/files")).then((()=>{r.data.update_required&&((0,R.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:()=>window.location.reload(),close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(a)||e.commit("setError",{appId:s,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")})}))))).catch((t=>{e.commit("stopLoading",s),e.commit("stopLoading","install"),e.commit("setError",{appId:s,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:a,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:a,error:t})))},forceEnableApp(e,t){let r,{appId:s,groups:a}=t;return r=Array.isArray(s)?s:[s],A().then((()=>(e.commit("startLoading",r),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/force"),{appId:s}).then((e=>{location.reload()})).catch((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:s,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:s,error:t})))},disableApp(e,t){let r,{appId:s}=t;return r=Array.isArray(s)?s:[s],A().then((t=>(e.commit("startLoading",r),y((0,p.generateUrl)("settings/apps/disable"),{appIds:r}).then((t=>(e.commit("stopLoading",r),r.forEach((t=>{e.commit("disableApp",t)})),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:s,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:s,error:t})))},uninstallApp(e,t){let{appId:r}=t;return A().then((t=>(e.commit("startLoading",r),I((0,p.generateUrl)("settings/apps/uninstall/".concat(r))).then((t=>(e.commit("stopLoading",r),e.commit("uninstallApp",r),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:r,error:t})))},updateApp(e,t){let{appId:r}=t;return A().then((t=>(e.commit("startLoading",r),e.commit("startLoading","install"),I((0,p.generateUrl)("settings/apps/update/".concat(r))).then((t=>(e.commit("stopLoading","install"),e.commit("stopLoading",r),e.commit("updateApp",r),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:r,error:t})))},getAllApps:e=>(e.commit("startLoading","list"),I((0,p.generateUrl)("settings/apps/list")).then((t=>(e.commit("setAllApps",t.data.apps),e.commit("stopLoading","list"),!0))).catch((t=>e.commit("API_FAILURE",t)))),async getCategories(e){let{shouldRefetchCategories:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t||!e.state.gettingCategoriesPromise){e.commit("startLoading","categories");try{const t=I((0,p.generateUrl)("settings/apps/categories"));e.commit("updateCategories",t);const r=await t;return r.data.length>0?(e.commit("appendCategories",r.data),e.commit("stopLoading","categories"),!0):(e.commit("stopLoading","categories"),!1)}catch(t){e.commit("API_FAILURE",t)}}return e.state.gettingCategoriesPromise}},M={state:{apps:[],categories:[],updateCount:0,loading:{},loadingList:!1,gettingCategoriesPromise:null},mutations:F,getters:{loading:e=>function(t){return e.loading[t]},getCategories:e=>e.categories,getAllApps:e=>e.apps,getUpdateCount:e=>e.updateCount,getCategoryById:e=>t=>e.categories.find((e=>e.id===t))},actions:k},x={state:{serverData:{}},mutations:{setServerData(e,t){e.serverData=t}},getters:{getServerData:e=>e.serverData},actions:{}},j={state:{},mutations:{},getters:{},actions:{setAppConfig(e,t){let{app:r,key:s,value:a}=t;return A().then((e=>y((0,p.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:s}),{value:a}).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{app:r,key:s,value:a,error:t})))}}};var N=s(25108);a.default.use(m.ZP);const S={API_FAILURE(e,r){try{const e=r.error.response.data.ocs.meta.message;(0,R.x2)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+e,{isHTML:!0})}catch(e){(0,R.x2)(t("settings","An error occurred during the request. Unable to proceed."))}N.error(e,r)}},T=new m.yh({modules:{users:_,apps:M,settings:x,oc:j},strict:!1,mutations:S});s(79954);const G=()=>Promise.all([s.e(7874),s.e(8351)]).then(s.bind(s,13538)),B=()=>Promise.all([s.e(7874),s.e(7418)]).then(s.bind(s,72845));a.default.use(u.ZP);const Z=document.title,z=new u.ZP({mode:"history",base:(0,p.generateUrl)(""),linkActiveClass:"active",routes:[{path:"/:index(index.php/)?settings/users",component:G,props:!0,name:"users",meta:{title:()=>t("settings","Active users")},children:[{path:":selectedGroup",name:"group",meta:{title:e=>"admin"===e.params.selectedGroup?t("settings","Admins"):"disabled"===e.params.selectedGroup?t("settings","Disabled users"):decodeURIComponent(e.params.selectedGroup)},component:G}]},{path:"/:index(index.php/)?settings/apps",component:B,props:!0,name:"apps",meta:{title:()=>t("settings","Your apps")},children:[{path:":category",name:"apps-category",meta:{title:async e=>{if("apps"===e.name)return t("settings","Your apps");if(l.J[e.params.category])return l.J[e.params.category];await T.dispatch("getCategories");const r=T.getters.getCategoryById(e.params.category);return r.displayName?r.displayName:void 0}},component:B,children:[{path:":id",name:"apps-details",component:B}]}]}]});z.afterEach((async e=>{var t,r;const s=await(null===(t=(r=e.meta).title)||void 0===t?void 0:t.call(r,e));s?(document.title="".concat(s," - ").concat(Z),function(e){const t=document.getElementById("page-heading-level-1");t&&(t.textContent=e)}(s)):document.title=Z}));const H=z;a.default.use(o.default,{defaultHtml:!1}),(0,i.Z)(T,H),s.nc=btoa(OC.requestToken),a.default.prototype.t=t,a.default.prototype.n=n,a.default.prototype.OC=OC,a.default.prototype.OCA=OCA,a.default.prototype.oc_userconfig=oc_userconfig,new a.default({router:H,store:T,render:e=>e(c)}).$mount("#content")},81490:e=>{e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6Ii8+Cjwvc3ZnPgo="},90888:e=>{e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6IiBzdHlsZT0iZmlsbC1vcGFjaXR5OjE7ZmlsbDojZmZmZmZmIi8+Cjwvc3ZnPgo="}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={id:e,loaded:!1,exports:{}};return a[e].call(r.exports,r,r.exports,i),r.loaded=!0,r.exports}i.m=a,e=[],i.O=(t,r,s,a)=>{if(!r){var o=1/0;for(u=0;u<e.length;u++){r=e[u][0],s=e[u][1],a=e[u][2];for(var n=!0,d=0;d<r.length;d++)(!1&a||o>=a)&&Object.keys(i.O).every((e=>i.O[e](r[d])))?r.splice(d--,1):(n=!1,a<o&&(o=a));if(n){e.splice(u--,1);var c=s();void 0!==c&&(t=c)}}return t}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,s,a]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>({7418:"settings-apps-view",8351:"settings-users"}[e]+"-"+e+".js?v="+{7418:"faf2213249ab04354b2e",8351:"f5ee6c080845314c02b2"}[e]),i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},s="nextcloud:",i.l=(e,t,a,o)=>{if(r[e])r[e].push(t);else{var n,d;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u<c.length;u++){var p=c[u];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==s+a){n=p;break}}n||(d=!0,(n=document.createElement("script")).charset="utf-8",n.timeout=120,i.nc&&n.setAttribute("nonce",i.nc),n.setAttribute("data-webpack",s+a),n.src=e),r[e]=[t];var l=(t,s)=>{n.onerror=n.onload=null,clearTimeout(m);var a=r[e];if(delete r[e],n.parentNode&&n.parentNode.removeChild(n),a&&a.forEach((e=>e(s))),t)return t(s)},m=setTimeout(l.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=l.bind(null,n.onerror),n.onload=l.bind(null,n.onload),d&&document.head.appendChild(n)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),i.j=8562,(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var t=i.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(/\/[^\/]+$/,"/"),i.p=e})(),(()=>{i.b=document.baseURI||self.location.href;var e={8562:0};i.f.j=(t,r)=>{var s=i.o(e,t)?e[t]:void 0;if(0!==s)if(s)r.push(s[2]);else{var a=new Promise(((r,a)=>s=e[t]=[r,a]));r.push(s[2]=a);var o=i.p+i.u(t),n=new Error;i.l(o,(r=>{if(i.o(e,t)&&(0!==(s=e[t])&&(e[t]=void 0),s)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;n.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",n.name="ChunkLoadError",n.type=a,n.request=o,s[1](n)}}),"chunk-"+t,t)}},i.O.j=t=>0===e[t];var t=(t,r)=>{var s,a,o=r[0],n=r[1],d=r[2],c=0;if(o.some((t=>0!==e[t]))){for(s in n)i.o(n,s)&&(i.m[s]=n[s]);if(d)var u=d(i)}for(t&&t(r);c<o.length;c++)a=o[c],i.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return i.O(u)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),i.nc=void 0;var d=i.O(void 0,[7874],(()=>i(9685)));d=i.O(d)})();
+//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=b8b16d5936ab86a308e6 \ 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 7375e914eca..64829c88b16 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=dee7a880e3e6cb6e8571","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/constants/AppsConstants.js","webpack:///nextcloud/apps/settings/src/App.vue","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/App.vue?536c","webpack://nextcloud/./apps/settings/src/App.vue?4d15","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/settings.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/core/src/OCP/accessibility.js","webpack:///nextcloud/apps/settings/src/router.js","webpack:///nextcloud/apps/settings/src/main-apps-users-management.js","webpack:///nextcloud/webpack/bootstrap","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 = (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((key) => (__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 = (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 = (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((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\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};","/**\n * @copyright 2022, Julia Kirschenheuter <julia.kirschenheuter@nextcloud.com>\n *\n * @author Julia Kirschenheuter <julia.kirschenheuter@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 { translate as t } from '@nextcloud/l10n'\n\n/** Enum of verification constants, according to Apps */\nexport const APPS_SECTION_ENUM = Object.freeze({\n\tenabled: t('settings', 'Active apps'),\n\tdisabled: t('settings', 'Disabled apps'),\n\tupdates: t('settings', 'Updates'),\n\t'app-bundles': t('settings', 'App bundles'),\n\tfeatured: t('settings', 'Featured apps'),\n})\n","<!--\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 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&\"","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 render(){var _vm=this,_c=_vm._self._c;return _c('router-view')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\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'\nimport '@nextcloud/password-confirmation/dist/style.css'\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.js'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport logger from '../logger.js'\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\tif (!group) {\n\t\t\t\t\t\tconsole.warn('User group ' + userGroup + ' does not exist during user removal')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\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 interrupt 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 * search users\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 * @return {Promise}\n\t */\n\tsearchUsers(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search })).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get user details\n\t *\n\t * @param {object} context store context\n\t * @param {string} userId user id\n\t * @return {Promise}\n\t */\n\tgetUser(context, userId) {\n\t\treturn api.get(generateOcsUrl(`cloud/users/${userId}`)).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\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 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 * @param {string} options.manager User manager\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language, manager }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language, manager })\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', 'manager']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password', 'manager'].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.js'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport '@nextcloud/dialogs/dist/index.css'\n\nconst state = {\n\tapps: [],\n\tcategories: [],\n\tupdateCount: 0,\n\tloading: {},\n\tloadingList: false,\n\tgettingCategoriesPromise: null,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occurred 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\tupdateCategories(state, categoriesPromise) {\n\t\tstate.gettingCategoriesPromise = categoriesPromise\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\tgetCategoryById: (state) => (selectedCategoryId) => {\n\t\treturn state.categories.find((category) => category.id === selectedCategoryId)\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\tasync getCategories(context, { shouldRefetchCategories = false } = {}) {\n\t\tif (shouldRefetchCategories || !context.state.gettingCategoriesPromise) {\n\t\t\tcontext.commit('startLoading', 'categories')\n\t\t\ttry {\n\t\t\t\tconst categoriesPromise = api.get(generateUrl('settings/apps/categories'))\n\t\t\t\tcontext.commit('updateCategories', categoriesPromise)\n\t\t\t\tconst categoriesPromiseResponse = await categoriesPromise\n\t\t\t\tif (categoriesPromiseResponse.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', categoriesPromiseResponse.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\tcontext.commit('stopLoading', 'categories')\n\t\t\t\treturn false\n\t\t\t} catch (error) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t}\n\t\treturn context.state.gettingCategoriesPromise\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 *\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 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.js'\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.js'\nimport apps from './apps.js'\nimport settings from './settings.js'\nimport oc from './oc.js'\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 occurred during the request. Unable to proceed.') + '<br>' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occurred 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) 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.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 { loadState } from '@nextcloud/initial-state'\n\n/**\n * Set the page heading\n *\n * @param {string} heading page title from the history api\n * @since 27.0.0\n */\nexport function setPageHeading(heading) {\n\tconst headingEl = document.getElementById('page-heading-level-1')\n\tif (headingEl) {\n\t\theadingEl.textContent = heading\n\t}\n}\nexport default {\n\t/**\n\t * @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered\n\t */\n\tdisableKeyboardShortcuts() {\n\t\treturn loadState('theming', 'shortcutsDisabled', false)\n\t},\n\tsetPageHeading,\n}\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 * @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'\nimport { APPS_SECTION_ENUM } from './constants/AppsConstants.js'\nimport store from './store/index.js'\nimport { setPageHeading } from '../../../core/src/OCP/accessibility.js'\n\n// Dynamic loading\nconst Users = () => import(/* webpackChunkName: 'settings-users' */'./views/Users.vue')\nconst Apps = () => import(/* webpackChunkName: 'settings-apps-view' */'./views/Apps.vue')\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 */\nconst baseTitle = document.title\nconst router = 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\tmeta: {\n\t\t\t\ttitle: () => {\n\t\t\t\t\treturn t('settings', 'Active users')\n\t\t\t\t},\n\t\t\t},\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\tmeta: {\n\t\t\t\t\t\ttitle: (to) => {\n\t\t\t\t\t\t\tif (to.params.selectedGroup === 'admin') {\n\t\t\t\t\t\t\t\treturn t('settings', 'Admins')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (to.params.selectedGroup === 'disabled') {\n\t\t\t\t\t\t\t\treturn t('settings', 'Disabled users')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn decodeURIComponent(to.params.selectedGroup)\n\t\t\t\t\t\t},\n\t\t\t\t\t},\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\tmeta: {\n\t\t\t\ttitle: () => {\n\t\t\t\t\treturn t('settings', 'Your apps')\n\t\t\t\t},\n\t\t\t},\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\tmeta: {\n\t\t\t\t\t\ttitle: async (to) => {\n\t\t\t\t\t\t\tif (to.name === 'apps') {\n\t\t\t\t\t\t\t\treturn t('settings', 'Your apps')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (APPS_SECTION_ENUM[to.params.category]) {\n\t\t\t\t\t\t\t\treturn APPS_SECTION_ENUM[to.params.category]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait store.dispatch('getCategories')\n\t\t\t\t\t\t\tconst category = store.getters.getCategoryById(to.params.category)\n\t\t\t\t\t\t\tif (category.displayName) {\n\t\t\t\t\t\t\t\treturn category.displayName\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\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\nrouter.afterEach(async (to) => {\n\tconst metaTitle = await to.meta.title?.(to)\n\tif (metaTitle) {\n\t\tdocument.title = `${metaTitle} - ${baseTitle}`\n\t\tsetPageHeading(metaTitle)\n\t} else {\n\t\tdocument.title = baseTitle\n\t}\n})\n\nexport default router\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.js'\nimport store from './store/index.js'\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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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 = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((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 = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + {\"7418\":\"settings-apps-view\",\"8351\":\"settings-users\"}[chunkId] + \"-\" + chunkId + \".js?v=\" + {\"7418\":\"faf2213249ab04354b2e\",\"8351\":\"706ed004a7f00d5c5655\"}[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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (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 = (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((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 = (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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (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], () => (__webpack_require__(9685)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","APPS_SECTION_ENUM","Object","freeze","enabled","t","disabled","updates","featured","name","beforeMount","document","getElementById","$store","commit","JSON","parse","dataset","server","_c","this","_self","sanitize","url","replace","requireAdmin","confirmPassword","get","options","axios","post","data","put","delete","params","getLoggerBuilder","setApp","detectUser","build","orderGroups","groups","orderBy","sort","a","b","usercount","localeCompare","defaults","id","canAdd","canRemove","mutations","appendUsers","state","usersObj","users","concat","keys","map","userid","usersOffset","usersLimit","setPasswordPolicyMinLength","length","minPasswordLength","initGroups","_ref","userCount","group","assign","addGroup","_ref2","gid","displayName","find","push","e","console","error","renameGroup","_ref3","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","_ref4","user","removeUserGroup","_ref5","indexOf","addUserSubAdmin","_ref6","subadmin","removeUserSubAdmin","_ref7","deleteUser","userIndex","actionType","addUserData","response","ocs","enableDisableUser","_ref8","updateUserCounts","_ref9","disabledGroup","forEach","userGroup","warn","logger","setUserData","_ref10","key","value","humanValue","OC","Util","computerFileSize","resetUsers","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","filter","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getUserCount","actions","searchUsers","context","_ref11","offset","limit","search","api","generateOcsUrl","catch","getUser","userId","_ref12","cancel","source","encodeURIComponent","cancelToken","token","then","usersCount","_ref13","limitParam","getUsersFromList","_ref14","getUsersFromGroup","_ref15","groupid","groupId","getCapabilities","password_policy","minLength","_ref16","_ref17","_ref18","_ref19","_ref20","wipeUserDevices","addUser","_ref21","_ref22","dispatch","password","email","quota","language","manager","_ref23","userStatus","_ref24","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","message","isHTML","initCategories","categories","updateCount","updateCategories","categoriesPromise","gettingCategoriesPromise","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","Vue","loading","stopLoading","generateUrl","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","getAllApps","async","shouldRefetchCategories","arguments","undefined","categoriesPromiseResponse","loadingList","getCategories","getUpdateCount","getCategoryById","selectedCategoryId","serverData","setServerData","getServerData","setAppConfig","Vuex","API_FAILURE","meta","Store","modules","settings","oc","strict","process","Users","Apps","Router","baseTitle","title","router","mode","base","linkActiveClass","routes","path","component","props","children","to","selectedGroup","decodeURIComponent","store","afterEach","_to$meta$title","_to$meta","metaTitle","call","heading","headingEl","textContent","setPageHeading","VTooltip","defaultHtml","sync","__webpack_nonce__","btoa","requestToken","n","OCA","oc_userconfig","render","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","loaded","__webpack_modules__","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","f","chunkId","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","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=b8b16d5936ab86a308e6","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/constants/AppsConstants.js","webpack:///nextcloud/apps/settings/src/App.vue","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/App.vue?536c","webpack://nextcloud/./apps/settings/src/App.vue?4d15","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/settings.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/core/src/OCP/accessibility.js","webpack:///nextcloud/apps/settings/src/router.js","webpack:///nextcloud/apps/settings/src/main-apps-users-management.js","webpack:///nextcloud/webpack/bootstrap","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 = (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((key) => (__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 = (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 = (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((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\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};","/**\n * @copyright 2022, Julia Kirschenheuter <julia.kirschenheuter@nextcloud.com>\n *\n * @author Julia Kirschenheuter <julia.kirschenheuter@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 { translate as t } from '@nextcloud/l10n'\n\n/** Enum of verification constants, according to Apps */\nexport const APPS_SECTION_ENUM = Object.freeze({\n\tenabled: t('settings', 'Active apps'),\n\tdisabled: t('settings', 'Disabled apps'),\n\tupdates: t('settings', 'Updates'),\n\t'app-bundles': t('settings', 'App bundles'),\n\tfeatured: t('settings', 'Featured apps'),\n})\n","<!--\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 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&\"","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 render(){var _vm=this,_c=_vm._self._c;return _c('router-view')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\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'\nimport '@nextcloud/password-confirmation/dist/style.css'\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.js'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport logger from '../logger.js'\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\tif (!group) {\n\t\t\t\t\t\tconsole.warn('User group ' + userGroup + ' does not exist during user removal')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\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 interrupt 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 * search users\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 * @return {Promise}\n\t */\n\tsearchUsers(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search })).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get user details\n\t *\n\t * @param {object} context store context\n\t * @param {string} userId user id\n\t * @return {Promise}\n\t */\n\tgetUser(context, userId) {\n\t\treturn api.get(generateOcsUrl(`cloud/users/${userId}`)).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\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 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 * @param {string} options.manager User manager\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language, manager }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language, manager })\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', 'manager']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password', 'manager'].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.js'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport '@nextcloud/dialogs/dist/index.css'\n\nconst state = {\n\tapps: [],\n\tcategories: [],\n\tupdateCount: 0,\n\tloading: {},\n\tloadingList: false,\n\tgettingCategoriesPromise: null,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occurred 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\tupdateCategories(state, categoriesPromise) {\n\t\tstate.gettingCategoriesPromise = categoriesPromise\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\tgetCategoryById: (state) => (selectedCategoryId) => {\n\t\treturn state.categories.find((category) => category.id === selectedCategoryId)\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\tasync getCategories(context, { shouldRefetchCategories = false } = {}) {\n\t\tif (shouldRefetchCategories || !context.state.gettingCategoriesPromise) {\n\t\t\tcontext.commit('startLoading', 'categories')\n\t\t\ttry {\n\t\t\t\tconst categoriesPromise = api.get(generateUrl('settings/apps/categories'))\n\t\t\t\tcontext.commit('updateCategories', categoriesPromise)\n\t\t\t\tconst categoriesPromiseResponse = await categoriesPromise\n\t\t\t\tif (categoriesPromiseResponse.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', categoriesPromiseResponse.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\tcontext.commit('stopLoading', 'categories')\n\t\t\t\treturn false\n\t\t\t} catch (error) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t}\n\t\treturn context.state.gettingCategoriesPromise\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 *\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 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.js'\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.js'\nimport apps from './apps.js'\nimport settings from './settings.js'\nimport oc from './oc.js'\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 occurred during the request. Unable to proceed.') + '<br>' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occurred 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) 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.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 { loadState } from '@nextcloud/initial-state'\n\n/**\n * Set the page heading\n *\n * @param {string} heading page title from the history api\n * @since 27.0.0\n */\nexport function setPageHeading(heading) {\n\tconst headingEl = document.getElementById('page-heading-level-1')\n\tif (headingEl) {\n\t\theadingEl.textContent = heading\n\t}\n}\nexport default {\n\t/**\n\t * @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered\n\t */\n\tdisableKeyboardShortcuts() {\n\t\treturn loadState('theming', 'shortcutsDisabled', false)\n\t},\n\tsetPageHeading,\n}\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 * @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'\nimport { APPS_SECTION_ENUM } from './constants/AppsConstants.js'\nimport store from './store/index.js'\nimport { setPageHeading } from '../../../core/src/OCP/accessibility.js'\n\n// Dynamic loading\nconst Users = () => import(/* webpackChunkName: 'settings-users' */'./views/Users.vue')\nconst Apps = () => import(/* webpackChunkName: 'settings-apps-view' */'./views/Apps.vue')\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 */\nconst baseTitle = document.title\nconst router = 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\tmeta: {\n\t\t\t\ttitle: () => {\n\t\t\t\t\treturn t('settings', 'Active users')\n\t\t\t\t},\n\t\t\t},\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\tmeta: {\n\t\t\t\t\t\ttitle: (to) => {\n\t\t\t\t\t\t\tif (to.params.selectedGroup === 'admin') {\n\t\t\t\t\t\t\t\treturn t('settings', 'Admins')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (to.params.selectedGroup === 'disabled') {\n\t\t\t\t\t\t\t\treturn t('settings', 'Disabled users')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn decodeURIComponent(to.params.selectedGroup)\n\t\t\t\t\t\t},\n\t\t\t\t\t},\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\tmeta: {\n\t\t\t\ttitle: () => {\n\t\t\t\t\treturn t('settings', 'Your apps')\n\t\t\t\t},\n\t\t\t},\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\tmeta: {\n\t\t\t\t\t\ttitle: async (to) => {\n\t\t\t\t\t\t\tif (to.name === 'apps') {\n\t\t\t\t\t\t\t\treturn t('settings', 'Your apps')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (APPS_SECTION_ENUM[to.params.category]) {\n\t\t\t\t\t\t\t\treturn APPS_SECTION_ENUM[to.params.category]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait store.dispatch('getCategories')\n\t\t\t\t\t\t\tconst category = store.getters.getCategoryById(to.params.category)\n\t\t\t\t\t\t\tif (category.displayName) {\n\t\t\t\t\t\t\t\treturn category.displayName\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\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\nrouter.afterEach(async (to) => {\n\tconst metaTitle = await to.meta.title?.(to)\n\tif (metaTitle) {\n\t\tdocument.title = `${metaTitle} - ${baseTitle}`\n\t\tsetPageHeading(metaTitle)\n\t} else {\n\t\tdocument.title = baseTitle\n\t}\n})\n\nexport default router\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.js'\nimport store from './store/index.js'\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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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 = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((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 = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + {\"7418\":\"settings-apps-view\",\"8351\":\"settings-users\"}[chunkId] + \"-\" + chunkId + \".js?v=\" + {\"7418\":\"faf2213249ab04354b2e\",\"8351\":\"f5ee6c080845314c02b2\"}[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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (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 = (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((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 = (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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (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], () => (__webpack_require__(9685)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","APPS_SECTION_ENUM","Object","freeze","enabled","t","disabled","updates","featured","name","beforeMount","document","getElementById","$store","commit","JSON","parse","dataset","server","_c","this","_self","sanitize","url","replace","requireAdmin","confirmPassword","get","options","axios","post","data","put","delete","params","getLoggerBuilder","setApp","detectUser","build","orderGroups","groups","orderBy","sort","a","b","usercount","localeCompare","defaults","id","canAdd","canRemove","mutations","appendUsers","state","usersObj","users","concat","keys","map","userid","usersOffset","usersLimit","setPasswordPolicyMinLength","length","minPasswordLength","initGroups","_ref","userCount","group","assign","addGroup","_ref2","gid","displayName","find","push","e","console","error","renameGroup","_ref3","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","_ref4","user","removeUserGroup","_ref5","indexOf","addUserSubAdmin","_ref6","subadmin","removeUserSubAdmin","_ref7","deleteUser","userIndex","actionType","addUserData","response","ocs","enableDisableUser","_ref8","updateUserCounts","_ref9","disabledGroup","forEach","userGroup","warn","logger","setUserData","_ref10","key","value","humanValue","OC","Util","computerFileSize","resetUsers","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","filter","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getUserCount","actions","searchUsers","context","_ref11","offset","limit","search","api","generateOcsUrl","catch","getUser","userId","_ref12","cancel","source","encodeURIComponent","cancelToken","token","then","usersCount","_ref13","limitParam","getUsersFromList","_ref14","getUsersFromGroup","_ref15","groupid","groupId","getCapabilities","password_policy","minLength","_ref16","_ref17","_ref18","_ref19","_ref20","wipeUserDevices","addUser","_ref21","_ref22","dispatch","password","email","quota","language","manager","_ref23","userStatus","_ref24","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","message","isHTML","initCategories","categories","updateCount","updateCategories","categoriesPromise","gettingCategoriesPromise","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","Vue","loading","stopLoading","generateUrl","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","getAllApps","async","shouldRefetchCategories","arguments","undefined","categoriesPromiseResponse","loadingList","getCategories","getUpdateCount","getCategoryById","selectedCategoryId","serverData","setServerData","getServerData","setAppConfig","Vuex","API_FAILURE","meta","Store","modules","settings","oc","strict","process","Users","Apps","Router","baseTitle","title","router","mode","base","linkActiveClass","routes","path","component","props","children","to","selectedGroup","decodeURIComponent","store","afterEach","_to$meta$title","_to$meta","metaTitle","call","heading","headingEl","textContent","setPageHeading","VTooltip","defaultHtml","sync","__webpack_nonce__","btoa","requestToken","n","OCA","oc_userconfig","render","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","loaded","__webpack_modules__","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","f","chunkId","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","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/tests/acceptance/features/bootstrap/UsersSettingsContext.php b/tests/acceptance/features/bootstrap/UsersSettingsContext.php
index ac516089c11..33c47850202 100644
--- a/tests/acceptance/features/bootstrap/UsersSettingsContext.php
+++ b/tests/acceptance/features/bootstrap/UsersSettingsContext.php
@@ -82,7 +82,7 @@ class UsersSettingsContext implements Context, ActorAwareInterface {
* @return Locator
*/
public static function rowForUser($user) {
- return Locator::forThe()->css("table.user-list-grid tr.row[data-id=$user]")->
+ return Locator::forThe()->css("div.user-list-grid div.row[data-id=$user]")->
describedAs("Row for user $user in Users Settings");
}
@@ -144,7 +144,7 @@ class UsersSettingsContext implements Context, ActorAwareInterface {
* @return Locator
*/
public static function theColumn($column) {
- return Locator::forThe()->xpath("//table[@class='user-list-grid']//*[normalize-space() = '$column']")->
+ return Locator::forThe()->xpath("//div[@class='user-list-grid']//div[normalize-space() = '$column']")->
describedAs("The $column column in Users Settings");
}
@@ -170,7 +170,7 @@ class UsersSettingsContext implements Context, ActorAwareInterface {
* @return Locator
*/
public static function editModeOn($user) {
- return Locator::forThe()->css("table.user-list-grid tr.row.row--editable[data-id=$user]")->
+ return Locator::forThe()->css("div.user-list-grid div.row.row--editable[data-id=$user]")->
describedAs("I see the edit mode is on for the user $user in Users Settings");
}