- ts
- markdown
exclude: "(^Pipfile\\.lock$)"
+ additional_dependencies:
+ - prettier@3.3.3
+ - 'prettier-plugin-organize-imports@4.1.0'
# Python hooks
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.8.2
+++ /dev/null
-{
- # https://prettier.io/docs/en/options.html#semicolons
- "semi": false,
- # https://prettier.io/docs/en/options.html#quotes
- "singleQuote": true,
- # https://prettier.io/docs/en/options.html#trailing-commas
- "trailingComma": "es5",
- "overrides": [
- {
- "files": ["docs/*.md"],
- "options": {
- "tabWidth": 4,
- }
- }
- ]
-}
--- /dev/null
+const config = {
+ // https://prettier.io/docs/en/options.html#semicolons
+ semi: false,
+ // https://prettier.io/docs/en/options.html#quotes
+ singleQuote: true,
+ // https://prettier.io/docs/en/options.html#trailing-commas
+ trailingComma: 'es5',
+ overrides: [
+ {
+ files: ['docs/*.md'],
+ options: {
+ tabWidth: 4,
+ },
+ },
+ ],
+ plugins: [require('prettier-plugin-organize-imports')],
+}
+
+module.exports = config
-import { test, expect } from '@playwright/test'
+import { expect, test } from '@playwright/test'
import path from 'node:path'
const REQUESTS_HAR = path.join(__dirname, 'requests/api-settings.har')
-import { test, expect } from '@playwright/test'
+import { expect, test } from '@playwright/test'
import path from 'node:path'
const REQUESTS_HAR1 = path.join(__dirname, 'requests/api-dashboard1.har')
-import { test, expect } from '@playwright/test'
+import { expect, test } from '@playwright/test'
import path from 'node:path'
const REQUESTS_HAR = path.join(__dirname, 'requests/api-document-detail.har')
-import { test, expect } from '@playwright/test'
+import { expect, test } from '@playwright/test'
import path from 'node:path'
const REQUESTS_HAR1 = path.join(__dirname, 'requests/api-document-list1.har')
-import { test, expect } from '@playwright/test'
+import { expect, test } from '@playwright/test'
import path from 'node:path'
const REQUESTS_HAR = path.join(__dirname, 'requests/api-global-permissions.har')
-import * as webpack from 'webpack'
import {
CustomWebpackBrowserSchema,
TargetOptions,
} from '@angular-builders/custom-webpack'
+import * as webpack from 'webpack'
const { codecovWebpackPlugin } = require('@codecov/webpack-plugin')
export default (
"jest-preset-angular": "^14.2.4",
"jest-websocket-mock": "^2.5.0",
"patch-package": "^8.0.0",
+ "prettier-plugin-organize-imports": "^4.1.0",
"ts-node": "~10.9.1",
"typescript": "^5.5.4"
}
"node": ">= 0.8.0"
}
},
+ "node_modules/prettier": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
+ "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-plugin-organize-imports": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz",
+ "integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "prettier": ">=2.0",
+ "typescript": ">=2.9",
+ "vue-tsc": "^2.1.0"
+ },
+ "peerDependenciesMeta": {
+ "vue-tsc": {
+ "optional": true
+ }
+ }
+ },
"node_modules/pretty-format": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
"jest-preset-angular": "^14.2.4",
"jest-websocket-mock": "^2.5.0",
"patch-package": "^8.0.0",
+ "prettier-plugin-organize-imports": "^4.1.0",
"ts-node": "~10.9.1",
"typescript": "^5.5.4"
},
+import '@angular/localize/init'
import { jest } from '@jest/globals'
+import { TextDecoder, TextEncoder } from 'util'
if (process.env.NODE_ENV === 'test') {
require('jest-preset-angular/setup-jest')
}
-import '@angular/localize/init'
-import { TextEncoder, TextDecoder } from 'util'
global.TextEncoder = TextEncoder
global.TextDecoder = TextDecoder
import { NgModule } from '@angular/core'
-import { Routes, RouterModule } from '@angular/router'
+import { RouterModule, Routes } from '@angular/router'
+import { ConfigComponent } from './components/admin/config/config.component'
+import { LogsComponent } from './components/admin/logs/logs.component'
+import { SettingsComponent } from './components/admin/settings/settings.component'
+import { TasksComponent } from './components/admin/tasks/tasks.component'
+import { TrashComponent } from './components/admin/trash/trash.component'
+import { UsersAndGroupsComponent } from './components/admin/users-groups/users-groups.component'
import { AppFrameComponent } from './components/app-frame/app-frame.component'
import { DashboardComponent } from './components/dashboard/dashboard.component'
+import { DocumentAsnComponent } from './components/document-asn/document-asn.component'
import { DocumentDetailComponent } from './components/document-detail/document-detail.component'
import { DocumentListComponent } from './components/document-list/document-list.component'
import { CorrespondentListComponent } from './components/manage/correspondent-list/correspondent-list.component'
+import { CustomFieldsComponent } from './components/manage/custom-fields/custom-fields.component'
import { DocumentTypeListComponent } from './components/manage/document-type-list/document-type-list.component'
-import { LogsComponent } from './components/admin/logs/logs.component'
-import { SettingsComponent } from './components/admin/settings/settings.component'
+import { MailComponent } from './components/manage/mail/mail.component'
+import { SavedViewsComponent } from './components/manage/saved-views/saved-views.component'
+import { StoragePathListComponent } from './components/manage/storage-path-list/storage-path-list.component'
import { TagListComponent } from './components/manage/tag-list/tag-list.component'
+import { WorkflowsComponent } from './components/manage/workflows/workflows.component'
import { NotFoundComponent } from './components/not-found/not-found.component'
-import { DocumentAsnComponent } from './components/document-asn/document-asn.component'
-import { DirtyFormGuard } from './guards/dirty-form.guard'
-import { StoragePathListComponent } from './components/manage/storage-path-list/storage-path-list.component'
-import { TasksComponent } from './components/admin/tasks/tasks.component'
-import { PermissionsGuard } from './guards/permissions.guard'
import { DirtyDocGuard } from './guards/dirty-doc.guard'
+import { DirtyFormGuard } from './guards/dirty-form.guard'
import { DirtySavedViewGuard } from './guards/dirty-saved-view.guard'
+import { PermissionsGuard } from './guards/permissions.guard'
import {
PermissionAction,
PermissionType,
} from './services/permissions.service'
-import { WorkflowsComponent } from './components/manage/workflows/workflows.component'
-import { MailComponent } from './components/manage/mail/mail.component'
-import { UsersAndGroupsComponent } from './components/admin/users-groups/users-groups.component'
-import { CustomFieldsComponent } from './components/manage/custom-fields/custom-fields.component'
-import { ConfigComponent } from './components/admin/config/config.component'
-import { TrashComponent } from './components/admin/trash/trash.component'
-import { SavedViewsComponent } from './components/manage/saved-views/saved-views.component'
export const routes: Routes = [
{ path: '', redirectTo: 'dashboard', pathMatch: 'full' },
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
ComponentFixture,
tick,
} from '@angular/core/testing'
import { Router, RouterModule } from '@angular/router'
-import { TourService, TourNgBootstrapModule } from 'ngx-ui-tour-ng-bootstrap'
+import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgxFileDropModule } from 'ngx-file-drop'
+import { TourNgBootstrapModule, TourService } from 'ngx-ui-tour-ng-bootstrap'
import { Subject } from 'rxjs'
import { routes } from './app-routing.module'
import { AppComponent } from './app.component'
import { ToastsComponent } from './components/common/toasts/toasts.component'
+import { FileDropComponent } from './components/file-drop/file-drop.component'
+import { DirtySavedViewGuard } from './guards/dirty-saved-view.guard'
+import { PermissionsGuard } from './guards/permissions.guard'
import {
ConsumerStatusService,
FileStatus,
} from './services/consumer-status.service'
+import { HotKeyService } from './services/hot-key.service'
import { PermissionsService } from './services/permissions.service'
-import { ToastService, Toast } from './services/toast.service'
import { SettingsService } from './services/settings.service'
-import { FileDropComponent } from './components/file-drop/file-drop.component'
-import { NgxFileDropModule } from 'ngx-file-drop'
-import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap'
-import { HotKeyService } from './services/hot-key.service'
-import { PermissionsGuard } from './guards/permissions.guard'
-import { DirtySavedViewGuard } from './guards/dirty-saved-view.guard'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { Toast, ToastService } from './services/toast.service'
describe('AppComponent', () => {
let component: AppComponent
-import { SettingsService } from './services/settings.service'
-import { SETTINGS_KEYS } from './data/ui-settings'
import { Component, OnDestroy, OnInit, Renderer2 } from '@angular/core'
import { Router } from '@angular/router'
-import { Subscription, first } from 'rxjs'
-import { ConsumerStatusService } from './services/consumer-status.service'
-import { ToastService } from './services/toast.service'
-import { TasksService } from './services/tasks.service'
import { TourService } from 'ngx-ui-tour-ng-bootstrap'
+import { first, Subscription } from 'rxjs'
+import { SETTINGS_KEYS } from './data/ui-settings'
+import { ConsumerStatusService } from './services/consumer-status.service'
+import { HotKeyService } from './services/hot-key.service'
import {
PermissionAction,
PermissionsService,
PermissionType,
} from './services/permissions.service'
-import { HotKeyService } from './services/hot-key.service'
+import { SettingsService } from './services/settings.service'
+import { TasksService } from './services/tasks.service'
+import { ToastService } from './services/toast.service'
@Component({
selector: 'pngx-root',
-import { BrowserModule } from '@angular/platform-browser'
-import { APP_INITIALIZER, NgModule } from '@angular/core'
-import { AppRoutingModule } from './app-routing.module'
-import { AppComponent } from './app.component'
-import {
- NgbDateAdapter,
- NgbDateParserFormatter,
- NgbModule,
-} from '@ng-bootstrap/ng-bootstrap'
+import { DragDropModule } from '@angular/cdk/drag-drop'
+import { DatePipe, registerLocaleData } from '@angular/common'
import {
HTTP_INTERCEPTORS,
provideHttpClient,
withInterceptorsFromDi,
} from '@angular/common/http'
-import { DocumentListComponent } from './components/document-list/document-list.component'
-import { DocumentDetailComponent } from './components/document-detail/document-detail.component'
-import { DashboardComponent } from './components/dashboard/dashboard.component'
-import { TagListComponent } from './components/manage/tag-list/tag-list.component'
-import { DocumentTypeListComponent } from './components/manage/document-type-list/document-type-list.component'
-import { CorrespondentListComponent } from './components/manage/correspondent-list/correspondent-list.component'
-import { LogsComponent } from './components/admin/logs/logs.component'
-import { SettingsComponent } from './components/admin/settings/settings.component'
+import { APP_INITIALIZER, NgModule } from '@angular/core'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { DatePipe, registerLocaleData } from '@angular/common'
-import { NotFoundComponent } from './components/not-found/not-found.component'
-import { ConfirmDialogComponent } from './components/common/confirm-dialog/confirm-dialog.component'
-import { CorrespondentEditDialogComponent } from './components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
-import { TagEditDialogComponent } from './components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
-import { DocumentTypeEditDialogComponent } from './components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
-import { TagComponent } from './components/common/tag/tag.component'
-import { ClearableBadgeComponent } from './components/common/clearable-badge/clearable-badge.component'
-import { PageHeaderComponent } from './components/common/page-header/page-header.component'
-import { AppFrameComponent } from './components/app-frame/app-frame.component'
-import { ToastsComponent } from './components/common/toasts/toasts.component'
-import { FilterEditorComponent } from './components/document-list/filter-editor/filter-editor.component'
-import { FilterableDropdownComponent } from './components/common/filterable-dropdown/filterable-dropdown.component'
-import { ToggleableDropdownButtonComponent } from './components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'
-import { DatesDropdownComponent } from './components/common/dates-dropdown/dates-dropdown.component'
-import { DocumentCardLargeComponent } from './components/document-list/document-card-large/document-card-large.component'
-import { DocumentCardSmallComponent } from './components/document-list/document-card-small/document-card-small.component'
-import { BulkEditorComponent } from './components/document-list/bulk-editor/bulk-editor.component'
-import { NgxFileDropModule } from 'ngx-file-drop'
-import { TextComponent } from './components/common/input/text/text.component'
-import { TextAreaComponent } from './components/common/input/textarea/textarea.component'
-import { SelectComponent } from './components/common/input/select/select.component'
-import { CheckComponent } from './components/common/input/check/check.component'
-import { UrlComponent } from './components/common/input/url/url.component'
-import { PasswordComponent } from './components/common/input/password/password.component'
-import { SaveViewConfigDialogComponent } from './components/document-list/save-view-config-dialog/save-view-config-dialog.component'
-import { TagsComponent } from './components/common/input/tags/tags.component'
-import { IfPermissionsDirective } from './directives/if-permissions.directive'
-import { SortableDirective } from './directives/sortable.directive'
-import { CookieService } from 'ngx-cookie-service'
-import { CsrfInterceptor } from './interceptors/csrf.interceptor'
-import { SavedViewWidgetComponent } from './components/dashboard/widgets/saved-view-widget/saved-view-widget.component'
-import { StatisticsWidgetComponent } from './components/dashboard/widgets/statistics-widget/statistics-widget.component'
-import { UploadFileWidgetComponent } from './components/dashboard/widgets/upload-file-widget/upload-file-widget.component'
-import { WidgetFrameComponent } from './components/dashboard/widgets/widget-frame/widget-frame.component'
-import { WelcomeWidgetComponent } from './components/dashboard/widgets/welcome-widget/welcome-widget.component'
-import { YesNoPipe } from './pipes/yes-no.pipe'
-import { FileSizePipe } from './pipes/file-size.pipe'
-import { FilterPipe } from './pipes/filter.pipe'
-import { DocumentTitlePipe } from './pipes/document-title.pipe'
-import { MetadataCollapseComponent } from './components/document-detail/metadata-collapse/metadata-collapse.component'
-import { SelectDialogComponent } from './components/common/select-dialog/select-dialog.component'
+import { BrowserModule } from '@angular/platform-browser'
+import {
+ NgbDateAdapter,
+ NgbDateParserFormatter,
+ NgbModule,
+} from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
-import { NumberComponent } from './components/common/input/number/number.component'
-import { SafeUrlPipe } from './pipes/safeurl.pipe'
-import { SafeHtmlPipe } from './pipes/safehtml.pipe'
-import { CustomDatePipe } from './pipes/custom-date.pipe'
-import { DateComponent } from './components/common/input/date/date.component'
-import { ISODateAdapter } from './utils/ngb-iso-date-adapter'
-import { LocalizedDateParserFormatter } from './utils/ngb-date-parser-formatter'
-import { ApiVersionInterceptor } from './interceptors/api-version.interceptor'
-import { ColorSliderModule } from 'ngx-color/slider'
-import { ColorComponent } from './components/common/input/color/color.component'
-import { DocumentAsnComponent } from './components/document-asn/document-asn.component'
-import { DocumentNotesComponent } from './components/document-notes/document-notes.component'
-import { PermissionsGuard } from './guards/permissions.guard'
-import { DirtyDocGuard } from './guards/dirty-doc.guard'
-import { DirtySavedViewGuard } from './guards/dirty-saved-view.guard'
-import { StoragePathListComponent } from './components/manage/storage-path-list/storage-path-list.component'
-import { StoragePathEditDialogComponent } from './components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
-import { SettingsService } from './services/settings.service'
-import { TasksComponent } from './components/admin/tasks/tasks.component'
-import { TourNgBootstrapModule } from 'ngx-ui-tour-ng-bootstrap'
-import { UserEditDialogComponent } from './components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component'
-import { GroupEditDialogComponent } from './components/common/edit-dialog/group-edit-dialog/group-edit-dialog.component'
-import { PermissionsSelectComponent } from './components/common/permissions-select/permissions-select.component'
-import { MailAccountEditDialogComponent } from './components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component'
-import { MailRuleEditDialogComponent } from './components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
-import { PermissionsUserComponent } from './components/common/input/permissions/permissions-user/permissions-user.component'
-import { PermissionsGroupComponent } from './components/common/input/permissions/permissions-group/permissions-group.component'
-import { IfOwnerDirective } from './directives/if-owner.directive'
-import { IfObjectPermissionsDirective } from './directives/if-object-permissions.directive'
-import { PermissionsDialogComponent } from './components/common/permissions-dialog/permissions-dialog.component'
-import { PermissionsFormComponent } from './components/common/input/permissions/permissions-form/permissions-form.component'
-import { PermissionsFilterDropdownComponent } from './components/common/permissions-filter-dropdown/permissions-filter-dropdown.component'
-import { UsernamePipe } from './pipes/username.pipe'
-import { LogoComponent } from './components/common/logo/logo.component'
-import { IsNumberPipe } from './pipes/is-number.pipe'
-import { ShareLinksDropdownComponent } from './components/common/share-links-dropdown/share-links-dropdown.component'
-import { WorkflowsComponent } from './components/manage/workflows/workflows.component'
-import { WorkflowEditDialogComponent } from './components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component'
-import { MailComponent } from './components/manage/mail/mail.component'
-import { UsersAndGroupsComponent } from './components/admin/users-groups/users-groups.component'
-import { DragDropModule } from '@angular/cdk/drag-drop'
-import { FileDropComponent } from './components/file-drop/file-drop.component'
-import { CustomFieldsComponent } from './components/manage/custom-fields/custom-fields.component'
-import { CustomFieldEditDialogComponent } from './components/common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
-import { CustomFieldsDropdownComponent } from './components/common/custom-fields-dropdown/custom-fields-dropdown.component'
-import { CustomFieldsQueryDropdownComponent } from './components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component'
-import { ProfileEditDialogComponent } from './components/common/profile-edit-dialog/profile-edit-dialog.component'
import { PdfViewerModule } from 'ng2-pdf-viewer'
-import { DocumentLinkComponent } from './components/common/input/document-link/document-link.component'
-import { PreviewPopupComponent } from './components/common/preview-popup/preview-popup.component'
-import { SwitchComponent } from './components/common/input/switch/switch.component'
-import { ConfigComponent } from './components/admin/config/config.component'
-import { FileComponent } from './components/common/input/file/file.component'
-import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
-import { ConfirmButtonComponent } from './components/common/confirm-button/confirm-button.component'
-import { MonetaryComponent } from './components/common/input/monetary/monetary.component'
-import { SystemStatusDialogComponent } from './components/common/system-status-dialog/system-status-dialog.component'
-import { RotateConfirmDialogComponent } from './components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
-import { MergeConfirmDialogComponent } from './components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component'
-import { SplitConfirmDialogComponent } from './components/common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component'
-import { DocumentHistoryComponent } from './components/document-history/document-history.component'
-import { DragDropSelectComponent } from './components/common/input/drag-drop-select/drag-drop-select.component'
-import { CustomFieldDisplayComponent } from './components/common/custom-field-display/custom-field-display.component'
-import { GlobalSearchComponent } from './components/app-frame/global-search/global-search.component'
-import { HotkeyDialogComponent } from './components/common/hotkey-dialog/hotkey-dialog.component'
-import { DeletePagesConfirmDialogComponent } from './components/common/confirm-dialog/delete-pages-confirm-dialog/delete-pages-confirm-dialog.component'
-import { TrashComponent } from './components/admin/trash/trash.component'
-import { EntriesComponent } from './components/common/input/entries/entries.component'
-import { SavedViewsComponent } from './components/manage/saved-views/saved-views.component'
-import { CustomFieldsBulkEditDialogComponent } from './components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component'
import {
airplane,
archive,
arrowRightShort,
arrowUpRight,
asterisk,
- braces,
bodyText,
boxArrowUp,
boxArrowUpRight,
boxes,
+ braces,
calendar,
calendarEvent,
calendarEventFill,
listTask,
listUl,
microsoft,
+ NgxBootstrapIconsModule,
nodePlus,
pencil,
people,
sliders2Vertical,
sortAlphaDown,
sortAlphaUpAlt,
- tagFill,
tag,
+ tagFill,
tags,
textIndentLeft,
textLeft,
xCircle,
xLg,
} from 'ngx-bootstrap-icons'
+import { ColorSliderModule } from 'ngx-color/slider'
+import { CookieService } from 'ngx-cookie-service'
+import { NgxFileDropModule } from 'ngx-file-drop'
+import { TourNgBootstrapModule } from 'ngx-ui-tour-ng-bootstrap'
+import { AppRoutingModule } from './app-routing.module'
+import { AppComponent } from './app.component'
+import { ConfigComponent } from './components/admin/config/config.component'
+import { LogsComponent } from './components/admin/logs/logs.component'
+import { SettingsComponent } from './components/admin/settings/settings.component'
+import { TasksComponent } from './components/admin/tasks/tasks.component'
+import { TrashComponent } from './components/admin/trash/trash.component'
+import { UsersAndGroupsComponent } from './components/admin/users-groups/users-groups.component'
+import { AppFrameComponent } from './components/app-frame/app-frame.component'
+import { GlobalSearchComponent } from './components/app-frame/global-search/global-search.component'
+import { ClearableBadgeComponent } from './components/common/clearable-badge/clearable-badge.component'
+import { ConfirmButtonComponent } from './components/common/confirm-button/confirm-button.component'
+import { ConfirmDialogComponent } from './components/common/confirm-dialog/confirm-dialog.component'
+import { DeletePagesConfirmDialogComponent } from './components/common/confirm-dialog/delete-pages-confirm-dialog/delete-pages-confirm-dialog.component'
+import { MergeConfirmDialogComponent } from './components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component'
+import { RotateConfirmDialogComponent } from './components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
+import { SplitConfirmDialogComponent } from './components/common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component'
+import { CustomFieldDisplayComponent } from './components/common/custom-field-display/custom-field-display.component'
+import { CustomFieldsDropdownComponent } from './components/common/custom-fields-dropdown/custom-fields-dropdown.component'
+import { CustomFieldsQueryDropdownComponent } from './components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component'
+import { DatesDropdownComponent } from './components/common/dates-dropdown/dates-dropdown.component'
+import { CorrespondentEditDialogComponent } from './components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
+import { CustomFieldEditDialogComponent } from './components/common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
+import { DocumentTypeEditDialogComponent } from './components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
+import { GroupEditDialogComponent } from './components/common/edit-dialog/group-edit-dialog/group-edit-dialog.component'
+import { MailAccountEditDialogComponent } from './components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component'
+import { MailRuleEditDialogComponent } from './components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
+import { StoragePathEditDialogComponent } from './components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
+import { TagEditDialogComponent } from './components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
+import { UserEditDialogComponent } from './components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component'
+import { WorkflowEditDialogComponent } from './components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component'
+import { FilterableDropdownComponent } from './components/common/filterable-dropdown/filterable-dropdown.component'
+import { ToggleableDropdownButtonComponent } from './components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'
+import { HotkeyDialogComponent } from './components/common/hotkey-dialog/hotkey-dialog.component'
+import { CheckComponent } from './components/common/input/check/check.component'
+import { ColorComponent } from './components/common/input/color/color.component'
+import { DateComponent } from './components/common/input/date/date.component'
+import { DocumentLinkComponent } from './components/common/input/document-link/document-link.component'
+import { DragDropSelectComponent } from './components/common/input/drag-drop-select/drag-drop-select.component'
+import { EntriesComponent } from './components/common/input/entries/entries.component'
+import { FileComponent } from './components/common/input/file/file.component'
+import { MonetaryComponent } from './components/common/input/monetary/monetary.component'
+import { NumberComponent } from './components/common/input/number/number.component'
+import { PasswordComponent } from './components/common/input/password/password.component'
+import { PermissionsFormComponent } from './components/common/input/permissions/permissions-form/permissions-form.component'
+import { PermissionsGroupComponent } from './components/common/input/permissions/permissions-group/permissions-group.component'
+import { PermissionsUserComponent } from './components/common/input/permissions/permissions-user/permissions-user.component'
+import { SelectComponent } from './components/common/input/select/select.component'
+import { SwitchComponent } from './components/common/input/switch/switch.component'
+import { TagsComponent } from './components/common/input/tags/tags.component'
+import { TextComponent } from './components/common/input/text/text.component'
+import { TextAreaComponent } from './components/common/input/textarea/textarea.component'
+import { UrlComponent } from './components/common/input/url/url.component'
+import { LogoComponent } from './components/common/logo/logo.component'
+import { PageHeaderComponent } from './components/common/page-header/page-header.component'
+import { PermissionsDialogComponent } from './components/common/permissions-dialog/permissions-dialog.component'
+import { PermissionsFilterDropdownComponent } from './components/common/permissions-filter-dropdown/permissions-filter-dropdown.component'
+import { PermissionsSelectComponent } from './components/common/permissions-select/permissions-select.component'
+import { PreviewPopupComponent } from './components/common/preview-popup/preview-popup.component'
+import { ProfileEditDialogComponent } from './components/common/profile-edit-dialog/profile-edit-dialog.component'
+import { SelectDialogComponent } from './components/common/select-dialog/select-dialog.component'
+import { ShareLinksDropdownComponent } from './components/common/share-links-dropdown/share-links-dropdown.component'
+import { SystemStatusDialogComponent } from './components/common/system-status-dialog/system-status-dialog.component'
+import { TagComponent } from './components/common/tag/tag.component'
+import { ToastsComponent } from './components/common/toasts/toasts.component'
+import { DashboardComponent } from './components/dashboard/dashboard.component'
+import { SavedViewWidgetComponent } from './components/dashboard/widgets/saved-view-widget/saved-view-widget.component'
+import { StatisticsWidgetComponent } from './components/dashboard/widgets/statistics-widget/statistics-widget.component'
+import { UploadFileWidgetComponent } from './components/dashboard/widgets/upload-file-widget/upload-file-widget.component'
+import { WelcomeWidgetComponent } from './components/dashboard/widgets/welcome-widget/welcome-widget.component'
+import { WidgetFrameComponent } from './components/dashboard/widgets/widget-frame/widget-frame.component'
+import { DocumentAsnComponent } from './components/document-asn/document-asn.component'
+import { DocumentDetailComponent } from './components/document-detail/document-detail.component'
+import { MetadataCollapseComponent } from './components/document-detail/metadata-collapse/metadata-collapse.component'
+import { DocumentHistoryComponent } from './components/document-history/document-history.component'
+import { BulkEditorComponent } from './components/document-list/bulk-editor/bulk-editor.component'
+import { CustomFieldsBulkEditDialogComponent } from './components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component'
+import { DocumentCardLargeComponent } from './components/document-list/document-card-large/document-card-large.component'
+import { DocumentCardSmallComponent } from './components/document-list/document-card-small/document-card-small.component'
+import { DocumentListComponent } from './components/document-list/document-list.component'
+import { FilterEditorComponent } from './components/document-list/filter-editor/filter-editor.component'
+import { SaveViewConfigDialogComponent } from './components/document-list/save-view-config-dialog/save-view-config-dialog.component'
+import { DocumentNotesComponent } from './components/document-notes/document-notes.component'
+import { FileDropComponent } from './components/file-drop/file-drop.component'
+import { CorrespondentListComponent } from './components/manage/correspondent-list/correspondent-list.component'
+import { CustomFieldsComponent } from './components/manage/custom-fields/custom-fields.component'
+import { DocumentTypeListComponent } from './components/manage/document-type-list/document-type-list.component'
+import { MailComponent } from './components/manage/mail/mail.component'
+import { SavedViewsComponent } from './components/manage/saved-views/saved-views.component'
+import { StoragePathListComponent } from './components/manage/storage-path-list/storage-path-list.component'
+import { TagListComponent } from './components/manage/tag-list/tag-list.component'
+import { WorkflowsComponent } from './components/manage/workflows/workflows.component'
+import { NotFoundComponent } from './components/not-found/not-found.component'
+import { IfObjectPermissionsDirective } from './directives/if-object-permissions.directive'
+import { IfOwnerDirective } from './directives/if-owner.directive'
+import { IfPermissionsDirective } from './directives/if-permissions.directive'
+import { SortableDirective } from './directives/sortable.directive'
+import { DirtyDocGuard } from './guards/dirty-doc.guard'
+import { DirtySavedViewGuard } from './guards/dirty-saved-view.guard'
+import { PermissionsGuard } from './guards/permissions.guard'
+import { ApiVersionInterceptor } from './interceptors/api-version.interceptor'
+import { CsrfInterceptor } from './interceptors/csrf.interceptor'
+import { CustomDatePipe } from './pipes/custom-date.pipe'
+import { DocumentTitlePipe } from './pipes/document-title.pipe'
+import { FileSizePipe } from './pipes/file-size.pipe'
+import { FilterPipe } from './pipes/filter.pipe'
+import { IsNumberPipe } from './pipes/is-number.pipe'
+import { SafeHtmlPipe } from './pipes/safehtml.pipe'
+import { SafeUrlPipe } from './pipes/safeurl.pipe'
+import { UsernamePipe } from './pipes/username.pipe'
+import { YesNoPipe } from './pipes/yes-no.pipe'
+import { SettingsService } from './services/settings.service'
+import { LocalizedDateParserFormatter } from './utils/ngb-date-parser-formatter'
+import { ISODateAdapter } from './utils/ngb-iso-date-adapter'
const icons = {
airplane,
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { ConfigComponent } from './config.component'
-import { ConfigService } from 'src/app/services/config.service'
-import { ToastService } from 'src/app/services/toast.service'
-import { of, throwError } from 'rxjs'
-import { OutputTypeConfig } from 'src/app/data/paperless-config'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { BrowserModule } from '@angular/platform-browser'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
-import { TextComponent } from '../../common/input/text/text.component'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { of, throwError } from 'rxjs'
+import { OutputTypeConfig } from 'src/app/data/paperless-config'
+import { ConfigService } from 'src/app/services/config.service'
+import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
+import { FileComponent } from '../../common/input/file/file.component'
import { NumberComponent } from '../../common/input/number/number.component'
+import { SelectComponent } from '../../common/input/select/select.component'
import { SwitchComponent } from '../../common/input/switch/switch.component'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { TextComponent } from '../../common/input/text/text.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
-import { SelectComponent } from '../../common/input/select/select.component'
-import { FileComponent } from '../../common/input/file/file.component'
-import { SettingsService } from 'src/app/services/settings.service'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { ConfigComponent } from './config.component'
describe('ConfigComponent', () => {
let component: ConfigComponent
import { Component, OnDestroy, OnInit } from '@angular/core'
import { AbstractControl, FormControl, FormGroup } from '@angular/forms'
+import { DirtyComponent, dirtyCheck } from '@ngneat/dirty-check-forms'
import {
BehaviorSubject,
Observable,
- Subject,
Subscription,
first,
takeUntil,
} from 'rxjs'
import {
- PaperlessConfigOptions,
ConfigCategory,
ConfigOption,
ConfigOptionType,
PaperlessConfig,
+ PaperlessConfigOptions,
} from 'src/app/data/paperless-config'
import { ConfigService } from 'src/app/services/config.service'
-import { ToastService } from 'src/app/services/toast.service'
-import { DirtyComponent, dirtyCheck } from '@ngneat/dirty-check-forms'
import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
@Component({
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
+import { BrowserModule, By } from '@angular/platform-browser'
+import { NgbModule, NgbNavLink } from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { of, throwError } from 'rxjs'
import { LogService } from 'src/app/services/rest/log.service'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { LogsComponent } from './logs.component'
-import { of, throwError } from 'rxjs'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { NgbModule, NgbNavLink } from '@ng-bootstrap/ng-bootstrap'
-import { BrowserModule, By } from '@angular/platform-browser'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
const paperless_logs = [
'[2023-05-29 03:05:01,224] [DEBUG] [paperless.tasks] Training data unchanged.',
import {
+ ChangeDetectorRef,
Component,
ElementRef,
+ OnDestroy,
OnInit,
ViewChild,
- ChangeDetectorRef,
- OnDestroy,
} from '@angular/core'
import { filter, takeUntil, timer } from 'rxjs'
import { LogService } from 'src/app/services/rest/log.service'
-import { ViewportScroller, DatePipe } from '@angular/common'
+import { DragDropModule } from '@angular/cdk/drag-drop'
+import { DatePipe, ViewportScroller } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { By } from '@angular/platform-browser'
-import { Router, ActivatedRoute, convertToParamMap } from '@angular/router'
+import { ActivatedRoute, Router, convertToParamMap } from '@angular/router'
import { RouterTestingModule } from '@angular/router/testing'
import {
- NgbModule,
NgbAlertModule,
- NgbNavLink,
NgbModal,
NgbModalModule,
+ NgbModule,
+ NgbNavLink,
} from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
import { routes } from 'src/app/app-routing.module'
+import {
+ InstallType,
+ SystemStatus,
+ SystemStatusItemStatus,
+} from 'src/app/data/system-status'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
import { PermissionsService } from 'src/app/services/permissions.service'
import { GroupService } from 'src/app/services/rest/group.service'
-import { SavedViewService } from 'src/app/services/rest/saved-view.service'
import { UserService } from 'src/app/services/rest/user.service'
import { SettingsService } from 'src/app/services/settings.service'
-import { ToastService, Toast } from 'src/app/services/toast.service'
+import { SystemStatusService } from 'src/app/services/system-status.service'
+import { Toast, ToastService } from 'src/app/services/toast.service'
+import { ConfirmButtonComponent } from '../../common/confirm-button/confirm-button.component'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
import { CheckComponent } from '../../common/input/check/check.component'
import { ColorComponent } from '../../common/input/color/color.component'
+import { DragDropSelectComponent } from '../../common/input/drag-drop-select/drag-drop-select.component'
import { NumberComponent } from '../../common/input/number/number.component'
import { PermissionsGroupComponent } from '../../common/input/permissions/permissions-group/permissions-group.component'
import { PermissionsUserComponent } from '../../common/input/permissions/permissions-user/permissions-user.component'
import { TagsComponent } from '../../common/input/tags/tags.component'
import { TextComponent } from '../../common/input/text/text.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
-import { SettingsComponent } from './settings.component'
-import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { ConfirmButtonComponent } from '../../common/confirm-button/confirm-button.component'
import { SystemStatusDialogComponent } from '../../common/system-status-dialog/system-status-dialog.component'
-import { SystemStatusService } from 'src/app/services/system-status.service'
-import {
- SystemStatus,
- InstallType,
- SystemStatusItemStatus,
-} from 'src/app/data/system-status'
-import { DragDropSelectComponent } from '../../common/input/drag-drop-select/drag-drop-select.component'
-import { DragDropModule } from '@angular/cdk/drag-drop'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { SettingsComponent } from './settings.component'
const users = [
{ id: 1, username: 'user1', is_superuser: false },
import { ViewportScroller } from '@angular/common'
import {
- Component,
- OnInit,
AfterViewInit,
- OnDestroy,
+ Component,
Inject,
LOCALE_ID,
+ OnDestroy,
+ OnInit,
} from '@angular/core'
-import { FormGroup, FormControl } from '@angular/forms'
+import { FormControl, FormGroup } from '@angular/forms'
import { ActivatedRoute, Router } from '@angular/router'
import {
NgbModal,
import { TourService } from 'ngx-ui-tour-ng-bootstrap'
import {
BehaviorSubject,
- Subscription,
Observable,
Subject,
+ Subscription,
first,
takeUntil,
tap,
} from 'rxjs'
import { Group } from 'src/app/data/group'
+import {
+ SystemStatus,
+ SystemStatusItemStatus,
+} from 'src/app/data/system-status'
import { GlobalSearchType, SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { User } from 'src/app/data/user'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
- PermissionsService,
PermissionAction,
PermissionType,
+ PermissionsService,
} from 'src/app/services/permissions.service'
import { GroupService } from 'src/app/services/rest/group.service'
import { UserService } from 'src/app/services/rest/user.service'
import {
- SettingsService,
LanguageOption,
+ SettingsService,
} from 'src/app/services/settings.service'
-import { ToastService, Toast } from 'src/app/services/toast.service'
-import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
-import { SystemStatusDialogComponent } from '../../common/system-status-dialog/system-status-dialog.component'
import { SystemStatusService } from 'src/app/services/system-status.service'
-import {
- SystemStatusItemStatus,
- SystemStatus,
-} from 'src/app/data/system-status'
+import { Toast, ToastService } from 'src/app/services/toast.service'
+import { SystemStatusDialogComponent } from '../../common/system-status-dialog/system-status-dialog.component'
+import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
enum SettingsNavIDs {
General = 1,
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
+import { FormsModule } from '@angular/forms'
import { By } from '@angular/platform-browser'
import { Router } from '@angular/router'
import { RouterTestingModule } from '@angular/router/testing'
import {
NgbModal,
+ NgbModalRef,
NgbModule,
NgbNavItem,
- NgbModalRef,
} from '@ng-bootstrap/ng-bootstrap'
+import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
import { routes } from 'src/app/app-routing.module'
import {
PaperlessTask,
- PaperlessTaskType,
PaperlessTaskStatus,
+ PaperlessTaskType,
} from 'src/app/data/paperless-task'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
+import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { PermissionsService } from 'src/app/services/permissions.service'
import { TasksService } from 'src/app/services/tasks.service'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { TasksComponent, TaskTab } from './tasks.component'
-import { PermissionsGuard } from 'src/app/guards/permissions.guard'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { FormsModule } from '@angular/forms'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
const tasks: PaperlessTask[] = [
{
-import { Component, OnInit, OnDestroy } from '@angular/core'
+import { Component, OnDestroy, OnInit } from '@angular/core'
import { Router } from '@angular/router'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import {
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { TrashComponent } from './trash.component'
import { HttpClientTestingModule } from '@angular/common/http/testing'
-import { PageHeaderComponent } from '../../common/page-header/page-header.component'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { By } from '@angular/platform-browser'
+import { Router } from '@angular/router'
import {
NgbModal,
NgbPaginationModule,
NgbPopoverModule,
} from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { TrashService } from 'src/app/services/trash.service'
import { of, throwError } from 'rxjs'
-import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
-import { By } from '@angular/platform-browser'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
import { ToastService } from 'src/app/services/toast.service'
-import { Router } from '@angular/router'
+import { TrashService } from 'src/app/services/trash.service'
+import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
+import { PageHeaderComponent } from '../../common/page-header/page-header.component'
+import { TrashComponent } from './trash.component'
const documentsInTrash = [
{
import { Component, OnDestroy } from '@angular/core'
+import { Router } from '@angular/router'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
+import { delay, takeUntil, tap } from 'rxjs'
import { Document } from 'src/app/data/document'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { SettingsService } from 'src/app/services/settings.service'
import { ToastService } from 'src/app/services/toast.service'
import { TrashService } from 'src/app/services/trash.service'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
-import { delay, takeUntil, tap } from 'rxjs'
-import { SettingsService } from 'src/app/services/settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { Router } from '@angular/router'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
@Component({
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
ComponentFixture,
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { RouterTestingModule } from '@angular/router/testing'
import {
- NgbModule,
NgbAlertModule,
NgbModal,
NgbModalRef,
+ NgbModule,
} from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
-import { throwError, of } from 'rxjs'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { of, throwError } from 'rxjs'
import { routes } from 'src/app/app-routing.module'
+import { Group } from 'src/app/data/group'
+import { User } from 'src/app/data/user'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { SettingsComponent } from '../settings/settings.component'
import { UsersAndGroupsComponent } from './users-groups.component'
-import { User } from 'src/app/data/user'
-import { Group } from 'src/app/data/group'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
const users = [
{ id: 1, username: 'user1', is_superuser: false },
import { PermissionsService } from 'src/app/services/permissions.service'
import { GroupService } from 'src/app/services/rest/group.service'
import { UserService } from 'src/app/services/rest/user.service'
+import { SettingsService } from 'src/app/services/settings.service'
import { ToastService } from 'src/app/services/toast.service'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
import { GroupEditDialogComponent } from '../../common/edit-dialog/group-edit-dialog/group-edit-dialog.component'
import { UserEditDialogComponent } from '../../common/edit-dialog/user-edit-dialog/user-edit-dialog.component'
import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
-import { SettingsService } from 'src/app/services/settings.service'
@Component({
selector: 'pngx-users-groups',
+import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
-import { AppFrameComponent } from './app-frame.component'
import {
ComponentFixture,
TestBed,
fakeAsync,
tick,
} from '@angular/core/testing'
-import { NgbModal, NgbModalModule, NgbModule } from '@ng-bootstrap/ng-bootstrap'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { BrowserModule } from '@angular/platform-browser'
+import { ActivatedRoute, Router } from '@angular/router'
import { RouterTestingModule } from '@angular/router/testing'
-import { SettingsService } from 'src/app/services/settings.service'
-import { SavedViewService } from 'src/app/services/rest/saved-view.service'
-import { PermissionsService } from 'src/app/services/permissions.service'
+import { NgbModal, NgbModalModule, NgbModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { of, throwError } from 'rxjs'
+import { routes } from 'src/app/app-routing.module'
+import { SavedView } from 'src/app/data/saved-view'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { RemoteVersionService } from 'src/app/services/rest/remote-version.service'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { of, throwError } from 'rxjs'
-import { ToastService } from 'src/app/services/toast.service'
+import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import {
DjangoMessageLevel,
DjangoMessagesService,
} from 'src/app/services/django-messages.service'
-import { environment } from 'src/environments/environment'
import { OpenDocumentsService } from 'src/app/services/open-documents.service'
-import { ActivatedRoute, Router } from '@angular/router'
-import { DocumentDetailComponent } from '../document-detail/document-detail.component'
+import { PermissionsService } from 'src/app/services/permissions.service'
+import { RemoteVersionService } from 'src/app/services/rest/remote-version.service'
+import { SavedViewService } from 'src/app/services/rest/saved-view.service'
import { SearchService } from 'src/app/services/rest/search.service'
-import { routes } from 'src/app/app-routing.module'
-import { PermissionsGuard } from 'src/app/guards/permissions.guard'
-import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop'
-import { SavedView } from 'src/app/data/saved-view'
+import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
+import { environment } from 'src/environments/environment'
import { ProfileEditDialogComponent } from '../common/profile-edit-dialog/profile-edit-dialog.component'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { DocumentDetailComponent } from '../document-detail/document-detail.component'
+import { AppFrameComponent } from './app-frame.component'
import { GlobalSearchComponent } from './global-search/global-search.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
const saved_views = [
{
+import {
+ CdkDragDrop,
+ CdkDragEnd,
+ CdkDragStart,
+ moveItemInArray,
+} from '@angular/cdk/drag-drop'
import { Component, HostListener, OnInit } from '@angular/core'
import { ActivatedRoute, Router } from '@angular/router'
+import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { Observable } from 'rxjs'
import { first } from 'rxjs/operators'
import { Document } from 'src/app/data/document'
-import { OpenDocumentsService } from 'src/app/services/open-documents.service'
+import { SavedView } from 'src/app/data/saved-view'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { ComponentCanDeactivate } from 'src/app/guards/dirty-doc.guard'
import {
DjangoMessageLevel,
DjangoMessagesService,
} from 'src/app/services/django-messages.service'
-import { SavedViewService } from 'src/app/services/rest/saved-view.service'
-import { environment } from 'src/environments/environment'
-import { DocumentDetailComponent } from '../document-detail/document-detail.component'
-import {
- RemoteVersionService,
- AppRemoteVersion,
-} from 'src/app/services/rest/remote-version.service'
-import { SettingsService } from 'src/app/services/settings.service'
-import { TasksService } from 'src/app/services/tasks.service'
-import { ComponentCanDeactivate } from 'src/app/guards/dirty-doc.guard'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { ToastService } from 'src/app/services/toast.service'
-import { ComponentWithPermissions } from '../with-permissions/with-permissions.component'
+import { OpenDocumentsService } from 'src/app/services/open-documents.service'
import {
PermissionAction,
PermissionsService,
PermissionType,
} from 'src/app/services/permissions.service'
-import { SavedView } from 'src/app/data/saved-view'
import {
- CdkDragStart,
- CdkDragEnd,
- CdkDragDrop,
- moveItemInArray,
-} from '@angular/cdk/drag-drop'
-import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
+ AppRemoteVersion,
+ RemoteVersionService,
+} from 'src/app/services/rest/remote-version.service'
+import { SavedViewService } from 'src/app/services/rest/saved-view.service'
+import { SettingsService } from 'src/app/services/settings.service'
+import { TasksService } from 'src/app/services/tasks.service'
+import { ToastService } from 'src/app/services/toast.service'
+import { environment } from 'src/environments/environment'
import { ProfileEditDialogComponent } from '../common/profile-edit-dialog/profile-edit-dialog.component'
+import { DocumentDetailComponent } from '../document-detail/document-detail.component'
+import { ComponentWithPermissions } from '../with-permissions/with-permissions.component'
@Component({
selector: 'pngx-app-frame',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { ElementRef } from '@angular/core'
import {
ComponentFixture,
TestBed,
fakeAsync,
tick,
} from '@angular/core/testing'
-import { GlobalSearchComponent } from './global-search.component'
-import { of } from 'rxjs'
-import { SearchService } from 'src/app/services/rest/search.service'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { Router } from '@angular/router'
import {
NgbDropdownModule,
NgbModalModule,
NgbModalRef,
} from '@ng-bootstrap/ng-bootstrap'
-import { CorrespondentEditDialogComponent } from '../../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
-import { UserEditDialogComponent } from '../../common/edit-dialog/user-edit-dialog/user-edit-dialog.component'
-import { DocumentListViewService } from 'src/app/services/document-list-view.service'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { of } from 'rxjs'
+import { DataType } from 'src/app/data/datatype'
import {
FILTER_FULLTEXT_QUERY,
FILTER_HAS_CORRESPONDENT_ANY,
FILTER_HAS_TAGS_ALL,
FILTER_TITLE_CONTENT,
} from 'src/app/data/filter-rule-type'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { GlobalSearchType, SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import { DocumentService } from 'src/app/services/rest/document.service'
-import { MailRuleEditDialogComponent } from '../../common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
-import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component'
-import { GroupEditDialogComponent } from '../../common/edit-dialog/group-edit-dialog/group-edit-dialog.component'
-import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
-import { WorkflowEditDialogComponent } from '../../common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component'
-import { ElementRef } from '@angular/core'
+import { SearchService } from 'src/app/services/rest/search.service'
+import { SettingsService } from 'src/app/services/settings.service'
import { ToastService } from 'src/app/services/toast.service'
-import { DataType } from 'src/app/data/datatype'
import { queryParamsFromFilterRules } from 'src/app/utils/query-params'
-import { SettingsService } from 'src/app/services/settings.service'
-import { GlobalSearchType, SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { CorrespondentEditDialogComponent } from '../../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
+import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
+import { GroupEditDialogComponent } from '../../common/edit-dialog/group-edit-dialog/group-edit-dialog.component'
+import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component'
+import { MailRuleEditDialogComponent } from '../../common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
+import { UserEditDialogComponent } from '../../common/edit-dialog/user-edit-dialog/user-edit-dialog.component'
+import { WorkflowEditDialogComponent } from '../../common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component'
+import { GlobalSearchComponent } from './global-search.component'
const searchResults = {
total: 11,
import {
Component,
- ViewChild,
ElementRef,
- ViewChildren,
- QueryList,
OnInit,
+ QueryList,
+ ViewChild,
+ ViewChildren,
} from '@angular/core'
import { Router } from '@angular/router'
import { NgbDropdown, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'
import { Subject, debounceTime, distinctUntilChanged, filter, map } from 'rxjs'
+import { DataType } from 'src/app/data/datatype'
import {
FILTER_FULLTEXT_QUERY,
FILTER_HAS_CORRESPONDENT_ANY,
FILTER_HAS_TAGS_ALL,
FILTER_TITLE_CONTENT,
} from 'src/app/data/filter-rule-type'
-import { DataType } from 'src/app/data/datatype'
import { ObjectWithId } from 'src/app/data/object-with-id'
+import { GlobalSearchType, SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
+import { HotKeyService } from 'src/app/services/hot-key.service'
import {
- PermissionsService,
PermissionAction,
+ PermissionsService,
} from 'src/app/services/permissions.service'
import { DocumentService } from 'src/app/services/rest/document.service'
import {
GlobalSearchResult,
SearchService,
} from 'src/app/services/rest/search.service'
+import { SettingsService } from 'src/app/services/settings.service'
import { ToastService } from 'src/app/services/toast.service'
+import { paramsFromViewState } from 'src/app/utils/query-params'
import { CorrespondentEditDialogComponent } from '../../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
import { DocumentTypeEditDialogComponent } from '../../common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
import { TagEditDialogComponent } from '../../common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
import { UserEditDialogComponent } from '../../common/edit-dialog/user-edit-dialog/user-edit-dialog.component'
import { WorkflowEditDialogComponent } from '../../common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component'
-import { HotKeyService } from 'src/app/services/hot-key.service'
-import { paramsFromViewState } from 'src/app/utils/query-params'
-import { SettingsService } from 'src/app/services/settings.service'
-import { GlobalSearchType, SETTINGS_KEYS } from 'src/app/data/ui-settings'
@Component({
selector: 'pngx-global-search',
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { ClearableBadgeComponent } from './clearable-badge.component'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { ClearableBadgeComponent } from './clearable-badge.component'
describe('ClearableBadgeComponent', () => {
let component: ClearableBadgeComponent
-import { Component, Input, Output, EventEmitter } from '@angular/core'
+import { Component, EventEmitter, Input, Output } from '@angular/core'
@Component({
selector: 'pngx-clearable-badge',
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { ConfirmButtonComponent } from './confirm-button.component'
import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { ConfirmButtonComponent } from './confirm-button.component'
describe('ConfirmButtonComponent', () => {
let component: ConfirmButtonComponent
-import {
- ComponentFixture,
- TestBed,
- discardPeriodicTasks,
- fakeAsync,
- tick,
-} from '@angular/core/testing'
-import { ConfirmDialogComponent } from './confirm-dialog.component'
+import { ComponentFixture, TestBed } from '@angular/core/testing'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
-import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
import { Subject } from 'rxjs'
+import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
+import { ConfirmDialogComponent } from './confirm-dialog.component'
describe('ConfirmDialogComponent', () => {
let component: ConfirmDialogComponent
import { Component, EventEmitter, Input, Output } from '@angular/core'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
-import { interval, Subject, take } from 'rxjs'
+import { Subject } from 'rxjs'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
@Component({
-import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { DeletePagesConfirmDialogComponent } from './delete-pages-confirm-dialog.component'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { ComponentFixture, TestBed } from '@angular/core/testing'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
+import { PdfViewerComponent } from 'ng2-pdf-viewer'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { PdfViewerComponent } from 'ng2-pdf-viewer'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { DeletePagesConfirmDialogComponent } from './delete-pages-confirm-dialog.component'
describe('DeletePagesConfirmDialogComponent', () => {
let component: DeletePagesConfirmDialogComponent
import { Component, TemplateRef, ViewChild } from '@angular/core'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
+import { PDFDocumentProxy, PdfViewerComponent } from 'ng2-pdf-viewer'
import { DocumentService } from 'src/app/services/rest/document.service'
import { ConfirmDialogComponent } from '../confirm-dialog.component'
-import { PDFDocumentProxy, PdfViewerComponent } from 'ng2-pdf-viewer'
@Component({
selector: 'pngx-delete-pages-confirm-dialog',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
-import { MergeConfirmDialogComponent } from './merge-confirm-dialog.component'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of } from 'rxjs'
import { DocumentService } from 'src/app/services/rest/document.service'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { MergeConfirmDialogComponent } from './merge-confirm-dialog.component'
describe('MergeConfirmDialogComponent', () => {
let component: MergeConfirmDialogComponent
+import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'
import { Component, OnInit } from '@angular/core'
-import { ConfirmDialogComponent } from '../confirm-dialog.component'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
-import { DocumentService } from 'src/app/services/rest/document.service'
-import { PermissionsService } from 'src/app/services/permissions.service'
-import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'
-import { Subject, takeUntil } from 'rxjs'
+import { takeUntil } from 'rxjs'
import { Document } from 'src/app/data/document'
+import { PermissionsService } from 'src/app/services/permissions.service'
+import { DocumentService } from 'src/app/services/rest/document.service'
+import { ConfirmDialogComponent } from '../confirm-dialog.component'
@Component({
selector: 'pngx-merge-confirm-dialog',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { RotateConfirmDialogComponent } from './rotate-confirm-dialog.component'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
-import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
+import { RotateConfirmDialogComponent } from './rotate-confirm-dialog.component'
describe('RotateConfirmDialogComponent', () => {
let component: RotateConfirmDialogComponent
import { Component } from '@angular/core'
-import { ConfirmDialogComponent } from '../confirm-dialog.component'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { DocumentService } from 'src/app/services/rest/document.service'
+import { ConfirmDialogComponent } from '../confirm-dialog.component'
@Component({
selector: 'pngx-rotate-confirm-dialog',
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { SplitConfirmDialogComponent } from './split-confirm-dialog.component'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { ReactiveFormsModule, FormsModule } from '@angular/forms'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { DocumentService } from 'src/app/services/rest/document.service'
import { PdfViewerModule } from 'ng2-pdf-viewer'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of } from 'rxjs'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { DocumentService } from 'src/app/services/rest/document.service'
+import { SplitConfirmDialogComponent } from './split-confirm-dialog.component'
describe('SplitConfirmDialogComponent', () => {
let component: SplitConfirmDialogComponent
import { Component, OnInit } from '@angular/core'
-import { ConfirmDialogComponent } from '../confirm-dialog.component'
-import { Document } from 'src/app/data/document'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
-import { DocumentService } from 'src/app/services/rest/document.service'
-import { PermissionsService } from 'src/app/services/permissions.service'
import { PDFDocumentProxy } from 'ng2-pdf-viewer'
+import { Document } from 'src/app/data/document'
+import { PermissionsService } from 'src/app/services/permissions.service'
+import { DocumentService } from 'src/app/services/rest/document.service'
+import { ConfirmDialogComponent } from '../confirm-dialog.component'
@Component({
selector: 'pngx-split-confirm-dialog',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { of } from 'rxjs'
import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
-import { DocumentService } from 'src/app/services/rest/document.service'
-import { CustomFieldDisplayComponent } from './custom-field-display.component'
import { DisplayField, Document } from 'src/app/data/document'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { DocumentService } from 'src/app/services/rest/document.service'
+import { CustomFieldDisplayComponent } from './custom-field-display.component'
const customFields: CustomField[] = [
{ id: 1, name: 'Field 1', data_type: CustomFieldDataType.String },
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
ComponentFixture,
TestBed,
fakeAsync,
tick,
} from '@angular/core/testing'
-import { CustomFieldsDropdownComponent } from './custom-fields-dropdown.component'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { ToastService } from 'src/app/services/toast.service'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { of } from 'rxjs'
-import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
-import { SelectComponent } from '../input/select/select.component'
-import { NgSelectModule } from '@ng-select/ng-select'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { By } from '@angular/platform-browser'
import {
NgbDropdownModule,
NgbModal,
NgbModalModule,
NgbModalRef,
} from '@ng-bootstrap/ng-bootstrap'
-import { CustomFieldEditDialogComponent } from '../edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
-import { By } from '@angular/platform-browser'
+import { NgSelectModule } from '@ng-select/ng-select'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { of } from 'rxjs'
+import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
+import { ToastService } from 'src/app/services/toast.service'
+import { CustomFieldEditDialogComponent } from '../edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
+import { SelectComponent } from '../input/select/select.component'
+import { CustomFieldsDropdownComponent } from './custom-fields-dropdown.component'
const fields: CustomField[] = [
{
ElementRef,
EventEmitter,
Input,
- OnDestroy,
Output,
QueryList,
ViewChild,
import { first, takeUntil } from 'rxjs'
import { CustomField, DATA_TYPE_LABELS } from 'src/app/data/custom-field'
import { CustomFieldInstance } from 'src/app/data/custom-field-instance'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { ToastService } from 'src/app/services/toast.service'
-import { CustomFieldEditDialogComponent } from '../edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
import {
PermissionAction,
PermissionType,
PermissionsService,
} from 'src/app/services/permissions.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
+import { ToastService } from 'src/app/services/toast.service'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
+import { CustomFieldEditDialogComponent } from '../edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
@Component({
selector: 'pngx-custom-fields-dropdown',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
ComponentFixture,
fakeAsync,
TestBed,
tick,
} from '@angular/core/testing'
-import {
- CustomFieldQueriesModel,
- CustomFieldsQueryDropdownComponent,
-} from './custom-fields-query-dropdown.component'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgSelectModule } from '@ng-select/ng-select'
+import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
import { of } from 'rxjs'
import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
import {
CustomFieldQueryLogicalOperator,
CustomFieldQueryOperatorGroups,
} from 'src/app/data/custom-field-query'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import {
- CustomFieldQueryExpression,
CustomFieldQueryAtom,
CustomFieldQueryElement,
+ CustomFieldQueryExpression,
} from 'src/app/utils/custom-field-query-element'
-import { NgSelectModule } from '@ng-select/ng-select'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import {
+ CustomFieldQueriesModel,
+ CustomFieldsQueryDropdownComponent,
+} from './custom-fields-query-dropdown.component'
const customFields = [
{
} from '@angular/core'
import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap'
import { NgSelectComponent } from '@ng-select/ng-select'
-import { Subject, first, takeUntil } from 'rxjs'
+import { first, Subject, takeUntil } from 'rxjs'
import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
import {
- CustomFieldQueryElementType,
- CustomFieldQueryOperator,
+ CUSTOM_FIELD_QUERY_MAX_ATOMS,
+ CUSTOM_FIELD_QUERY_MAX_DEPTH,
CUSTOM_FIELD_QUERY_OPERATOR_GROUPS_BY_TYPE,
+ CUSTOM_FIELD_QUERY_OPERATOR_LABELS,
CUSTOM_FIELD_QUERY_OPERATORS_BY_GROUP,
+ CustomFieldQueryElementType,
+ CustomFieldQueryOperator,
CustomFieldQueryOperatorGroups,
- CUSTOM_FIELD_QUERY_OPERATOR_LABELS,
- CUSTOM_FIELD_QUERY_MAX_DEPTH,
- CUSTOM_FIELD_QUERY_MAX_ATOMS,
} from 'src/app/data/custom-field-query'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import {
+ CustomFieldQueryAtom,
CustomFieldQueryElement,
CustomFieldQueryExpression,
- CustomFieldQueryAtom,
} from 'src/app/utils/custom-field-query-element'
import { popperOptionsReenablePreventOverflow } from 'src/app/utils/popper-options'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
+import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
ComponentFixture,
TestBed,
fakeAsync,
tick,
} from '@angular/core/testing'
-let fixture: ComponentFixture<DatesDropdownComponent>
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
+import { SettingsService } from 'src/app/services/settings.service'
+import { ClearableBadgeComponent } from '../clearable-badge/clearable-badge.component'
import {
- DatesDropdownComponent,
DateSelection,
+ DatesDropdownComponent,
RelativeDate,
} from './dates-dropdown.component'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
-import { SettingsService } from 'src/app/services/settings.service'
-import { ClearableBadgeComponent } from '../clearable-badge/clearable-badge.component'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
-import { DatePipe } from '@angular/common'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+let fixture: ComponentFixture<DatesDropdownComponent>
describe('DatesDropdownComponent', () => {
let component: DatesDropdownComponent
Component,
EventEmitter,
Input,
- Output,
- OnInit,
OnDestroy,
+ OnInit,
+ Output,
} from '@angular/core'
import { NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'
import { Subject, Subscription } from 'rxjs'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { TextComponent } from '../../input/text/text.component'
import { EditDialogMode } from '../edit-dialog.component'
import { CorrespondentEditDialogComponent } from './correspondent-edit-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
describe('CorrespondentEditDialogComponent', () => {
let component: CorrespondentEditDialogComponent
import { FormControl, FormGroup } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component'
-import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model'
import { Correspondent } from 'src/app/data/correspondent'
+import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model'
import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
import { UserService } from 'src/app/services/rest/user.service'
import { SettingsService } from 'src/app/services/settings.service'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { CustomFieldEditDialogComponent } from './custom-field-edit-dialog.component'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { ElementRef, QueryList } from '@angular/core'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbActiveModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { CustomFieldDataType } from 'src/app/data/custom-field'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
import { SelectComponent } from '../../input/select/select.component'
import { TextComponent } from '../../input/text/text.component'
import { EditDialogMode } from '../edit-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { CustomFieldDataType } from 'src/app/data/custom-field'
-import { ElementRef, QueryList } from '@angular/core'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { CustomFieldEditDialogComponent } from './custom-field-edit-dialog.component'
describe('CustomFieldEditDialogComponent', () => {
let component: CustomFieldEditDialogComponent
QueryList,
ViewChildren,
} from '@angular/core'
-import { FormGroup, FormControl, FormArray } from '@angular/forms'
+import { FormArray, FormControl, FormGroup } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
+import { takeUntil } from 'rxjs'
import {
- DATA_TYPE_LABELS,
CustomField,
CustomFieldDataType,
+ DATA_TYPE_LABELS,
} from 'src/app/data/custom-field'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { UserService } from 'src/app/services/rest/user.service'
import { SettingsService } from 'src/app/services/settings.service'
import { EditDialogComponent, EditDialogMode } from '../edit-dialog.component'
-import { takeUntil } from 'rxjs'
@Component({
selector: 'pngx-custom-field-edit-dialog',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { TextComponent } from '../../input/text/text.component'
import { EditDialogMode } from '../edit-dialog.component'
import { DocumentTypeEditDialogComponent } from './document-type-edit-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
describe('DocumentTypeEditDialogComponent', () => {
let component: DocumentTypeEditDialogComponent
import { FormControl, FormGroup } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component'
-import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model'
import { DocumentType } from 'src/app/data/document-type'
+import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model'
import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
import { UserService } from 'src/app/services/rest/user.service'
import { SettingsService } from 'src/app/services/settings.service'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
tick,
} from '@angular/core/testing'
import {
- FormGroup,
FormControl,
+ FormGroup,
FormsModule,
ReactiveFormsModule,
} from '@angular/forms'
import { of } from 'rxjs'
import {
DEFAULT_MATCHING_ALGORITHM,
+ MATCH_ALL,
MATCH_AUTO,
MATCH_NONE,
- MATCH_ALL,
} from 'src/app/data/matching-model'
import { Tag } from 'src/app/data/tag'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { SettingsService } from 'src/app/services/settings.service'
import { environment } from 'src/environments/environment'
import { EditDialogComponent, EditDialogMode } from './edit-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
@Component({
template: `
} from 'src/app/data/matching-model'
import { ObjectWithId } from 'src/app/data/object-with-id'
import { ObjectWithPermissions } from 'src/app/data/object-with-permissions'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { User } from 'src/app/data/user'
import { AbstractPaperlessService } from 'src/app/services/rest/abstract-paperless-service'
import { UserService } from 'src/app/services/rest/user.service'
-import { PermissionsFormObject } from '../input/permissions/permissions-form/permissions-form.component'
import { SettingsService } from 'src/app/services/settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
+import { PermissionsFormObject } from '../input/permissions/permissions-form/permissions-form.component'
export enum EditDialogMode {
CREATE = 0,
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbActiveModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SettingsService } from 'src/app/services/settings.service'
import { PermissionsSelectComponent } from '../../permissions-select/permissions-select.component'
import { EditDialogMode } from '../edit-dialog.component'
import { GroupEditDialogComponent } from './group-edit-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
describe('GroupEditDialogComponent', () => {
let component: GroupEditDialogComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
import { TextComponent } from '../../input/text/text.component'
import { EditDialogMode } from '../edit-dialog.component'
import { MailAccountEditDialogComponent } from './mail-account-edit-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
describe('MailAccountEditDialogComponent', () => {
let component: MailAccountEditDialogComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgSelectModule } from '@ng-select/ng-select'
import { of } from 'rxjs'
import {
- MailMetadataCorrespondentOption,
MailAction,
+ MailMetadataCorrespondentOption,
} from 'src/app/data/mail-rule'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { NumberComponent } from '../../input/number/number.component'
import { PermissionsFormComponent } from '../../input/permissions/permissions-form/permissions-form.component'
import { SelectComponent } from '../../input/select/select.component'
+import { SwitchComponent } from '../../input/switch/switch.component'
import { TagsComponent } from '../../input/tags/tags.component'
import { TextComponent } from '../../input/text/text.component'
import { EditDialogMode } from '../edit-dialog.component'
import { MailRuleEditDialogComponent } from './mail-rule-edit-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { SwitchComponent } from '../../input/switch/switch.component'
describe('MailRuleEditDialogComponent', () => {
let component: MailRuleEditDialogComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { By } from '@angular/platform-browser'
import {
NgbAccordionButton,
NgbActiveModal,
NgbModule,
} from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
+import { of, throwError } from 'rxjs'
+import { FILTER_TITLE } from 'src/app/data/filter-rule-type'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
+import { DocumentService } from 'src/app/services/rest/document.service'
+import { StoragePathService } from 'src/app/services/rest/storage-path.service'
import { SettingsService } from 'src/app/services/settings.service'
import { PermissionsFormComponent } from '../../input/permissions/permissions-form/permissions-form.component'
import { SelectComponent } from '../../input/select/select.component'
import { TextAreaComponent } from '../../input/textarea/textarea.component'
import { EditDialogMode } from '../edit-dialog.component'
import { StoragePathEditDialogComponent } from './storage-path-edit-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { StoragePathService } from 'src/app/services/rest/storage-path.service'
-import { DocumentService } from 'src/app/services/rest/document.service'
-import { of, throwError } from 'rxjs'
-import { FILTER_TITLE } from 'src/app/data/filter-rule-type'
-import { By } from '@angular/platform-browser'
describe('StoragePathEditDialogComponent', () => {
let component: StoragePathEditDialogComponent
import { FormControl, FormGroup } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import {
- Subject,
Observable,
+ Subject,
+ catchError,
concat,
- of,
distinctUntilChanged,
+ filter,
+ map,
+ of,
+ switchMap,
takeUntil,
tap,
- switchMap,
- map,
- catchError,
- filter,
} from 'rxjs'
import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component'
import { Document } from 'src/app/data/document'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbActiveModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SettingsService } from 'src/app/services/settings.service'
import { TextComponent } from '../../input/text/text.component'
import { EditDialogMode } from '../edit-dialog.component'
import { TagEditDialogComponent } from './tag-edit-dialog.component'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
describe('TagEditDialogComponent', () => {
let component: TagEditDialogComponent
import { FormControl, FormGroup } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component'
+import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model'
import { Tag } from 'src/app/data/tag'
import { TagService } from 'src/app/services/rest/tag.service'
-import { randomColor } from 'src/app/utils/color'
-import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model'
import { UserService } from 'src/app/services/rest/user.service'
import { SettingsService } from 'src/app/services/settings.service'
+import { randomColor } from 'src/app/utils/color'
@Component({
selector: 'pngx-tag-edit-dialog',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
+ AbstractControl,
FormsModule,
ReactiveFormsModule,
- AbstractControl,
} from '@angular/forms'
import { NgbActiveModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
+import { PermissionsService } from 'src/app/services/permissions.service'
import { GroupService } from 'src/app/services/rest/group.service'
+import { UserService } from 'src/app/services/rest/user.service'
import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
import { PasswordComponent } from '../../input/password/password.component'
import { PermissionsFormComponent } from '../../input/permissions/permissions-form/permissions-form.component'
import { SelectComponent } from '../../input/select/select.component'
import { PermissionsSelectComponent } from '../../permissions-select/permissions-select.component'
import { EditDialogMode } from '../edit-dialog.component'
import { UserEditDialogComponent } from './user-edit-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { ToastService } from 'src/app/services/toast.service'
-import { UserService } from 'src/app/services/rest/user.service'
-import { PermissionsService } from 'src/app/services/permissions.service'
describe('UserEditDialogComponent', () => {
let component: UserEditDialogComponent
+import { CdkDragDrop } from '@angular/cdk/drag-drop'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbActiveModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
import { of } from 'rxjs'
+import { CustomFieldDataType } from 'src/app/data/custom-field'
+import { MATCHING_ALGORITHMS, MATCH_AUTO } from 'src/app/data/matching-model'
+import { Workflow } from 'src/app/data/workflow'
+import {
+ WorkflowAction,
+ WorkflowActionType,
+} from 'src/app/data/workflow-action'
+import {
+ DocumentSource,
+ WorkflowTriggerType,
+} from 'src/app/data/workflow-trigger'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
import { MailRuleService } from 'src/app/services/rest/mail-rule.service'
import { StoragePathService } from 'src/app/services/rest/storage-path.service'
import { SettingsService } from 'src/app/services/settings.service'
+import { ConfirmButtonComponent } from '../../confirm-button/confirm-button.component'
import { NumberComponent } from '../../input/number/number.component'
import { PermissionsGroupComponent } from '../../input/permissions/permissions-group/permissions-group.component'
import { PermissionsUserComponent } from '../../input/permissions/permissions-user/permissions-user.component'
import { SelectComponent } from '../../input/select/select.component'
+import { SwitchComponent } from '../../input/switch/switch.component'
import { TagsComponent } from '../../input/tags/tags.component'
import { TextComponent } from '../../input/text/text.component'
-import { SwitchComponent } from '../../input/switch/switch.component'
import { EditDialogMode } from '../edit-dialog.component'
import {
DOCUMENT_SOURCE_OPTIONS,
WORKFLOW_TYPE_OPTIONS,
WorkflowEditDialogComponent,
} from './workflow-edit-dialog.component'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { Workflow } from 'src/app/data/workflow'
-import {
- WorkflowTriggerType,
- DocumentSource,
-} from 'src/app/data/workflow-trigger'
-import { CdkDragDrop } from '@angular/cdk/drag-drop'
-import {
- WorkflowAction,
- WorkflowActionType,
-} from 'src/app/data/workflow-action'
-import { MATCHING_ALGORITHMS, MATCH_AUTO } from 'src/app/data/matching-model'
-import { ConfirmButtonComponent } from '../../confirm-button/confirm-button.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { CustomFieldDataType } from 'src/app/data/custom-field'
const workflow: Workflow = {
name: 'Workflow 1',
+import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'
import { Component, OnInit } from '@angular/core'
-import { FormGroup, FormControl, FormArray } from '@angular/forms'
+import { FormArray, FormControl, FormGroup } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { first } from 'rxjs'
-import { Workflow } from 'src/app/data/workflow'
import { Correspondent } from 'src/app/data/correspondent'
+import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
import { DocumentType } from 'src/app/data/document-type'
-import { StoragePath } from 'src/app/data/storage-path'
-import { WorkflowService } from 'src/app/services/rest/workflow.service'
-import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
-import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
-import { StoragePathService } from 'src/app/services/rest/storage-path.service'
-import { UserService } from 'src/app/services/rest/user.service'
-import { SettingsService } from 'src/app/services/settings.service'
-import { EditDialogComponent } from '../edit-dialog.component'
-import { MailRuleService } from 'src/app/services/rest/mail-rule.service'
import { MailRule } from 'src/app/data/mail-rule'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
import {
- DocumentSource,
- ScheduleDateField,
- WorkflowTrigger,
- WorkflowTriggerType,
-} from 'src/app/data/workflow-trigger'
+ MATCHING_ALGORITHMS,
+ MATCH_AUTO,
+ MATCH_NONE,
+} from 'src/app/data/matching-model'
+import { StoragePath } from 'src/app/data/storage-path'
+import { Workflow } from 'src/app/data/workflow'
import {
WorkflowAction,
WorkflowActionType,
} from 'src/app/data/workflow-action'
-import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'
import {
- MATCHING_ALGORITHMS,
- MATCH_AUTO,
- MATCH_NONE,
-} from 'src/app/data/matching-model'
+ DocumentSource,
+ ScheduleDateField,
+ WorkflowTrigger,
+ WorkflowTriggerType,
+} from 'src/app/data/workflow-trigger'
+import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
+import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
+import { MailRuleService } from 'src/app/services/rest/mail-rule.service'
+import { StoragePathService } from 'src/app/services/rest/storage-path.service'
+import { UserService } from 'src/app/services/rest/user.service'
+import { WorkflowService } from 'src/app/services/rest/workflow.service'
+import { SettingsService } from 'src/app/services/settings.service'
+import { EditDialogComponent } from '../edit-dialog.component'
export const DOCUMENT_SOURCE_OPTIONS = [
{
fakeAsync,
tick,
} from '@angular/core/testing'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import {
+ DEFAULT_MATCHING_ALGORITHM,
+ MATCH_ALL,
+} from 'src/app/data/matching-model'
+import { Tag } from 'src/app/data/tag'
+import { FilterPipe } from 'src/app/pipes/filter.pipe'
+import { HotKeyService } from 'src/app/services/hot-key.service'
+import { ClearableBadgeComponent } from '../clearable-badge/clearable-badge.component'
+import { TagComponent } from '../tag/tag.component'
import {
ChangedItems,
FilterableDropdownComponent,
Intersection,
LogicalOperator,
} from './filterable-dropdown.component'
-import { FilterPipe } from 'src/app/pipes/filter.pipe'
-import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
-import { Tag } from 'src/app/data/tag'
-import {
- DEFAULT_MATCHING_ALGORITHM,
- MATCH_ALL,
-} from 'src/app/data/matching-model'
import {
ToggleableDropdownButtonComponent,
ToggleableItemState,
} from './toggleable-dropdown-button/toggleable-dropdown-button.component'
-import { TagComponent } from '../tag/tag.component'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { ClearableBadgeComponent } from '../clearable-badge/clearable-badge.component'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { HotKeyService } from 'src/app/services/hot-key.service'
const items: Tag[] = [
{
import {
Component,
+ ElementRef,
EventEmitter,
Input,
+ OnInit,
Output,
- ElementRef,
ViewChild,
- OnInit,
} from '@angular/core'
-import { FilterPipe } from 'src/app/pipes/filter.pipe'
import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap'
-import { ToggleableItemState } from './toggleable-dropdown-button/toggleable-dropdown-button.component'
+import { Subject, filter, takeUntil } from 'rxjs'
import { MatchingModel } from 'src/app/data/matching-model'
-import { Subject, filter, take, takeUntil } from 'rxjs'
-import { SelectionDataItem } from 'src/app/services/rest/document.service'
import { ObjectWithPermissions } from 'src/app/data/object-with-permissions'
+import { FilterPipe } from 'src/app/pipes/filter.pipe'
import { HotKeyService } from 'src/app/services/hot-key.service'
+import { SelectionDataItem } from 'src/app/services/rest/document.service'
import { popperOptionsReenablePreventOverflow } from 'src/app/utils/popper-options'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
+import { ToggleableItemState } from './toggleable-dropdown-button/toggleable-dropdown-button.component'
export interface ChangedItems {
itemsToAdd: MatchingModel[]
import { ComponentFixture, TestBed } from '@angular/core/testing'
+import { Tag } from 'src/app/data/tag'
+import { TagComponent } from '../../tag/tag.component'
import {
ToggleableDropdownButtonComponent,
ToggleableItemState,
} from './toggleable-dropdown-button.component'
-import { TagComponent } from '../../tag/tag.component'
-import { Tag } from 'src/app/data/tag'
describe('ToggleableDropdownButtonComponent', () => {
let component: ToggleableDropdownButtonComponent
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { HotkeyDialogComponent } from './hotkey-dialog.component'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
+import { HotkeyDialogComponent } from './hotkey-dialog.component'
describe('HotkeyDialogComponent', () => {
let component: HotkeyDialogComponent
import { Component } from '@angular/core'
-import { AbstractInputComponent } from './abstract-input'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { AbstractInputComponent } from './abstract-input'
@Component({
template: `
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { CheckComponent } from './check.component'
import {
FormsModule,
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
+import { CheckComponent } from './check.component'
describe('CheckComponent', () => {
let component: CheckComponent
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
-import { ColorComponent } from './color.component'
import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap'
-import { ColorSliderModule } from 'ngx-color/slider'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { ColorSliderModule } from 'ngx-color/slider'
+import { ColorComponent } from './color.component'
describe('ColorComponent', () => {
let component: ColorComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
-import { DateComponent } from './date.component'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { RouterTestingModule } from '@angular/router/testing'
import {
NgbDateParserFormatter,
NgbDatepickerModule,
} from '@ng-bootstrap/ng-bootstrap'
-import { RouterTestingModule } from '@angular/router/testing'
-import { LocalizedDateParserFormatter } from 'src/app/utils/ngb-date-parser-formatter'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { LocalizedDateParserFormatter } from 'src/app/utils/ngb-date-parser-formatter'
+import { DateComponent } from './date.component'
describe('DateComponent', () => {
let component: DateComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
} from '@angular/forms'
import { NgSelectModule } from '@ng-select/ng-select'
import { of, throwError } from 'rxjs'
+import { FILTER_TITLE } from 'src/app/data/filter-rule-type'
import { DocumentService } from 'src/app/services/rest/document.service'
import { DocumentLinkComponent } from './document-link.component'
-import { FILTER_TITLE } from 'src/app/data/filter-rule-type'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
const documents = [
{
-import { Component, forwardRef, OnInit, Input, OnDestroy } from '@angular/core'
+import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core'
import { NG_VALUE_ACCESSOR } from '@angular/forms'
import {
- Subject,
- Observable,
- takeUntil,
+ catchError,
concat,
- of,
distinctUntilChanged,
- tap,
- switchMap,
map,
- catchError,
+ Observable,
+ of,
+ Subject,
+ switchMap,
+ takeUntil,
+ tap,
} from 'rxjs'
-import { FILTER_TITLE } from 'src/app/data/filter-rule-type'
import { Document } from 'src/app/data/document'
+import { FILTER_TITLE } from 'src/app/data/filter-rule-type'
import { DocumentService } from 'src/app/services/rest/document.service'
import { AbstractInputComponent } from '../abstract-input'
-import { ComponentFixture, TestBed } from '@angular/core/testing'
import { DragDropModule } from '@angular/cdk/drag-drop'
+import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms'
import { DragDropSelectComponent } from './drag-drop-select.component'
-import { Component, Input, ViewChild, forwardRef } from '@angular/core'
-import { NG_VALUE_ACCESSOR } from '@angular/forms'
-import { AbstractInputComponent } from '../abstract-input'
import {
CdkDragDrop,
CdkDropList,
moveItemInArray,
} from '@angular/cdk/drag-drop'
+import { Component, Input, ViewChild, forwardRef } from '@angular/core'
+import { NG_VALUE_ACCESSOR } from '@angular/forms'
+import { AbstractInputComponent } from '../abstract-input'
@Component({
providers: [
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
-import { EntriesComponent } from './entries.component'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { EntriesComponent } from './entries.component'
describe('EntriesComponent', () => {
let component: EntriesComponent
import { Component, forwardRef } from '@angular/core'
-import { AbstractInputComponent } from '../abstract-input'
import { NG_VALUE_ACCESSOR } from '@angular/forms'
+import { AbstractInputComponent } from '../abstract-input'
@Component({
providers: [
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { FileComponent } from './file.component'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { FileComponent } from './file.component'
describe('FileComponent', () => {
let component: FileComponent
+import { CurrencyPipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { CurrencyPipe } from '@angular/common'
import { MonetaryComponent } from './monetary.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
describe('MonetaryComponent', () => {
let component: MonetaryComponent
+import { getLocaleCurrencyCode } from '@angular/common'
import { Component, forwardRef, Inject, Input, LOCALE_ID } from '@angular/core'
import { NG_VALUE_ACCESSOR } from '@angular/forms'
import { AbstractInputComponent } from '../abstract-input'
-import { getLocaleCurrencyCode } from '@angular/common'
@Component({
providers: [
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
-import { NumberComponent } from './number.component'
-import { DocumentService } from 'src/app/services/rest/document.service'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { of } from 'rxjs'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { DocumentService } from 'src/app/services/rest/document.service'
+import { NumberComponent } from './number.component'
describe('NumberComponent', () => {
let component: NumberComponent
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
- ReactiveFormsModule,
NG_VALUE_ACCESSOR,
+ ReactiveFormsModule,
} from '@angular/forms'
-import { PasswordComponent } from './password.component'
import { By } from '@angular/platform-browser'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { PasswordComponent } from './password.component'
describe('PasswordComponent', () => {
let component: PasswordComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
- ReactiveFormsModule,
NG_VALUE_ACCESSOR,
+ ReactiveFormsModule,
} from '@angular/forms'
-import { PermissionsFormComponent } from './permissions-form.component'
-import { SelectComponent } from '../../select/select.component'
import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgSelectModule } from '@ng-select/ng-select'
+import { SelectComponent } from '../../select/select.component'
import { PermissionsGroupComponent } from '../permissions-group/permissions-group.component'
import { PermissionsUserComponent } from '../permissions-user/permissions-user.component'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { NgSelectModule } from '@ng-select/ng-select'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { PermissionsFormComponent } from './permissions-form.component'
describe('PermissionsFormComponent', () => {
let component: PermissionsFormComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
-import { PermissionsGroupComponent } from './permissions-group.component'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { NgSelectModule } from '@ng-select/ng-select'
-import { GroupService } from 'src/app/services/rest/group.service'
import { of } from 'rxjs'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { GroupService } from 'src/app/services/rest/group.service'
+import { PermissionsGroupComponent } from './permissions-group.component'
describe('PermissionsGroupComponent', () => {
let component: PermissionsGroupComponent
-import { Component, forwardRef, Input, OnInit } from '@angular/core'
+import { Component, forwardRef } from '@angular/core'
import { NG_VALUE_ACCESSOR } from '@angular/forms'
import { first } from 'rxjs/operators'
import { Group } from 'src/app/data/group'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
-import { PermissionsUserComponent } from './permissions-user.component'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { NgSelectModule } from '@ng-select/ng-select'
-import { GroupService } from 'src/app/services/rest/group.service'
import { of } from 'rxjs'
import { UserService } from 'src/app/services/rest/user.service'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { PermissionsUserComponent } from './permissions-user.component'
describe('PermissionsUserComponent', () => {
let component: PermissionsUserComponent
-import { Component, forwardRef, Input, OnInit } from '@angular/core'
+import { Component, forwardRef } from '@angular/core'
import { NG_VALUE_ACCESSOR } from '@angular/forms'
import { first } from 'rxjs/operators'
import { User } from 'src/app/data/user'
} from '@angular/core/testing'
import {
FormsModule,
- ReactiveFormsModule,
NG_VALUE_ACCESSOR,
+ ReactiveFormsModule,
} from '@angular/forms'
-import { SelectComponent } from './select.component'
-import { Tag } from 'src/app/data/tag'
+import { RouterTestingModule } from '@angular/router/testing'
+import { NgSelectModule } from '@ng-select/ng-select'
import {
DEFAULT_MATCHING_ALGORITHM,
MATCH_ALL,
} from 'src/app/data/matching-model'
-import { NgSelectModule } from '@ng-select/ng-select'
-import { RouterTestingModule } from '@angular/router/testing'
+import { Tag } from 'src/app/data/tag'
+import { SelectComponent } from './select.component'
const items: Tag[] = [
{
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { SwitchComponent } from './switch.component'
import {
FormsModule,
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'
+import { SwitchComponent } from './switch.component'
describe('SwitchComponent', () => {
let component: SwitchComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
- ReactiveFormsModule,
NG_VALUE_ACCESSOR,
+ ReactiveFormsModule,
} from '@angular/forms'
-import { TagsComponent } from './tags.component'
-import { Tag } from 'src/app/data/tag'
-import {
- DEFAULT_MATCHING_ALGORITHM,
- MATCH_ALL,
-} from 'src/app/data/matching-model'
-import { NgSelectModule } from '@ng-select/ng-select'
import { RouterTestingModule } from '@angular/router/testing'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { of } from 'rxjs'
-import { TagService } from 'src/app/services/rest/tag.service'
import {
NgbAccordionModule,
NgbModal,
NgbModalRef,
NgbPopoverModule,
} from '@ng-bootstrap/ng-bootstrap'
+import { NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { of } from 'rxjs'
+import {
+ DEFAULT_MATCHING_ALGORITHM,
+ MATCH_ALL,
+} from 'src/app/data/matching-model'
+import { Tag } from 'src/app/data/tag'
+import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
+import { TagService } from 'src/app/services/rest/tag.service'
+import { SettingsService } from 'src/app/services/settings.service'
import { TagEditDialogComponent } from '../../edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
import { CheckComponent } from '../check/check.component'
-import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
-import { TextComponent } from '../text/text.component'
import { ColorComponent } from '../color/color.component'
import { PermissionsFormComponent } from '../permissions/permissions-form/permissions-form.component'
import { SelectComponent } from '../select/select.component'
-import { SettingsService } from 'src/app/services/settings.service'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { TextComponent } from '../text/text.component'
+import { TagsComponent } from './tags.component'
const tags: Tag[] = [
{
} from '@angular/core'
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
+import { NgSelectComponent } from '@ng-select/ng-select'
+import { first, firstValueFrom, tap } from 'rxjs'
import { Tag } from 'src/app/data/tag'
-import { TagEditDialogComponent } from '../../edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
import { TagService } from 'src/app/services/rest/tag.service'
import { EditDialogMode } from '../../edit-dialog/edit-dialog.component'
-import { first, firstValueFrom, tap } from 'rxjs'
-import { NgSelectComponent } from '@ng-select/ng-select'
+import { TagEditDialogComponent } from '../../edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
@Component({
providers: [
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
- ReactiveFormsModule,
NG_VALUE_ACCESSOR,
+ ReactiveFormsModule,
} from '@angular/forms'
import { TextComponent } from './text.component'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
- ReactiveFormsModule,
NG_VALUE_ACCESSOR,
+ ReactiveFormsModule,
} from '@angular/forms'
import { TextAreaComponent } from './textarea.component'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
FormsModule,
- ReactiveFormsModule,
NG_VALUE_ACCESSOR,
+ ReactiveFormsModule,
} from '@angular/forms'
-import { UrlComponent } from './url.component'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { UrlComponent } from './url.component'
describe('TextComponent', () => {
let component: UrlComponent
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { LogoComponent } from './logo.component'
-import { By } from '@angular/platform-browser'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { SettingsService } from 'src/app/services/settings.service'
+import { By } from '@angular/platform-browser'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { SettingsService } from 'src/app/services/settings.service'
+import { LogoComponent } from './logo.component'
describe('LogoComponent', () => {
let component: LogoComponent
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { Title } from '@angular/platform-browser'
-import { PageHeaderComponent } from './page-header.component'
import { environment } from 'src/environments/environment'
+import { PageHeaderComponent } from './page-header.component'
describe('PageHeaderComponent', () => {
let component: PageHeaderComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { PermissionsDialogComponent } from './permissions-dialog.component'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbActiveModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { NgSelectModule } from '@ng-select/ng-select'
+import { of } from 'rxjs'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
import { UserService } from 'src/app/services/rest/user.service'
-import { of } from 'rxjs'
import { PermissionsFormComponent } from '../input/permissions/permissions-form/permissions-form.component'
-import { SelectComponent } from '../input/select/select.component'
-import { NgSelectModule } from '@ng-select/ng-select'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { PermissionsUserComponent } from '../input/permissions/permissions-user/permissions-user.component'
import { PermissionsGroupComponent } from '../input/permissions/permissions-group/permissions-group.component'
+import { PermissionsUserComponent } from '../input/permissions/permissions-user/permissions-user.component'
+import { SelectComponent } from '../input/select/select.component'
import { SwitchComponent } from '../input/switch/switch.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { PermissionsDialogComponent } from './permissions-dialog.component'
const set_permissions = {
owner: 10,
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of } from 'rxjs'
+import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { PermissionsService } from 'src/app/services/permissions.service'
import { UserService } from 'src/app/services/rest/user.service'
+import { SettingsService } from 'src/app/services/settings.service'
+import { ClearableBadgeComponent } from '../clearable-badge/clearable-badge.component'
import {
OwnerFilterType,
PermissionsFilterDropdownComponent,
PermissionsSelectionModel,
} from './permissions-filter-dropdown.component'
-import { ClearableBadgeComponent } from '../clearable-badge/clearable-badge.component'
-import { SettingsService } from 'src/app/services/settings.service'
-import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
const currentUserID = 13
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { PermissionsSelectComponent } from './permissions-select.component'
import {
FormsModule,
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
+import { By } from '@angular/platform-browser'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import {
PermissionAction,
PermissionType,
} from 'src/app/services/permissions.service'
-import { By } from '@angular/platform-browser'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { SettingsService } from 'src/app/services/settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { PermissionsSelectComponent } from './permissions-select.component'
const permissions = [
'add_document',
FormGroup,
NG_VALUE_ACCESSOR,
} from '@angular/forms'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import {
PermissionAction,
PermissionsService,
PermissionType,
} from 'src/app/services/permissions.service'
-import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
import { SettingsService } from 'src/app/services/settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
@Component({
providers: [
tick,
} from '@angular/core/testing'
-import { PreviewPopupComponent } from './preview-popup.component'
-import { By } from '@angular/platform-browser'
-import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
-import { SettingsService } from 'src/app/services/settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { DocumentService } from 'src/app/services/rest/document.service'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { PdfViewerModule } from 'ng2-pdf-viewer'
import {
HttpClient,
provideHttpClient,
withInterceptorsFromDi,
} from '@angular/common/http'
-import { of, throwError } from 'rxjs'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { By } from '@angular/platform-browser'
import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap'
+import { PdfViewerModule } from 'ng2-pdf-viewer'
+import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
+import { of, throwError } from 'rxjs'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
+import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
+import { DocumentService } from 'src/app/services/rest/document.service'
+import { SettingsService } from 'src/app/services/settings.service'
+import { PreviewPopupComponent } from './preview-popup.component'
const doc = {
id: 10,
tick,
} from '@angular/core/testing'
-import { ProfileEditDialogComponent } from './profile-edit-dialog.component'
-import { ProfileService } from 'src/app/services/profile.service'
+import { Clipboard } from '@angular/cdk/clipboard'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import {
NgbAccordionModule,
NgbModalModule,
NgbPopoverModule,
} from '@ng-bootstrap/ng-bootstrap'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { TextComponent } from '../input/text/text.component'
-import { PasswordComponent } from '../input/password/password.component'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
+import { ProfileService } from 'src/app/services/profile.service'
import { ToastService } from 'src/app/services/toast.service'
-import { Clipboard } from '@angular/cdk/clipboard'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { ConfirmButtonComponent } from '../confirm-button/confirm-button.component'
+import { PasswordComponent } from '../input/password/password.component'
+import { TextComponent } from '../input/text/text.component'
+import { ProfileEditDialogComponent } from './profile-edit-dialog.component'
const socialAccount = {
id: 1,
+import { Clipboard } from '@angular/cdk/clipboard'
import { Component, OnInit } from '@angular/core'
import { FormControl, FormGroup } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
-import { ProfileService } from 'src/app/services/profile.service'
+import { takeUntil } from 'rxjs'
import {
- TotpSettings,
SocialAccount,
SocialAccountProvider,
+ TotpSettings,
} from 'src/app/data/user-profile'
+import { ProfileService } from 'src/app/services/profile.service'
import { ToastService } from 'src/app/services/toast.service'
-import { takeUntil } from 'rxjs'
-import { Clipboard } from '@angular/cdk/clipboard'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
@Component({
+import { Clipboard } from '@angular/cdk/clipboard'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
tick,
} from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { By } from '@angular/platform-browser'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
import { FileVersion, ShareLink } from 'src/app/data/share-link'
import { ShareLinkService } from 'src/app/services/rest/share-link.service'
import { ToastService } from 'src/app/services/toast.service'
import { environment } from 'src/environments/environment'
import { ShareLinksDropdownComponent } from './share-links-dropdown.component'
-import { Clipboard } from '@angular/cdk/clipboard'
-import { By } from '@angular/platform-browser'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
describe('ShareLinksDropdownComponent', () => {
let component: ShareLinksDropdownComponent
+import { Clipboard } from '@angular/cdk/clipboard'
import { Component, Input, OnInit } from '@angular/core'
import { first } from 'rxjs'
-import { ShareLink, FileVersion } from 'src/app/data/share-link'
+import { FileVersion, ShareLink } from 'src/app/data/share-link'
import { ShareLinkService } from 'src/app/services/rest/share-link.service'
import { ToastService } from 'src/app/services/toast.service'
import { environment } from 'src/environments/environment'
-import { Clipboard } from '@angular/cdk/clipboard'
@Component({
selector: 'pngx-share-links-dropdown',
+import { Clipboard, ClipboardModule } from '@angular/cdk/clipboard'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
ComponentFixture,
TestBed,
NgbPopoverModule,
NgbProgressbarModule,
} from '@ng-bootstrap/ng-bootstrap'
-import { Clipboard, ClipboardModule } from '@angular/cdk/clipboard'
-import { SystemStatusDialogComponent } from './system-status-dialog.component'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import {
- SystemStatusItemStatus,
InstallType,
SystemStatus,
+ SystemStatusItemStatus,
} from 'src/app/data/system-status'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { FileSizePipe } from 'src/app/pipes/file-size.pipe'
+import { SystemStatusDialogComponent } from './system-status-dialog.component'
const status: SystemStatus = {
pngx_version: '2.4.3',
-import { Component, Input } from '@angular/core'
+import { Clipboard } from '@angular/cdk/clipboard'
+import { Component } from '@angular/core'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import {
SystemStatus,
SystemStatusItemStatus,
} from 'src/app/data/system-status'
-import { SystemStatusService } from 'src/app/services/system-status.service'
-import { Clipboard } from '@angular/cdk/clipboard'
@Component({
selector: 'pngx-system-status-dialog',
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { TagComponent } from './tag.component'
-import { Tag } from 'src/app/data/tag'
import { By } from '@angular/platform-browser'
+import { Tag } from 'src/app/data/tag'
+import { TagComponent } from './tag.component'
const tag: Tag = {
id: 1,
+import { Clipboard } from '@angular/cdk/clipboard'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
+ ComponentFixture,
TestBed,
discardPeriodicTasks,
fakeAsync,
flush,
tick,
} from '@angular/core/testing'
-import { ToastService } from 'src/app/services/toast.service'
-import { ToastsComponent } from './toasts.component'
-import { ComponentFixture } from '@angular/core/testing'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { of } from 'rxjs'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
-import { Clipboard } from '@angular/cdk/clipboard'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { of } from 'rxjs'
+import { ToastService } from 'src/app/services/toast.service'
+import { ToastsComponent } from './toasts.component'
const toasts = [
{
+import { Clipboard } from '@angular/cdk/clipboard'
import { Component, OnDestroy, OnInit } from '@angular/core'
import { Subscription, interval, take } from 'rxjs'
import { Toast, ToastService } from 'src/app/services/toast.service'
-import { Clipboard } from '@angular/cdk/clipboard'
@Component({
selector: 'pngx-toasts',
-import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { NgbAlertModule } from '@ng-bootstrap/ng-bootstrap'
-import { PermissionsGuard } from 'src/app/guards/permissions.guard'
-import { DashboardComponent } from './dashboard.component'
+import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { SettingsService } from 'src/app/services/settings.service'
-import { StatisticsWidgetComponent } from './widgets/statistics-widget/statistics-widget.component'
-import { PageHeaderComponent } from '../common/page-header/page-header.component'
-import { WidgetFrameComponent } from './widgets/widget-frame/widget-frame.component'
-import { UploadFileWidgetComponent } from './widgets/upload-file-widget/upload-file-widget.component'
-import { SavedViewService } from 'src/app/services/rest/saved-view.service'
-import { PermissionsService } from 'src/app/services/permissions.service'
+import { ComponentFixture, TestBed } from '@angular/core/testing'
import { By } from '@angular/platform-browser'
-import { SavedViewWidgetComponent } from './widgets/saved-view-widget/saved-view-widget.component'
-import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { RouterTestingModule } from '@angular/router/testing'
+import { NgbAlertModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { TourNgBootstrapModule, TourService } from 'ngx-ui-tour-ng-bootstrap'
-import { LogoComponent } from '../common/logo/logo.component'
import { of, throwError } from 'rxjs'
-import { ToastService } from 'src/app/services/toast.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop'
import { SavedView } from 'src/app/data/saved-view'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
+import { PermissionsGuard } from 'src/app/guards/permissions.guard'
+import { PermissionsService } from 'src/app/services/permissions.service'
+import { SavedViewService } from 'src/app/services/rest/saved-view.service'
+import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
+import { LogoComponent } from '../common/logo/logo.component'
+import { PageHeaderComponent } from '../common/page-header/page-header.component'
+import { DashboardComponent } from './dashboard.component'
+import { SavedViewWidgetComponent } from './widgets/saved-view-widget/saved-view-widget.component'
+import { StatisticsWidgetComponent } from './widgets/statistics-widget/statistics-widget.component'
+import { UploadFileWidgetComponent } from './widgets/upload-file-widget/upload-file-widget.component'
+import { WidgetFrameComponent } from './widgets/widget-frame/widget-frame.component'
const saved_views = [
{
-import { Component } from '@angular/core'
-import { SavedViewService } from 'src/app/services/rest/saved-view.service'
-import { SettingsService } from 'src/app/services/settings.service'
-import { ComponentWithPermissions } from '../with-permissions/with-permissions.component'
-import { TourService } from 'ngx-ui-tour-ng-bootstrap'
-import { SavedView } from 'src/app/data/saved-view'
-import { ToastService } from 'src/app/services/toast.service'
import {
CdkDragDrop,
CdkDragEnd,
CdkDragStart,
moveItemInArray,
} from '@angular/cdk/drag-drop'
+import { Component } from '@angular/core'
+import { TourService } from 'ngx-ui-tour-ng-bootstrap'
+import { SavedView } from 'src/app/data/saved-view'
+import { SavedViewService } from 'src/app/services/rest/saved-view.service'
+import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
import { environment } from 'src/environments/environment'
+import { ComponentWithPermissions } from '../with-permissions/with-permissions.component'
@Component({
selector: 'pngx-dashboard',
+import { DragDropModule } from '@angular/cdk/drag-drop'
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
ComponentFixture,
fakeAsync,
tick,
} from '@angular/core/testing'
+import { By } from '@angular/platform-browser'
import { Router } from '@angular/router'
import { RouterTestingModule } from '@angular/router/testing'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
-import { of, Subject } from 'rxjs'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { Subject, of } from 'rxjs'
import { routes } from 'src/app/app-routing.module'
+import { CustomFieldDisplayComponent } from 'src/app/components/common/custom-field-display/custom-field-display.component'
+import { PreviewPopupComponent } from 'src/app/components/common/preview-popup/preview-popup.component'
+import { CustomFieldDataType } from 'src/app/data/custom-field'
+import { DisplayField, DisplayMode } from 'src/app/data/document'
import {
FILTER_CORRESPONDENT,
FILTER_DOCUMENT_TYPE,
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
+import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
import {
ConsumerStatusService,
FileStatus,
} from 'src/app/services/consumer-status.service'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import { PermissionsService } from 'src/app/services/permissions.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { DocumentService } from 'src/app/services/rest/document.service'
import { WidgetFrameComponent } from '../widget-frame/widget-frame.component'
import { SavedViewWidgetComponent } from './saved-view-widget.component'
-import { By } from '@angular/platform-browser'
-import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
-import { DragDropModule } from '@angular/cdk/drag-drop'
-import { PreviewPopupComponent } from 'src/app/components/common/preview-popup/preview-popup.component'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { CustomFieldDataType } from 'src/app/data/custom-field'
-import { CustomFieldDisplayComponent } from 'src/app/components/common/custom-field-display/custom-field-display.component'
-import { DisplayMode, DisplayField } from 'src/app/data/document'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
const savedView: SavedView = {
id: 1,
ViewChildren,
} from '@angular/core'
import { Router } from '@angular/router'
+import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'
import { delay, Subject, takeUntil, tap } from 'rxjs'
+import { LoadingComponentWithPermissions } from 'src/app/components/loading-component/loading.component'
+import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
import {
DEFAULT_DASHBOARD_DISPLAY_FIELDS,
DEFAULT_DASHBOARD_VIEW_PAGE_SIZE,
DisplayMode,
Document,
} from 'src/app/data/document'
-import { SavedView } from 'src/app/data/saved-view'
-import { ConsumerStatusService } from 'src/app/services/consumer-status.service'
-import { DocumentService } from 'src/app/services/rest/document.service'
import {
FILTER_CORRESPONDENT,
FILTER_DOCUMENT_TYPE,
FILTER_HAS_TAGS_ALL,
FILTER_STORAGE_PATH,
} from 'src/app/data/filter-rule-type'
-import { OpenDocumentsService } from 'src/app/services/open-documents.service'
+import { SavedView } from 'src/app/data/saved-view'
+import { ConsumerStatusService } from 'src/app/services/consumer-status.service'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
-import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'
+import { OpenDocumentsService } from 'src/app/services/open-documents.service'
import {
PermissionAction,
- PermissionType,
PermissionsService,
+ PermissionType,
} from 'src/app/services/permissions.service'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
+import { DocumentService } from 'src/app/services/rest/document.service'
import { SettingsService } from 'src/app/services/settings.service'
-import { LoadingComponentWithPermissions } from 'src/app/components/loading-component/loading.component'
@Component({
selector: 'pngx-saved-view-widget',
-import { TestBed } from '@angular/core/testing'
-import { StatisticsWidgetComponent } from './statistics-widget.component'
-import { ComponentFixture } from '@angular/core/testing'
+import { DragDropModule } from '@angular/cdk/drag-drop'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
-import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
-import { WidgetFrameComponent } from '../widget-frame/widget-frame.component'
-import { environment } from 'src/environments/environment'
+import { ComponentFixture, TestBed } from '@angular/core/testing'
import { RouterTestingModule } from '@angular/router/testing'
+import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
+import { Subject } from 'rxjs'
import { routes } from 'src/app/app-routing.module'
-import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
+import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import {
ConsumerStatusService,
FileStatus,
} from 'src/app/services/consumer-status.service'
-import { Subject } from 'rxjs'
-import { DragDropModule } from '@angular/cdk/drag-drop'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { environment } from 'src/environments/environment'
+import { WidgetFrameComponent } from '../widget-frame/widget-frame.component'
+import { StatisticsWidgetComponent } from './statistics-widget.component'
describe('StatisticsWidgetComponent', () => {
let component: StatisticsWidgetComponent
import { HttpClient } from '@angular/common/http'
import { Component, OnDestroy, OnInit } from '@angular/core'
-import { first, Observable, Subject, Subscription, takeUntil } from 'rxjs'
+import * as mimeTypeNames from 'mime-names'
+import { first, Subject, Subscription, takeUntil } from 'rxjs'
+import { ComponentWithPermissions } from 'src/app/components/with-permissions/with-permissions.component'
import { FILTER_HAS_TAGS_ANY } from 'src/app/data/filter-rule-type'
import { ConsumerStatusService } from 'src/app/services/consumer-status.service'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import { environment } from 'src/environments/environment'
-import * as mimeTypeNames from 'mime-names'
-import { ComponentWithPermissions } from 'src/app/components/with-permissions/with-permissions.component'
export interface Statistics {
documents_total?: number
+import { DragDropModule } from '@angular/cdk/drag-drop'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
ComponentFixture,
import { By } from '@angular/platform-browser'
import { RouterTestingModule } from '@angular/router/testing'
import {
- NgbModule,
- NgbAlertModule,
NgbAlert,
+ NgbAlertModule,
NgbCollapse,
+ NgbModule,
} from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { routes } from 'src/app/app-routing.module'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { UploadDocumentsService } from 'src/app/services/upload-documents.service'
import { WidgetFrameComponent } from '../widget-frame/widget-frame.component'
import { UploadFileWidgetComponent } from './upload-file-widget.component'
-import { DragDropModule } from '@angular/cdk/drag-drop'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
const FAILED_STATUSES = [new FileStatus()]
const WORKING_STATUSES = [new FileStatus(), new FileStatus()]
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { By } from '@angular/platform-browser'
-import { NgbAlertModule, NgbAlert } from '@ng-bootstrap/ng-bootstrap'
+import { NgbAlert, NgbAlertModule } from '@ng-bootstrap/ng-bootstrap'
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { WidgetFrameComponent } from '../widget-frame/widget-frame.component'
import { WelcomeWidgetComponent } from './welcome-widget.component'
+import { DragDropModule } from '@angular/cdk/drag-drop'
import { Component } from '@angular/core'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { By } from '@angular/platform-browser'
import { NgbAlertModule } from '@ng-bootstrap/ng-bootstrap'
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { WidgetFrameComponent } from './widget-frame.component'
-import { DragDropModule } from '@angular/cdk/drag-drop'
@Component({
template: `
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { ActivatedRoute, Router, convertToParamMap } from '@angular/router'
-import { of } from 'rxjs'
-import { DocumentService } from 'src/app/services/rest/document.service'
-import { DocumentAsnComponent } from './document-asn.component'
import { RouterTestingModule } from '@angular/router/testing'
-import { FilterRule } from 'src/app/data/filter-rule'
+import { of } from 'rxjs'
import { routes } from 'src/app/app-routing.module'
+import { FilterRule } from 'src/app/data/filter-rule'
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
+import { DocumentService } from 'src/app/services/rest/document.service'
+import { DocumentAsnComponent } from './document-asn.component'
describe('DocumentAsnComponent', () => {
let component: DocumentAsnComponent
import { Component, OnInit } from '@angular/core'
-import { DocumentService } from '../../services/rest/document.service'
import { ActivatedRoute, Router } from '@angular/router'
import { FILTER_ASN } from '../../data/filter-rule-type'
+import { DocumentService } from '../../services/rest/document.service'
@Component({
selector: 'pngx-document-asncomponent',
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
import {
ComponentFixture,
TestBed,
+ discardPeriodicTasks,
fakeAsync,
tick,
- discardPeriodicTasks,
} from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { By } from '@angular/platform-browser'
import {
- Router,
ActivatedRoute,
- convertToParamMap,
+ Router,
RouterModule,
+ convertToParamMap,
} from '@angular/router'
import {
+ NgbDateStruct,
NgbModal,
- NgbModule,
NgbModalModule,
NgbModalRef,
- NgbDateStruct,
+ NgbModule,
} from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
+import { PdfViewerModule } from 'ng2-pdf-viewer'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
import { routes } from 'src/app/app-routing.module'
+import { Correspondent } from 'src/app/data/correspondent'
+import { CustomFieldDataType } from 'src/app/data/custom-field'
+import { DataType } from 'src/app/data/datatype'
+import { Document } from 'src/app/data/document'
+import { DocumentType } from 'src/app/data/document-type'
import {
- FILTER_FULLTEXT_MORELIKE,
FILTER_CORRESPONDENT,
- FILTER_DOCUMENT_TYPE,
- FILTER_STORAGE_PATH,
- FILTER_HAS_TAGS_ALL,
FILTER_CREATED_AFTER,
FILTER_CREATED_BEFORE,
+ FILTER_DOCUMENT_TYPE,
+ FILTER_FULLTEXT_MORELIKE,
+ FILTER_HAS_TAGS_ALL,
+ FILTER_STORAGE_PATH,
} from 'src/app/data/filter-rule-type'
-import { Correspondent } from 'src/app/data/correspondent'
-import { Document } from 'src/app/data/document'
-import { DocumentType } from 'src/app/data/document-type'
import { StoragePath } from 'src/app/data/storage-path'
import { Tag } from 'src/app/data/tag'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { OpenDocumentsService } from 'src/app/services/open-documents.service'
import { PermissionsService } from 'src/app/services/permissions.service'
import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
import { DocumentService } from 'src/app/services/rest/document.service'
import { StoragePathService } from 'src/app/services/rest/storage-path.service'
+import { TagService } from 'src/app/services/rest/tag.service'
import { UserService } from 'src/app/services/rest/user.service'
import { SettingsService } from 'src/app/services/settings.service'
import { ToastService } from 'src/app/services/toast.service'
+import { environment } from 'src/environments/environment'
import { ConfirmDialogComponent } from '../common/confirm-dialog/confirm-dialog.component'
+import { DeletePagesConfirmDialogComponent } from '../common/confirm-dialog/delete-pages-confirm-dialog/delete-pages-confirm-dialog.component'
+import { RotateConfirmDialogComponent } from '../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
+import { SplitConfirmDialogComponent } from '../common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component'
+import { CustomFieldsDropdownComponent } from '../common/custom-fields-dropdown/custom-fields-dropdown.component'
import { CorrespondentEditDialogComponent } from '../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
import { DocumentTypeEditDialogComponent } from '../common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
import { StoragePathEditDialogComponent } from '../common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
import { SelectComponent } from '../common/input/select/select.component'
import { TagsComponent } from '../common/input/tags/tags.component'
import { TextComponent } from '../common/input/text/text.component'
+import { TextAreaComponent } from '../common/input/textarea/textarea.component'
import { PageHeaderComponent } from '../common/page-header/page-header.component'
+import { ShareLinksDropdownComponent } from '../common/share-links-dropdown/share-links-dropdown.component'
import { DocumentNotesComponent } from '../document-notes/document-notes.component'
import { DocumentDetailComponent } from './document-detail.component'
-import { ShareLinksDropdownComponent } from '../common/share-links-dropdown/share-links-dropdown.component'
-import { CustomFieldsDropdownComponent } from '../common/custom-fields-dropdown/custom-fields-dropdown.component'
-import { CustomFieldDataType } from 'src/app/data/custom-field'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { environment } from 'src/environments/environment'
-import { RotateConfirmDialogComponent } from '../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
-import { SplitConfirmDialogComponent } from '../common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component'
-import { DeletePagesConfirmDialogComponent } from '../common/confirm-dialog/delete-pages-confirm-dialog/delete-pages-confirm-dialog.component'
-import { PdfViewerModule } from 'ng2-pdf-viewer'
-import { DataType } from 'src/app/data/datatype'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { TagService } from 'src/app/services/rest/tag.service'
-import { TextAreaComponent } from '../common/input/textarea/textarea.component'
const doc: Document = {
id: 3,
-import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core'
+import { HttpClient } from '@angular/common/http'
+import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core'
import { FormArray, FormControl, FormGroup } from '@angular/forms'
import { ActivatedRoute, Router } from '@angular/router'
import {
NgbNav,
NgbNavChangeEvent,
} from '@ng-bootstrap/ng-bootstrap'
-import { Correspondent } from 'src/app/data/correspondent'
-import { Document } from 'src/app/data/document'
-import { DocumentMetadata } from 'src/app/data/document-metadata'
-import { DocumentType } from 'src/app/data/document-type'
-import { Tag } from 'src/app/data/tag'
-import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
-import { DocumentListViewService } from 'src/app/services/document-list-view.service'
-import { OpenDocumentsService } from 'src/app/services/open-documents.service'
-import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
-import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
-import { DocumentService } from 'src/app/services/rest/document.service'
-import { ConfirmDialogComponent } from '../common/confirm-dialog/confirm-dialog.component'
-import { CorrespondentEditDialogComponent } from '../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
-import { DocumentTypeEditDialogComponent } from '../common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
-import { ToastService } from 'src/app/services/toast.service'
-import { TextComponent } from '../common/input/text/text.component'
-import { SettingsService } from 'src/app/services/settings.service'
import { dirtyCheck, DirtyComponent } from '@ngneat/dirty-check-forms'
-import { Observable, Subject, BehaviorSubject } from 'rxjs'
+import { PDFDocumentProxy } from 'ng2-pdf-viewer'
+import { BehaviorSubject, Observable, Subject } from 'rxjs'
import {
- first,
- takeUntil,
- switchMap,
- map,
debounceTime,
distinctUntilChanged,
filter,
+ first,
+ map,
+ switchMap,
+ takeUntil,
} from 'rxjs/operators'
+import { Correspondent } from 'src/app/data/correspondent'
+import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
+import { CustomFieldInstance } from 'src/app/data/custom-field-instance'
+import { DataType } from 'src/app/data/datatype'
+import { Document } from 'src/app/data/document'
+import { DocumentMetadata } from 'src/app/data/document-metadata'
+import { DocumentNote } from 'src/app/data/document-note'
import { DocumentSuggestions } from 'src/app/data/document-suggestions'
+import { DocumentType } from 'src/app/data/document-type'
+import { FilterRule } from 'src/app/data/filter-rule'
import {
FILTER_CORRESPONDENT,
FILTER_CREATED_AFTER,
FILTER_HAS_TAGS_ALL,
FILTER_STORAGE_PATH,
} from 'src/app/data/filter-rule-type'
-import { StoragePathService } from 'src/app/services/rest/storage-path.service'
+import { ObjectWithId } from 'src/app/data/object-with-id'
import { StoragePath } from 'src/app/data/storage-path'
-import { StoragePathEditDialogComponent } from '../common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
+import { Tag } from 'src/app/data/tag'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { User } from 'src/app/data/user'
+import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
+import { DocumentListViewService } from 'src/app/services/document-list-view.service'
+import { HotKeyService } from 'src/app/services/hot-key.service'
+import { OpenDocumentsService } from 'src/app/services/open-documents.service'
import {
PermissionAction,
PermissionsService,
PermissionType,
} from 'src/app/services/permissions.service'
-import { User } from 'src/app/data/user'
+import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
+import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
+import { DocumentService } from 'src/app/services/rest/document.service'
+import { StoragePathService } from 'src/app/services/rest/storage-path.service'
import { UserService } from 'src/app/services/rest/user.service'
-import { DocumentNote } from 'src/app/data/document-note'
-import { HttpClient } from '@angular/common/http'
-import { ComponentWithPermissions } from '../with-permissions/with-permissions.component'
-import { EditDialogMode } from '../common/edit-dialog/edit-dialog.component'
-import { ObjectWithId } from 'src/app/data/object-with-id'
-import { FilterRule } from 'src/app/data/filter-rule'
+import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
import { ISODateAdapter } from 'src/app/utils/ngb-iso-date-adapter'
-import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
-import { CustomFieldInstance } from 'src/app/data/custom-field-instance'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { SplitConfirmDialogComponent } from '../common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component'
-import { RotateConfirmDialogComponent } from '../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
-import { DeletePagesConfirmDialogComponent } from '../common/confirm-dialog/delete-pages-confirm-dialog/delete-pages-confirm-dialog.component'
-import { HotKeyService } from 'src/app/services/hot-key.service'
-import { PDFDocumentProxy } from 'ng2-pdf-viewer'
-import { DataType } from 'src/app/data/datatype'
import * as UTIF from 'utif'
+import { ConfirmDialogComponent } from '../common/confirm-dialog/confirm-dialog.component'
+import { DeletePagesConfirmDialogComponent } from '../common/confirm-dialog/delete-pages-confirm-dialog/delete-pages-confirm-dialog.component'
+import { RotateConfirmDialogComponent } from '../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
+import { SplitConfirmDialogComponent } from '../common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component'
+import { CorrespondentEditDialogComponent } from '../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
+import { DocumentTypeEditDialogComponent } from '../common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
+import { EditDialogMode } from '../common/edit-dialog/edit-dialog.component'
+import { StoragePathEditDialogComponent } from '../common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
+import { TextComponent } from '../common/input/text/text.component'
+import { ComponentWithPermissions } from '../with-permissions/with-permissions.component'
enum DocumentDetailNavIDs {
Details = 1,
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { MetadataCollapseComponent } from './metadata-collapse.component'
import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { MetadataCollapseComponent } from './metadata-collapse.component'
const metadata = [
{
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { DocumentHistoryComponent } from './document-history.component'
-import { DocumentService } from 'src/app/services/rest/document.service'
-import { of } from 'rxjs'
-import { AuditLogAction } from 'src/app/data/auditlog-entry'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { NgbCollapseModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { of } from 'rxjs'
+import { AuditLogAction } from 'src/app/data/auditlog-entry'
+import { DataType } from 'src/app/data/datatype'
+import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
+import { DocumentService } from 'src/app/services/rest/document.service'
import { StoragePathService } from 'src/app/services/rest/storage-path.service'
import { UserService } from 'src/app/services/rest/user.service'
-import { DataType } from 'src/app/data/datatype'
+import { DocumentHistoryComponent } from './document-history.component'
describe('DocumentHistoryComponent', () => {
let component: DocumentHistoryComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
import { By } from '@angular/platform-browser'
import {
NgbModal,
- NgbModule,
NgbModalModule,
NgbModalRef,
+ NgbModule,
} from '@ng-bootstrap/ng-bootstrap'
+import { NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
+import { Correspondent } from 'src/app/data/correspondent'
+import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
+import { DocumentType } from 'src/app/data/document-type'
+import { Results } from 'src/app/data/results'
+import { StoragePath } from 'src/app/data/storage-path'
+import { Tag } from 'src/app/data/tag'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { FilterPipe } from 'src/app/pipes/filter.pipe'
+import { IsNumberPipe } from 'src/app/pipes/is-number.pipe'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import { PermissionsService } from 'src/app/services/permissions.service'
import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
import {
- SelectionData,
DocumentService,
+ SelectionData,
} from 'src/app/services/rest/document.service'
+import { GroupService } from 'src/app/services/rest/group.service'
import { StoragePathService } from 'src/app/services/rest/storage-path.service'
import { TagService } from 'src/app/services/rest/tag.service'
+import { UserService } from 'src/app/services/rest/user.service'
import { SettingsService } from 'src/app/services/settings.service'
import { ToastService } from 'src/app/services/toast.service'
import { environment } from 'src/environments/environment'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
+import { MergeConfirmDialogComponent } from '../../common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component'
+import { RotateConfirmDialogComponent } from '../../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
+import { CorrespondentEditDialogComponent } from '../../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
+import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
+import { DocumentTypeEditDialogComponent } from '../../common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
+import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
+import { StoragePathEditDialogComponent } from '../../common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
+import { TagEditDialogComponent } from '../../common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
import { FilterableDropdownComponent } from '../../common/filterable-dropdown/filterable-dropdown.component'
import { ToggleableDropdownButtonComponent } from '../../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'
-import { PermissionsDialogComponent } from '../../common/permissions-dialog/permissions-dialog.component'
import { PermissionsFormComponent } from '../../common/input/permissions/permissions-form/permissions-form.component'
-import { BulkEditorComponent } from './bulk-editor.component'
-import { SelectComponent } from '../../common/input/select/select.component'
-import { UserService } from 'src/app/services/rest/user.service'
import { PermissionsGroupComponent } from '../../common/input/permissions/permissions-group/permissions-group.component'
import { PermissionsUserComponent } from '../../common/input/permissions/permissions-user/permissions-user.component'
-import { NgSelectModule } from '@ng-select/ng-select'
-import { GroupService } from 'src/app/services/rest/group.service'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { SelectComponent } from '../../common/input/select/select.component'
import { SwitchComponent } from '../../common/input/switch/switch.component'
-import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
-import { TagEditDialogComponent } from '../../common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
-import { Results } from 'src/app/data/results'
-import { Tag } from 'src/app/data/tag'
-import { Correspondent } from 'src/app/data/correspondent'
-import { DocumentType } from 'src/app/data/document-type'
-import { StoragePath } from 'src/app/data/storage-path'
-import { CorrespondentEditDialogComponent } from '../../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
-import { DocumentTypeEditDialogComponent } from '../../common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
-import { StoragePathEditDialogComponent } from '../../common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
-import { IsNumberPipe } from 'src/app/pipes/is-number.pipe'
-import { RotateConfirmDialogComponent } from '../../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
-import { MergeConfirmDialogComponent } from '../../common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
-import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { PermissionsDialogComponent } from '../../common/permissions-dialog/permissions-dialog.component'
+import { BulkEditorComponent } from './bulk-editor.component'
const selectionData: SelectionData = {
selected_tags: [
import { Component, Input, OnDestroy, OnInit } from '@angular/core'
-import { Tag } from 'src/app/data/tag'
+import { FormControl, FormGroup } from '@angular/forms'
+import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'
+import { saveAs } from 'file-saver'
+import { first, map, Subject, switchMap, takeUntil } from 'rxjs'
+import { ConfirmDialogComponent } from 'src/app/components/common/confirm-dialog/confirm-dialog.component'
import { Correspondent } from 'src/app/data/correspondent'
+import { CustomField } from 'src/app/data/custom-field'
import { DocumentType } from 'src/app/data/document-type'
-import { TagService } from 'src/app/services/rest/tag.service'
+import { MatchingModel } from 'src/app/data/matching-model'
+import { StoragePath } from 'src/app/data/storage-path'
+import { Tag } from 'src/app/data/tag'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { DocumentListViewService } from 'src/app/services/document-list-view.service'
+import { OpenDocumentsService } from 'src/app/services/open-documents.service'
+import {
+ PermissionAction,
+ PermissionsService,
+ PermissionType,
+} from 'src/app/services/permissions.service'
import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
-import { DocumentListViewService } from 'src/app/services/document-list-view.service'
-import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'
import {
DocumentService,
SelectionDataItem,
} from 'src/app/services/rest/document.service'
-import { OpenDocumentsService } from 'src/app/services/open-documents.service'
-import { ConfirmDialogComponent } from 'src/app/components/common/confirm-dialog/confirm-dialog.component'
+import { StoragePathService } from 'src/app/services/rest/storage-path.service'
+import { TagService } from 'src/app/services/rest/tag.service'
+import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
+import { MergeConfirmDialogComponent } from '../../common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component'
+import { RotateConfirmDialogComponent } from '../../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
+import { CorrespondentEditDialogComponent } from '../../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
+import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
+import { DocumentTypeEditDialogComponent } from '../../common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
+import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
+import { StoragePathEditDialogComponent } from '../../common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
+import { TagEditDialogComponent } from '../../common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
import {
ChangedItems,
FilterableDropdownSelectionModel,
} from '../../common/filterable-dropdown/filterable-dropdown.component'
import { ToggleableItemState } from '../../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'
-import { MatchingModel } from 'src/app/data/matching-model'
-import { SettingsService } from 'src/app/services/settings.service'
-import { ToastService } from 'src/app/services/toast.service'
-import { saveAs } from 'file-saver'
-import { StoragePathService } from 'src/app/services/rest/storage-path.service'
-import { StoragePath } from 'src/app/data/storage-path'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
import { PermissionsDialogComponent } from '../../common/permissions-dialog/permissions-dialog.component'
-import {
- PermissionAction,
- PermissionsService,
- PermissionType,
-} from 'src/app/services/permissions.service'
-import { FormControl, FormGroup } from '@angular/forms'
-import { first, map, Subject, switchMap, takeUntil } from 'rxjs'
-import { CorrespondentEditDialogComponent } from '../../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
-import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
-import { TagEditDialogComponent } from '../../common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
-import { DocumentTypeEditDialogComponent } from '../../common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
-import { StoragePathEditDialogComponent } from '../../common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
-import { RotateConfirmDialogComponent } from '../../common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component'
-import { MergeConfirmDialogComponent } from '../../common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component'
-import { CustomField } from 'src/app/data/custom-field'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
+import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
import { CustomFieldsBulkEditDialogComponent } from './custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component'
@Component({
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { CustomFieldsBulkEditDialogComponent } from './custom-fields-bulk-edit-dialog.component'
+import { provideHttpClient } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbActiveModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgSelectModule } from '@ng-select/ng-select'
import { of, throwError } from 'rxjs'
-import { DocumentService } from 'src/app/services/rest/document.service'
import { SelectComponent } from 'src/app/components/common/input/select/select.component'
import { CustomFieldDataType } from 'src/app/data/custom-field'
-import { NgSelectModule } from '@ng-select/ng-select'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { provideHttpClient } from '@angular/common/http'
+import { DocumentService } from 'src/app/services/rest/document.service'
+import { CustomFieldsBulkEditDialogComponent } from './custom-fields-bulk-edit-dialog.component'
describe('CustomFieldsBulkEditDialogComponent', () => {
let component: CustomFieldsBulkEditDialogComponent
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { By } from '@angular/platform-browser'
import { RouterTestingModule } from '@angular/router/testing'
import {
NgbPopoverModule,
- NgbTooltipModule,
NgbProgressbarModule,
+ NgbTooltipModule,
} from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
-import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
-import { DocumentCardLargeComponent } from './document-card-large.component'
import { IsNumberPipe } from 'src/app/pipes/is-number.pipe'
-import { PreviewPopupComponent } from '../../common/preview-popup/preview-popup.component'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
import { CustomFieldDisplayComponent } from '../../common/custom-field-display/custom-field-display.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { PreviewPopupComponent } from '../../common/preview-popup/preview-popup.component'
+import { DocumentCardLargeComponent } from './document-card-large.component'
const doc = {
id: 10,
DisplayField,
Document,
} from 'src/app/data/document'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { DocumentService } from 'src/app/services/rest/document.service'
import { SettingsService } from 'src/app/services/settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
import { PreviewPopupComponent } from '../../common/preview-popup/preview-popup.component'
+import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
@Component({
selector: 'pngx-document-card-large',
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
+import { By } from '@angular/platform-browser'
import { RouterTestingModule } from '@angular/router/testing'
import {
NgbPopoverModule,
- NgbTooltipModule,
NgbProgressbarModule,
+ NgbTooltipModule,
} from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { of } from 'rxjs'
+import { Tag } from 'src/app/data/tag'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
-import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
-import { DocumentCardSmallComponent } from './document-card-small.component'
-import { of } from 'rxjs'
-import { By } from '@angular/platform-browser'
-import { TagComponent } from '../../common/tag/tag.component'
-import { Tag } from 'src/app/data/tag'
import { IsNumberPipe } from 'src/app/pipes/is-number.pipe'
-import { PreviewPopupComponent } from '../../common/preview-popup/preview-popup.component'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe'
import { CustomFieldDisplayComponent } from '../../common/custom-field-display/custom-field-display.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { PreviewPopupComponent } from '../../common/preview-popup/preview-popup.component'
+import { TagComponent } from '../../common/tag/tag.component'
+import { DocumentCardSmallComponent } from './document-card-small.component'
const doc = {
id: 10,
DisplayField,
Document,
} from 'src/app/data/document'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { DocumentService } from 'src/app/services/rest/document.service'
import { SettingsService } from 'src/app/services/settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
import { PreviewPopupComponent } from '../../common/preview-popup/preview-popup.component'
+import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
@Component({
selector: 'pngx-document-card-small',
-import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { DocumentListComponent } from './document-list.component'
+import { DatePipe } from '@angular/common'
+import {
+ HttpErrorResponse,
+ provideHttpClient,
+ withInterceptorsFromDi,
+} from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { ComponentFixture, TestBed } from '@angular/core/testing'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { By } from '@angular/platform-browser'
+import { ActivatedRoute, Router, convertToParamMap } from '@angular/router'
import { RouterTestingModule } from '@angular/router/testing'
-import { routes } from 'src/app/app-routing.module'
-import { FilterEditorComponent } from './filter-editor/filter-editor.component'
-import { PermissionsFilterDropdownComponent } from '../common/permissions-filter-dropdown/permissions-filter-dropdown.component'
-import { DatesDropdownComponent } from '../common/dates-dropdown/dates-dropdown.component'
-import { FilterableDropdownComponent } from '../common/filterable-dropdown/filterable-dropdown.component'
-import { PageHeaderComponent } from '../common/page-header/page-header.component'
-import { BulkEditorComponent } from './bulk-editor/bulk-editor.component'
-import { FilterPipe } from 'src/app/pipes/filter.pipe'
import {
NgbDatepickerModule,
NgbDropdown,
NgbTooltipModule,
NgbTypeaheadModule,
} from '@ng-bootstrap/ng-bootstrap'
-import { ClearableBadgeComponent } from '../common/clearable-badge/clearable-badge.component'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
-import { ToggleableDropdownButtonComponent } from '../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'
-import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
-import { DatePipe } from '@angular/common'
-import { DocumentListViewService } from 'src/app/services/document-list-view.service'
-import {
- ConsumerStatusService,
- FileStatus,
-} from 'src/app/services/consumer-status.service'
+import { NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { Subject, of, throwError } from 'rxjs'
-import { SavedViewService } from 'src/app/services/rest/saved-view.service'
-import { ActivatedRoute, Router, convertToParamMap } from '@angular/router'
-import { SavedView } from 'src/app/data/saved-view'
+import { routes } from 'src/app/app-routing.module'
+import {
+ DEFAULT_DISPLAY_FIELDS,
+ DisplayField,
+ DisplayMode,
+ Document,
+} from 'src/app/data/document'
import {
FILTER_FULLTEXT_MORELIKE,
FILTER_FULLTEXT_QUERY,
FILTER_HAS_TAGS_ANY,
} from 'src/app/data/filter-rule-type'
-import { By } from '@angular/platform-browser'
+import { SavedView } from 'src/app/data/saved-view'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SortableDirective } from 'src/app/directives/sortable.directive'
-import { ToastService } from 'src/app/services/toast.service'
-import { DocumentCardSmallComponent } from './document-card-small/document-card-small.component'
-import { DocumentCardLargeComponent } from './document-card-large/document-card-large.component'
+import { PermissionsGuard } from 'src/app/guards/permissions.guard'
+import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe'
+import { FilterPipe } from 'src/app/pipes/filter.pipe'
+import { IsNumberPipe } from 'src/app/pipes/is-number.pipe'
+import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
import { UsernamePipe } from 'src/app/pipes/username.pipe'
import {
- DEFAULT_DISPLAY_FIELDS,
- DisplayField,
- DisplayMode,
- Document,
-} from 'src/app/data/document'
+ ConsumerStatusService,
+ FileStatus,
+} from 'src/app/services/consumer-status.service'
+import { DocumentListViewService } from 'src/app/services/document-list-view.service'
+import { PermissionsService } from 'src/app/services/permissions.service'
import { DocumentService } from 'src/app/services/rest/document.service'
+import { SavedViewService } from 'src/app/services/rest/saved-view.service'
+import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
+import { ClearableBadgeComponent } from '../common/clearable-badge/clearable-badge.component'
import { ConfirmDialogComponent } from '../common/confirm-dialog/confirm-dialog.component'
-import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
-import { SaveViewConfigDialogComponent } from './save-view-config-dialog/save-view-config-dialog.component'
-import { TextComponent } from '../common/input/text/text.component'
+import { DatesDropdownComponent } from '../common/dates-dropdown/dates-dropdown.component'
+import { FilterableDropdownComponent } from '../common/filterable-dropdown/filterable-dropdown.component'
+import { ToggleableDropdownButtonComponent } from '../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'
import { CheckComponent } from '../common/input/check/check.component'
-import {
- HttpErrorResponse,
- provideHttpClient,
- withInterceptorsFromDi,
-} from '@angular/common/http'
-import { PermissionsGuard } from 'src/app/guards/permissions.guard'
-import { SettingsService } from 'src/app/services/settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { IsNumberPipe } from 'src/app/pipes/is-number.pipe'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { PermissionsService } from 'src/app/services/permissions.service'
-import { NgSelectModule } from '@ng-select/ng-select'
+import { TextComponent } from '../common/input/text/text.component'
+import { PageHeaderComponent } from '../common/page-header/page-header.component'
+import { PermissionsFilterDropdownComponent } from '../common/permissions-filter-dropdown/permissions-filter-dropdown.component'
import { PreviewPopupComponent } from '../common/preview-popup/preview-popup.component'
+import { BulkEditorComponent } from './bulk-editor/bulk-editor.component'
+import { DocumentCardLargeComponent } from './document-card-large/document-card-large.component'
+import { DocumentCardSmallComponent } from './document-card-small/document-card-small.component'
+import { DocumentListComponent } from './document-list.component'
+import { FilterEditorComponent } from './filter-editor/filter-editor.component'
+import { SaveViewConfigDialogComponent } from './save-view-config-dialog/save-view-config-dialog.component'
const docs: Document[] = [
{
import { ActivatedRoute, convertToParamMap, Router } from '@angular/router'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { filter, first, map, Subject, switchMap, takeUntil } from 'rxjs'
-import { FilterRule } from 'src/app/data/filter-rule'
-import {
- filterRulesDiffer,
- isFullTextFilterRule,
-} from 'src/app/utils/filter-rules'
-import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type'
import {
DEFAULT_DISPLAY_FIELDS,
DisplayField,
DisplayMode,
Document,
} from 'src/app/data/document'
+import { FilterRule } from 'src/app/data/filter-rule'
+import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type'
import { SavedView } from 'src/app/data/saved-view'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import {
} from 'src/app/directives/sortable.directive'
import { ConsumerStatusService } from 'src/app/services/consumer-status.service'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
+import { HotKeyService } from 'src/app/services/hot-key.service'
import { OpenDocumentsService } from 'src/app/services/open-documents.service'
import { PermissionsService } from 'src/app/services/permissions.service'
import { SavedViewService } from 'src/app/services/rest/saved-view.service'
import { SettingsService } from 'src/app/services/settings.service'
import { ToastService } from 'src/app/services/toast.service'
+import {
+ filterRulesDiffer,
+ isFullTextFilterRule,
+} from 'src/app/utils/filter-rules'
import { ComponentWithPermissions } from '../with-permissions/with-permissions.component'
import { FilterEditorComponent } from './filter-editor/filter-editor.component'
import { SaveViewConfigDialogComponent } from './save-view-config-dialog/save-view-config-dialog.component'
-import { HotKeyService } from 'src/app/services/hot-key.service'
@Component({
selector: 'pngx-document-list',
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
import {
ComponentFixture,
- fakeAsync,
TestBed,
+ fakeAsync,
tick,
} from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { By } from '@angular/platform-browser'
+import { RouterModule } from '@angular/router'
import {
- NgbDropdownModule,
NgbDatepickerModule,
NgbDropdownItem,
+ NgbDropdownModule,
NgbTypeaheadModule,
} from '@ng-bootstrap/ng-bootstrap'
import { NgSelectComponent, NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
+import { Correspondent } from 'src/app/data/correspondent'
+import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
import {
- FILTER_TITLE,
- FILTER_TITLE_CONTENT,
+ CustomFieldQueryLogicalOperator,
+ CustomFieldQueryOperator,
+} from 'src/app/data/custom-field-query'
+import { DocumentType } from 'src/app/data/document-type'
+import {
+ FILTER_ADDED_AFTER,
+ FILTER_ADDED_BEFORE,
FILTER_ASN,
- FILTER_ASN_ISNULL,
FILTER_ASN_GT,
+ FILTER_ASN_ISNULL,
FILTER_ASN_LT,
- FILTER_FULLTEXT_QUERY,
- FILTER_FULLTEXT_MORELIKE,
+ FILTER_CORRESPONDENT,
FILTER_CREATED_AFTER,
FILTER_CREATED_BEFORE,
- FILTER_ADDED_AFTER,
- FILTER_ADDED_BEFORE,
- FILTER_HAS_TAGS_ALL,
- FILTER_HAS_TAGS_ANY,
- FILTER_HAS_ANY_TAG,
+ FILTER_CUSTOM_FIELDS_QUERY,
+ FILTER_CUSTOM_FIELDS_TEXT,
+ FILTER_DOCUMENT_TYPE,
+ FILTER_DOES_NOT_HAVE_CORRESPONDENT,
+ FILTER_DOES_NOT_HAVE_DOCUMENT_TYPE,
+ FILTER_DOES_NOT_HAVE_STORAGE_PATH,
FILTER_DOES_NOT_HAVE_TAG,
- FILTER_CORRESPONDENT,
+ FILTER_FULLTEXT_MORELIKE,
+ FILTER_FULLTEXT_QUERY,
+ FILTER_HAS_ANY_TAG,
FILTER_HAS_CORRESPONDENT_ANY,
- FILTER_DOES_NOT_HAVE_CORRESPONDENT,
- FILTER_DOCUMENT_TYPE,
+ FILTER_HAS_CUSTOM_FIELDS_ALL,
+ FILTER_HAS_CUSTOM_FIELDS_ANY,
FILTER_HAS_DOCUMENT_TYPE_ANY,
- FILTER_DOES_NOT_HAVE_DOCUMENT_TYPE,
- FILTER_STORAGE_PATH,
FILTER_HAS_STORAGE_PATH_ANY,
- FILTER_DOES_NOT_HAVE_STORAGE_PATH,
+ FILTER_HAS_TAGS_ALL,
+ FILTER_HAS_TAGS_ANY,
FILTER_OWNER,
FILTER_OWNER_ANY,
FILTER_OWNER_DOES_NOT_INCLUDE,
FILTER_OWNER_ISNULL,
- FILTER_CUSTOM_FIELDS_TEXT,
FILTER_SHARED_BY_USER,
- FILTER_HAS_CUSTOM_FIELDS_ANY,
- FILTER_HAS_ANY_CUSTOM_FIELDS,
- FILTER_DOES_NOT_HAVE_CUSTOM_FIELDS,
- FILTER_HAS_CUSTOM_FIELDS_ALL,
- FILTER_CUSTOM_FIELDS_QUERY,
+ FILTER_STORAGE_PATH,
+ FILTER_TITLE,
+ FILTER_TITLE_CONTENT,
} from 'src/app/data/filter-rule-type'
-import { Correspondent } from 'src/app/data/correspondent'
-import { DocumentType } from 'src/app/data/document-type'
import { StoragePath } from 'src/app/data/storage-path'
import { Tag } from 'src/app/data/tag'
import { User } from 'src/app/data/user'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { FilterPipe } from 'src/app/pipes/filter.pipe'
+import {
+ PermissionType,
+ PermissionsService,
+} from 'src/app/services/permissions.service'
import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
import { DocumentService } from 'src/app/services/rest/document.service'
+import { SearchService } from 'src/app/services/rest/search.service'
import { StoragePathService } from 'src/app/services/rest/storage-path.service'
import { TagService } from 'src/app/services/rest/tag.service'
import { UserService } from 'src/app/services/rest/user.service'
import { SettingsService } from 'src/app/services/settings.service'
+import {
+ CustomFieldQueryAtom,
+ CustomFieldQueryExpression,
+} from 'src/app/utils/custom-field-query-element'
+import { environment } from 'src/environments/environment'
import { ClearableBadgeComponent } from '../../common/clearable-badge/clearable-badge.component'
+import { CustomFieldsQueryDropdownComponent } from '../../common/custom-fields-query-dropdown/custom-fields-query-dropdown.component'
import { DatesDropdownComponent } from '../../common/dates-dropdown/dates-dropdown.component'
import {
FilterableDropdownComponent,
- LogicalOperator,
Intersection,
+ LogicalOperator,
} from '../../common/filterable-dropdown/filterable-dropdown.component'
import { ToggleableDropdownButtonComponent } from '../../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'
import {
- PermissionsFilterDropdownComponent,
OwnerFilterType,
+ PermissionsFilterDropdownComponent,
} from '../../common/permissions-filter-dropdown/permissions-filter-dropdown.component'
import { FilterEditorComponent } from './filter-editor.component'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import {
- PermissionType,
- PermissionsService,
-} from 'src/app/services/permissions.service'
-import { environment } from 'src/environments/environment'
-import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { RouterModule } from '@angular/router'
-import { SearchService } from 'src/app/services/rest/search.service'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { CustomFieldsQueryDropdownComponent } from '../../common/custom-fields-query-dropdown/custom-fields-query-dropdown.component'
-import {
- CustomFieldQueryLogicalOperator,
- CustomFieldQueryOperator,
-} from 'src/app/data/custom-field-query'
-import {
- CustomFieldQueryAtom,
- CustomFieldQueryExpression,
-} from 'src/app/utils/custom-field-query-element'
const tags: Tag[] = [
{
import {
+ AfterViewInit,
Component,
+ ElementRef,
EventEmitter,
Input,
- Output,
- OnInit,
OnDestroy,
+ OnInit,
+ Output,
ViewChild,
- ElementRef,
- AfterViewInit,
} from '@angular/core'
-import { Tag } from 'src/app/data/tag'
-import { Correspondent } from 'src/app/data/correspondent'
-import { DocumentType } from 'src/app/data/document-type'
import { Observable, Subject, from } from 'rxjs'
import {
catchError,
switchMap,
takeUntil,
} from 'rxjs/operators'
-import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
-import { TagService } from 'src/app/services/rest/tag.service'
-import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { Correspondent } from 'src/app/data/correspondent'
+import { CustomField } from 'src/app/data/custom-field'
+import {
+ CustomFieldQueryLogicalOperator,
+ CustomFieldQueryOperator,
+} from 'src/app/data/custom-field-query'
+import { Document } from 'src/app/data/document'
+import { DocumentType } from 'src/app/data/document-type'
import { FilterRule } from 'src/app/data/filter-rule'
-import { filterRulesDiffer } from 'src/app/utils/filter-rules'
import {
FILTER_ADDED_AFTER,
FILTER_ADDED_BEFORE,
FILTER_ASN,
- FILTER_HAS_CORRESPONDENT_ANY,
+ FILTER_ASN_GT,
+ FILTER_ASN_ISNULL,
+ FILTER_ASN_LT,
+ FILTER_CORRESPONDENT,
FILTER_CREATED_AFTER,
FILTER_CREATED_BEFORE,
- FILTER_HAS_DOCUMENT_TYPE_ANY,
+ FILTER_CUSTOM_FIELDS_QUERY,
+ FILTER_CUSTOM_FIELDS_TEXT,
+ FILTER_DOCUMENT_TYPE,
+ FILTER_DOES_NOT_HAVE_CORRESPONDENT,
+ FILTER_DOES_NOT_HAVE_DOCUMENT_TYPE,
+ FILTER_DOES_NOT_HAVE_STORAGE_PATH,
+ FILTER_DOES_NOT_HAVE_TAG,
FILTER_FULLTEXT_MORELIKE,
FILTER_FULLTEXT_QUERY,
FILTER_HAS_ANY_TAG,
+ FILTER_HAS_CORRESPONDENT_ANY,
+ FILTER_HAS_CUSTOM_FIELDS_ALL,
+ FILTER_HAS_CUSTOM_FIELDS_ANY,
+ FILTER_HAS_DOCUMENT_TYPE_ANY,
+ FILTER_HAS_STORAGE_PATH_ANY,
FILTER_HAS_TAGS_ALL,
FILTER_HAS_TAGS_ANY,
- FILTER_DOES_NOT_HAVE_TAG,
- FILTER_TITLE,
- FILTER_TITLE_CONTENT,
- FILTER_HAS_STORAGE_PATH_ANY,
- FILTER_ASN_ISNULL,
- FILTER_ASN_GT,
- FILTER_ASN_LT,
- FILTER_DOES_NOT_HAVE_CORRESPONDENT,
- FILTER_DOES_NOT_HAVE_DOCUMENT_TYPE,
- FILTER_DOES_NOT_HAVE_STORAGE_PATH,
- FILTER_DOCUMENT_TYPE,
- FILTER_CORRESPONDENT,
- FILTER_STORAGE_PATH,
FILTER_OWNER,
+ FILTER_OWNER_ANY,
FILTER_OWNER_DOES_NOT_INCLUDE,
FILTER_OWNER_ISNULL,
- FILTER_OWNER_ANY,
- FILTER_CUSTOM_FIELDS_TEXT,
FILTER_SHARED_BY_USER,
- FILTER_HAS_CUSTOM_FIELDS_ANY,
- FILTER_HAS_CUSTOM_FIELDS_ALL,
- FILTER_HAS_ANY_CUSTOM_FIELDS,
- FILTER_CUSTOM_FIELDS_QUERY,
+ FILTER_STORAGE_PATH,
+ FILTER_TITLE,
+ FILTER_TITLE_CONTENT,
} from 'src/app/data/filter-rule-type'
+import { StoragePath } from 'src/app/data/storage-path'
+import { Tag } from 'src/app/data/tag'
import {
- FilterableDropdownSelectionModel,
- Intersection,
- LogicalOperator,
-} from '../../common/filterable-dropdown/filterable-dropdown.component'
-import { ToggleableItemState } from '../../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'
+ PermissionAction,
+ PermissionType,
+ PermissionsService,
+} from 'src/app/services/permissions.service'
+import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
+import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
import {
DocumentService,
SelectionData,
SelectionDataItem,
} from 'src/app/services/rest/document.service'
-import { Document } from 'src/app/data/document'
-import { StoragePath } from 'src/app/data/storage-path'
+import { SearchService } from 'src/app/services/rest/search.service'
import { StoragePathService } from 'src/app/services/rest/storage-path.service'
+import { TagService } from 'src/app/services/rest/tag.service'
+import {
+ CustomFieldQueryAtom,
+ CustomFieldQueryExpression,
+} from 'src/app/utils/custom-field-query-element'
+import { filterRulesDiffer } from 'src/app/utils/filter-rules'
+import { CustomFieldQueriesModel } from '../../common/custom-fields-query-dropdown/custom-fields-query-dropdown.component'
import { RelativeDate } from '../../common/dates-dropdown/dates-dropdown.component'
+import {
+ FilterableDropdownSelectionModel,
+ Intersection,
+ LogicalOperator,
+} from '../../common/filterable-dropdown/filterable-dropdown.component'
+import { ToggleableItemState } from '../../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'
import {
OwnerFilterType,
PermissionsSelectionModel,
} from '../../common/permissions-filter-dropdown/permissions-filter-dropdown.component'
-import {
- PermissionAction,
- PermissionType,
- PermissionsService,
-} from 'src/app/services/permissions.service'
-import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
-import { CustomField } from 'src/app/data/custom-field'
-import { SearchService } from 'src/app/services/rest/search.service'
-import {
- CustomFieldQueryLogicalOperator,
- CustomFieldQueryOperator,
-} from 'src/app/data/custom-field-query'
-import { CustomFieldQueriesModel } from '../../common/custom-fields-query-dropdown/custom-fields-query-dropdown.component'
-import {
- CustomFieldQueryExpression,
- CustomFieldQueryAtom,
-} from 'src/app/utils/custom-field-query-element'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
const TEXT_FILTER_TARGET_TITLE = 'title'
fakeAsync,
tick,
} from '@angular/core/testing'
-import { SaveViewConfigDialogComponent } from './save-view-config-dialog.component'
-import { NgbActiveModal, NgbModalModule } from '@ng-bootstrap/ng-bootstrap'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { By } from '@angular/platform-browser'
-import { TextComponent } from '../../common/input/text/text.component'
+import { NgbActiveModal, NgbModalModule } from '@ng-bootstrap/ng-bootstrap'
import { CheckComponent } from '../../common/input/check/check.component'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { TextComponent } from '../../common/input/text/text.component'
+import { SaveViewConfigDialogComponent } from './save-view-config-dialog.component'
describe('SaveViewConfigDialogComponent', () => {
let component: SaveViewConfigDialogComponent
+import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { environment } from 'src/environments/environment'
-import { DocumentNotesComponent } from './document-notes.component'
-import { UserService } from 'src/app/services/rest/user.service'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { By } from '@angular/platform-browser'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
-import { DocumentNotesService } from 'src/app/services/rest/document-notes.service'
-import { ToastService } from 'src/app/services/toast.service'
import { DocumentNote } from 'src/app/data/document-note'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
-import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
-import { DatePipe } from '@angular/common'
-import { By } from '@angular/platform-browser'
+import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { PermissionsService } from 'src/app/services/permissions.service'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { DocumentNotesService } from 'src/app/services/rest/document-notes.service'
+import { UserService } from 'src/app/services/rest/user.service'
+import { ToastService } from 'src/app/services/toast.service'
+import { DocumentNotesComponent } from './document-notes.component'
const notes: DocumentNote[] = [
{
-import { Component, Input, Output, EventEmitter } from '@angular/core'
-import { DocumentNotesService } from 'src/app/services/rest/document-notes.service'
-import { DocumentNote } from 'src/app/data/document-note'
+import { Component, EventEmitter, Input, Output } from '@angular/core'
import { FormControl, FormGroup } from '@angular/forms'
+import { DocumentNote } from 'src/app/data/document-note'
+import { User } from 'src/app/data/user'
+import { DocumentNotesService } from 'src/app/services/rest/document-notes.service'
+import { UserService } from 'src/app/services/rest/user.service'
import { ToastService } from 'src/app/services/toast.service'
import { ComponentWithPermissions } from '../with-permissions/with-permissions.component'
-import { UserService } from 'src/app/services/rest/user.service'
-import { User } from 'src/app/data/user'
@Component({
selector: 'pngx-document-notes',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
ComponentFixture,
tick,
} from '@angular/core/testing'
import { By } from '@angular/platform-browser'
+import { NgxFileDropEntry, NgxFileDropModule } from 'ngx-file-drop'
import { PermissionsService } from 'src/app/services/permissions.service'
import { SettingsService } from 'src/app/services/settings.service'
import { ToastService } from 'src/app/services/toast.service'
import { UploadDocumentsService } from 'src/app/services/upload-documents.service'
import { ToastsComponent } from '../common/toasts/toasts.component'
import { FileDropComponent } from './file-drop.component'
-import { NgxFileDropEntry, NgxFileDropModule } from 'ngx-file-drop'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
describe('FileDropComponent', () => {
let component: FileDropComponent
import { Component, HostListener, ViewChild } from '@angular/core'
import { NgxFileDropComponent, NgxFileDropEntry } from 'ngx-file-drop'
import {
- PermissionsService,
PermissionAction,
+ PermissionsService,
PermissionType,
} from 'src/app/services/permissions.service'
import { SettingsService } from 'src/app/services/settings.service'
+import { Component } from '@angular/core'
import { TestBed } from '@angular/core/testing'
-import { Subject } from 'rxjs'
-import { LoadingComponentWithPermissions } from './loading.component'
import { ComponentWithPermissions } from '../with-permissions/with-permissions.component'
-import { Component } from '@angular/core'
+import { LoadingComponentWithPermissions } from './loading.component'
class MockComponentWithPermissions extends ComponentWithPermissions {}
+import { Directive, OnDestroy } from '@angular/core'
import { Subject } from 'rxjs'
import { ComponentWithPermissions } from '../with-permissions/with-permissions.component'
-import { Directive, OnDestroy } from '@angular/core'
@Directive()
export abstract class LoadingComponentWithPermissions
-import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { CorrespondentListComponent } from './correspondent-list.component'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { DatePipe } from '@angular/common'
-import { SortableDirective } from 'src/app/directives/sortable.directive'
-import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { PageHeaderComponent } from '../../common/page-header/page-header.component'
+import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { of } from 'rxjs'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
+import { SortableDirective } from 'src/app/directives/sortable.directive'
import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
-import { of } from 'rxjs'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { PageHeaderComponent } from '../../common/page-header/page-header.component'
+import { CorrespondentListComponent } from './correspondent-list.component'
describe('CorrespondentListComponent', () => {
let component: CorrespondentListComponent
import { Component } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
-import { FILTER_HAS_CORRESPONDENT_ANY } from 'src/app/data/filter-rule-type'
import { Correspondent } from 'src/app/data/correspondent'
+import { FILTER_HAS_CORRESPONDENT_ANY } from 'src/app/data/filter-rule-type'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { CustomFieldsComponent } from './custom-fields.component'
-import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
-import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { By } from '@angular/platform-browser'
import {
NgbModal,
- NgbPaginationModule,
NgbModalModule,
NgbModalRef,
+ NgbPaginationModule,
NgbPopoverModule,
} from '@ng-bootstrap/ng-bootstrap'
-import { of, throwError } from 'rxjs'
-import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
-import { PermissionsService } from 'src/app/services/permissions.service'
-import { ToastService } from 'src/app/services/toast.service'
-import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
-import { PageHeaderComponent } from '../../common/page-header/page-header.component'
-import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { DocumentListViewService } from 'src/app/services/document-list-view.service'
-import { FILTER_CUSTOM_FIELDS_QUERY } from 'src/app/data/filter-rule-type'
+import { of, throwError } from 'rxjs'
+import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
import {
CustomFieldQueryLogicalOperator,
CustomFieldQueryOperator,
} from 'src/app/data/custom-field-query'
+import { FILTER_CUSTOM_FIELDS_QUERY } from 'src/app/data/filter-rule-type'
+import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
+import { DocumentListViewService } from 'src/app/services/document-list-view.service'
+import { PermissionsService } from 'src/app/services/permissions.service'
+import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
+import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
+import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
+import { PageHeaderComponent } from '../../common/page-header/page-header.component'
+import { CustomFieldsComponent } from './custom-fields.component'
const fields: CustomField[] = [
{
import { Component, OnInit } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { delay, takeUntil, tap } from 'rxjs'
-import { DATA_TYPE_LABELS, CustomField } from 'src/app/data/custom-field'
+import { CustomField, DATA_TYPE_LABELS } from 'src/app/data/custom-field'
+import {
+ CustomFieldQueryLogicalOperator,
+ CustomFieldQueryOperator,
+} from 'src/app/data/custom-field-query'
+import { FILTER_CUSTOM_FIELDS_QUERY } from 'src/app/data/filter-rule-type'
+import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import { PermissionsService } from 'src/app/services/permissions.service'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
+import { SettingsService } from 'src/app/services/settings.service'
import { ToastService } from 'src/app/services/toast.service'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
-import { DocumentListViewService } from 'src/app/services/document-list-view.service'
-import { FILTER_CUSTOM_FIELDS_QUERY } from 'src/app/data/filter-rule-type'
-import {
- CustomFieldQueryLogicalOperator,
- CustomFieldQueryOperator,
-} from 'src/app/data/custom-field-query'
-import { SettingsService } from 'src/app/services/settings.service'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
@Component({
-import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { DatePipe } from '@angular/common'
-import { SortableDirective } from 'src/app/directives/sortable.directive'
-import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { PageHeaderComponent } from '../../common/page-header/page-header.component'
-import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
+import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of } from 'rxjs'
-import { DocumentTypeListComponent } from './document-type-list.component'
+import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
+import { SortableDirective } from 'src/app/directives/sortable.directive'
import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { PageHeaderComponent } from '../../common/page-header/page-header.component'
+import { DocumentTypeListComponent } from './document-type-list.component'
describe('DocumentTypeListComponent', () => {
let component: DocumentTypeListComponent
import { Component } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
-import { FILTER_HAS_DOCUMENT_TYPE_ANY } from 'src/app/data/filter-rule-type'
import { DocumentType } from 'src/app/data/document-type'
+import { FILTER_HAS_DOCUMENT_TYPE_ANY } from 'src/app/data/filter-rule-type'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
PermissionsService,
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { MailComponent } from './mail.component'
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { By } from '@angular/platform-browser'
+import { ActivatedRoute, convertToParamMap } from '@angular/router'
import { RouterTestingModule } from '@angular/router/testing'
import {
- NgbModule,
NgbAlertModule,
- NgbModalRef,
NgbModal,
+ NgbModalRef,
+ NgbModule,
} from '@ng-bootstrap/ng-bootstrap'
import { NgSelectModule } from '@ng-select/ng-select'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
import { routes } from 'src/app/app-routing.module'
import { MailAccount, MailAccountType } from 'src/app/data/mail-account'
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
+import { PermissionsService } from 'src/app/services/permissions.service'
import { MailAccountService } from 'src/app/services/rest/mail-account.service'
import { MailRuleService } from 'src/app/services/rest/mail-rule.service'
+import { SettingsService } from 'src/app/services/settings.service'
+import { ToastService } from 'src/app/services/toast.service'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
+import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component'
import { MailRuleEditDialogComponent } from '../../common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
import { CheckComponent } from '../../common/input/check/check.component'
import { PermissionsGroupComponent } from '../../common/input/permissions/permissions-group/permissions-group.component'
import { PermissionsUserComponent } from '../../common/input/permissions/permissions-user/permissions-user.component'
import { SelectComponent } from '../../common/input/select/select.component'
+import { SwitchComponent } from '../../common/input/switch/switch.component'
+import { TagsComponent } from '../../common/input/tags/tags.component'
import { TextComponent } from '../../common/input/text/text.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { PermissionsDialogComponent } from '../../common/permissions-dialog/permissions-dialog.component'
-import { PermissionsService } from 'src/app/services/permissions.service'
-import { ToastService } from 'src/app/services/toast.service'
-import { TagsComponent } from '../../common/input/tags/tags.component'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { SwitchComponent } from '../../common/input/switch/switch.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { By } from '@angular/platform-browser'
-import { ActivatedRoute, convertToParamMap } from '@angular/router'
-import { SettingsService } from 'src/app/services/settings.service'
+import { MailComponent } from './mail.component'
const mailAccounts = [
{ id: 1, name: 'account1', account_type: MailAccountType.IMAP },
-import { Component, OnInit, OnDestroy } from '@angular/core'
+import { Component, OnDestroy, OnInit } from '@angular/core'
+import { ActivatedRoute } from '@angular/router'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { Subject, delay, first, takeUntil, tap } from 'rxjs'
-import { ObjectWithPermissions } from 'src/app/data/object-with-permissions'
import { MailAccount, MailAccountType } from 'src/app/data/mail-account'
import { MailRule } from 'src/app/data/mail-rule'
+import { ObjectWithPermissions } from 'src/app/data/object-with-permissions'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import {
- PermissionsService,
PermissionAction,
+ PermissionsService,
} from 'src/app/services/permissions.service'
import { AbstractPaperlessService } from 'src/app/services/rest/abstract-paperless-service'
import { MailAccountService } from 'src/app/services/rest/mail-account.service'
import { MailRuleService } from 'src/app/services/rest/mail-rule.service'
+import { SettingsService } from 'src/app/services/settings.service'
import { ToastService } from 'src/app/services/toast.service'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
import { MailRuleEditDialogComponent } from '../../common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
import { PermissionsDialogComponent } from '../../common/permissions-dialog/permissions-dialog.component'
import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
-import { SettingsService } from 'src/app/services/settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { ActivatedRoute } from '@angular/router'
@Component({
selector: 'pngx-mail',
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import {
ComponentFixture,
} from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { By } from '@angular/platform-browser'
+import { RouterTestingModule } from '@angular/router/testing'
import {
NgbModal,
NgbModalModule,
NgbModalRef,
NgbPaginationModule,
} from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
+import { routes } from 'src/app/app-routing.module'
+import { FILTER_HAS_TAGS_ALL } from 'src/app/data/filter-rule-type'
+import {
+ MATCH_AUTO,
+ MATCH_LITERAL,
+ MATCH_NONE,
+} from 'src/app/data/matching-model'
import { Tag } from 'src/app/data/tag'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SortableDirective } from 'src/app/directives/sortable.directive'
+import { PermissionsGuard } from 'src/app/guards/permissions.guard'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
-import { TagService } from 'src/app/services/rest/tag.service'
-import { PageHeaderComponent } from '../../common/page-header/page-header.component'
-import { TagListComponent } from '../tag-list/tag-list.component'
-import { ManagementListComponent } from './management-list.component'
+import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
PermissionAction,
PermissionsService,
} from 'src/app/services/permissions.service'
+import { BulkEditObjectOperation } from 'src/app/services/rest/abstract-name-filter-service'
+import { TagService } from 'src/app/services/rest/tag.service'
import { ToastService } from 'src/app/services/toast.service'
-import { EditDialogComponent } from '../../common/edit-dialog/edit-dialog.component'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
-import { DocumentListViewService } from 'src/app/services/document-list-view.service'
-import { FILTER_HAS_TAGS_ALL } from 'src/app/data/filter-rule-type'
-import { RouterTestingModule } from '@angular/router/testing'
-import { routes } from 'src/app/app-routing.module'
-import { PermissionsGuard } from 'src/app/guards/permissions.guard'
-import { MATCH_AUTO } from 'src/app/data/matching-model'
-import { MATCH_NONE } from 'src/app/data/matching-model'
-import { MATCH_LITERAL } from 'src/app/data/matching-model'
+import { EditDialogComponent } from '../../common/edit-dialog/edit-dialog.component'
+import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { PermissionsDialogComponent } from '../../common/permissions-dialog/permissions-dialog.component'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { BulkEditObjectOperation } from 'src/app/services/rest/abstract-name-filter-service'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { TagListComponent } from '../tag-list/tag-list.component'
+import { ManagementListComponent } from './management-list.component'
const tags: Tag[] = [
{
tap,
} from 'rxjs/operators'
import {
- MatchingModel,
- MATCHING_ALGORITHMS,
MATCH_AUTO,
MATCH_NONE,
+ MATCHING_ALGORITHMS,
+ MatchingModel,
} from 'src/app/data/matching-model'
import { ObjectWithId } from 'src/app/data/object-with-id'
import { ObjectWithPermissions } from 'src/app/data/object-with-permissions'
+import { DragDropModule } from '@angular/cdk/drag-drop'
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { ReactiveFormsModule, FormsModule } from '@angular/forms'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { By } from '@angular/platform-browser'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { TextComponent } from '../../common/input/text/text.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { SavedViewsComponent } from './saved-views.component'
-import { DragDropModule } from '@angular/cdk/drag-drop'
const savedViews = [
{ id: 1, name: 'view1', show_in_sidebar: true, show_on_dashboard: true },
import { Component, OnDestroy, OnInit } from '@angular/core'
import { FormControl, FormGroup } from '@angular/forms'
+import { dirtyCheck } from '@ngneat/dirty-check-forms'
+import { BehaviorSubject, Observable, takeUntil } from 'rxjs'
+import { DisplayMode } from 'src/app/data/document'
import { SavedView } from 'src/app/data/saved-view'
import { SavedViewService } from 'src/app/services/rest/saved-view.service'
import { SettingsService } from 'src/app/services/settings.service'
-import { DisplayMode } from 'src/app/data/document'
-import { BehaviorSubject, Observable, takeUntil } from 'rxjs'
-import { dirtyCheck } from '@ngneat/dirty-check-forms'
import { ToastService } from 'src/app/services/toast.service'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of } from 'rxjs'
+import { StoragePath } from 'src/app/data/storage-path'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SortableDirective } from 'src/app/directives/sortable.directive'
+import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
import { StoragePathService } from 'src/app/services/rest/storage-path.service'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { StoragePathListComponent } from './storage-path-list.component'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
-import { StoragePath } from 'src/app/data/storage-path'
describe('StoragePathListComponent', () => {
let component: StoragePathListComponent
import { DatePipe } from '@angular/common'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of } from 'rxjs'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SortableDirective } from 'src/app/directives/sortable.directive'
+import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
import { TagService } from 'src/app/services/rest/tag.service'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { TagListComponent } from './tag-list.component'
-import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
describe('TagListComponent', () => {
let component: TagListComponent
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { By } from '@angular/platform-browser'
import {
NgbModal,
- NgbPaginationModule,
- NgbModalRef,
NgbModalModule,
+ NgbModalRef,
+ NgbPaginationModule,
NgbPopoverModule,
} from '@ng-bootstrap/ng-bootstrap'
+import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { of, throwError } from 'rxjs'
import { Workflow } from 'src/app/data/workflow'
+import { WorkflowActionType } from 'src/app/data/workflow-action'
+import {
+ DocumentSource,
+ WorkflowTriggerType,
+} from 'src/app/data/workflow-trigger'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
+import { PermissionsService } from 'src/app/services/permissions.service'
import { WorkflowService } from 'src/app/services/rest/workflow.service'
import { ToastService } from 'src/app/services/toast.service'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
+import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
+import { WorkflowEditDialogComponent } from '../../common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { WorkflowsComponent } from './workflows.component'
-import { WorkflowEditDialogComponent } from '../../common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component'
-import { PermissionsService } from 'src/app/services/permissions.service'
-import {
- DocumentSource,
- WorkflowTriggerType,
-} from 'src/app/data/workflow-trigger'
-import { WorkflowActionType } from 'src/app/data/workflow-action'
-import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
-import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
const workflows: Workflow[] = [
{
import { Component, OnInit } from '@angular/core'
-import { WorkflowService } from 'src/app/services/rest/workflow.service'
+import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { delay, takeUntil, tap } from 'rxjs'
import { Workflow } from 'src/app/data/workflow'
-import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
-import { ToastService } from 'src/app/services/toast.service'
import { PermissionsService } from 'src/app/services/permissions.service'
+import { WorkflowService } from 'src/app/services/rest/workflow.service'
+import { ToastService } from 'src/app/services/toast.service'
+import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
+import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
import {
- WorkflowEditDialogComponent,
WORKFLOW_TYPE_OPTIONS,
+ WorkflowEditDialogComponent,
} from '../../common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component'
-import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
-import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
import { LoadingComponentWithPermissions } from '../../loading-component/loading.component'
@Component({
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { NotFoundComponent } from './not-found.component'
import { By } from '@angular/platform-browser'
-import { LogoComponent } from '../common/logo/logo.component'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { LogoComponent } from '../common/logo/logo.component'
+import { NotFoundComponent } from './not-found.component'
describe('NotFoundComponent', () => {
let component: NotFoundComponent
+import { Observable } from 'rxjs'
import { Correspondent } from './correspondent'
-import { Tag } from './tag'
+import { CustomFieldInstance } from './custom-field-instance'
+import { DocumentNote } from './document-note'
import { DocumentType } from './document-type'
-import { Observable } from 'rxjs'
-import { StoragePath } from './storage-path'
import { ObjectWithPermissions } from './object-with-permissions'
-import { DocumentNote } from './document-note'
-import { CustomFieldInstance } from './custom-field-instance'
+import { StoragePath } from './storage-path'
+import { Tag } from './tag'
export enum DisplayMode {
TABLE = 'table',
-import { DisplayMode, DisplayField } from './document'
+import { DisplayField, DisplayMode } from './document'
import { FilterRule } from './filter-rule'
import { ObjectWithPermissions } from './object-with-permissions'
import { Component } from '@angular/core'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { IfObjectPermissionsDirective } from './if-object-permissions.directive'
import { PermissionsService } from '../services/permissions.service'
+import { IfObjectPermissionsDirective } from './if-object-permissions.directive'
@Component({
template: `
import { Component } from '@angular/core'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { IfOwnerDirective } from './if-owner.directive'
import { PermissionsService } from '../services/permissions.service'
+import { IfOwnerDirective } from './if-owner.directive'
@Component({
template: `
import { Component } from '@angular/core'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { IfPermissionsDirective } from './if-permissions.directive'
import { PermissionsService } from '../services/permissions.service'
+import { IfPermissionsDirective } from './if-permissions.directive'
@Component({
template: `
import {
+ Directive,
Input,
OnInit,
- Directive,
- ViewContainerRef,
TemplateRef,
+ ViewContainerRef,
} from '@angular/core'
import {
PermissionAction,
import { Component, DebugElement } from '@angular/core'
import { ComponentFixture, TestBed } from '@angular/core/testing'
-import { SortEvent, SortableDirective } from './sortable.directive'
import { By } from '@angular/platform-browser'
+import { SortEvent, SortableDirective } from './sortable.directive'
@Component({
template: `
+import { Component } from '@angular/core'
import { TestBed } from '@angular/core/testing'
-import { NgbModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { RouterTestingModule } from '@angular/router/testing'
+import { NgbModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { routes } from '../app-routing.module'
-import { Component } from '@angular/core'
import { ComponentCanDeactivate, DirtyDocGuard } from './dirty-doc.guard'
@Component({})
+import { Component } from '@angular/core'
import { TestBed } from '@angular/core/testing'
-import { NgbModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
+import { ActivatedRoute } from '@angular/router'
import { RouterTestingModule } from '@angular/router/testing'
+import { NgbModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'
+import { DirtyComponent } from '@ngneat/dirty-check-forms'
import { routes } from '../app-routing.module'
import { ConfirmDialogComponent } from '../components/common/confirm-dialog/confirm-dialog.component'
import { DirtyFormGuard } from './dirty-form.guard'
-import { DirtyComponent } from '@ngneat/dirty-check-forms'
-import { ActivatedRoute } from '@angular/router'
-import { Component } from '@angular/core'
@Component({})
class GenericDirtyComponent implements DirtyComponent {
import { Injectable } from '@angular/core'
+import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { DirtyCheckGuard } from '@ngneat/dirty-check-forms'
import { Observable, Subject } from 'rxjs'
-import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { ConfirmDialogComponent } from 'src/app/components/common/confirm-dialog/confirm-dialog.component'
@Injectable({ providedIn: 'root' })
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
import { TestBed } from '@angular/core/testing'
-import { DirtySavedViewGuard } from './dirty-saved-view.guard'
-import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'
-import { SettingsService } from '../services/settings.service'
-import { DocumentListComponent } from '../components/document-list/document-list.component'
import { RouterTestingModule } from '@angular/router/testing'
+import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'
import { routes } from '../app-routing.module'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { ConfirmDialogComponent } from '../components/common/confirm-dialog/confirm-dialog.component'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { DocumentListComponent } from '../components/document-list/document-list.component'
+import { SettingsService } from '../services/settings.service'
+import { DirtySavedViewGuard } from './dirty-saved-view.guard'
describe('DirtySavedViewGuard', () => {
let guard: DirtySavedViewGuard
import { Injectable } from '@angular/core'
-import { first, Observable, Subject } from 'rxjs'
-import { DocumentListComponent } from '../components/document-list/document-list.component'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
+import { first, Observable, Subject } from 'rxjs'
import { ConfirmDialogComponent } from '../components/common/confirm-dialog/confirm-dialog.component'
-import { SettingsService } from '../services/settings.service'
+import { DocumentListComponent } from '../components/document-list/document-list.component'
import { SETTINGS_KEYS } from '../data/ui-settings'
+import { SettingsService } from '../services/settings.service'
@Injectable()
export class DirtySavedViewGuard {
import { TestBed } from '@angular/core/testing'
-import { PermissionsGuard } from './permissions.guard'
+import { ActivatedRoute, RouterState } from '@angular/router'
+import { TourService } from 'ngx-ui-tour-ng-bootstrap'
import {
PermissionAction,
PermissionType,
PermissionsService,
} from '../services/permissions.service'
-import { ActivatedRoute } from '@angular/router'
-import { RouterStateSnapshot } from '@angular/router'
-import { TourService } from 'ngx-ui-tour-ng-bootstrap'
import { ToastService } from '../services/toast.service'
-import { RouterState } from '@angular/router'
+import { PermissionsGuard } from './permissions.guard'
describe('PermissionsGuard', () => {
let guard: PermissionsGuard
+import { Injectable } from '@angular/core'
import {
ActivatedRouteSnapshot,
+ Router,
RouterStateSnapshot,
UrlTree,
- Router,
} from '@angular/router'
-import { Injectable } from '@angular/core'
+import { TourService } from 'ngx-ui-tour-ng-bootstrap'
import { PermissionsService } from '../services/permissions.service'
import { ToastService } from '../services/toast.service'
-import { TourService } from 'ngx-ui-tour-ng-bootstrap'
@Injectable()
export class PermissionsGuard {
-import { TestBed } from '@angular/core/testing'
-import { ApiVersionInterceptor } from './api-version.interceptor'
import { HttpEvent, HttpRequest } from '@angular/common/http'
+import { TestBed } from '@angular/core/testing'
import { of } from 'rxjs'
import { environment } from 'src/environments/environment'
+import { ApiVersionInterceptor } from './api-version.interceptor'
describe('ApiVersionInterceptor', () => {
let interceptor: ApiVersionInterceptor
-import { Injectable } from '@angular/core'
import {
- HttpRequest,
- HttpHandler,
HttpEvent,
+ HttpHandler,
HttpInterceptor,
+ HttpRequest,
} from '@angular/common/http'
+import { Injectable } from '@angular/core'
import { Observable } from 'rxjs'
import { environment } from 'src/environments/environment'
+import { HttpEvent, HttpRequest } from '@angular/common/http'
import { TestBed } from '@angular/core/testing'
-import { CsrfInterceptor } from './csrf.interceptor'
import { Meta } from '@angular/platform-browser'
-import { HttpEvent, HttpRequest } from '@angular/common/http'
-import { of } from 'rxjs'
import { CookieService } from 'ngx-cookie-service'
+import { of } from 'rxjs'
+import { CsrfInterceptor } from './csrf.interceptor'
describe('CsrfInterceptor', () => {
let interceptor: CsrfInterceptor
-import { Injectable } from '@angular/core'
import {
- HttpRequest,
- HttpHandler,
HttpEvent,
+ HttpHandler,
HttpInterceptor,
+ HttpRequest,
} from '@angular/common/http'
-import { Observable } from 'rxjs'
-import { CookieService } from 'ngx-cookie-service'
+import { Injectable } from '@angular/core'
import { Meta } from '@angular/platform-browser'
+import { CookieService } from 'ngx-cookie-service'
+import { Observable } from 'rxjs'
@Injectable()
export class CsrfInterceptor implements HttpInterceptor {
-import { TestBed } from '@angular/core/testing'
-import { CustomDatePipe } from './custom-date.pipe'
-import { SettingsService } from '../services/settings.service'
-import { provideHttpClientTesting } from '@angular/common/http/testing'
import { DatePipe } from '@angular/common'
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { provideHttpClientTesting } from '@angular/common/http/testing'
+import { TestBed } from '@angular/core/testing'
+import { SettingsService } from '../services/settings.service'
+import { CustomDatePipe } from './custom-date.pipe'
describe('CustomDatePipe', () => {
let datePipe: CustomDatePipe
import { TestBed } from '@angular/core/testing'
-import { SafeHtmlPipe } from './safehtml.pipe'
import { BrowserModule, DomSanitizer } from '@angular/platform-browser'
+import { SafeHtmlPipe } from './safehtml.pipe'
describe('SafeHtmlPipe', () => {
let pipe: SafeHtmlPipe
import { TestBed } from '@angular/core/testing'
-import { SafeUrlPipe } from './safeurl.pipe'
import { BrowserModule, DomSanitizer } from '@angular/platform-browser'
+import { SafeUrlPipe } from './safeurl.pipe'
describe('SafeUrlPipe', () => {
let pipe: SafeUrlPipe
-import { TestBed } from '@angular/core/testing'
-import { UsernamePipe } from './username.pipe'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
+import { TestBed } from '@angular/core/testing'
import { environment } from 'src/environments/environment'
import { PermissionsService } from '../services/permissions.service'
-import { UserService } from '../services/rest/user.service'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { UsernamePipe } from './username.pipe'
describe('UsernamePipe', () => {
let pipe: UsernamePipe
import { Pipe, PipeTransform } from '@angular/core'
-import { UserService } from '../services/rest/user.service'
+import { User } from '../data/user'
import {
PermissionAction,
PermissionType,
PermissionsService,
} from '../services/permissions.service'
-import { User } from '../data/user'
+import { UserService } from '../services/rest/user.service'
@Pipe({
name: 'username',
import { TestBed } from '@angular/core/testing'
-import { ConfigService } from './config.service'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
import { environment } from 'src/environments/environment'
import { OutputTypeConfig, PaperlessConfig } from '../data/paperless-config'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { ConfigService } from './config.service'
describe('ConfigService', () => {
let service: ConfigService
-import { TestBed } from '@angular/core/testing'
-import {
- ConsumerStatusService,
- FILE_STATUS_MESSAGES,
- FileStatusPhase,
-} from './consumer-status.service'
-import {
- HttpTestingController,
- provideHttpClientTesting,
-} from '@angular/common/http/testing'
-import { environment } from 'src/environments/environment'
-import { DocumentService } from './rest/document.service'
import {
HttpEventType,
HttpResponse,
provideHttpClient,
withInterceptorsFromDi,
} from '@angular/common/http'
+import {
+ HttpTestingController,
+ provideHttpClientTesting,
+} from '@angular/common/http/testing'
+import { TestBed } from '@angular/core/testing'
import WS from 'jest-websocket-mock'
+import { environment } from 'src/environments/environment'
+import {
+ ConsumerStatusService,
+ FILE_STATUS_MESSAGES,
+ FileStatusPhase,
+} from './consumer-status.service'
+import { DocumentService } from './rest/document.service'
import { SettingsService } from './settings.service'
describe('ConsumerStatusService', () => {
-import { TestBed } from '@angular/core/testing'
-import { DocumentListViewService } from './document-list-view.service'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
-import { environment } from 'src/environments/environment'
+import { TestBed } from '@angular/core/testing'
+import { Params, Router, convertToParamMap } from '@angular/router'
+import { RouterTestingModule } from '@angular/router/testing'
import { Subscription } from 'rxjs'
+import { routes } from 'src/app/app-routing.module'
+import { environment } from 'src/environments/environment'
import { ConfirmDialogComponent } from '../components/common/confirm-dialog/confirm-dialog.component'
-import { Params, Router, convertToParamMap } from '@angular/router'
+import {
+ DEFAULT_DISPLAY_FIELDS,
+ DisplayField,
+ DisplayMode,
+} from '../data/document'
+import { FilterRule } from '../data/filter-rule'
import {
FILTER_HAS_TAGS_ALL,
FILTER_HAS_TAGS_ANY,
} from '../data/filter-rule-type'
import { SavedView } from '../data/saved-view'
-import { FilterRule } from '../data/filter-rule'
-import { RouterTestingModule } from '@angular/router/testing'
-import { routes } from 'src/app/app-routing.module'
+import { SETTINGS_KEYS } from '../data/ui-settings'
import { PermissionsGuard } from '../guards/permissions.guard'
+import { DocumentListViewService } from './document-list-view.service'
import { SettingsService } from './settings.service'
-import { SETTINGS_KEYS } from '../data/ui-settings'
-import {
- DisplayMode,
- DisplayField,
- DEFAULT_DISPLAY_FIELDS,
-} from '../data/document'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
const documents = [
{
import { Injectable } from '@angular/core'
import { ParamMap, Router } from '@angular/router'
import { Observable, Subject, first, takeUntil } from 'rxjs'
-import { FilterRule } from '../data/filter-rule'
-import {
- filterRulesDiffer,
- cloneFilterRules,
- isFullTextFilterRule,
-} from '../utils/filter-rules'
import {
DEFAULT_DISPLAY_FIELDS,
DisplayField,
DisplayMode,
Document,
} from '../data/document'
+import { FilterRule } from '../data/filter-rule'
import { SavedView } from '../data/saved-view'
-import { SETTINGS_KEYS } from '../data/ui-settings'
import { DOCUMENT_LIST_SERVICE } from '../data/storage-keys'
+import { SETTINGS_KEYS } from '../data/ui-settings'
+import {
+ cloneFilterRules,
+ filterRulesDiffer,
+ isFullTextFilterRule,
+} from '../utils/filter-rules'
import { paramsFromViewState, paramsToViewState } from '../utils/query-params'
import { DocumentService, SelectionData } from './rest/document.service'
import { SettingsService } from './settings.service'
+import { DOCUMENT } from '@angular/common'
import { TestBed } from '@angular/core/testing'
import { EventManager } from '@angular/platform-browser'
-import { DOCUMENT } from '@angular/common'
-import { HotKeyService } from './hot-key.service'
import { NgbModal, NgbModalModule } from '@ng-bootstrap/ng-bootstrap'
+import { HotKeyService } from './hot-key.service'
describe('HotKeyService', () => {
let service: HotKeyService
-import { TestBed } from '@angular/core/testing'
-import { OpenDocumentsService } from './open-documents.service'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
-import { environment } from 'src/environments/environment'
-import { Subscription, throwError } from 'rxjs'
+import { TestBed } from '@angular/core/testing'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
+import { Subscription } from 'rxjs'
+import { environment } from 'src/environments/environment'
import { ConfirmDialogComponent } from '../components/common/confirm-dialog/confirm-dialog.component'
import { OPEN_DOCUMENT_SERVICE } from '../data/storage-keys'
-import { wind } from 'ngx-bootstrap-icons'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { OpenDocumentsService } from './open-documents.service'
const documents = [
{
import { Injectable } from '@angular/core'
-import { Document } from '../data/document'
-import { OPEN_DOCUMENT_SERVICE } from '../data/storage-keys'
-import { DocumentService } from './rest/document.service'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
-import { ConfirmDialogComponent } from 'src/app/components/common/confirm-dialog/confirm-dialog.component'
import { Observable, Subject, of } from 'rxjs'
import { first } from 'rxjs/operators'
+import { ConfirmDialogComponent } from 'src/app/components/common/confirm-dialog/confirm-dialog.component'
+import { Document } from '../data/document'
+import { OPEN_DOCUMENT_SERVICE } from '../data/storage-keys'
+import { DocumentService } from './rest/document.service'
@Injectable({
providedIn: 'root',
import { TestBed } from '@angular/core/testing'
+import { Document } from '../data/document'
import {
PermissionAction,
PermissionType,
PermissionsService,
} from './permissions.service'
-import { Document } from '../data/document'
describe('PermissionsService', () => {
let permissionsService: PermissionsService
import { TestBed } from '@angular/core/testing'
-import { ProfileService } from './profile.service'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
import { environment } from 'src/environments/environment'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { ProfileService } from './profile.service'
describe('ProfileService', () => {
let httpTestingController: HttpTestingController
import { HttpClient } from '@angular/common/http'
import { Injectable } from '@angular/core'
import { Observable } from 'rxjs'
+import { environment } from 'src/environments/environment'
import {
- TotpSettings,
PaperlessUserProfile,
SocialAccountProvider,
+ TotpSettings,
} from '../data/user-profile'
-import { environment } from 'src/environments/environment'
@Injectable({
providedIn: 'root',
import { HttpTestingController } from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
import { environment } from 'src/environments/environment'
import {
AbstractNameFilterService,
+import { Observable } from 'rxjs'
import { ObjectWithId } from 'src/app/data/object-with-id'
-import { AbstractPaperlessService } from './abstract-paperless-service'
import { PermissionsObject } from 'src/app/data/object-with-permissions'
-import { Observable } from 'rxjs'
+import { AbstractPaperlessService } from './abstract-paperless-service'
export enum BulkEditObjectOperation {
SetPermissions = 'set_permissions',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
-import { AbstractPaperlessService } from './abstract-paperless-service'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
import { environment } from 'src/environments/environment'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { AbstractPaperlessService } from './abstract-paperless-service'
let httpTestingController: HttpTestingController
let service: AbstractPaperlessService<any>
-import { CorrespondentService } from './correspondent.service'
import { commonAbstractNameFilterPaperlessServiceTests } from './abstract-name-filter-service.spec'
+import { CorrespondentService } from './correspondent.service'
commonAbstractNameFilterPaperlessServiceTests(
'correspondents',
import { HttpTestingController } from '@angular/common/http/testing'
import { Subscription } from 'rxjs'
-import { TestBed } from '@angular/core/testing'
-import { environment } from 'src/environments/environment'
import { commonAbstractPaperlessServiceTests } from './abstract-paperless-service.spec'
import { CustomFieldsService } from './custom-fields.service'
-import { Injectable } from '@angular/core'
import { HttpClient } from '@angular/common/http'
-import { AbstractPaperlessService } from './abstract-paperless-service'
+import { Injectable } from '@angular/core'
import { CustomField } from 'src/app/data/custom-field'
+import { AbstractPaperlessService } from './abstract-paperless-service'
@Injectable({
providedIn: 'root',
import { HttpTestingController } from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
import { environment } from 'src/environments/environment'
import { commonAbstractPaperlessServiceTests } from './abstract-paperless-service.spec'
import { DocumentNotesService } from './document-notes.service'
-import { Injectable } from '@angular/core'
import { HttpClient, HttpParams } from '@angular/common/http'
+import { Injectable } from '@angular/core'
+import { Observable } from 'rxjs'
import { DocumentNote } from 'src/app/data/document-note'
import { AbstractPaperlessService } from './abstract-paperless-service'
-import { Observable } from 'rxjs'
@Injectable({
providedIn: 'root',
-import { DocumentTypeService } from './document-type.service'
import { commonAbstractNameFilterPaperlessServiceTests } from './abstract-name-filter-service.spec'
+import { DocumentTypeService } from './document-type.service'
commonAbstractNameFilterPaperlessServiceTests(
'document_types',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
-import { environment } from 'src/environments/environment'
-import { DocumentService } from './document.service'
-import { FILTER_TITLE } from 'src/app/data/filter-rule-type'
-import { SettingsService } from '../settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { Subscription } from 'rxjs'
import {
DOCUMENT_SORT_FIELDS,
DOCUMENT_SORT_FIELDS_FULLTEXT,
} from 'src/app/data/document'
+import { FILTER_TITLE } from 'src/app/data/filter-rule-type'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { environment } from 'src/environments/environment'
import { PermissionsService } from '../permissions.service'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { SettingsService } from '../settings.service'
+import { DocumentService } from './document.service'
let httpTestingController: HttpTestingController
let service: DocumentService
+import { HttpClient } from '@angular/common/http'
import { Injectable } from '@angular/core'
+import { Observable } from 'rxjs'
+import { map, tap } from 'rxjs/operators'
+import { AuditLogEntry } from 'src/app/data/auditlog-entry'
import {
DOCUMENT_SORT_FIELDS,
DOCUMENT_SORT_FIELDS_FULLTEXT,
Document,
} from 'src/app/data/document'
import { DocumentMetadata } from 'src/app/data/document-metadata'
-import { AbstractPaperlessService } from './abstract-paperless-service'
-import { HttpClient } from '@angular/common/http'
-import { Observable } from 'rxjs'
-import { Results } from 'src/app/data/results'
-import { FilterRule } from 'src/app/data/filter-rule'
-import { map, tap } from 'rxjs/operators'
-import { CorrespondentService } from './correspondent.service'
-import { DocumentTypeService } from './document-type.service'
-import { TagService } from './tag.service'
import { DocumentSuggestions } from 'src/app/data/document-suggestions'
+import { FilterRule } from 'src/app/data/filter-rule'
+import { Results } from 'src/app/data/results'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { queryParamsFromFilterRules } from '../../utils/query-params'
-import { StoragePathService } from './storage-path.service'
import {
PermissionAction,
PermissionType,
PermissionsService,
} from '../permissions.service'
import { SettingsService } from '../settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { AuditLogEntry } from 'src/app/data/auditlog-entry'
+import { AbstractPaperlessService } from './abstract-paperless-service'
+import { CorrespondentService } from './correspondent.service'
+import { DocumentTypeService } from './document-type.service'
+import { StoragePathService } from './storage-path.service'
+import { TagService } from './tag.service'
export interface SelectionDataItem {
id: number
import { HttpTestingController } from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
import { environment } from 'src/environments/environment'
-import { GroupService } from './group.service'
import { commonAbstractNameFilterPaperlessServiceTests } from './abstract-name-filter-service.spec'
+import { GroupService } from './group.service'
let httpTestingController: HttpTestingController
let service: GroupService
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
import { environment } from 'src/environments/environment'
import { LogService } from './log.service'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
let httpTestingController: HttpTestingController
let service: LogService
import { HttpTestingController } from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
+import { IMAPSecurity, MailAccountType } from 'src/app/data/mail-account'
import { environment } from 'src/environments/environment'
import { commonAbstractPaperlessServiceTests } from './abstract-paperless-service.spec'
import { MailAccountService } from './mail-account.service'
-import { IMAPSecurity, MailAccountType } from 'src/app/data/mail-account'
let httpTestingController: HttpTestingController
let service: MailAccountService
import { HttpTestingController } from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
+import {
+ MailAction,
+ MailFilterAttachmentType,
+ MailMetadataTitleOption,
+} from 'src/app/data/mail-rule'
import { environment } from 'src/environments/environment'
import { commonAbstractPaperlessServiceTests } from './abstract-paperless-service.spec'
import { MailRuleService } from './mail-rule.service'
-import { MailFilterAttachmentType } from 'src/app/data/mail-rule'
-import { MailMetadataTitleOption } from 'src/app/data/mail-rule'
-import { MailAction } from 'src/app/data/mail-rule'
let httpTestingController: HttpTestingController
let service: MailRuleService
import { HttpClient } from '@angular/common/http'
import { Injectable } from '@angular/core'
-import { combineLatest, Observable } from 'rxjs'
import { tap } from 'rxjs/operators'
import { MailRule } from 'src/app/data/mail-rule'
import { AbstractPaperlessService } from './abstract-paperless-service'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
import { environment } from 'src/environments/environment'
import { RemoteVersionService } from './remote-version.service'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
let httpTestingController: HttpTestingController
let service: RemoteVersionService
import { HttpClient } from '@angular/common/http'
import { Injectable } from '@angular/core'
-import { map, Observable } from 'rxjs'
+import { Observable } from 'rxjs'
import { environment } from 'src/environments/environment'
export interface AppRemoteVersion {
import { HttpTestingController } from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { environment } from 'src/environments/environment'
+import { SettingsService } from '../settings.service'
import { commonAbstractPaperlessServiceTests } from './abstract-paperless-service.spec'
import { SavedViewService } from './saved-view.service'
-import { SettingsService } from '../settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
let httpTestingController: HttpTestingController
let service: SavedViewService
import { Injectable } from '@angular/core'
import { combineLatest, Observable } from 'rxjs'
import { tap } from 'rxjs/operators'
+import { Results } from 'src/app/data/results'
import { SavedView } from 'src/app/data/saved-view'
-import { AbstractPaperlessService } from './abstract-paperless-service'
-import { SettingsService } from '../settings.service'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { Results } from 'src/app/data/results'
+import { SettingsService } from '../settings.service'
+import { AbstractPaperlessService } from './abstract-paperless-service'
@Injectable({
providedIn: 'root',
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { environment } from 'src/environments/environment'
-import { SearchService } from './search.service'
import { SettingsService } from '../settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { SearchService } from './search.service'
let httpTestingController: HttpTestingController
let service: SearchService
import { HttpClient, HttpParams } from '@angular/common/http'
import { Injectable } from '@angular/core'
import { Observable } from 'rxjs'
-import { environment } from 'src/environments/environment'
-import { Document } from 'src/app/data/document'
-import { DocumentType } from 'src/app/data/document-type'
import { Correspondent } from 'src/app/data/correspondent'
import { CustomField } from 'src/app/data/custom-field'
+import { Document } from 'src/app/data/document'
+import { DocumentType } from 'src/app/data/document-type'
import { Group } from 'src/app/data/group'
import { MailAccount } from 'src/app/data/mail-account'
import { MailRule } from 'src/app/data/mail-rule'
+import { SavedView } from 'src/app/data/saved-view'
import { StoragePath } from 'src/app/data/storage-path'
import { Tag } from 'src/app/data/tag'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { User } from 'src/app/data/user'
import { Workflow } from 'src/app/data/workflow'
+import { environment } from 'src/environments/environment'
import { SettingsService } from '../settings.service'
-import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
-import { SavedView } from 'src/app/data/saved-view'
export interface GlobalSearchResult {
total: number
-import { Injectable } from '@angular/core'
-import { ShareLink, FileVersion } from 'src/app/data/share-link'
-import { AbstractNameFilterService } from './abstract-name-filter-service'
import { HttpClient } from '@angular/common/http'
+import { Injectable } from '@angular/core'
import { Observable } from 'rxjs'
+import { FileVersion, ShareLink } from 'src/app/data/share-link'
+import { AbstractNameFilterService } from './abstract-name-filter-service'
@Injectable({
providedIn: 'root',
-import { StoragePathService } from './storage-path.service'
-import { commonAbstractNameFilterPaperlessServiceTests } from './abstract-name-filter-service.spec'
-import { Subscription } from 'rxjs'
import { HttpTestingController } from '@angular/common/http/testing'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
import { environment } from 'src/environments/environment'
+import { commonAbstractNameFilterPaperlessServiceTests } from './abstract-name-filter-service.spec'
+import { StoragePathService } from './storage-path.service'
let httpTestingController: HttpTestingController
let service: StoragePathService
import { HttpClient } from '@angular/common/http'
import { Injectable } from '@angular/core'
+import { Observable } from 'rxjs'
import { StoragePath } from 'src/app/data/storage-path'
import { AbstractNameFilterService } from './abstract-name-filter-service'
-import { Observable } from 'rxjs'
@Injectable({
providedIn: 'root',
-import { TagService } from './tag.service'
import { commonAbstractNameFilterPaperlessServiceTests } from './abstract-name-filter-service.spec'
+import { TagService } from './tag.service'
commonAbstractNameFilterPaperlessServiceTests('tags', TagService)
import { HttpTestingController } from '@angular/common/http/testing'
-import { Subscription } from 'rxjs'
import { TestBed } from '@angular/core/testing'
+import { Subscription } from 'rxjs'
import { environment } from 'src/environments/environment'
import { commonAbstractNameFilterPaperlessServiceTests } from './abstract-name-filter-service.spec'
import { UserService } from './user.service'
import { HttpTestingController } from '@angular/common/http/testing'
import { TestBed } from '@angular/core/testing'
-import { environment } from 'src/environments/environment'
-import { commonAbstractPaperlessServiceTests } from './abstract-paperless-service.spec'
-import { WorkflowService } from './workflow.service'
import { Workflow } from 'src/app/data/workflow'
+import { WorkflowActionType } from 'src/app/data/workflow-action'
import {
DocumentSource,
WorkflowTriggerType,
} from 'src/app/data/workflow-trigger'
-import { WorkflowActionType } from 'src/app/data/workflow-action'
+import { environment } from 'src/environments/environment'
+import { commonAbstractPaperlessServiceTests } from './abstract-paperless-service.spec'
+import { WorkflowService } from './workflow.service'
let httpTestingController: HttpTestingController
let service: WorkflowService
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
import { RouterTestingModule } from '@angular/router/testing'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { CookieService } from 'ngx-cookie-service'
-import { Subscription, of } from 'rxjs'
+import { of, Subscription } from 'rxjs'
import { environment } from 'src/environments/environment'
import { AppModule } from '../app.module'
-import { UiSettings, SETTINGS_KEYS } from '../data/ui-settings'
-import { SettingsService } from './settings.service'
-import { SavedView } from '../data/saved-view'
-import { CustomFieldsService } from './rest/custom-fields.service'
import { CustomFieldDataType } from '../data/custom-field'
-import { PermissionsService } from './permissions.service'
import { DEFAULT_DISPLAY_FIELDS, DisplayField } from '../data/document'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { SavedView } from '../data/saved-view'
+import { SETTINGS_KEYS, UiSettings } from '../data/ui-settings'
+import { PermissionsService } from './permissions.service'
+import { CustomFieldsService } from './rest/custom-fields.service'
+import { SettingsService } from './settings.service'
import { ToastService } from './toast.service'
const customFields = [
hexToHsl,
} from 'src/app/utils/color'
import { environment } from 'src/environments/environment'
+import { DEFAULT_DISPLAY_FIELDS, DisplayField } from '../data/document'
+import { SavedView } from '../data/saved-view'
import {
- UiSettings,
+ PAPERLESS_GREEN_HEX,
SETTINGS,
SETTINGS_KEYS,
- PAPERLESS_GREEN_HEX,
+ UiSettings,
} from '../data/ui-settings'
import { User } from '../data/user'
import {
PermissionAction,
- PermissionType,
PermissionsService,
+ PermissionType,
} from './permissions.service'
-import { ToastService } from './toast.service'
-import { SavedView } from '../data/saved-view'
import { CustomFieldsService } from './rest/custom-fields.service'
-import { DEFAULT_DISPLAY_FIELDS, DisplayField } from '../data/document'
+import { ToastService } from './toast.service'
export interface LanguageOption {
code: string
import { TestBed } from '@angular/core/testing'
-import { SystemStatusService } from './system-status.service'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
import { environment } from 'src/environments/environment'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { SystemStatusService } from './system-status.service'
describe('SystemStatusService', () => {
let httpTestingController: HttpTestingController
import { HttpClient } from '@angular/common/http'
import { Injectable } from '@angular/core'
import { Observable } from 'rxjs'
-import { SystemStatus } from '../data/system-status'
import { environment } from 'src/environments/environment'
+import { SystemStatus } from '../data/system-status'
@Injectable({
providedIn: 'root',
-import { TestBed } from '@angular/core/testing'
-import { TasksService } from './tasks.service'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
+import { TestBed } from '@angular/core/testing'
import { environment } from 'src/environments/environment'
-import { PaperlessTaskType } from '../data/paperless-task'
-import { PaperlessTaskStatus } from '../data/paperless-task'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { PaperlessTaskStatus, PaperlessTaskType } from '../data/paperless-task'
+import { TasksService } from './tasks.service'
describe('TasksService', () => {
let httpTestingController: HttpTestingController
import { TestBed } from '@angular/core/testing'
-import { TrashService } from './trash.service'
import {
HttpClientTestingModule,
HttpTestingController,
} from '@angular/common/http/testing'
import { environment } from 'src/environments/environment'
+import { TrashService } from './trash.service'
describe('TrashService', () => {
let service: TrashService
-import { TestBed } from '@angular/core/testing'
-import { UploadDocumentsService } from './upload-documents.service'
-import {
- HttpTestingController,
- provideHttpClientTesting,
-} from '@angular/common/http/testing'
-import { environment } from 'src/environments/environment'
import {
HttpEventType,
provideHttpClient,
withInterceptorsFromDi,
} from '@angular/common/http'
+import {
+ HttpTestingController,
+ provideHttpClientTesting,
+} from '@angular/common/http/testing'
+import { TestBed } from '@angular/core/testing'
+import { environment } from 'src/environments/environment'
import {
ConsumerStatusService,
FileStatusPhase,
} from './consumer-status.service'
+import { UploadDocumentsService } from './upload-documents.service'
const files = [
{
-import { Injectable } from '@angular/core'
import { HttpEventType } from '@angular/common/http'
+import { Injectable } from '@angular/core'
import { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop'
+import { Subscription } from 'rxjs'
import {
ConsumerStatusService,
FileStatusPhase,
} from './consumer-status.service'
import { DocumentService } from './rest/document.service'
-import { Subscription } from 'rxjs'
@Injectable({
providedIn: 'root',
-import {
- CustomFieldQueryElement,
- CustomFieldQueryAtom,
- CustomFieldQueryExpression,
-} from './custom-field-query-element'
+import { fakeAsync, tick } from '@angular/core/testing'
import {
CustomFieldQueryElementType,
CustomFieldQueryLogicalOperator,
CustomFieldQueryOperator,
} from '../data/custom-field-query'
-import { fakeAsync, tick } from '@angular/core/testing'
+import {
+ CustomFieldQueryAtom,
+ CustomFieldQueryElement,
+ CustomFieldQueryExpression,
+} from './custom-field-query-element'
describe('CustomFieldQueryElement', () => {
it('should initialize with correct type and id', () => {
import { Subject, debounceTime, distinctUntilChanged } from 'rxjs'
import { v4 as uuidv4 } from 'uuid'
import {
- CustomFieldQueryElementType,
CUSTOM_FIELD_QUERY_VALUE_TYPES_BY_OPERATOR,
+ CustomFieldQueryElementType,
CustomFieldQueryLogicalOperator,
CustomFieldQueryOperator,
} from '../data/custom-field-query'
-import { cloneFilterRules } from './filter-rules'
import { FilterRule } from '../data/filter-rule'
import {
FILTER_FULLTEXT_QUERY,
FILTER_HAS_TAGS_ALL,
} from '../data/filter-rule-type'
-import { isFullTextFilterRule } from './filter-rules'
-import { filterRulesDiffer } from './filter-rules'
+import {
+ cloneFilterRules,
+ filterRulesDiffer,
+ isFullTextFilterRule,
+} from './filter-rules'
const filterRules: FilterRule[] = [
{
-import { TestBed } from '@angular/core/testing'
-import { LocalizedDateParserFormatter } from './ngb-date-parser-formatter'
-import { SettingsService } from '../services/settings.service'
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
import {
HttpTestingController,
provideHttpClientTesting,
} from '@angular/common/http/testing'
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
+import { TestBed } from '@angular/core/testing'
+import { SettingsService } from '../services/settings.service'
+import { LocalizedDateParserFormatter } from './ngb-date-parser-formatter'
describe('LocalizedDateParserFormatter', () => {
let dateParserFormatter: LocalizedDateParserFormatter
-import { popperOptionsReenablePreventOverflow } from './popper-options'
import { Options } from '@popperjs/core'
+import { popperOptionsReenablePreventOverflow } from './popper-options'
describe('popperOptionsReenablePreventOverflow', () => {
it('should return the config without the empty fun preventOverflow, add padding to other', () => {
import { convertToParamMap } from '@angular/router'
+import { CustomFieldQueryLogicalOperator } from '../data/custom-field-query'
import { FilterRule } from '../data/filter-rule'
import {
FILTER_CORRESPONDENT,
FILTER_HAS_CUSTOM_FIELDS_ANY,
FILTER_HAS_TAGS_ALL,
} from '../data/filter-rule-type'
-import { paramsToViewState, transformLegacyFilterRules } from './query-params'
-import { paramsFromViewState } from './query-params'
-import { queryParamsFromFilterRules } from './query-params'
-import { filterRulesFromQueryParams } from './query-params'
-import { CustomFieldQueryLogicalOperator } from '../data/custom-field-query'
+import {
+ filterRulesFromQueryParams,
+ paramsFromViewState,
+ paramsToViewState,
+ queryParamsFromFilterRules,
+ transformLegacyFilterRules,
+} from './query-params'
const tags__id__all = '9'
const filterRules: FilterRule[] = [
import { ParamMap, Params } from '@angular/router'
+import {
+ CustomFieldQueryLogicalOperator,
+ CustomFieldQueryOperator,
+} from '../data/custom-field-query'
import { FilterRule } from '../data/filter-rule'
import {
- FilterRuleType,
- FILTER_RULE_TYPES,
- FILTER_HAS_CUSTOM_FIELDS_ANY,
FILTER_CUSTOM_FIELDS_QUERY,
FILTER_HAS_CUSTOM_FIELDS_ALL,
+ FILTER_HAS_CUSTOM_FIELDS_ANY,
+ FILTER_RULE_TYPES,
+ FilterRuleType,
} from '../data/filter-rule-type'
import { ListViewState } from '../services/document-list-view.service'
-import {
- CustomFieldQueryLogicalOperator,
- CustomFieldQueryOperator,
-} from '../data/custom-field-query'
const SORT_FIELD_PARAMETER = 'sort'
const SORT_REVERSE_PARAMETER = 'reverse'