Refactoring

This commit is contained in:
shamoon 2024-04-19 00:07:14 -07:00
parent eb1eab1dfc
commit 9a2d30cb33
29 changed files with 672 additions and 652 deletions

View File

@ -124,7 +124,7 @@
"content": {
"size": -1,
"mimeType": "application/json",
"text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]}]}"
"text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]}]}"
},
"headersSize": -1,
"bodySize": -1,

View File

@ -124,7 +124,7 @@
"content": {
"size": -1,
"mimeType": "application/json",
"text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]}]}"
"text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]}]}"
},
"headersSize": -1,
"bodySize": -1,

View File

@ -124,7 +124,7 @@
"content": {
"size": -1,
"mimeType": "application/json",
"text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]}]}"
"text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]}]}"
},
"headersSize": -1,
"bodySize": -1,

View File

@ -124,7 +124,7 @@
"content": {
"size": -1,
"mimeType": "application/json",
"text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"document_display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]}]}"
"text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":\"2\",\"user_can_change\":true,\"page_size\":10,\"display_mode\":\"table\",\"display_fields\":[\"created\",\"title\",\"tag\",\"documenttype\"]}]}"
},
"headersSize": -1,
"bodySize": -1,

View File

@ -2365,7 +2365,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<context context-type="linenumber">129</context>
<context context-type="linenumber">127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
@ -4228,7 +4228,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.ts</context>
<context context-type="linenumber">86</context>
<context context-type="linenumber">83</context>
</context-group>
</trans-unit>
<trans-unit id="2504502765849142619" datatype="html">
@ -6340,14 +6340,14 @@
<source>View &quot;<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>&quot; saved successfully.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<context context-type="linenumber">250</context>
<context context-type="linenumber">241</context>
</context-group>
</trans-unit>
<trans-unit id="6837554170707123455" datatype="html">
<source>View &quot;<x id="PH" equiv-text="savedView.name"/>&quot; created successfully.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<context context-type="linenumber">291</context>
<context context-type="linenumber">282</context>
</context-group>
</trans-unit>
<trans-unit id="3100631071441658964" datatype="html">

View File

@ -363,8 +363,8 @@
<option [ngValue]="DashboardViewMode.LARGE_CARDS" i18n>Large Cards</option>
</select>
</div>
@if (documentDisplayFields) {
<pngx-input-drag-drop-select i18n-title title="Show" [items]="documentDisplayFields" formControlName="document_display_fields"></pngx-input-drag-drop-select>
@if (displayFields) {
<pngx-input-drag-drop-select i18n-title title="Show" [items]="displayFields" formControlName="display_fields"></pngx-input-drag-drop-select>
}
</div>
</div>

View File

@ -27,9 +27,9 @@ import {
} from 'rxjs'
import { Group } from 'src/app/data/group'
import {
DEFAULT_DOCUMENT_DISPLAY_FIELDS,
DEFAULT_DISPLAY_FIELDS,
DisplayMode,
DocumentDisplayField,
DisplayField,
SavedView,
} from 'src/app/data/saved-view'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
@ -117,8 +117,8 @@ export class SettingsComponent
savedViews: SavedView[]
SettingsNavIDs = SettingsNavIDs
get documentDisplayFields() {
return this.settings.allDocumentDisplayFields
get displayFields() {
return this.settings.allDisplayFields
}
store: BehaviorSubject<any>
@ -353,7 +353,7 @@ export class SettingsComponent
show_in_sidebar: view.show_in_sidebar,
page_size: view.page_size,
display_mode: view.display_mode,
document_display_fields: view.document_display_fields,
display_fields: view.display_fields,
}
this.savedViewGroup.addControl(
view.id.toString(),
@ -364,7 +364,7 @@ export class SettingsComponent
show_in_sidebar: new FormControl(null),
page_size: new FormControl(null),
display_mode: new FormControl(null),
document_display_fields: new FormControl([]),
display_fields: new FormControl([]),
})
)
}

View File

