Skip to content
Snippets Groups Projects
Commit bbed5ef7 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-3539 OZG-6755 rename popup to dropdown menu

parent a6764926
No related branches found
No related tags found
No related merge requests found
Showing
with 58 additions and 77 deletions
...@@ -15,13 +15,13 @@ import { StoreModule } from '@ngrx/store'; ...@@ -15,13 +15,13 @@ import { StoreModule } from '@ngrx/store';
import { StoreDevtoolsModule } from '@ngrx/store-devtools'; import { StoreDevtoolsModule } from '@ngrx/store-devtools';
import { import {
AdminLogoIconComponent, AdminLogoIconComponent,
DropdownMenuComponent,
DropdownMenuItemComponent,
LogoutIconComponent, LogoutIconComponent,
MailboxIconComponent, MailboxIconComponent,
NavItemComponent, NavItemComponent,
NavbarComponent, NavbarComponent,
OrgaUnitIconComponent, OrgaUnitIconComponent,
PopupComponent,
PopupListItemComponent,
} from '@ods/system'; } from '@ods/system';
import { OAuthModule } from 'angular-oauth2-oidc'; import { OAuthModule } from 'angular-oauth2-oidc';
import { HttpUnauthorizedInterceptor } from 'libs/authentication/src/lib/http-unauthorized.interceptor'; import { HttpUnauthorizedInterceptor } from 'libs/authentication/src/lib/http-unauthorized.interceptor';
...@@ -44,8 +44,8 @@ import { appRoutes } from './app.routes'; ...@@ -44,8 +44,8 @@ import { appRoutes } from './app.routes';
imports: [ imports: [
CommonModule, CommonModule,
AdminLogoIconComponent, AdminLogoIconComponent,
PopupComponent, DropdownMenuComponent,
PopupListItemComponent, DropdownMenuItemComponent,
NavItemComponent, NavItemComponent,
NavbarComponent, NavbarComponent,
OrgaUnitIconComponent, OrgaUnitIconComponent,
......
<ods-popup buttonClass="rounded-full"> <ods-dropdown-menu buttonClass="rounded-full">
<div <div
button-content button-content
role="img" role="img"
...@@ -8,11 +8,11 @@ ...@@ -8,11 +8,11 @@
{{ currentUserInitials }} {{ currentUserInitials }}
</p> </p>
</div> </div>
<ods-popup-list-item <ods-dropdown-menu-item
caption="Abmelden" caption="Abmelden"
(itemClicked)="authenticationService.logout()" (itemClicked)="authenticationService.logout()"
data-test-id="popup-logout-button" data-test-id="popup-logout-button"
> >
<ods-logout-icon icon /> <ods-logout-icon icon />
</ods-popup-list-item> </ods-dropdown-menu-item>
</ods-popup> </ods-dropdown-menu>
...@@ -6,7 +6,7 @@ import { ...@@ -6,7 +6,7 @@ import {
} from '@alfa-client/test-utils'; } from '@alfa-client/test-utils';
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing'; import { RouterTestingModule } from '@angular/router/testing';
import { LogoutIconComponent, PopupComponent, PopupListItemComponent } from '@ods/system'; import { DropdownMenuComponent, DropdownMenuItemComponent, LogoutIconComponent } from '@ods/system';
import { AuthenticationService } from 'authentication'; import { AuthenticationService } from 'authentication';
import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
import { MockComponent } from 'ng-mocks'; import { MockComponent } from 'ng-mocks';
...@@ -26,8 +26,8 @@ describe('UserProfileButtonContainerComponent', () => { ...@@ -26,8 +26,8 @@ describe('UserProfileButtonContainerComponent', () => {
declarations: [UserProfileButtonContainerComponent], declarations: [UserProfileButtonContainerComponent],
imports: [ imports: [
RouterTestingModule, RouterTestingModule,
MockComponent(PopupComponent), MockComponent(DropdownMenuComponent),
MockComponent(PopupListItemComponent), MockComponent(DropdownMenuItemComponent),
MockComponent(LogoutIconComponent), MockComponent(LogoutIconComponent),
], ],
providers: [ providers: [
......
...@@ -5,6 +5,8 @@ export * from './lib/bescheid-status-text/bescheid-status-text.component'; ...@@ -5,6 +5,8 @@ export * from './lib/bescheid-status-text/bescheid-status-text.component';
export * from './lib/bescheid-wrapper/bescheid-wrapper.component'; export * from './lib/bescheid-wrapper/bescheid-wrapper.component';
export * from './lib/button-card/button-card.component'; export * from './lib/button-card/button-card.component';
export * from './lib/button/button.component'; export * from './lib/button/button.component';
export * from './lib/dropdown-menu/dropdown-menu-item/dropdown-menu-item.component';
export * from './lib/dropdown-menu/dropdown-menu/dropdown-menu.component';
export * from './lib/form/error-message/error-message.component'; export * from './lib/form/error-message/error-message.component';
export * from './lib/form/file-upload-button/file-upload-button.component'; export * from './lib/form/file-upload-button/file-upload-button.component';
export * from './lib/form/radio-button-card/radio-button-card.component'; export * from './lib/form/radio-button-card/radio-button-card.component';
...@@ -32,6 +34,4 @@ export * from './lib/instant-search/instant-search/instant-search.component'; ...@@ -32,6 +34,4 @@ export * from './lib/instant-search/instant-search/instant-search.component';
export * from './lib/instant-search/instant-search/instant-search.model'; export * from './lib/instant-search/instant-search/instant-search.model';
export * from './lib/navbar/nav-item/nav-item.component'; export * from './lib/navbar/nav-item/nav-item.component';
export * from './lib/navbar/navbar/navbar.component'; export * from './lib/navbar/navbar/navbar.component';
export * from './lib/popup/popup-list-item/popup-list-item.component';
export * from './lib/popup/popup/popup.component';
export * from './lib/testbtn/testbtn.component'; export * from './lib/testbtn/testbtn.component';
import { dispatchEventFromFixture } from '@alfa-client/test-utils'; import { dispatchEventFromFixture } from '@alfa-client/test-utils';
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { PopupListItemComponent } from './popup-list-item.component'; import { DropdownMenuItemComponent } from './dropdown-menu-item.component';
describe('PopupListItemComponent', () => { describe('DropdownMenuItemComponent', () => {
let component: PopupListItemComponent; let component: DropdownMenuItemComponent;
let fixture: ComponentFixture<PopupListItemComponent>; let fixture: ComponentFixture<DropdownMenuItemComponent>;
beforeEach(async () => { beforeEach(async () => {
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
imports: [PopupListItemComponent], imports: [DropdownMenuItemComponent],
}).compileComponents(); }).compileComponents();
fixture = TestBed.createComponent(PopupListItemComponent); fixture = TestBed.createComponent(DropdownMenuItemComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
......
...@@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common'; ...@@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common';
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Component, EventEmitter, Input, Output } from '@angular/core';
@Component({ @Component({
selector: 'ods-popup-list-item', selector: 'ods-dropdown-menu-item',
standalone: true, standalone: true,
imports: [CommonModule], imports: [CommonModule],
template: `<button template: `<button
...@@ -14,7 +14,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; ...@@ -14,7 +14,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
<p class="text-text">{{ caption }}</p> <p class="text-text">{{ caption }}</p>
</button>`, </button>`,
}) })
export class PopupListItemComponent { export class DropdownMenuItemComponent {
@Input({ required: true }) caption!: string; @Input({ required: true }) caption!: string;
@Output() itemClicked: EventEmitter<MouseEvent> = new EventEmitter(); @Output() itemClicked: EventEmitter<MouseEvent> = new EventEmitter();
......
import { getElementFromFixture } from '@alfa-client/test-utils'; import { getElementFromFixture } from '@alfa-client/test-utils';
import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
import { PopupComponent } from './popup.component'; import { DropdownMenuComponent } from './dropdown-menu.component';
describe('PopupComponent', () => { describe('DropdownMenuComponent', () => {
let component: PopupComponent; let component: DropdownMenuComponent;
let fixture: ComponentFixture<PopupComponent>; let fixture: ComponentFixture<DropdownMenuComponent>;
const popupButton: string = getDataTestIdOf('popup-button'); const popupButton: string = getDataTestIdOf('dropdown-button');
beforeEach(async () => { beforeEach(async () => {
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
imports: [PopupComponent], imports: [DropdownMenuComponent],
}).compileComponents(); }).compileComponents();
fixture = TestBed.createComponent(PopupComponent); fixture = TestBed.createComponent(DropdownMenuComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
......
...@@ -4,7 +4,7 @@ import { Component, ElementRef, HostListener, Input, ViewChild } from '@angular/ ...@@ -4,7 +4,7 @@ import { Component, ElementRef, HostListener, Input, ViewChild } from '@angular/
import { twMerge } from 'tailwind-merge'; import { twMerge } from 'tailwind-merge';
@Component({ @Component({
selector: 'ods-popup', selector: 'ods-dropdown-menu',
standalone: true, standalone: true,
imports: [CommonModule, CdkTrapFocus], imports: [CommonModule, CdkTrapFocus],
template: `<div class="relative w-fit"> template: `<div class="relative w-fit">
...@@ -14,7 +14,7 @@ import { twMerge } from 'tailwind-merge'; ...@@ -14,7 +14,7 @@ import { twMerge } from 'tailwind-merge';
[attr.aria-expanded]="isPopupOpen" [attr.aria-expanded]="isPopupOpen"
aria-haspopup="true" aria-haspopup="true"
[attr.aria-label]="label" [attr.aria-label]="label"
data-test-id="popup-button" data-test-id="dropdown-button"
#button #button
> >
<ng-content select="[button-content]" /> <ng-content select="[button-content]" />
...@@ -33,7 +33,7 @@ import { twMerge } from 'tailwind-merge'; ...@@ -33,7 +33,7 @@ import { twMerge } from 'tailwind-merge';
</ul> </ul>
</div>`, </div>`,
}) })
export class PopupComponent { export class DropdownMenuComponent {
@Input() alignTo: 'left' | 'right' = 'left'; @Input() alignTo: 'left' | 'right' = 'left';
@Input() label: string = ''; @Input() label: string = '';
@Input() buttonClass: string = ''; @Input() buttonClass: string = '';
......
...@@ -8,15 +8,20 @@ import { ...@@ -8,15 +8,20 @@ import {
import { SaveIconComponent } from '../../icons/save-icon/save-icon.component'; import { SaveIconComponent } from '../../icons/save-icon/save-icon.component';
import { UserIconComponent } from '../../icons/user-icon/user-icon.component'; import { UserIconComponent } from '../../icons/user-icon/user-icon.component';
import { PopupListItemComponent } from '../popup-list-item/popup-list-item.component'; import { DropdownMenuItemComponent } from '../dropdown-menu-item/dropdown-menu-item.component';
import { PopupComponent } from './popup.component'; import { DropdownMenuComponent } from './dropdown-menu.component';
const meta: Meta<PopupComponent> = { const meta: Meta<DropdownMenuComponent> = {
title: 'Popup/Popup', title: 'Dropdown menu/Dropdown menu',
component: PopupComponent, component: DropdownMenuComponent,
decorators: [ decorators: [
moduleMetadata({ moduleMetadata({
imports: [PopupComponent, PopupListItemComponent, SaveIconComponent, UserIconComponent], imports: [
DropdownMenuComponent,
DropdownMenuItemComponent,
SaveIconComponent,
UserIconComponent,
],
}), }),
componentWrapperDecorator((story) => `<div class="flex justify-center mb-32">${story}</div>`), componentWrapperDecorator((story) => `<div class="flex justify-center mb-32">${story}</div>`),
], ],
...@@ -25,7 +30,7 @@ const meta: Meta<PopupComponent> = { ...@@ -25,7 +30,7 @@ const meta: Meta<PopupComponent> = {
}; };
export default meta; export default meta;
type Story = StoryObj<PopupComponent>; type Story = StoryObj<DropdownMenuComponent>;
export const Default: Story = { export const Default: Story = {
args: { alignTo: 'left', label: '', buttonClass: '' }, args: { alignTo: 'left', label: '', buttonClass: '' },
...@@ -42,37 +47,37 @@ export const Default: Story = { ...@@ -42,37 +47,37 @@ export const Default: Story = {
}, },
render: (args) => ({ render: (args) => ({
props: args, props: args,
template: `<ods-popup ${argsToTemplate(args)}> template: `<ods-dropdown-menu ${argsToTemplate(args)}>
<ods-user-icon button-content /> <ods-user-icon button-content />
<ods-popup-list-item caption="Lorem" /> <ods-dropdown-menu-item caption="Lorem" />
<ods-popup-list-item caption="Ipsum" /> <ods-dropdown-menu-item caption="Ipsum" />
<ods-popup-list-item caption="Dolor" /> <ods-dropdown-menu-item caption="Dolor" />
</ods-popup>`, </ods-dropdown-menu>`,
}), }),
}; };
export const LongText: Story = { export const LongText: Story = {
render: (args) => ({ render: (args) => ({
props: args, props: args,
template: `<ods-popup ${argsToTemplate(args)}> template: `<ods-dropdown-menu ${argsToTemplate(args)}>
<p button-content>Trigger popup</p> <p button-content>Trigger popup</p>
<ods-popup-list-item caption="Lorem" /> <ods-dropdown-menu-item caption="Lorem" />
<ods-popup-list-item caption="Lorem ipsum dolor sit amet" /> <ods-dropdown-menu-item caption="Lorem ipsum dolor sit amet" />
</ods-popup>`, </ods-dropdown-menu>`,
}), }),
}; };
export const ItemsWithIcons: Story = { export const ItemsWithIcons: Story = {
render: (args) => ({ render: (args) => ({
props: args, props: args,
template: `<ods-popup ${argsToTemplate(args)}> template: `<ods-dropdown-menu ${argsToTemplate(args)}>
<p button-content>Trigger popup</p> <p button-content>Trigger popup</p>
<ods-popup-list-item caption="Lorem"> <ods-dropdown-menu-item caption="Lorem">
<ods-save-icon icon size="small" /> <ods-save-icon icon size="small" />
</ods-popup-list-item> </ods-dropdown-menu-item>
<ods-popup-list-item caption="Lorem ipsum dolor sit amet"> <ods-dropdown-menu-item caption="Lorem ipsum dolor sit amet">
<ods-save-icon icon size="small" /> <ods-save-icon icon size="small" />
</ods-popup-list-item> </ods-dropdown-menu-item>
</ods-popup>`, </ods-dropdown-menu>`,
}), }),
}; };
import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular';
import { PopupListItemComponent } from './popup-list-item.component';
const meta: Meta<PopupListItemComponent> = {
title: 'Popup/Popup list item',
component: PopupListItemComponent,
decorators: [
moduleMetadata({
imports: [PopupListItemComponent],
}),
],
excludeStories: /.*Data$/,
tags: ['autodocs'],
};
export default meta;
type Story = StoryObj<PopupListItemComponent>;
export const Default: Story = {
args: {
caption: 'List item',
},
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment