diff --git a/src/assets/icons/lanes.svg b/src/assets/icons/lanes.svg
new file mode 100644
index 0000000..d9aa808
--- /dev/null
+++ b/src/assets/icons/lanes.svg
@@ -0,0 +1,19 @@
+
+
+
diff --git a/src/assets/icons/list.svg b/src/assets/icons/list.svg
new file mode 100644
index 0000000..a211317
--- /dev/null
+++ b/src/assets/icons/list.svg
@@ -0,0 +1,20 @@
+
+
+
diff --git a/src/assets/styles/_mixins.scss b/src/assets/styles/_mixins.scss
index 7236bd7..a49c0b9 100644
--- a/src/assets/styles/_mixins.scss
+++ b/src/assets/styles/_mixins.scss
@@ -15,9 +15,11 @@
@mixin no-scroll-bar {
scrollbar-width: none; /* Firefox */
+ scrollbar-height: none; /* Firefox */
-ms-overflow-style: none; /* IE 10+ */
&::-webkit-scrollbar {
width: 0;
+ height: 0;
background: transparent; /* Chrome/Safari/Webkit */
}
}
diff --git a/src/assets/styles/_texts.scss b/src/assets/styles/_texts.scss
index 82cf526..61e0cbf 100644
--- a/src/assets/styles/_texts.scss
+++ b/src/assets/styles/_texts.scss
@@ -115,13 +115,6 @@ pre {
@include line-clamp(2);
}
-.text-overflow {
- display: block !important;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
.no-wrap {
white-space: nowrap;
}
diff --git a/src/lib/icons/icons.module.ts b/src/lib/icons/icons.module.ts
index 8c39496..b5e40e8 100644
--- a/src/lib/icons/icons.module.ts
+++ b/src/lib/icons/icons.module.ts
@@ -18,6 +18,8 @@ export class IqserIconsModule {
'edit',
'failure',
'help-outline',
+ 'lanes',
+ 'list',
'refresh',
'search',
'sort-asc',
diff --git a/src/lib/listing/index.ts b/src/lib/listing/index.ts
index 29623f2..5fa0f36 100644
--- a/src/lib/listing/index.ts
+++ b/src/lib/listing/index.ts
@@ -6,6 +6,8 @@ export * from './table/table.component';
export * from './table-column-name/table-column-name.component';
export * from './table-header/table-header.component';
+export * from './workflow/workflow.component';
+
export * from './sync-width.directive';
export * from './listing.module';
diff --git a/src/lib/listing/listing-component.directive.ts b/src/lib/listing/listing-component.directive.ts
index bc20fae..b3c67e5 100644
--- a/src/lib/listing/listing-component.directive.ts
+++ b/src/lib/listing/listing-component.directive.ts
@@ -1,12 +1,12 @@
import { Directive, Injector, OnDestroy } from '@angular/core';
-import { combineLatest, Observable } from 'rxjs';
+import { BehaviorSubject, combineLatest, Observable } from 'rxjs';
import { distinctUntilChanged, map, switchMap } from 'rxjs/operators';
import { FilterService } from '../filtering';
import { SortingOrders, SortingService } from '../sorting';
import { AutoUnsubscribe, Bind, KeysOf } from '../utils';
import { SearchService } from '../search';
import { EntitiesService } from './services';
-import { Listable, TableColumnConfig } from './models';
+import { Listable, ListingMode, ListingModes, TableColumnConfig } from './models';
export const DefaultListingServices = [FilterService, SearchService, EntitiesService, SortingService] as const;
@@ -20,6 +20,7 @@ export abstract class ListingComponent extends AutoUnsubscri
readonly noMatch$ = this._noMatch$;
readonly noContent$ = this._noContent$;
readonly sortedDisplayedEntities$ = this._sortedDisplayedEntities$;
+ readonly listingMode$: Observable;
readonly routerLinkFn?: (entity: T) => string | string[];
// TODO: These should be somewhere in table listing, not generic listing
@@ -32,9 +33,11 @@ export abstract class ListingComponent extends AutoUnsubscri
* @protected
*/
protected abstract readonly _primaryKey: KeysOf;
+ private readonly _listingMode$ = new BehaviorSubject(ListingModes.table);
protected constructor(protected readonly _injector: Injector) {
super();
+ this.listingMode$ = this._listingMode$.asObservable();
setTimeout(() => this.setInitialConfig());
}
@@ -42,6 +45,10 @@ export abstract class ListingComponent extends AutoUnsubscri
return this.entitiesService.all;
}
+ set listingMode(listingMode: ListingMode) {
+ this._listingMode$.next(listingMode);
+ }
+
private get _sortedDisplayedEntities$(): Observable {
const sort = (entities: T[]) => this.sortingService.defaultSort(entities);
const sortedEntities = () => this.entitiesService.displayed$.pipe(map(sort));
diff --git a/src/lib/listing/listing.module.ts b/src/lib/listing/listing.module.ts
index 6f4172b..3b347db 100644
--- a/src/lib/listing/listing.module.ts
+++ b/src/lib/listing/listing.module.ts
@@ -14,10 +14,13 @@ import { IqserIconsModule } from '../icons';
import { IqserScrollbarModule } from '../scrollbar';
import { RouterModule } from '@angular/router';
import { IqserEmptyStatesModule } from '../empty-states';
+import { WorkflowComponent } from './workflow/workflow.component';
+import { DragDropModule } from '@angular/cdk/drag-drop';
const matModules = [MatTooltipModule];
-const components = [TableHeaderComponent, TableComponent, TableColumnNameComponent, ScrollButtonComponent];
+const components = [TableHeaderComponent, TableComponent, WorkflowComponent, TableColumnNameComponent, ScrollButtonComponent];
const modules = [
+ DragDropModule,
TranslateModule,
IqserFiltersModule,
IqserInputsModule,
diff --git a/src/lib/listing/models/index.ts b/src/lib/listing/models/index.ts
index 24d6869..1096e80 100644
--- a/src/lib/listing/models/index.ts
+++ b/src/lib/listing/models/index.ts
@@ -1,2 +1,3 @@
export * from './listable';
export * from './table-column-config.model';
+export * from './listing-modes';
diff --git a/src/lib/listing/models/listing-modes.ts b/src/lib/listing/models/listing-modes.ts
new file mode 100644
index 0000000..ed2cf73
--- /dev/null
+++ b/src/lib/listing/models/listing-modes.ts
@@ -0,0 +1,6 @@
+export const ListingModes = {
+ table: 'table',
+ workflow: 'workflow'
+} as const;
+
+export type ListingMode = keyof typeof ListingModes;
diff --git a/src/lib/listing/table-header/table-header.component.html b/src/lib/listing/table-header/table-header.component.html
index 5660a7c..8d699f2 100644
--- a/src/lib/listing/table-header/table-header.component.html
+++ b/src/lib/listing/table-header/table-header.component.html
@@ -19,6 +19,7 @@