mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
86 lines
2.6 KiB
TypeScript
86 lines
2.6 KiB
TypeScript
import { Component, forwardRef, Input } from '@angular/core'
|
|
import {
|
|
FormsModule,
|
|
NG_VALUE_ACCESSOR,
|
|
ReactiveFormsModule,
|
|
} from '@angular/forms'
|
|
import { RouterModule } from '@angular/router'
|
|
import { NgSelectModule } from '@ng-select/ng-select'
|
|
import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
|
|
import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
|
|
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
|
|
import { AbstractInputComponent } from '../abstract-input'
|
|
import { CheckComponent } from '../check/check.component'
|
|
import { DateComponent } from '../date/date.component'
|
|
import { DocumentLinkComponent } from '../document-link/document-link.component'
|
|
import { MonetaryComponent } from '../monetary/monetary.component'
|
|
import { NumberComponent } from '../number/number.component'
|
|
import { SelectComponent } from '../select/select.component'
|
|
import { TextComponent } from '../text/text.component'
|
|
import { UrlComponent } from '../url/url.component'
|
|
|
|
@Component({
|
|
providers: [
|
|
{
|
|
provide: NG_VALUE_ACCESSOR,
|
|
useExisting: forwardRef(() => CustomFieldsValuesComponent),
|
|
multi: true,
|
|
},
|
|
],
|
|
selector: 'pngx-input-custom-fields-values',
|
|
templateUrl: './custom-fields-values.component.html',
|
|
styleUrl: './custom-fields-values.component.scss',
|
|
imports: [
|
|
TextComponent,
|
|
DateComponent,
|
|
NumberComponent,
|
|
DocumentLinkComponent,
|
|
UrlComponent,
|
|
SelectComponent,
|
|
MonetaryComponent,
|
|
CheckComponent,
|
|
NgSelectModule,
|
|
FormsModule,
|
|
ReactiveFormsModule,
|
|
RouterModule,
|
|
NgxBootstrapIconsModule,
|
|
],
|
|
})
|
|
export class CustomFieldsValuesComponent extends AbstractInputComponent<Object> {
|
|
public CustomFieldDataType = CustomFieldDataType
|
|
|
|
constructor(customFieldsService: CustomFieldsService) {
|
|
super()
|
|
customFieldsService.listAll().subscribe((items) => {
|
|
this.fields = items.results
|
|
})
|
|
}
|
|
|
|
private fields: CustomField[]
|
|
|
|
private _selectedFields: number[]
|
|
|
|
@Input()
|
|
set selectedFields(newFields: number[]) {
|
|
this._selectedFields = newFields
|
|
// map the selected fields to an object with field_id as key and value as value
|
|
this.value = newFields.reduce((acc, fieldId) => {
|
|
acc[fieldId] = this.value?.[fieldId] || null
|
|
return acc
|
|
}, {})
|
|
this.onChange(this.value)
|
|
}
|
|
|
|
get selectedFields(): number[] {
|
|
return this._selectedFields
|
|
}
|
|
|
|
public getCustomField(id: number): CustomField {
|
|
return this.fields.find((field) => field.id === id)
|
|
}
|
|
|
|
public removeField(fieldId: number): void {
|
|
this.selectedFields = this.selectedFields.filter((id) => id !== fieldId)
|
|
}
|
|
}
|