@ -6,7 +6,7 @@ import { CustomFieldDisplayComponent } from './custom-field-display.component'
import { Document } from 'src/app/data/document'
import { HttpClientTestingModule } from '@angular/common/http/testing'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { DocumentDisplayField } from 'src/app/data/saved-view'
import { DisplayField } from 'src/app/data/saved-view'
const customFields: CustomField[] = [
{ id: 1, name: 'Field 1', data_type: CustomFieldDataType.String },
@ -57,7 +57,7 @@ describe('CustomFieldDisplayComponent', () => {
.spyOn(documentService, 'getFew')
.mockReturnValue(of({ results: [] } as any))
component.fieldDisplayKey = DocumentDisplayField.CUSTOM_FIELD + '2'
component.fieldDisplayKey = DisplayField.CUSTOM_FIELD + '2'
expect(component.fieldId).toEqual(2)
component.document = document
expect(component.document.title).toEqual('Doc 1')

View File

@ -3,7 +3,7 @@ import { Subject, takeUntil } from 'rxjs'
import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
import { Document } from 'src/app/data/document'
import { Results } from 'src/app/data/results'
import { DocumentDisplayField } from 'src/app/data/saved-view'
import { DisplayField } from 'src/app/data/saved-view'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { DocumentService } from 'src/app/services/rest/document.service'
@ -39,10 +39,7 @@ export class CustomFieldDisplayComponent implements OnInit, OnDestroy {
@Input()
set fieldDisplayKey(key: string) {
this.fieldId = parseInt(
key.replace(DocumentDisplayField.CUSTOM_FIELD, ''),
10
)
this.fieldId = parseInt(key.replace(DisplayField.CUSTOM_FIELD, ''), 10)
}
value: any

View File

@ -13,7 +13,7 @@
<table content class="table table-hover mb-0 mt-n2 align-middle">
<thead>
<tr>
@for (column of savedView.document_display_fields; track column; let i = $index) {
@for (column of savedView.display_fields; track column; let i = $index) {
@if (activeDisplayFields.includes(column)) {
<th
scope="col"
@ -30,7 +30,7 @@
<tbody>
@for (doc of documents; track doc.id) {
<tr>
@for (column of savedView.document_display_fields; track column; let i = $index) {
@for (column of savedView.display_fields; track column; let i = $index) {
@if (activeDisplayFields.includes(column)) {
<td class="py-2 py-md-3 position-relative" [ngClass]="{ 'd-none d-md-table-cell': i > 1 }">
@switch (column) {
@ -67,7 +67,7 @@
@if (column.startsWith(DashboardViewTableColumn.CUSTOM_FIELD)) {
<pngx-custom-field-display [document]="doc" [fieldDisplayKey]="column"></pngx-custom-field-display>
}
@if (i === savedView.document_display_fields.length - 1) {
@if (i === savedView.display_fields.length - 1) {
<div class="btn-group position-absolute top-50 end-0 translate-middle-y">
<a [href]="getPreviewUrl(doc)" title="View Preview" i18n-title target="_blank" class="btn px-4 btn-dark border-dark-subtle"
[ngbPopover]="previewContent" [popoverTitle]="doc.title | documentTitle"

View File

@ -18,11 +18,7 @@ import {
FILTER_HAS_TAGS_ALL,
FILTER_STORAGE_PATH,
} from 'src/app/data/filter-rule-type'
import {
DisplayMode,
DocumentDisplayField,
SavedView,
} from 'src/app/data/saved-view'
import { DisplayMode, DisplayField, SavedView } from 'src/app/data/saved-view'
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'
@ -60,15 +56,15 @@ const savedView: SavedView = {
],
page_size: 20,
display_mode: DisplayMode.TABLE,
document_display_fields: [
DocumentDisplayField.CREATED,
DocumentDisplayField.TITLE,
DocumentDisplayField.TAGS,
DocumentDisplayField.CORRESPONDENT,
DocumentDisplayField.DOCUMENT_TYPE,
DocumentDisplayField.STORAGE_PATH,
`${DocumentDisplayField.CUSTOM_FIELD}11` as any,
`${DocumentDisplayField.CUSTOM_FIELD}15` as any,
display_fields: [
DisplayField.CREATED,
DisplayField.TITLE,
DisplayField.TAGS,
DisplayField.CORRESPONDENT,
DisplayField.DOCUMENT_TYPE,
DisplayField.STORAGE_PATH,
`${DisplayField.CUSTOM_FIELD}11` as any,
`${DisplayField.CUSTOM_FIELD}15` as any,
],
}
@ -332,23 +328,17 @@ describe('SavedViewWidgetComponent', () => {
})
it('should get correct column title', () => {
expect(component.getColumnTitle(DocumentDisplayField.TITLE)).toEqual(
'Title'
expect(component.getColumnTitle(DisplayField.TITLE)).toEqual('Title')
expect(component.getColumnTitle(DisplayField.CREATED)).toEqual('Created')
expect(component.getColumnTitle(DisplayField.ADDED)).toEqual('Added')
expect(component.getColumnTitle(DisplayField.TAGS)).toEqual('Tags')
expect(component.getColumnTitle(DisplayField.CORRESPONDENT)).toEqual(
'Correspondent'
)
expect(component.getColumnTitle(DocumentDisplayField.CREATED)).toEqual(
'Created'
expect(component.getColumnTitle(DisplayField.DOCUMENT_TYPE)).toEqual(
'Document type'
)
expect(component.getColumnTitle(DocumentDisplayField.ADDED)).toEqual(
'Added'
)
expect(component.getColumnTitle(DocumentDisplayField.TAGS)).toEqual('Tags')
expect(
component.getColumnTitle(DocumentDisplayField.CORRESPONDENT)
).toEqual('Correspondent')
expect(
component.getColumnTitle(DocumentDisplayField.DOCUMENT_TYPE)
).toEqual('Document type')
expect(component.getColumnTitle(DocumentDisplayField.STORAGE_PATH)).toEqual(
expect(component.getColumnTitle(DisplayField.STORAGE_PATH)).toEqual(
'Storage path'
)
})

View File

@ -10,11 +10,11 @@ import { Router } from '@angular/router'
import { Subject, takeUntil } from 'rxjs'
import { Document } from 'src/app/data/document'
import {
DocumentDisplayField,
DisplayField,
DisplayMode,
SavedView,
DEFAULT_DOCUMENT_DISPLAY_FIELDS,
DEFAULT_PAGE_SIZE,
DEFAULT_DISPLAY_FIELDS,
DEFAULT_DASHBOARD_VIEW_PAGE_SIZE,
} from 'src/app/data/saved-view'
import { ConsumerStatusService } from 'src/app/services/consumer-status.service'
import { DocumentService } from 'src/app/services/rest/document.service'
@ -47,7 +47,7 @@ export class SavedViewWidgetComponent
implements OnInit, OnDestroy
{
public DashboardViewMode = DisplayMode
public DashboardViewTableColumn = DocumentDisplayField
public DashboardViewTableColumn = DisplayField
public CustomFieldDataType = CustomFieldDataType
loading: boolean = true
@ -80,10 +80,10 @@ export class SavedViewWidgetComponent
mouseOnPreview = false
popoverHidden = true
activeDisplayFields: DocumentDisplayField[] = [
DocumentDisplayField.TITLE,
DocumentDisplayField.CREATED,
DocumentDisplayField.ADDED,
activeDisplayFields: DisplayField[] = [
DisplayField.TITLE,
DisplayField.CREATED,
DisplayField.ADDED,
]
ngOnInit(): void {
@ -109,11 +109,11 @@ export class SavedViewWidgetComponent
})
}
this.savedView.document_display_fields?.forEach((column) => {
this.savedView.display_fields?.forEach((column) => {
let type: PermissionType = Object.values(PermissionType).find((t) =>
t.includes(column)
)
if (column.startsWith(DocumentDisplayField.CUSTOM_FIELD)) {
if (column.startsWith(DisplayField.CUSTOM_FIELD)) {
type = PermissionType.CustomField
}
if (
@ -134,7 +134,7 @@ export class SavedViewWidgetComponent
this.documentService
.listFiltered(
1,
this.savedView.page_size ?? DEFAULT_PAGE_SIZE,
this.savedView.page_size ?? DEFAULT_DASHBOARD_VIEW_PAGE_SIZE,
this.savedView.sort_field,
this.savedView.sort_reverse,
this.savedView.filter_rules,
@ -252,11 +252,11 @@ export class SavedViewWidgetComponent
}, 300)
}
public getColumnTitle(column: DocumentDisplayField): string {
if (column.startsWith(DocumentDisplayField.CUSTOM_FIELD)) {
public getColumnTitle(column: DisplayField): string {
if (column.startsWith(DisplayField.CUSTOM_FIELD)) {
const id = column.split('_')[2]
return this.customFields.find((c) => c.id === parseInt(id))?.name
}
return DEFAULT_DOCUMENT_DISPLAY_FIELDS.find((c) => c.id === column)?.name
return DEFAULT_DISPLAY_FIELDS.find((c) => c.id === column)?.name
}
}

View File

@ -15,7 +15,7 @@
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<h5 class="card-title">
@if (displayFields.includes(DocumentDisplayField.CORRESPONDENT) && document.correspondent) {
@if (displayFields.includes(DisplayField.CORRESPONDENT) && document.correspondent) {
@if (clickCorrespondent.observers.length ) {
<a title="Filter by correspondent" i18n-title (click)="clickCorrespondent.emit(document.correspondent);$event.stopPropagation()" class="fw-bold btn-link">{{(document.correspondent$ | async)?.name}}</a>
} @else {
@ -23,10 +23,10 @@
}
:
}
@if (displayFields.includes(DocumentDisplayField.TITLE)) {
@if (displayFields.includes(DisplayField.TITLE)) {
{{document.title | documentTitle}}
}
@if (displayFields.includes(DocumentDisplayField.TAGS)) {
@if (displayFields.includes(DisplayField.TAGS)) {
@for (t of document.tags$ | async; track t) {
<pngx-tag [tag]="t" linkTitle="Filter by tag" i18n-linkTitle class="ms-1" (click)="clickTag.emit(t.id);$event.stopPropagation()" [clickable]="clickTag.observers.length"></pngx-tag>
}
@ -70,29 +70,29 @@
</div>
<div class="list-group list-group-horizontal border-0 card-info ms-md-auto mt-2 mt-md-0">
@if (displayFields.includes(DocumentDisplayField.NOTES) && notesEnabled && document.notes.length) {
@if (displayFields.includes(DisplayField.NOTES) && notesEnabled && document.notes.length) {
<button routerLink="/documents/{{document.id}}/notes" class="list-group-item btn btn-sm bg-light text-dark p-1 border-0 me-2 d-flex align-items-center" title="View notes" i18n-title>
<i-bs width=".9em" height=".9em" class="me-2 text-muted" name="chat-left-text"></i-bs><small i18n>{{document.notes.length}} Notes</small>
</button>
}
@if (displayFields.includes(DocumentDisplayField.DOCUMENT_TYPE) && document.document_type) {
@if (displayFields.includes(DisplayField.DOCUMENT_TYPE) && document.document_type) {
<button type="button" class="list-group-item btn btn-sm bg-light text-dark p-1 border-0 me-2 d-flex align-items-center" title="Filter by document type" i18n-title
(click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()">
<i-bs width=".9em" height=".9em" class="me-2 text-muted" name="file-earmark"></i-bs><small>{{(document.document_type$ | async)?.name}}</small>
</button>
}
@if (displayFields.includes(DocumentDisplayField.STORAGE_PATH) && document.storage_path) {
@if (displayFields.includes(DisplayField.STORAGE_PATH) && document.storage_path) {
<button type="button" class="list-group-item btn btn-sm bg-light text-dark p-1 border-0 me-2 d-flex align-items-center" title="Filter by storage path" i18n-title
(click)="clickStoragePath.emit(document.storage_path);$event.stopPropagation()">
<i-bs width=".9em" height=".9em" class="me-2 text-muted" name="archive"></i-bs><small>{{(document.storage_path$ | async)?.name}}</small>
</button>
}
@if (displayFields.includes(DocumentDisplayField.ASN) && document.archive_serial_number | isNumber) {
@if (displayFields.includes(DisplayField.ASN) && document.archive_serial_number | isNumber) {
<div class="list-group-item me-2 bg-light text-dark p-1 border-0 d-flex align-items-center">
<i-bs width=".9em" height=".9em" class="me-2 text-muted" name="upc-scan"></i-bs><small>#{{document.archive_serial_number}}</small>
</div>
}
@if (displayFields.includes(DocumentDisplayField.CREATED) || displayFields.includes(DocumentDisplayField.ADDED)) {
@if (displayFields.includes(DisplayField.CREATED) || displayFields.includes(DisplayField.ADDED)) {
<ng-template #dateTooltip>
<div class="d-flex flex-column text-light">
<span i18n>Created: {{ document.created | customDate }}</span>
@ -100,23 +100,23 @@
<span i18n>Modified: {{ document.modified | customDate }}</span>
</div>
</ng-template>
@if (displayFields.includes(DocumentDisplayField.CREATED)) {
@if (displayFields.includes(DisplayField.CREATED)) {
<div class="list-group-item bg-light text-dark p-1 border-0 d-flex align-items-center" [ngbTooltip]="dateTooltip">
<i-bs width=".9em" height=".9em" class="me-2 text-muted" name="calendar-event"></i-bs><small>{{document.created_date | customDate:'mediumDate'}}</small>
</div>
}
@if (displayFields.includes(DocumentDisplayField.ADDED)) {
@if (displayFields.includes(DisplayField.ADDED)) {
<div class="list-group-item bg-light text-dark p-1 border-0 d-flex align-items-center" [ngbTooltip]="dateTooltip">
<i-bs width=".9em" height=".9em" class="me-2 text-muted" name="calendar-event"></i-bs><small>{{document.added | customDate:'mediumDate'}}</small>
</div>
}
}
@if (displayFields.includes(DocumentDisplayField.OWNER) && document.owner && document.owner !== settingsService.currentUser.id) {
@if (displayFields.includes(DisplayField.OWNER) && document.owner && document.owner !== settingsService.currentUser.id) {
<div class="list-group-item bg-light text-dark p-1 border-0 d-flex align-items-center">
<i-bs width=".9em" height=".9em" class="me-2 text-muted" name="person-fill-lock"></i-bs><small>{{document.owner | username}}</small>
</div>
}
@if (displayFields.includes(DocumentDisplayField.SHARED) && document.is_shared_by_requester) {
@if (displayFields.includes(DisplayField.SHARED) && document.is_shared_by_requester) {
<div class="list-group-item bg-light text-dark p-1 border-0 d-flex align-items-center">
<i-bs width=".9em" height=".9em" class="me-2 text-muted" name="people-fill"></i-bs><small i18n>Shared</small>
</div>
@ -128,7 +128,7 @@
</div>
}
@for (field of document.custom_fields; track field.id) {
@if (displayFields.includes(DocumentDisplayField.CUSTOM_FIELD + field.field)) {
@if (displayFields.includes(DisplayField.CUSTOM_FIELD + field.field)) {
<div class="list-group-item bg-light text-dark p-1 border-0 d-flex align-items-center">
<i-bs width=".9em" height=".9em" class="me-2 text-muted" name="ui-radios"></i-bs>
<small>

View File

@ -11,10 +11,7 @@ import { SettingsService } from 'src/app/services/settings.service'
import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
import {
DEFAULT_DOCUMENT_DISPLAY_FIELDS,
DocumentDisplayField,
} from 'src/app/data/saved-view'
import { DEFAULT_DISPLAY_FIELDS, DisplayField } from 'src/app/data/saved-view'
@Component({
selector: 'pngx-document-card-large',
@ -22,7 +19,7 @@ import {
styleUrls: ['./document-card-large.component.scss'],
})
export class DocumentCardLargeComponent extends ComponentWithPermissions {
DocumentDisplayField = DocumentDisplayField
DisplayField = DisplayField
constructor(
private documentService: DocumentService,
@ -35,7 +32,7 @@ export class DocumentCardLargeComponent extends ComponentWithPermissions {
selected = false
@Input()
displayFields: string[] = DEFAULT_DOCUMENT_DISPLAY_FIELDS.map((f) => f.id)
displayFields: string[] = DEFAULT_DISPLAY_FIELDS.map((f) => f.id)
@Output()
toggleSelected = new EventEmitter()

View File

@ -10,7 +10,7 @@
</div>
</div>
@if (displayFields?.includes(DocumentDisplayField.TAGS)) {
@if (displayFields?.includes(DisplayField.TAGS)) {
<div class="tags d-flex flex-column text-end position-absolute me-1 fs-6">
@for (t of getTagsLimited$() | async; track t) {
<pngx-tag [tag]="t" (click)="clickTag.emit(t.id);$event.stopPropagation()" [clickable]="true" linkTitle="Toggle tag filter" i18n-linkTitle></pngx-tag>
@ -24,7 +24,7 @@
}
</div>
@if (displayFields.includes(DocumentDisplayField.NOTES) && notesEnabled && document.notes.length) {
@if (displayFields.includes(DisplayField.NOTES) && notesEnabled && document.notes.length) {
<a routerLink="/documents/{{document.id}}/notes" class="document-card-notes py-2 px-1">
<span class="badge rounded-pill bg-light border text-primary">
<i-bs width="1.2em" height="1.2em" class="ms-1 me-1" name="chat-left-text"></i-bs>
@ -34,31 +34,31 @@
<div class="card-body bg-light p-2">
<p class="card-text">
@if (displayFields.includes(DocumentDisplayField.CORRESPONDENT) && document.correspondent) {
@if (displayFields.includes(DisplayField.CORRESPONDENT) && document.correspondent) {
<a title="Toggle correspondent filter" i18n-title (click)="clickCorrespondent.emit(document.correspondent);$event.stopPropagation()" class="fw-bold btn-link">{{(document.correspondent$ | async)?.name ?? privateName}}</a>:
}
@if (displayFields.includes(DocumentDisplayField.TITLE)) {
@if (displayFields.includes(DisplayField.TITLE)) {
{{document.title | documentTitle}}
}
</p>
</div>
<div class="card-footer pt-0 pb-2 px-2">
<div class="list-group list-group-flush border-0 pt-1 pb-2 card-info">
@if (displayFields.includes(DocumentDisplayField.DOCUMENT_TYPE) && document.document_type) {
@if (displayFields.includes(DisplayField.DOCUMENT_TYPE) && document.document_type) {
<button type="button" class="list-group-item list-group-item-action bg-transparent ps-0 p-1 border-0" title="Toggle document type filter" i18n-title
(click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()">
<i-bs width="1em" height="1em" class="me-2 text-muted" name="file-earmark"></i-bs>
<small>{{(document.document_type$ | async)?.name ?? privateName}}</small>
</button>
}
@if (displayFields.includes(DocumentDisplayField.STORAGE_PATH) && document.storage_path) {
@if (displayFields.includes(DisplayField.STORAGE_PATH) && document.storage_path) {
<button type="button" class="list-group-item list-group-item-action bg-transparent ps-0 p-1 border-0" title="Toggle storage path filter" i18n-title
(click)="clickStoragePath.emit(document.storage_path);$event.stopPropagation()">
<i-bs width="1em" height="1em" class="me-2 text-muted" name="folder"></i-bs>
<small>{{(document.storage_path$ | async)?.name ?? privateName}}</small>
</button>
}
@if (displayFields.includes(DocumentDisplayField.CREATED) || displayFields.includes(DocumentDisplayField.ADDED)) {
@if (displayFields.includes(DisplayField.CREATED) || displayFields.includes(DisplayField.ADDED)) {
<div class="list-group-item bg-transparent p-0 border-0 d-flex flex-wrap-reverse justify-content-between">
<ng-template #dateTooltip>
<div class="d-flex flex-column text-light">
@ -70,32 +70,32 @@
<div class="ps-0 p-1" placement="top" [ngbTooltip]="dateTooltip">
<i-bs width="1em" height="1em" class="me-2 text-muted" name="calendar-event"></i-bs>
<small>
@if (displayFields.includes(DocumentDisplayField.CREATED)) { {{document.created | customDate:'mediumDate'}} }
@if (displayFields.includes(DisplayField.CREATED)) { {{document.created | customDate:'mediumDate'}} }
@else { {{document.added | customDate:'mediumDate'}} }
</small>
</div>
</div>
}
@if (displayFields.includes(DocumentDisplayField.ASN) && document.archive_serial_number | isNumber) {
@if (displayFields.includes(DisplayField.ASN) && document.archive_serial_number | isNumber) {
<div class="ps-0 p-1">
<i-bs width="1em" height="1em" class="me-2 text-muted" name="upc-scan"></i-bs>
<small>#{{document.archive_serial_number}}</small>
</div>
}
@if (displayFields.includes(DocumentDisplayField.OWNER) && document.owner && document.owner !== settingsService.currentUser.id) {
@if (displayFields.includes(DisplayField.OWNER) && document.owner && document.owner !== settingsService.currentUser.id) {
<div class="ps-0 p-1">
<i-bs width="1em" height="1em" class="me-2 text-muted" name="person-fill-lock"></i-bs>
<small>{{document.owner | username}}</small>
</div>
}
@if (displayFields.includes(DocumentDisplayField.SHARED) && document.is_shared_by_requester) {
@if (displayFields.includes(DisplayField.SHARED) && document.is_shared_by_requester) {
<div class="ps-0 p-1">
<i-bs width="1em" height="1em" class="me-2 text-muted" name="people-fill"></i-bs>
<small i18n>Shared</small>
</div>
}
@for (field of document.custom_fields; track field.id) {
@if (displayFields.includes(DocumentDisplayField.CUSTOM_FIELD + field.field)) {
@if (displayFields.includes(DisplayField.CUSTOM_FIELD + field.field)) {
<div class="ps-0 p-1">
<i-bs width="1em" height="1em" class="me-2 text-muted" name="ui-radios"></i-bs>
<pngx-custom-field-display [document]="document" [fieldId]="field.field"></pngx-custom-field-display>

View File

@ -12,10 +12,7 @@ import { SettingsService } from 'src/app/services/settings.service'
import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
import {
DEFAULT_DOCUMENT_DISPLAY_FIELDS,
DocumentDisplayField,
} from 'src/app/data/saved-view'
import { DEFAULT_DISPLAY_FIELDS, DisplayField } from 'src/app/data/saved-view'
@Component({
selector: 'pngx-document-card-small',
@ -23,7 +20,7 @@ import {
styleUrls: ['./document-card-small.component.scss'],
})
export class DocumentCardSmallComponent extends ComponentWithPermissions {
DocumentDisplayField = DocumentDisplayField
DisplayField = DisplayField
constructor(
private documentService: DocumentService,
@ -42,7 +39,7 @@ export class DocumentCardSmallComponent extends ComponentWithPermissions {
document: Document
@Input()
displayFields: string[] = DEFAULT_DOCUMENT_DISPLAY_FIELDS.map((f) => f.id)
displayFields: string[] = DEFAULT_DISPLAY_FIELDS.map((f) => f.id)
@Output()
dblClickDocument = new EventEmitter()

View File

@ -18,7 +18,7 @@
</button>
<div ngbDropdownMenu aria-labelledby="dropdownDisplayFields" class="shadow">
<div class="px-3">
@for (field of settingsService.allDocumentDisplayFields; track field.id) {
@for (field of settingsService.allDisplayFields; track field.id) {
<div class="form-check small">
<input type="checkbox" class="form-check-input" id="displayField{{field.id}}" [checked]="activeDisplayFields.includes(field.id)" (change)="toggleDisplayField(field.id)">
<label class="form-check-label small" for="displayField{{field.id}}">{{field.name}}</label>
@ -160,7 +160,7 @@
<table class="table table-sm align-middle border shadow-sm">
<thead>
<th></th>
@if (activeDisplayFields.includes(DocumentDisplayField.ASN)) {
@if (activeDisplayFields.includes(DisplayField.ASN)) {
<th class="d-none d-lg-table-cell"
pngxSortable="archive_serial_number"
title="Sort by ASN" i18n-title
@ -169,7 +169,7 @@
(sort)="onSort($event)"
i18n>ASN</th>
}
@if (activeDisplayFields.includes(DocumentDisplayField.CORRESPONDENT) && permissionService.currentUserCan(PermissionAction.View, PermissionType.Correspondent)) {
@if (activeDisplayFields.includes(DisplayField.CORRESPONDENT) && permissionService.currentUserCan(PermissionAction.View, PermissionType.Correspondent)) {
<th class="d-none d-md-table-cell"
pngxSortable="correspondent__name"
title="Sort by correspondent" i18n-title
@ -178,7 +178,7 @@
(sort)="onSort($event)"
i18n>Correspondent</th>
}
@if (activeDisplayFields.includes(DocumentDisplayField.TITLE)) {
@if (activeDisplayFields.includes(DisplayField.TITLE)) {
<th
pngxSortable="title"
title="Sort by title" i18n-title
@ -187,7 +187,7 @@
(sort)="onSort($event)"
i18n>Title</th>
}
@if (activeDisplayFields.includes(DocumentDisplayField.OWNER) && permissionService.currentUserCan(PermissionAction.View, PermissionType.User)) {
@if (activeDisplayFields.includes(DisplayField.OWNER) && permissionService.currentUserCan(PermissionAction.View, PermissionType.User)) {
<th class="d-none d-xl-table-cell"
pngxSortable="owner"
title="Sort by owner" i18n-title
@ -196,7 +196,7 @@
(sort)="onSort($event)"
i18n>Owner</th>
}
@if (activeDisplayFields.includes(DocumentDisplayField.NOTES) && notesEnabled) {
@if (activeDisplayFields.includes(DisplayField.NOTES) && notesEnabled) {
<th class="d-none d-xl-table-cell"
pngxSortable="num_notes"
title="Sort by notes" i18n-title
@ -205,7 +205,7 @@
(sort)="onSort($event)"
i18n>Notes</th>
}
@if (activeDisplayFields.includes(DocumentDisplayField.DOCUMENT_TYPE) && permissionService.currentUserCan(PermissionAction.View, PermissionType.DocumentType)) {
@if (activeDisplayFields.includes(DisplayField.DOCUMENT_TYPE) && permissionService.currentUserCan(PermissionAction.View, PermissionType.DocumentType)) {
<th class="d-none d-xl-table-cell"
pngxSortable="document_type__name"
title="Sort by document type" i18n-title
@ -214,7 +214,7 @@
(sort)="onSort($event)"
i18n>Document type</th>
}
@if (activeDisplayFields.includes(DocumentDisplayField.STORAGE_PATH) && permissionService.currentUserCan(PermissionAction.View, PermissionType.StoragePath)) {
@if (activeDisplayFields.includes(DisplayField.STORAGE_PATH) && permissionService.currentUserCan(PermissionAction.View, PermissionType.StoragePath)) {
<th class="d-none d-xl-table-cell"
pngxSortable="storage_path__name"
title="Sort by storage path" i18n-title
@ -223,7 +223,7 @@
(sort)="onSort($event)"
i18n>Storage path</th>
}
@if (activeDisplayFields.includes(DocumentDisplayField.CREATED)) {
@if (activeDisplayFields.includes(DisplayField.CREATED)) {
<th
pngxSortable="created"
title="Sort by created date" i18n-title
@ -232,7 +232,7 @@
(sort)="onSort($event)"
i18n>Created</th>
}
@if (activeDisplayFields.includes(DocumentDisplayField.ADDED)) {
@if (activeDisplayFields.includes(DisplayField.ADDED)) {
<th
pngxSortable="added"
title="Sort by added date" i18n-title
@ -256,12 +256,12 @@
<label class="form-check-label" for="docCheck{{d.id}}"></label>
</div>
</td>
@if (activeDisplayFields.includes(DocumentDisplayField.ASN)) {
@if (activeDisplayFields.includes(DisplayField.ASN)) {
<td class="d-none d-xl-table-cell">
{{d.archive_serial_number}}
</td>
}
@if (activeDisplayFields.includes(DocumentDisplayField.CORRESPONDENT) && permissionService.currentUserCan(PermissionAction.View, PermissionType.Correspondent)) {
@if (activeDisplayFields.includes(DisplayField.CORRESPONDENT) && permissionService.currentUserCan(PermissionAction.View, PermissionType.Correspondent)) {
<td class="d-none d-xl-table-cell">
@if (d.correspondent) {
<a (click)="clickCorrespondent(d.correspondent);$event.stopPropagation()" title="Filter by correspondent" i18n-title>{{(d.correspondent$ | async)?.name}}</a>
@ -269,21 +269,21 @@
</td>
}
<td>
@if (activeDisplayFields.includes(DocumentDisplayField.TITLE)) {
@if (activeDisplayFields.includes(DisplayField.TITLE)) {
<a routerLink="/documents/{{d.id}}" title="Edit document" i18n-title style="overflow-wrap: anywhere;">{{d.title | documentTitle}}</a>
}
@if (activeDisplayFields.includes(DocumentDisplayField.TAGS)) {
@if (activeDisplayFields.includes(DisplayField.TAGS)) {
@for (t of d.tags$ | async; track t) {
<pngx-tag [tag]="t" class="ms-1" clickable="true" linkTitle="Filter by tag" i18n-linkTitle (click)="clickTag(t.id);$event.stopPropagation()"></pngx-tag>
}
}
</td>
@if (activeDisplayFields.includes(DocumentDisplayField.OWNER) && permissionService.currentUserCan(PermissionAction.View, PermissionType.User)) {
@if (activeDisplayFields.includes(DisplayField.OWNER) && permissionService.currentUserCan(PermissionAction.View, PermissionType.User)) {
<td>
{{d.owner | username}}
</td>
}
@if (activeDisplayFields.includes(DocumentDisplayField.NOTES) && notesEnabled) {
@if (activeDisplayFields.includes(DisplayField.NOTES) && notesEnabled) {
<td class="d-none d-xl-table-cell">
@if (d.notes.length) {
<a routerLink="/documents/{{d.id}}/notes" class="btn btn-sm p-0">
@ -294,26 +294,26 @@
}
</td>
}
@if (activeDisplayFields.includes(DocumentDisplayField.DOCUMENT_TYPE) && permissionService.currentUserCan(PermissionAction.View, PermissionType.DocumentType)) {
@if (activeDisplayFields.includes(DisplayField.DOCUMENT_TYPE) && permissionService.currentUserCan(PermissionAction.View, PermissionType.DocumentType)) {
<td class="d-none d-xl-table-cell">
@if (d.document_type) {
<a (click)="clickDocumentType(d.document_type);$event.stopPropagation()" title="Filter by document type" i18n-title>{{(d.document_type$ | async)?.name}}</a>
}
</td>
}
@if (activeDisplayFields.includes(DocumentDisplayField.STORAGE_PATH) && permissionService.currentUserCan(PermissionAction.View, PermissionType.StoragePath)) {
@if (activeDisplayFields.includes(DisplayField.STORAGE_PATH) && permissionService.currentUserCan(PermissionAction.View, PermissionType.StoragePath)) {
<td class="d-none d-xl-table-cell">
@if (d.storage_path) {
<a (click)="clickStoragePath(d.storage_path);$event.stopPropagation()" title="Filter by storage path" i18n-title>{{(d.storage_path$ | async)?.name}}</a>
}
</td>
}
@if (activeDisplayFields.includes(DocumentDisplayField.CREATED)) {
@if (activeDisplayFields.includes(DisplayField.CREATED)) {
<td>
{{d.created_date | customDate}}
</td>
}
@if (activeDisplayFields.includes(DocumentDisplayField.ADDED)) {
@if (activeDisplayFields.includes(DisplayField.ADDED)) {
<td>
{{d.added | customDate}}
</td>

View File

@ -35,9 +35,9 @@ import { Subject, of, throwError } from 'rxjs'
import { SavedViewService } from 'src/app/services/rest/saved-view.service'
import { ActivatedRoute, Router, convertToParamMap } from '@angular/router'
import {
DEFAULT_DOCUMENT_DISPLAY_FIELDS,
DEFAULT_DISPLAY_FIELDS,
DisplayMode,
DocumentDisplayField,
DisplayField,
SavedView,
} from 'src/app/data/saved-view'
import {
@ -331,7 +331,7 @@ describe('DocumentListComponent', () => {
})
it('should support setting sort field by table head', () => {
component.activeDisplayFields = [DocumentDisplayField.ASN]
component.activeDisplayFields = [DisplayField.ASN]
jest.spyOn(documentListService, 'documents', 'get').mockReturnValue(docs)
fixture.detectChanges()
expect(documentListService.sortField).toEqual('created')
@ -555,7 +555,7 @@ describe('DocumentListComponent', () => {
],
page_size: 5,
display_mode: DisplayMode.SMALL_CARDS,
document_display_fields: [DocumentDisplayField.TITLE],
display_fields: [DisplayField.TITLE],
}
jest.spyOn(savedViewService, 'getCached').mockReturnValue(of(view))
const queryParams = { view: view.id.toString() }
@ -567,9 +567,9 @@ describe('DocumentListComponent', () => {
fixture.detectChanges()
expect(documentListService.activeSavedViewId).toEqual(10)
component.list.documentDisplayFields = [DocumentDisplayField.ASN]
component.list.displayFields = [DisplayField.ASN]
expect(component.savedViewIsModified).toBeTruthy()
component.list.documentDisplayFields = [DocumentDisplayField.TITLE]
component.list.displayFields = [DisplayField.TITLE]
expect(component.savedViewIsModified).toBeFalsy()
component.list.displayMode = DisplayMode.TABLE
expect(component.savedViewIsModified).toBeTruthy()
@ -590,9 +590,7 @@ describe('DocumentListComponent', () => {
expect(documentListService.sortField).toEqual('created')
component.list.displayMode = DisplayMode.TABLE
component.list.documentDisplayFields = DEFAULT_DOCUMENT_DISPLAY_FIELDS.map(
(f) => f.id
)
component.list.displayFields = DEFAULT_DISPLAY_FIELDS.map((f) => f.id)
fixture.detectChanges()
expect(
@ -635,19 +633,19 @@ describe('DocumentListComponent', () => {
it('should support toggling display fields', () => {
fixture.detectChanges()
component.activeDisplayFields = [DocumentDisplayField.ASN]
component.toggleDisplayField(DocumentDisplayField.TITLE)
component.activeDisplayFields = [DisplayField.ASN]
component.toggleDisplayField(DisplayField.TITLE)
expect(component.activeDisplayFields).toEqual([
DocumentDisplayField.ASN,
DocumentDisplayField.TITLE,
DisplayField.ASN,
DisplayField.TITLE,
])
component.toggleDisplayField(DocumentDisplayField.ASN)
expect(component.activeDisplayFields).toEqual([DocumentDisplayField.TITLE])
component.toggleDisplayField(DisplayField.ASN)
expect(component.activeDisplayFields).toEqual([DisplayField.TITLE])
})
it('should get custom field title', () => {
fixture.detectChanges()
settingsService.allDocumentDisplayFields = [
settingsService.allDisplayFields = [
{ id: 'custom_field_1', name: 'Custom Field 1' },
]
expect(component.getDisplayCustomFieldTitle('custom_field_1')).toEqual(

View File

@ -16,11 +16,7 @@ import {
} from 'src/app/utils/filter-rules'
import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type'
import { Document } from 'src/app/data/document'
import {
DisplayMode,
DocumentDisplayField,
SavedView,
} from 'src/app/data/saved-view'
import { DisplayMode, DisplayField, SavedView } from 'src/app/data/saved-view'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import {
SortableDirective,
@ -50,7 +46,7 @@ export class DocumentListComponent
extends ComponentWithPermissions
implements OnInit, OnDestroy
{
DocumentDisplayField = DocumentDisplayField
DisplayField = DisplayField
DisplayMode = DisplayMode
constructor(
@ -73,12 +69,12 @@ export class DocumentListComponent
@ViewChildren(SortableDirective) headers: QueryList<SortableDirective>
get activeDisplayFields(): DocumentDisplayField[] {
return this.list.documentDisplayFields
get activeDisplayFields(): DisplayField[] {
return this.list.displayFields
}
set activeDisplayFields(fields: DocumentDisplayField[]) {
this.list.documentDisplayFields = fields
set activeDisplayFields(fields: DisplayField[]) {
this.list.displayFields = fields
this.updateDisplayCustomFields()
}
activeDisplayCustomFields: Set<string> = new Set()
@ -88,7 +84,7 @@ export class DocumentListComponent
Array.from(this.activeDisplayFields).filter(
(field) =>
typeof field === 'string' &&
field.startsWith(DocumentDisplayField.CUSTOM_FIELD)
field.startsWith(DisplayField.CUSTOM_FIELD)
)
)
}
@ -107,7 +103,7 @@ export class DocumentListComponent
(this.unmodifiedSavedView.page_size &&
this.unmodifiedSavedView.page_size !== this.list.pageSize) ||
this.unmodifiedSavedView.display_mode !== this.list.displayMode ||
this.unmodifiedSavedView.document_display_fields.join(',') !==
this.unmodifiedSavedView.display_fields.join(',') !==
this.activeDisplayFields.join(',') ||
filterRulesDiffer(
this.unmodifiedSavedView.filter_rules,
@ -153,7 +149,7 @@ export class DocumentListComponent
return this.list.selected.size > 0
}
toggleDisplayField(field: DocumentDisplayField) {
toggleDisplayField(field: DisplayField) {
if (this.activeDisplayFields.includes(field)) {
this.activeDisplayFields = this.activeDisplayFields.filter(
(f) => f !== field
@ -165,9 +161,8 @@ export class DocumentListComponent
}
public getDisplayCustomFieldTitle(field: string) {
return this.settingsService.allDocumentDisplayFields.find(
(f) => f.id === field
)?.name
return this.settingsService.allDisplayFields.find((f) => f.id === field)
?.name
}
ngOnInit(): void {
@ -198,8 +193,8 @@ export class DocumentListComponent
if (!view.display_mode) {
view.display_mode = this.list.displayMode
}
if (!view.document_display_fields) {
view.document_display_fields = this.list.documentDisplayFields
if (!view.display_fields) {
view.display_fields = this.list.displayFields
}
this.unmodifiedSavedView = view
this.list.activateSavedViewWithQueryParams(

View File

@ -7,7 +7,7 @@ export enum DisplayMode {
LARGE_CARDS = 'largeCards',
}
export enum DocumentDisplayField {
export enum DisplayField {
TITLE = 'title',
CREATED = 'created',
ADDED = 'added',
@ -22,51 +22,51 @@ export enum DocumentDisplayField {
ASN = 'asn',
}
export const DEFAULT_PAGE_SIZE = 10
export const DEFAULT_DASHBOARD_VIEW_PAGE_SIZE = 10
export const DEFAULT_DOCUMENT_DISPLAY_FIELDS = [
export const DEFAULT_DISPLAY_FIELDS = [
{
id: DocumentDisplayField.TITLE,
id: DisplayField.TITLE,
name: $localize`Title`,
},
{
id: DocumentDisplayField.CREATED,
id: DisplayField.CREATED,
name: $localize`Created`,
},
{
id: DocumentDisplayField.ADDED,
id: DisplayField.ADDED,
name: $localize`Added`,
},
{
id: DocumentDisplayField.TAGS,
id: DisplayField.TAGS,
name: $localize`Tags`,
},
{
id: DocumentDisplayField.CORRESPONDENT,
id: DisplayField.CORRESPONDENT,
name: $localize`Correspondent`,
},
{
id: DocumentDisplayField.DOCUMENT_TYPE,
id: DisplayField.DOCUMENT_TYPE,
name: $localize`Document type`,
},
{
id: DocumentDisplayField.STORAGE_PATH,
id: DisplayField.STORAGE_PATH,
name: $localize`Storage path`,
},
{
id: DocumentDisplayField.NOTES,
id: DisplayField.NOTES,
name: $localize`Notes`,
},
{
id: DocumentDisplayField.OWNER,
id: DisplayField.OWNER,
name: $localize`Owner`,
},
{
id: DocumentDisplayField.SHARED,
id: DisplayField.SHARED,
name: $localize`Shared`,
},
{
id: DocumentDisplayField.ASN,
id: DisplayField.ASN,
name: $localize`ASN`,
},
]
@ -88,5 +88,5 @@ export interface SavedView extends ObjectWithPermissions {
display_mode?: DisplayMode
document_display_fields?: DocumentDisplayField[]
display_fields?: DisplayField[]
}

View File

@ -13,9 +13,9 @@ import {
FILTER_HAS_TAGS_ANY,
} from '../data/filter-rule-type'
import {
DEFAULT_DOCUMENT_DISPLAY_FIELDS,
DEFAULT_DISPLAY_FIELDS,
DisplayMode,
DocumentDisplayField,
DisplayField,
SavedView,
} from '../data/saved-view'
import { FilterRule } from '../data/filter-rule'
@ -569,25 +569,25 @@ describe('DocumentListViewService', () => {
it('should update default view state when display fields change', () => {
const localStorageSpy = jest.spyOn(localStorage, 'setItem')
documentListViewService.documentDisplayFields = [
DocumentDisplayField.ADDED,
DocumentDisplayField.TITLE,
documentListViewService.displayFields = [
DisplayField.ADDED,
DisplayField.TITLE,
]
expect(documentListViewService.documentDisplayFields).toEqual([
DocumentDisplayField.ADDED,
DocumentDisplayField.TITLE,
expect(documentListViewService.displayFields).toEqual([
DisplayField.ADDED,
DisplayField.TITLE,
])
expect(localStorageSpy).toHaveBeenCalled()
// reload triggered
httpTestingController.match(
`${environment.apiBaseUrl}documents/?page=1&page_size=50&ordering=-created&truncate_content=true`
)
documentListViewService.documentDisplayFields = null
documentListViewService.displayFields = null
httpTestingController.match(
`${environment.apiBaseUrl}documents/?page=1&page_size=50&ordering=-created&truncate_content=true`
)
expect(documentListViewService.documentDisplayFields).toEqual(
DEFAULT_DOCUMENT_DISPLAY_FIELDS.map((f) => f.id)
expect(documentListViewService.displayFields).toEqual(
DEFAULT_DISPLAY_FIELDS.map((f) => f.id)
)
})
})

View File

@ -9,9 +9,9 @@ import {
} from '../utils/filter-rules'
import { Document } from '../data/document'
import {
DEFAULT_DOCUMENT_DISPLAY_FIELDS,
DEFAULT_DISPLAY_FIELDS,
DisplayMode,
DocumentDisplayField,
DisplayField,
SavedView,
} from '../data/saved-view'
import { SETTINGS_KEYS } from '../data/ui-settings'
@ -78,7 +78,7 @@ export interface ListViewState {
/**
* The fields to display in the document list.
*/
documentDisplayFields?: DocumentDisplayField[]
displayFields?: DisplayField[]
}
/**
@ -196,8 +196,7 @@ export class DocumentListViewService {
}
this.activeListViewState.displayMode = view.display_mode
this.activeListViewState.pageSize = view.page_size
this.activeListViewState.documentDisplayFields =
view.document_display_fields
this.activeListViewState.displayFields = view.display_fields
this.reduceSelectionToFilter()
@ -411,15 +410,15 @@ export class DocumentListViewService {
)
}
get documentDisplayFields(): DocumentDisplayField[] {
get displayFields(): DisplayField[] {
return (
this.activeListViewState.documentDisplayFields ??
DEFAULT_DOCUMENT_DISPLAY_FIELDS.map((f) => f.id)
this.activeListViewState.displayFields ??
DEFAULT_DISPLAY_FIELDS.map((f) => f.id)
)
}
set documentDisplayFields(fields: DocumentDisplayField[]) {
this.activeListViewState.documentDisplayFields = fields
set displayFields(fields: DisplayField[]) {
this.activeListViewState.displayFields = fields
this.saveDocumentListView()
}
@ -432,7 +431,7 @@ export class DocumentListViewService {
sortField: this.activeListViewState.sortField,
sortReverse: this.activeListViewState.sortReverse,
displayMode: this.activeListViewState.displayMode,
documentDisplayFields: this.activeListViewState.documentDisplayFields,
displayFields: this.activeListViewState.displayFields,
}
localStorage.setItem(
DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG,

View File

@ -13,8 +13,8 @@ import { AppModule } from '../app.module'
import { UiSettings, SETTINGS_KEYS } from '../data/ui-settings'
import { SettingsService } from './settings.service'
import {
DEFAULT_DOCUMENT_DISPLAY_FIELDS,
DocumentDisplayField,
DEFAULT_DISPLAY_FIELDS,
DisplayField,
SavedView,
} from '../data/saved-view'
import { CustomFieldsService } from './rest/custom-fields.service'
@ -352,14 +352,11 @@ describe('SettingsService', () => {
)
settingsService.initializeDisplayFields()
expect(
settingsService.allDocumentDisplayFields.includes(
DEFAULT_DOCUMENT_DISPLAY_FIELDS[0]
)
settingsService.allDisplayFields.includes(DEFAULT_DISPLAY_FIELDS[0])
).toBeTruthy()
expect(
settingsService.allDocumentDisplayFields.find(
(f) =>
f.id === `${DocumentDisplayField.CUSTOM_FIELD}${customFields[0].id}`
settingsService.allDisplayFields.find(
(f) => f.id === `${DisplayField.CUSTOM_FIELD}${customFields[0].id}`
).name
).toEqual(customFields[0].name)
})

View File

@ -26,8 +26,8 @@ import {
} from './permissions.service'
import { ToastService } from './toast.service'
import {
DEFAULT_DOCUMENT_DISPLAY_FIELDS,
DocumentDisplayField,
DEFAULT_DISPLAY_FIELDS,
DisplayField,
SavedView,
} from '../data/saved-view'
import { CustomFieldsService } from './rest/custom-fields.service'
@ -266,7 +266,7 @@ export class SettingsService {
public globalDropzoneActive: boolean = false
public organizingSidebarSavedViews: boolean = false
public allDocumentDisplayFields: any
public allDisplayFields: any
constructor(
rendererFactory: RendererFactory2,
@ -307,7 +307,7 @@ export class SettingsService {
}
public initializeDisplayFields() {
this.allDocumentDisplayFields = DEFAULT_DOCUMENT_DISPLAY_FIELDS
this.allDisplayFields = DEFAULT_DISPLAY_FIELDS
if (
this.permissionsService.currentUserCan(
@ -316,10 +316,10 @@ export class SettingsService {
)
) {
this.customFieldsService.listAll().subscribe((r) => {
this.allDocumentDisplayFields = DEFAULT_DOCUMENT_DISPLAY_FIELDS.concat(
this.allDisplayFields = DEFAULT_DISPLAY_FIELDS.concat(
r.results.map((field) => {
return {
id: `${DocumentDisplayField.CUSTOM_FIELD}${field.id}` as any,
id: `${DisplayField.CUSTOM_FIELD}${field.id}` as any,
name: field.name,
}
})

View File

@ -40,7 +40,7 @@ class Migration(migrations.Migration):
),
migrations.AddField(
model_name="savedview",
name="document_display_fields",
name="display_fields",
field=multiselectfield.db.fields.MultiSelectField(
choices=[
("title", "Title"),

View File

@ -552,12 +552,12 @@ class DynamicMultiSelectField(MultiSelectField):
class SavedView(ModelWithOwner):
class ViewDisplayMode(models.TextChoices):
class DisplayMode(models.TextChoices):
TABLE = ("table", _("Table"))
SMALL_CARDS = ("smallCards", _("Small Cards"))
LARGE_CARDS = ("largeCards", _("Large Cards"))
class DocumentDisplayFields(models.TextChoices):
class DisplayFields(models.TextChoices):
TITLE = ("title", _("Title"))
CREATED = ("created", _("Created"))
ADDED = ("added", _("Added"))
@ -566,7 +566,7 @@ class SavedView(ModelWithOwner):
CORRESPONDENT = ("correspondent", _("Correspondent"))
STORAGE_PATH = ("storagepath", _("Storage Path"))
class DynamicDocumentDisplayFields:
class DynamicDisplayFields:
CUSTOM_FIELD = ("custom_field_%d", CustomField)
name = models.CharField(_("name"), max_length=128)
@ -596,17 +596,17 @@ class SavedView(ModelWithOwner):
display_mode = models.CharField(
max_length=128,
verbose_name=_("View display mode"),
choices=ViewDisplayMode.choices,
choices=DisplayMode.choices,
null=True,
blank=True,
)
document_display_fields = DynamicMultiSelectField(
display_fields = DynamicMultiSelectField(
max_length=128,
verbose_name=_("Document display fields"),
choices=DocumentDisplayFields.choices,
dyanmic_choices=[DynamicDocumentDisplayFields.CUSTOM_FIELD],
default=f"{DocumentDisplayFields.CREATED},{DocumentDisplayFields.TITLE},{DocumentDisplayFields.TAGS},{DocumentDisplayFields.CORRESPONDENT}",
choices=DisplayFields.choices,
dyanmic_choices=[DynamicDisplayFields.CUSTOM_FIELD],
default=f"{DisplayFields.CREATED},{DisplayFields.TITLE},{DisplayFields.TAGS},{DisplayFields.CORRESPONDENT}",
)
class Meta:

View File

@ -839,8 +839,8 @@ class DynamicOrderedMultipleChoiceField(fields.MultipleChoiceField):
class SavedViewSerializer(OwnedObjectSerializer):
filter_rules = SavedViewFilterRuleSerializer(many=True)
document_display_fields = DynamicOrderedMultipleChoiceField(
choices=SavedView.DocumentDisplayFields.choices,
display_fields = DynamicOrderedMultipleChoiceField(
choices=SavedView.DisplayFields.choices,
dyanmic_choices=[("custom_field_%d", CustomField)],
required=False,
)
@ -857,7 +857,7 @@ class SavedViewSerializer(OwnedObjectSerializer):
"filter_rules",
"page_size",
"display_mode",
"document_display_fields",
"display_fields",
"owner",
"permissions",
"user_can_change",

View File

@ -1614,7 +1614,7 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
status.HTTP_404_NOT_FOUND,
)
def test_savedview_create_update_patch(self):
def test_saved_view_create_update_patch(self):
User.objects.create_user("user1")
view = {
@ -1661,7 +1661,7 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
v1 = SavedView.objects.get(id=v1.id)
self.assertEqual(v1.filter_rules.count(), 0)
def test_saved_view_dashboard_view_options(self):
def test_saved_view_display_options(self):
User.objects.create_user("user1")
view = {
@ -1671,10 +1671,10 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
"sort_field": "created2",
"filter_rules": [{"rule_type": 4, "value": "test"}],
"page_size": 20,
"display_mode": SavedView.ViewDisplayMode.SMALL_CARDS,
"document_display_fields": [
SavedView.DocumentDisplayFields.TITLE,
SavedView.DocumentDisplayFields.CREATED,
"display_mode": SavedView.DisplayMode.SMALL_CARDS,
"display_fields": [
SavedView.DisplayFields.TITLE,
SavedView.DisplayFields.CREATED,
],
}
@ -1685,23 +1685,23 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
self.assertEqual(v1.page_size, 20)
self.assertEqual(
v1.display_mode,
SavedView.ViewDisplayMode.SMALL_CARDS,
SavedView.DisplayMode.SMALL_CARDS,
)
self.assertEqual(
v1.document_display_fields,
v1.display_fields,
[
SavedView.DocumentDisplayFields.TITLE,
SavedView.DocumentDisplayFields.CREATED,
SavedView.DisplayFields.TITLE,
SavedView.DisplayFields.CREATED,
],
)
response = self.client.patch(
f"/api/saved_views/{v1.id}/",
{
"document_display_fields": [
SavedView.DocumentDisplayFields.TAGS,
SavedView.DocumentDisplayFields.TITLE,
SavedView.DocumentDisplayFields.CREATED,
"display_fields": [
SavedView.DisplayFields.TAGS,
SavedView.DisplayFields.TITLE,
SavedView.DisplayFields.CREATED,
],
},
format="json",
@ -1710,15 +1710,15 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
v1.refresh_from_db()
self.assertEqual(
v1.document_display_fields,
v1.display_fields,
[
SavedView.DocumentDisplayFields.TAGS,
SavedView.DocumentDisplayFields.TITLE,
SavedView.DocumentDisplayFields.CREATED,
SavedView.DisplayFields.TAGS,
SavedView.DisplayFields.TITLE,
SavedView.DisplayFields.CREATED,
],
)
def test_saved_view_dashboard_view_customfields(self):
def test_saved_view_display_customfields(self):
view = {
"name": "test",
"show_on_dashboard": True,
@ -1726,10 +1726,10 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
"sort_field": "created2",
"filter_rules": [{"rule_type": 4, "value": "test"}],
"page_size": 20,
"display_mode": SavedView.ViewDisplayMode.SMALL_CARDS,
"document_display_fields": [
SavedView.DocumentDisplayFields.TITLE,
SavedView.DocumentDisplayFields.CREATED,
"display_mode": SavedView.DisplayMode.SMALL_CARDS,
"display_fields": [
SavedView.DisplayFields.TITLE,
SavedView.DisplayFields.CREATED,
],
}
@ -1746,11 +1746,10 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
response = self.client.patch(
f"/api/saved_views/{v1.id}/",
{
"document_display_fields": [
SavedView.DocumentDisplayFields.TITLE,
SavedView.DocumentDisplayFields.CREATED,
SavedView.DynamicDocumentDisplayFields.CUSTOM_FIELD[0]
% custom_field.id,
"display_fields": [
SavedView.DisplayFields.TITLE,
SavedView.DisplayFields.CREATED,
SavedView.DynamicDisplayFields.CUSTOM_FIELD[0] % custom_field.id,
],
},
format="json",
@ -1759,12 +1758,11 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
v1.refresh_from_db()
self.assertEqual(
v1.document_display_fields,
v1.display_fields,
[
str(SavedView.DocumentDisplayFields.TITLE),
str(SavedView.DocumentDisplayFields.CREATED),
SavedView.DynamicDocumentDisplayFields.CUSTOM_FIELD[0]
% custom_field.id,
str(SavedView.DisplayFields.TITLE),
str(SavedView.DisplayFields.CREATED),
SavedView.DynamicDisplayFields.CUSTOM_FIELD[0] % custom_field.id,
],
)
@ -1772,10 +1770,10 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
response = self.client.patch(
f"/api/saved_views/{v1.id}/",
{
"document_display_fields": [
SavedView.DocumentDisplayFields.TITLE,
SavedView.DocumentDisplayFields.CREATED,
SavedView.DynamicDocumentDisplayFields.CUSTOM_FIELD[0] % 99,
"display_fields": [
SavedView.DisplayFields.TITLE,
SavedView.DisplayFields.CREATED,
SavedView.DynamicDisplayFields.CUSTOM_FIELD[0] % 99,
],
},
format="json",

File diff suppressed because it is too large Load Diff