mode sorting to common-lib

This commit is contained in:
Dan Percic 2021-08-05 21:26:42 +03:00
parent 1c9a99e949
commit c87bcb4db3
20 changed files with 25 additions and 108 deletions

View File

@ -3,13 +3,11 @@ import { FileDownloadService } from '@upload-download/services/file-download.ser
import { DownloadStatusWrapper } from '@upload-download/model/download-status.wrapper';
import { DownloadControllerService } from '@redaction/red-ui-http';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { FilterService } from '@iqser/common-ui';
import { CircleButtonTypes, FilterService, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { SortingService } from '@services/sorting.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { TableColConfig } from '@shared/components/table-col-name/table-col-name.component';
import { CircleButtonTypes } from '@iqser/common-ui';
@Component({
selector: 'redaction-downloads-list-screen',

View File

@ -1,13 +1,11 @@
import { Component, EventEmitter, Injector, Input, OnChanges, Output, SimpleChanges } from '@angular/core';
import { Field } from '../file-attributes-csv-import-dialog.component';
import { FileAttributeConfig } from '@redaction/red-ui-http';
import { FilterService } from '@iqser/common-ui';
import { CircleButtonTypes, FilterService, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { SortingService } from '@services/sorting.service';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { fileAttributeTypesTranslations } from '../../../translations/file-attribute-types-translations';
import { CircleButtonTypes } from '@iqser/common-ui';
@Component({
selector: 'redaction-active-fields-listing',

View File

@ -8,10 +8,9 @@ import { Observable } from 'rxjs';
import { map, startWith } from 'rxjs/operators';
import { Toaster } from '@services/toaster.service';
import { TranslateService } from '@ngx-translate/core';
import { FilterService } from '@iqser/common-ui';
import { FilterService, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { SortingService } from '@services/sorting.service';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';

View File

@ -5,14 +5,12 @@ import { ActivatedRoute } from '@angular/router';
import { PermissionsService } from '@services/permissions.service';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { LoadingService } from '@services/loading.service';
import { FilterService } from '@iqser/common-ui';
import { CircleButtonTypes, FilterService, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { DefaultColorType } from '@models/default-color-key.model';
import { SortingService } from '@services/sorting.service';
import { defaultColorsTranslations } from '../../translations/default-colors-translations';
import { CircleButtonTypes } from '@iqser/common-ui';
@Component({
templateUrl: './default-colors-screen.component.html',

View File

@ -9,13 +9,11 @@ import { ActivatedRoute } from '@angular/router';
import { TypeValueWrapper } from '@models/file/type-value.wrapper';
import { TranslateService } from '@ngx-translate/core';
import { LoadingService } from '@services/loading.service';
import { FilterService } from '@iqser/common-ui';
import { CircleButtonTypes, FilterService, IconButtonTypes, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { SortingService } from '@services/sorting.service';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { CircleButtonTypes, IconButtonTypes } from '@iqser/common-ui';
const toChartConfig = (dict: TypeValueWrapper): DoughnutChartConfig => ({
value: dict.entries?.length ?? 0,

View File

@ -5,14 +5,12 @@ import { AppStateService } from '@state/app-state.service';
import { ActivatedRoute } from '@angular/router';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { LoadingService } from '@services/loading.service';
import { SortingService } from '@services/sorting.service';
import { FilterService } from '@iqser/common-ui';
import { CircleButtonTypes, FilterService, IconButtonTypes, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { PermissionsService } from '@services/permissions.service';
import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service';
import { dossierAttributeTypesTranslations } from '../../translations/dossier-attribute-types-translations';
import { CircleButtonTypes, IconButtonTypes } from '@iqser/common-ui';
@Component({
templateUrl: './dossier-attributes-listing-screen.component.html',

View File

@ -6,12 +6,10 @@ import { AdminDialogService } from '../../services/admin-dialog.service';
import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model.wrapper';
import { LoadingService } from '@services/loading.service';
import { DossierTemplateControllerService } from '@redaction/red-ui-http';
import { FilterService } from '@iqser/common-ui';
import { CircleButtonTypes, FilterService, IconButtonTypes, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { SortingService } from '@services/sorting.service';
import { CircleButtonTypes, IconButtonTypes } from '@iqser/common-ui';
@Component({
templateUrl: './dossier-templates-listing-screen.component.html',

View File

@ -5,13 +5,11 @@ import { AppStateService } from '@state/app-state.service';
import { ActivatedRoute } from '@angular/router';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { LoadingService } from '@services/loading.service';
import { FilterService } from '@iqser/common-ui';
import { CircleButtonTypes, FilterService, IconButtonTypes, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { SortingService } from '@services/sorting.service';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { fileAttributeTypesTranslations } from '../../translations/file-attribute-types-translations';
import { CircleButtonTypes, IconButtonTypes } from '@iqser/common-ui';
@Component({
templateUrl: './file-attributes-listing-screen.component.html',

View File

@ -4,15 +4,13 @@ import { Dossier } from '@redaction/red-ui-http';
import { LoadingService } from '@services/loading.service';
import { AppConfigKey, AppConfigService } from '@app-config/app-config.service';
import * as moment from 'moment';
import { FilterService } from '@iqser/common-ui';
import { CircleButtonTypes, FilterService, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { SortingService } from '@services/sorting.service';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { DossiersService } from '../../../dossier/services/dossiers.service';
import { CircleButtonTypes } from '@iqser/common-ui';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { ConfirmationDialogInput, TitleColors } from '../../../shared/dialogs/confirmation-dialog/confirmation-dialog.component';
import { ConfirmationDialogInput, TitleColors } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
const HOURS_IN_A_DAY = 24;

View File

@ -8,15 +8,13 @@ import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/si
import { TranslateChartService } from '@services/translate-chart.service';
import { LoadingService } from '@services/loading.service';
import { InitialsAvatarComponent } from '@shared/components/initials-avatar/initials-avatar.component';
import { FilterService } from '@iqser/common-ui';
import { CircleButtonTypes, FilterService, IconButtonTypes, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { SortingService } from '@services/sorting.service';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { rolesTranslations } from '../../../../translations/roles-translations';
import { CircleButtonTypes, IconButtonTypes } from '@iqser/common-ui';
@Component({
templateUrl: './user-listing-screen.component.html',

View File

@ -16,11 +16,10 @@ import { DossiersDialogService } from '../../services/dossiers-dialog.service';
import { OnAttach, OnDetach } from '@utils/custom-route-reuse.strategy';
import { UserPreferenceService } from '@services/user-preference.service';
import { ButtonConfig } from '@shared/components/page-header/models/button-config.model';
import { FilterService, NestedFilter } from '@iqser/common-ui';
import { FilterService, NestedFilter, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { SortingService } from '@services/sorting.service';
import { TableColConfig } from '@shared/components/table-col-name/table-col-name.component';
import { workloadTranslations } from '../../translations/workload-translations';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';

View File

@ -21,10 +21,9 @@ import { DossierWrapper } from '@state/model/dossier.wrapper';
import { OnAttach, OnDetach } from '@utils/custom-route-reuse.strategy';
import { AppConfigKey, AppConfigService } from '@app-config/app-config.service';
import { ActionConfig } from '@shared/components/page-header/models/action-config.model';
import { NestedFilter, FilterService, keyChecker } from '@iqser/common-ui';
import { CircleButtonTypes, FilterService, keyChecker, NestedFilter, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { SortingService } from '@services/sorting.service';
import { BaseListingComponent } from '@shared/base/base-listing.component';
import { LoadingService } from '@services/loading.service';
import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service';
@ -33,7 +32,6 @@ import { UserPreferenceService } from '@services/user-preference.service';
import { workloadTranslations } from '../../translations/workload-translations';
import { fileStatusTranslations } from '../../translations/file-status-translations';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { CircleButtonTypes } from '@iqser/common-ui';
import { TableColConfig } from '@shared/components/table-col-name/table-col-name.component';
import { annotationFilterChecker } from '@shared/components/filters/popup-filter/utils/filter-utils';

View File

@ -5,17 +5,15 @@ import { BehaviorSubject, Observable } from 'rxjs';
import { debounceTime, map, skip, switchMap, tap } from 'rxjs/operators';
import { ActivatedRoute, Router } from '@angular/router';
import { TableColConfig } from '@shared/components/table-col-name/table-col-name.component';
import { FilterService } from '@iqser/common-ui';
import { FilterService, keyChecker, SortingService } from '@iqser/common-ui';
import { SearchService } from '@shared/services/search.service';
import { ScreenStateService } from '@shared/services/screen-state.service';
import { SortingService } from '@services/sorting.service';
import { AppStateService } from '@state/app-state.service';
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
import { LoadingService } from '@services/loading.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { fileStatusTranslations } from '../../translations/file-status-translations';
import { SearchPositions } from '@shared/components/page-header/models/search-positions.type';
import { keyChecker } from '@iqser/common-ui';
import { DossierWrapper } from '@state/model/dossier.wrapper';
import { TranslateService } from '@ngx-translate/core';

View File

@ -1,13 +1,11 @@
import { Component, Injector, OnDestroy, ViewChild } from '@angular/core';
import { SortingOrders, SortingService } from '@services/sorting.service';
import { AutoUnsubscribeComponent, FilterService, SortingOrders, SortingService } from '@iqser/common-ui';
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { SearchService } from '../services/search.service';
import { ScreenStateService } from '../services/screen-state.service';
import { combineLatest, Observable } from 'rxjs';
import { AutoUnsubscribeComponent } from '@iqser/common-ui';
import { distinctUntilChanged, map, switchMap } from 'rxjs/operators';
import { PermissionsService } from '@services/permissions.service';
import { FilterService } from '@iqser/common-ui';
@Component({ template: '' })
export abstract class BaseListingComponent<T> extends AutoUnsubscribeComponent implements OnDestroy {

View File

@ -1,5 +1,5 @@
import { Component, Input, Optional } from '@angular/core';
import { SortingService } from '@services/sorting.service';
import { SortingService } from '@iqser/common-ui';
export interface TableColConfig {
readonly column?: string;

View File

@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { SortingService } from '@services/sorting.service';
import { SortingOrder, SortingService } from '@iqser/common-ui';
@Pipe({ name: 'sortBy' })
export class SortByPipe implements PipeTransform {
constructor(private readonly _sortingService: SortingService) {}
transform<T>(value: T[], order = '', column: string = ''): T[] {
transform<T>(value: T[], order: SortingOrder, column: string): T[] {
return this._sortingService.sort(value, order, column);
}
}

View File

@ -1,63 +0,0 @@
import { Injectable } from '@angular/core';
import { orderBy } from 'lodash';
import { BehaviorSubject } from 'rxjs';
export const SortingOrders = {
asc: 'asc',
desc: 'desc'
} as const;
export type SortingOrder = keyof typeof SortingOrders;
export interface SortingOption {
readonly order: SortingOrder;
readonly column: string;
}
@Injectable({
providedIn: 'root'
})
export class SortingService {
private readonly _sortingOption$ = new BehaviorSubject<SortingOption>(null);
readonly sortingOption$ = this._sortingOption$.asObservable();
get sortingOption(): SortingOption {
return this._sortingOption$.getValue();
}
setSortingOption(value: SortingOption): void {
this._sortingOption$.next(value);
}
sort<T>(values: T[], order?: string, column?: string): T[] {
if (!values || !order) {
return values;
} // no array
if (!column) {
if (order === SortingOrders.asc) {
return values.sort();
} else {
return values.sort().reverse();
}
} // sort 1d array
if (values.length <= 1) {
return values;
} // array with only one item
return orderBy(values, [column], [order]);
}
defaultSort<T>(values: T[]) {
return this.sort(values, this.sortingOption?.order, this.sortingOption?.column);
}
toggleSort(column: string) {
if (this.sortingOption.column === column) {
this._sortingOption$.next({
column,
order: this.sortingOption.order === SortingOrders.asc ? SortingOrders.desc : SortingOrders.asc
});
} else {
this._sortingOption$.next({ column, order: SortingOrders.asc });
}
}
}

@ -1 +1 @@
Subproject commit 3f9915434d96fc93a41b7b448826e1ba6ea85839
Subproject commit 98ae1d5698a838ed1e3febf0b30dfa81f44b2c16

View File

@ -92,6 +92,7 @@
"@nrwl/workspace": "12.3.6",
"@types/cypress": "^1.1.3",
"@types/jest": "26.0.23",
"@types/lodash": "^4.14.172",
"@types/node": "15.12.2",
"@typescript-eslint/eslint-plugin": "4.26.1",
"@typescript-eslint/parser": "4.26.1",

View File

@ -3178,6 +3178,11 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
"@types/lodash@^4.14.172":
version "4.14.172"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.172.tgz#aad774c28e7bfd7a67de25408e03ee5a8c3d028a"
integrity sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==
"@types/minimatch@*", "@types/minimatch@^3.0.3":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"