From 49aeba46267fe2d35e29b4598d08081874b77232 Mon Sep 17 00:00:00 2001
From: Daniel Leroux <daniel.leroux@siemens.com>
Date: Tue, 6 Dec 2022 15:27:48 +0100
Subject: [PATCH] feat(angular/dropdown): add trigger directive

---
 .../src/preview-examples/dropdown.ts          |  4 ++--
 .../angular/src/dropdown/trigger.directive.ts | 22 +++++++++++++++++++
 packages/angular/src/index.ts                 |  2 +-
 packages/angular/src/module.ts                | 12 +++++-----
 4 files changed, 32 insertions(+), 8 deletions(-)
 create mode 100644 packages/angular/src/dropdown/trigger.directive.ts

diff --git a/packages/angular-test-app/src/preview-examples/dropdown.ts b/packages/angular-test-app/src/preview-examples/dropdown.ts
index 8369f9cd8d9..80e51cc63bd 100644
--- a/packages/angular-test-app/src/preview-examples/dropdown.ts
+++ b/packages/angular-test-app/src/preview-examples/dropdown.ts
@@ -12,8 +12,8 @@ import { Component } from '@angular/core';
 @Component({
   selector: 'app-dropdown',
   template: `
-    <ix-button id="triggerId">Open</ix-button>
-    <ix-dropdown trigger="triggerId">
+    <ix-button #trigger>Open</ix-button>
+    <ix-dropdown [ixDropdownTrigger]="trigger">
       <ix-dropdown-item label="Item 1"></ix-dropdown-item>
       <ix-dropdown-item label="Item 2"></ix-dropdown-item>
       <ix-dropdown-item label="Item 3"></ix-dropdown-item>
diff --git a/packages/angular/src/dropdown/trigger.directive.ts b/packages/angular/src/dropdown/trigger.directive.ts
new file mode 100644
index 00000000000..a462c166438
--- /dev/null
+++ b/packages/angular/src/dropdown/trigger.directive.ts
@@ -0,0 +1,22 @@
+/*
+ * SPDX-FileCopyrightText: 2022 Siemens AG
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import { Directive, ElementRef, Input } from '@angular/core';
+
+@Directive({
+  selector: '[ixDropdownTrigger]',
+})
+export class IxDropdownTriggerDirective {
+  @Input() ixDropdownTrigger!: any;
+
+  constructor(private element: ElementRef) {}
+
+  protected ngOnChanges() {
+    this.element.nativeElement.trigger = this.ixDropdownTrigger.el;
+  }
+}
diff --git a/packages/angular/src/index.ts b/packages/angular/src/index.ts
index 81195099aa2..3cf7786a3d0 100644
--- a/packages/angular/src/index.ts
+++ b/packages/angular/src/index.ts
@@ -9,8 +9,8 @@
 
 export * from '@siemens/ix';
 export * from './components';
+export * from './dropdown/trigger.directive';
 export * from './modal';
 export * from './module';
 export * from './toast';
 export * from './tree';
-
diff --git a/packages/angular/src/module.ts b/packages/angular/src/module.ts
index 2a151268389..57bb233d284 100644
--- a/packages/angular/src/module.ts
+++ b/packages/angular/src/module.ts
@@ -9,17 +9,19 @@
 
 import { DOCUMENT } from '@angular/common';
 import {
-    APP_INITIALIZER,
-    ModuleWithProviders,
-    NgModule,
-    NgZone
+  APP_INITIALIZER,
+  ModuleWithProviders,
+  NgModule,
+  NgZone,
 } from '@angular/core';
 import { appInitialize } from './app-initialize';
 import { DIRECTIVES } from './declare-components';
+import { IxDropdownTriggerDirective } from './dropdown/trigger.directive';
 import { ModalService } from './modal';
 import { ToastService } from './toast';
 import * as tree from './tree';
-const DECLARATIONS = [...DIRECTIVES, tree.IxTree];
+
+const DECLARATIONS = [...DIRECTIVES, tree.IxTree, IxDropdownTriggerDirective];
 
 @NgModule({
   declarations: DECLARATIONS,