diff options
Diffstat (limited to 'client/src/app/shared/buttons/action-dropdown.component.ts')
-rw-r--r-- | client/src/app/shared/buttons/action-dropdown.component.ts | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/client/src/app/shared/buttons/action-dropdown.component.ts b/client/src/app/shared/buttons/action-dropdown.component.ts index 275e2b51e..f5345831b 100644 --- a/client/src/app/shared/buttons/action-dropdown.component.ts +++ b/client/src/app/shared/buttons/action-dropdown.component.ts | |||
@@ -1,12 +1,18 @@ | |||
1 | import { Component, Input } from '@angular/core' | 1 | import { Component, Input } from '@angular/core' |
2 | import { GlobalIconName } from '@app/shared/images/global-icon.component' | ||
2 | 3 | ||
3 | export type DropdownAction<T> = { | 4 | export type DropdownAction<T> = { |
4 | label?: string | 5 | label?: string |
6 | iconName?: GlobalIconName | ||
5 | handler?: (a: T) => any | 7 | handler?: (a: T) => any |
6 | linkBuilder?: (a: T) => (string | number)[] | 8 | linkBuilder?: (a: T) => (string | number)[] |
7 | isDisplayed?: (a: T) => boolean | 9 | isDisplayed?: (a: T) => boolean |
8 | } | 10 | } |
9 | 11 | ||
12 | export type DropdownButtonSize = 'normal' | 'small' | ||
13 | export type DropdownTheme = 'orange' | 'grey' | ||
14 | export type DropdownDirection = 'horizontal' | 'vertical' | ||
15 | |||
10 | @Component({ | 16 | @Component({ |
11 | selector: 'my-action-dropdown', | 17 | selector: 'my-action-dropdown', |
12 | styleUrls: [ './action-dropdown.component.scss' ], | 18 | styleUrls: [ './action-dropdown.component.scss' ], |
@@ -16,14 +22,29 @@ export type DropdownAction<T> = { | |||
16 | export class ActionDropdownComponent<T> { | 22 | export class ActionDropdownComponent<T> { |
17 | @Input() actions: DropdownAction<T>[] | DropdownAction<T>[][] = [] | 23 | @Input() actions: DropdownAction<T>[] | DropdownAction<T>[][] = [] |
18 | @Input() entry: T | 24 | @Input() entry: T |
25 | |||
19 | @Input() placement = 'bottom-left' | 26 | @Input() placement = 'bottom-left' |
20 | @Input() buttonSize: 'normal' | 'small' = 'normal' | 27 | |
28 | @Input() buttonSize: DropdownButtonSize = 'normal' | ||
29 | @Input() buttonDirection: DropdownDirection = 'horizontal' | ||
30 | @Input() buttonStyled = true | ||
31 | |||
21 | @Input() label: string | 32 | @Input() label: string |
22 | @Input() theme: 'orange' | 'grey' = 'grey' | 33 | @Input() theme: DropdownTheme = 'grey' |
23 | 34 | ||
24 | getActions () { | 35 | getActions () { |
25 | if (this.actions.length !== 0 && Array.isArray(this.actions[0])) return this.actions | 36 | if (this.actions.length !== 0 && Array.isArray(this.actions[0])) return this.actions |
26 | 37 | ||
27 | return [ this.actions ] | 38 | return [ this.actions ] |
28 | } | 39 | } |
40 | |||
41 | areActionsDisplayed (actions: DropdownAction<T>[], entry: T) { | ||
42 | return actions.some(a => a.isDisplayed === undefined || a.isDisplayed(entry)) | ||
43 | } | ||
44 | |||
45 | handleClick (event: Event, action: DropdownAction<T>) { | ||
46 | event.preventDefault() | ||
47 | |||
48 | // action.handler(entry) | ||
49 | } | ||
29 | } | 50 | } |