2021-01-02 01:13:34 +01:00
< app-page-header title = "Settings" i18n-title >
2022-09-21 23:17:24 -07:00
< button class = "btn btn-sm btn-outline-primary" ( click )=" tourService . start ()" >< ng-container i18n > Start tour</ ng-container ></ button >
2022-12-17 20:09:29 -08:00
< a * appIfPermissions = "{ action: PermissionAction.View, type: PermissionType.Admin }" class = "btn btn-sm btn-primary ms-3" href = "admin/" target = "_blank" >
2022-12-05 01:25:11 -08:00
< ng-container i18n > Open Django Admin</ ng-container >
< svg class = "sidebaricon ms-1" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#arrow-up-right" />
</ svg >
</ a >
2020-10-27 01:10:18 +01:00
</ app-page-header >
2020-11-04 19:28:08 +01:00
< form [ formGroup ]=" settingsForm " ( ngSubmit )=" saveSettings ()" >
2022-12-05 01:25:11 -08:00
< ul ngbNav # nav = "ngbNav" ( navChange )=" onNavChange ($ event )" [( activeId )]=" activeNavID " class = "nav-tabs" >
2022-11-12 14:46:57 -08:00
< li [ ngbNavItem ]=" SettingsNavIDs . General " >
2022-04-17 00:36:47 -07:00
< a ngbNavLink i18n > General</ a >
2020-11-04 19:28:08 +01:00
< ng-template ngbNavContent >
2020-12-27 23:05:19 -08:00
< h4 i18n > Appearance</ h4 >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2021-01-15 12:50:34 +01:00
< div class = "col-md-3 col-form-label" >
< span i18n > Display language</ span >
</ div >
< div class = "col" >
2022-03-01 12:25:22 -08:00
< select class = "form-select" formControlName = "displayLanguage" >
2022-12-15 22:48:16 -08:00
< option * ngFor = "let lang of displayLanguageOptions" [ ngValue ]=" lang . code " > {{lang.name}}< span * ngIf = "lang.code && currentLocale !== 'en-US'" > - {{lang.englishName}}</ span ></ option >
2021-01-15 12:50:34 +01:00
</ select >
2022-05-25 16:06:59 -07:00
< small * ngIf = "displayLanguageIsDirty" class = "form-text text-primary" i18n > You need to reload the page after applying a new language.</ small >
2021-01-15 12:50:34 +01:00
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2021-01-17 00:15:45 +01:00
< div class = "col-md-3 col-form-label" >
< span i18n > Date display</ span >
</ div >
< div class = "col" >
2022-03-01 12:25:22 -08:00
< select class = "form-select" formControlName = "dateLocale" >
2021-02-17 12:15:22 +01:00
< option * ngFor = "let lang of dateLocaleOptions" [ ngValue ]=" lang . code " > {{lang.name}}< span * ngIf = "lang.code" > - {{today | customDate:'shortDate':null:lang.code}}</ span ></ option >
2021-01-17 00:15:45 +01:00
</ select >
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2021-01-17 00:15:45 +01:00
< div class = "col-md-3 col-form-label" >
< span i18n > Date format</ span >
</ div >
< div class = "col" >
2022-02-19 23:34:32 -08:00
< div class = "form-check" >
< input type = "radio" id = "dateFormatShort" name = "dateFormat" class = "form-check-input" formControlName = "dateFormat" value = "shortDate" >
< label class = "form-check-label" for = "dateFormatShort" i18n > Short: {{today | customDate:'shortDate':null:computedDateLocale}}</ label >
2021-01-17 00:15:45 +01:00
</ div >
2022-02-19 23:34:32 -08:00
< div class = "form-check" >
< input type = "radio" id = "dateFormatMedium" name = "dateFormat" class = "form-check-input" formControlName = "dateFormat" value = "mediumDate" >
< label class = "form-check-label" for = "dateFormatMedium" i18n > Medium: {{today | customDate:'mediumDate':null:computedDateLocale}}</ label >
2021-01-17 00:15:45 +01:00
</ div >
2022-02-19 23:34:32 -08:00
< div class = "form-check" >
< input type = "radio" id = "dateFormatLong" name = "dateFormat" class = "form-check-input" formControlName = "dateFormat" value = "longDate" >
< label class = "form-check-label" for = "dateFormatLong" i18n > Long: {{today | customDate:'longDate':null:computedDateLocale}}</ label >
2021-01-17 00:15:45 +01:00
</ div >
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2020-11-04 19:28:08 +01:00
< div class = "col-md-3 col-form-label" >
2020-12-23 15:09:39 +01:00
< span i18n > Items per page</ span >
2020-11-04 19:28:08 +01:00
</ div >
< div class = "col" >
2020-12-27 23:05:19 -08:00
2022-03-01 12:25:22 -08:00
< select class = "form-select" formControlName = "documentListItemPerPage" >
2020-11-04 19:28:08 +01:00
< option [ ngValue ]=" 10 " > 10</ option >
< option [ ngValue ]=" 25 " > 25</ option >
< option [ ngValue ]=" 50 " > 50</ option >
< option [ ngValue ]=" 100 " > 100</ option >
</ select >
2020-12-27 23:05:19 -08:00
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2021-01-14 13:35:21 +01:00
< div class = "col-md-3 col-form-label" >
< span i18n > Document editor</ span >
</ div >
< div class = "col" >
< app-input-check i18n-title title = "Use PDF viewer provided by the browser" i18n-hint hint = "This is usually faster for displaying large PDF documents, but it might not work on some browsers." formControlName = "useNativePdfViewer" ></ app-input-check >
</ div >
</ div >
2022-09-12 15:26:34 -07:00
< div class = "row mb-3" >
< div class = "col-md-3 col-form-label" >
< span i18n > Sidebar</ span >
</ div >
< div class = "col" >
< app-input-check i18n-title title = "Use 'slim' sidebar (icons only)" formControlName = "slimSidebarEnabled" ></ app-input-check >
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2020-12-27 23:05:19 -08:00
< div class = "col-md-3 col-form-label" >
< span i18n > Dark mode</ span >
</ div >
< div class = "col" >
2021-01-14 13:35:21 +01:00
< app-input-check i18n-title title = "Use system settings" formControlName = "darkModeUseSystem" ></ app-input-check >
< app-input-check [ hidden ]=" settingsForm . value . darkModeUseSystem " i18n-title title = "Enable dark mode" formControlName = "darkModeEnabled" ></ app-input-check >
2021-02-28 12:42:46 +01:00
< app-input-check i18n-title title = "Invert thumbnails in dark mode" formControlName = "darkModeInvertThumbs" ></ app-input-check >
2020-11-04 19:28:08 +01:00
</ div >
</ div >
2022-03-09 14:12:28 -08:00
< div class = "row mb-3" >
< div class = "col-md-3 col-form-label" >
< span i18n > Theme Color</ span >
</ div >
2022-04-17 00:36:47 -07:00
< div class = "col col-md-3" >
2022-03-09 15:34:26 -08:00
< app-input-color i18n-title formControlName = "themeColor" [ error ]=" error ?. color " ></ app-input-color >
2022-03-09 14:12:28 -08:00
</ div >
< div class = "col-2" >
< button class = "btn btn-link btn-sm pt-2 ps-0" [ disabled ]="! this . settingsForm . get (' themeColor '). value " ( click )=" clearThemeColor ()" >
2023-05-03 19:37:36 -07:00
< svg fill = "currentColor" class = "buttonicon-sm me-1" >
< use xlink:href = "assets/bootstrap-icons.svg#x" />
2022-03-09 14:12:28 -08:00
</ svg >< ng-container i18n > Reset</ ng-container >
</ button >
</ div >
</ div >
2022-09-30 12:30:23 -07:00
< h4 class = "mt-4" id = "update-checking" i18n > Update checking</ h4 >
< div class = "row mb-3" >
< div class = "offset-md-3 col" >
< p i18n >
2023-04-22 09:23:37 -07:00
Update checking works by pinging the public < a href = "https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" target = "_blank" rel = "noopener noreferrer" > Github API</ a > for the latest release to determine whether a new version is available.< br />
2022-09-30 12:30:23 -07:00
Actual updating of the app must still be performed manually.
</ p >
< p i18n >
< em > No tracking data is collected by the app in any way.</ em >
</ p >
2023-01-27 09:36:54 -08:00
< app-input-check i18n-title title = "Enable update checking" formControlName = "updateCheckingEnabled" i18n-hint hint = "Note that for users of third-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release." ></ app-input-check >
2022-09-30 12:30:23 -07:00
</ div >
</ div >
2020-12-29 16:58:19 -08:00
< h4 class = "mt-4" i18n > Bulk editing</ h4 >
2020-12-29 17:09:07 +01:00
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2020-12-29 16:58:19 -08:00
< div class = "offset-md-3 col" >
< app-input-check i18n-title title = "Show confirmation dialogs" formControlName = "bulkEditConfirmationDialogs" i18n-hint hint = "Deleting documents will always ask for confirmation." ></ app-input-check >
< app-input-check i18n-title title = "Apply on close" formControlName = "bulkEditApplyOnClose" ></ app-input-check >
</ div >
2022-08-07 15:05:58 -07:00
</ div >
2023-03-17 16:36:08 -07:00
< h4 class = "mt-4" i18n > Notes</ h4 >
2022-08-07 15:05:58 -07:00
< div class = "row mb-3" >
< div class = "offset-md-3 col" >
2023-03-17 16:36:08 -07:00
< app-input-check i18n-title title = "Enable notes" formControlName = "notesEnabled" ></ app-input-check >
2022-08-07 15:05:58 -07:00
</ div >
2020-12-29 16:58:19 -08:00
</ div >
2020-12-29 17:09:07 +01:00
2020-11-04 19:28:08 +01:00
</ ng-template >
</ li >
2021-03-06 14:50:38 -08:00
2022-11-12 14:46:57 -08:00
< li [ ngbNavItem ]=" SettingsNavIDs . Notifications " >
2021-02-02 14:06:16 +01:00
< a ngbNavLink i18n > Notifications</ a >
< ng-template ngbNavContent >
2021-03-06 14:50:38 -08:00
2021-02-02 14:06:16 +01:00
< h4 i18n > Document processing</ h4 >
2020-12-29 17:09:07 +01:00
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2020-12-29 16:58:19 -08:00
< div class = "offset-md-3 col" >
2021-02-02 14:06:16 +01:00
< app-input-check i18n-title title = "Show notifications when new documents are detected" formControlName = "notificationsConsumerNewDocument" ></ app-input-check >
< app-input-check i18n-title title = "Show notifications when document processing completes successfully" formControlName = "notificationsConsumerSuccess" ></ app-input-check >
< app-input-check i18n-title title = "Show notifications when document processing fails" formControlName = "notificationsConsumerFailed" ></ app-input-check >
< app-input-check i18n-title title = "Suppress notifications on dashboard" formControlName = "notificationsConsumerSuppressOnDashboard" i18n-hint hint = "This will suppress all messages about document processing status on the dashboard." ></ app-input-check >
2020-12-29 16:58:19 -08:00
</ div >
</ div >
2020-12-29 17:09:07 +01:00
2020-11-04 19:28:08 +01:00
</ ng-template >
</ li >
2021-02-02 14:06:16 +01:00
2022-11-12 14:46:57 -08:00
< li [ ngbNavItem ]=" SettingsNavIDs . SavedViews " ( mouseover )=" maybeInitializeTab ( SettingsNavIDs . SavedViews )" ( focusin )=" maybeInitializeTab ( SettingsNavIDs . SavedViews )" >
2020-12-23 15:09:39 +01:00
< a ngbNavLink i18n > Saved views</ a >
2020-11-04 19:28:08 +01:00
< ng-template ngbNavContent >
2023-02-15 09:39:31 -08:00
< h4 i18n > Settings</ h4 >
< div class = "row mb-3" >
< div class = "offset-md-3 col" >
< app-input-check i18n-title title = "Show warning when closing saved views with unsaved changes" formControlName = "savedViewsWarnOnUnsavedChange" ></ app-input-check >
</ div >
</ div >
< h4 i18n > Views</ h4 >
2020-12-15 02:35:04 +01:00
< div formGroupName = "savedViews" >
2020-12-27 23:05:19 -08:00
2022-02-19 23:34:32 -08:00
< div * ngFor = "let view of savedViews" [ formGroupName ]=" view . id " class = "row" >
2022-02-20 01:32:24 -08:00
< div class = "mb-3 col" >
2022-02-19 23:34:32 -08:00
< label class = "form-label" for = "name_{{view.id}}" i18n > Name</ label >
2020-12-15 02:35:04 +01:00
< input type = "text" class = "form-control" formControlName = "name" id = "name_{{view.id}}" >
</ div >
2022-02-20 01:32:24 -08:00
< div class = "mb-2 col" >
2022-02-19 23:34:32 -08:00
< label class = "form-label" for = "show_on_dashboard_{{view.id}}" i18n > Appears on</ label >
< div class = "form-check form-switch" >
< input type = "checkbox" class = "form-check-input" id = "show_on_dashboard_{{view.id}}" formControlName = "show_on_dashboard" >
< label class = "form-check-label" for = "show_on_dashboard_{{view.id}}" i18n > Show on dashboard</ label >
2020-12-15 02:35:04 +01:00
</ div >
2022-02-19 23:34:32 -08:00
< div class = "form-check form-switch" >
< input type = "checkbox" class = "form-check-input" id = "show_in_sidebar_{{view.id}}" formControlName = "show_in_sidebar" >
< label class = "form-check-label" for = "show_in_sidebar_{{view.id}}" i18n > Show in sidebar</ label >
2020-12-15 02:35:04 +01:00
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "mb-2 col-auto" >
< label class = "form-label" for = "name_{{view.id}}" i18n > Actions</ label >
2022-12-17 20:09:29 -08:00
< button type = "button" class = "btn btn-sm btn-outline-danger form-control" ( click )=" deleteSavedView ( view )" * appIfPermissions = "{ action: PermissionAction.Delete, type: PermissionType.SavedView }" i18n > Delete</ button >
2020-12-15 02:35:04 +01:00
</ div >
</ div >
2022-12-15 22:48:16 -08:00
< div * ngIf = "savedViews && savedViews.length === 0" i18n > No saved views defined.</ div >
2022-11-12 14:46:57 -08:00
< div * ngIf = "!savedViews" >
< div class = "spinner-border spinner-border-sm fw-normal ms-2 me-auto" role = "status" ></ div >
< div class = "visually-hidden" i18n > Loading...</ div >
</ div >
2020-12-27 23:05:19 -08:00
2020-12-15 02:35:04 +01:00
</ div >
2020-11-04 19:28:08 +01:00
</ ng-template >
</ li >
2022-11-13 07:23:33 -08:00
2022-12-17 20:09:29 -08:00
< li * appIfPermissions = "{ action: PermissionAction.View, type: PermissionType.MailRule }" [ ngbNavItem ]=" SettingsNavIDs . Mail " ( mouseover )=" maybeInitializeTab ( SettingsNavIDs . Mail )" ( focusin )=" maybeInitializeTab ( SettingsNavIDs . Mail )" >
2022-12-05 01:25:11 -08:00
< a ngbNavLink i18n > Mail</ a >
< ng-template ngbNavContent >
< ng-container * ngIf = "mailAccounts && mailRules" >
2022-12-17 20:09:29 -08:00
< ng-container * appIfPermissions = "{ action: PermissionAction.View, type: PermissionType.MailAccount }" >
2022-12-05 12:28:44 -08:00
< h4 >
< ng-container i18n > Mail accounts</ ng-container >
< button type = "button" class = "btn btn-sm btn-primary ms-4" ( click )=" editMailAccount ()" >
< svg class = "sidebaricon me-1" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#plus-circle" />
</ svg >
< ng-container i18n > Add Account</ ng-container >
</ button >
</ h4 >
< ul class = "list-group" formGroupName = "mailAccounts" >
< li class = "list-group-item" >
< div class = "row" >
< div class = "col" i18n > Name</ div >
< div class = "col" i18n > Server</ div >
< div class = "col" i18n > Actions</ div >
</ div >
</ li >
< li * ngFor = "let account of mailAccounts" class = "list-group-item" [ formGroupName ]=" account . id " >
< div class = "row" >
< div class = "col d-flex align-items-center" >< button class = "btn btn-link p-0" type = "button" ( click )=" editMailAccount ( account )" > {{account.name}}</ button ></ div >
< div class = "col d-flex align-items-center" > {{account.imap_server}}</ div >
< div class = "col" >
< div class = "btn-group" >
2022-12-17 20:09:29 -08:00
< button * appIfPermissions = "{ action: PermissionAction.Change, type: PermissionType.MailAccount }" class = "btn btn-sm btn-primary" type = "button" ( click )=" editMailAccount ( account )" i18n > Edit</ button >
< button * appIfPermissions = "{ action: PermissionAction.Change, type: PermissionType.MailAccount }" class = "btn btn-sm btn-outline-danger" type = "button" ( click )=" deleteMailAccount ( account )" i18n > Delete</ button >
2022-12-05 12:28:44 -08:00
</ div >
2022-12-05 01:25:11 -08:00
</ div >
</ div >
2022-12-05 12:28:44 -08:00
</ li >
2022-12-17 20:05:12 -08:00
< div * ngIf = "mailAccounts.length === 0" i18n > No mail accounts defined.</ div >
2022-12-05 12:28:44 -08:00
</ ul >
</ ng-container >
2022-12-17 20:09:29 -08:00
< ng-container * appIfPermissions = "{ action: PermissionAction.View, type: PermissionType.MailRule }" >
2022-12-05 12:28:44 -08:00
< h4 class = "mt-4" >
< ng-container i18n > Mail rules</ ng-container >
< button type = "button" class = "btn btn-sm btn-primary ms-4" ( click )=" editMailRule ()" >
< svg class = "sidebaricon me-1" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#plus-circle" />
</ svg >
< ng-container i18n > Add Rule</ ng-container >
</ button >
</ h4 >
< ul class = "list-group" formGroupName = "mailRules" >
< li class = "list-group-item" >
< div class = "row" >
< div class = "col" i18n > Name</ div >
< div class = "col" i18n > Account</ div >
< div class = "col" i18n > Actions</ div >
</ div >
</ li >
< li * ngFor = "let rule of mailRules" class = "list-group-item" [ formGroupName ]=" rule . id " >
< div class = "row" >
< div class = "col d-flex align-items-center" >< button class = "btn btn-link p-0" type = "button" ( click )=" editMailRule ( rule )" > {{rule.name}}</ button ></ div >
< div class = "col d-flex align-items-center" > {{(mailAccountService.getCached(rule.account) | async)?.name}}</ div >
< div class = "col" >
< div class = "btn-group" >
2022-12-17 20:09:29 -08:00
< button * appIfPermissions = "{ action: PermissionAction.Change, type: PermissionType.MailRule }" class = "btn btn-sm btn-primary" type = "button" ( click )=" editMailRule ( rule )" i18n > Edit</ button >
< button * appIfPermissions = "{ action: PermissionAction.Change, type: PermissionType.MailRule }" class = "btn btn-sm btn-outline-danger" type = "button" ( click )=" deleteMailRule ( rule )" i18n > Delete</ button >
2022-12-05 12:28:44 -08:00
</ div >
2022-12-05 01:25:11 -08:00
</ div >
</ div >
2022-12-05 12:28:44 -08:00
</ li >
2022-12-05 01:25:11 -08:00
2022-12-17 20:05:12 -08:00
< div * ngIf = "mailRules.length === 0" i18n > No mail rules defined.</ div >
2022-12-05 12:28:44 -08:00
</ ul >
</ ng-container >
2022-12-05 01:25:11 -08:00
</ ng-container >
< div * ngIf = "!mailAccounts || !mailRules" >
< div class = "spinner-border spinner-border-sm fw-normal ms-2 me-auto" role = "status" ></ div >
< div class = "visually-hidden" i18n > Loading...</ div >
</ div >
</ ng-template >
</ li >
2022-12-17 20:09:29 -08:00
< li [ ngbNavItem ]=" SettingsNavIDs . UsersGroups " * appIfPermissions = "{ action: PermissionAction.Add, type: PermissionType.User }" ( mouseover )=" maybeInitializeTab ( SettingsNavIDs . UsersGroups )" ( focusin )=" maybeInitializeTab ( SettingsNavIDs . UsersGroups )" >
2022-11-13 07:23:33 -08:00
< a ngbNavLink i18n > Users & Groups</ a >
< ng-template ngbNavContent >
< ng-container * ngIf = "users && groups" >
< h4 class = "d-flex" >
< ng-container i18n > Users</ ng-container >
2022-12-05 12:28:44 -08:00
< button type = "button" class = "btn btn-sm btn-primary ms-4" ( click )=" editUser ()" >
< svg class = "sidebaricon me-1" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#plus-circle" />
</ svg >
< ng-container i18n > Add User</ ng-container >
</ button >
2022-11-13 07:23:33 -08:00
</ h4 >
< ul class = "list-group" formGroupName = "usersGroup" >
< li class = "list-group-item" >
< div class = "row" >
< div class = "col" i18n > Username</ div >
< div class = "col" i18n > Name</ div >
< div class = "col" i18n > Groups</ div >
< div class = "col" i18n > Actions</ div >
</ div >
</ li >
< li * ngFor = "let user of users" class = "list-group-item" [ formGroupName ]=" user . id " >
< div class = "row" >
< div class = "col d-flex align-items-center" >< button class = "btn btn-link p-0" type = "button" ( click )=" editUser ( user )" > {{user.username}}</ button ></ div >
< div class = "col d-flex align-items-center" > {{user.first_name}} {{user.last_name}}</ div >
2022-12-05 13:23:08 -08:00
< div class = "col d-flex align-items-center" > {{user.groups?.map(getGroupName, this).join(', ')}}</ div >
2022-11-13 07:23:33 -08:00
< div class = "col" >
< div class = "btn-group" >
< button class = "btn btn-sm btn-primary" type = "button" ( click )=" editUser ( user )" i18n > Edit</ button >
< button class = "btn btn-sm btn-outline-danger" type = "button" ( click )=" deleteUser ( user )" i18n > Delete</ button >
</ div >
</ div >
</ div >
</ li >
</ ul >
< h4 class = "mt-4 d-flex" >
< ng-container i18n > Groups</ ng-container >
2022-12-05 12:28:44 -08:00
< button type = "button" class = "btn btn-sm btn-primary ms-4" ( click )=" editGroup ()" >
< svg class = "sidebaricon me-1" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#plus-circle" />
</ svg >
< ng-container i18n > Add Group</ ng-container >
</ button >
2022-11-13 07:23:33 -08:00
</ h4 >
< ul * ngIf = "groups.length > 0" class = "list-group" formGroupName = "groupsGroup" >
< li class = "list-group-item" >
< div class = "row" >
< div class = "col" i18n > Name</ div >
< div class = "col" ></ div >
< div class = "col" ></ div >
< div class = "col" i18n > Actions</ div >
</ div >
</ li >
< li * ngFor = "let group of groups" class = "list-group-item" [ formGroupName ]=" group . id " >
< div class = "row" >
< div class = "col d-flex align-items-center" >< button class = "btn btn-link p-0" type = "button" ( click )=" editGroup ( group )" > {{group.name}}</ button ></ div >
< div class = "col" ></ div >
< div class = "col" ></ div >
< div class = "col" >
< div class = "btn-group" >
< button class = "btn btn-sm btn-primary" type = "button" ( click )=" editGroup ( group )" i18n > Edit</ button >
< button class = "btn btn-sm btn-outline-danger" type = "button" ( click )=" deleteGroup ( group )" i18n > Delete</ button >
</ div >
</ div >
</ div >
</ li >
</ ul >
2022-12-17 20:09:29 -08:00
< div * ngIf = "groups.length === 0" > No groups defined</ div >
2022-11-13 07:23:33 -08:00
</ ng-container >
< div * ngIf = "!users || !groups" >
< div class = "spinner-border spinner-border-sm fw-normal ms-2 me-auto" role = "status" ></ div >
< div class = "visually-hidden" i18n > Loading...</ div >
</ div >
</ ng-template >
</ li >
2020-11-04 19:28:08 +01:00
</ ul >
2022-02-20 01:21:30 +01:00
< div [ ngbNavOutlet ]=" nav " class = "border-start border-end border-bottom p-3 mb-3 shadow-sm" ></ div >
2020-11-04 19:28:08 +01:00
2022-12-17 20:09:29 -08:00
< button type = "submit" class = "btn btn-primary mb-2" * appIfPermissions = "{ action: PermissionAction.Change, type: PermissionType.UISettings }" [ disabled ]="( isDirty $ | async ) === false " i18n > Save</ button >
2020-12-27 23:05:19 -08:00
</ form >