Skip to content

Commit a58e028

Browse files
committed
refactor(default-header): color modes dropdown
1 parent 5c120df commit a58e028

File tree

3 files changed

+38
-47
lines changed

3 files changed

+38
-47
lines changed

src/app/layout/default-layout/default-header/default-header.component.html

Lines changed: 13 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -160,49 +160,21 @@ <h6 cDropdownHeader class="bg-body-secondary text-body-secondary fw-semibold py-
160160
<ng-template #themeDropdown>
161161
<c-dropdown alignment="end" variant="nav-item">
162162
<button [caret]="false" cDropdownToggle>
163-
@switch (colorMode()) {
164-
@case ("dark") {
165-
<svg cIcon name="cilMoon" size="lg"></svg>
166-
}
167-
@case ("auto") {
168-
<svg cIcon name="cilContrast" size="lg"></svg>
169-
}
170-
@default {
171-
<svg cIcon name="cilSun" size="lg"></svg>
172-
}
173-
}
163+
<svg cIcon [name]="icons()" size="lg"></svg>
174164
</button>
175165
<div cDropdownMenu>
176-
<button
177-
(click)="colorMode.set('light')"
178-
[active]="colorMode()==='light'"
179-
[routerLink]="[]"
180-
cDropdownItem
181-
class="d-flex align-items-center"
182-
>
183-
<svg cIcon class="me-2" name="cilSun" size="lg"></svg>
184-
Light
185-
</button>
186-
<button
187-
(click)="colorMode.set('dark')"
188-
[active]="colorMode()==='dark'"
189-
[routerLink]="[]"
190-
cDropdownItem
191-
class="d-flex align-items-center"
192-
>
193-
<svg cIcon class="me-2" name="cilMoon" size="lg"></svg>
194-
Dark
195-
</button>
196-
<button
197-
(click)="colorMode.set('auto')"
198-
[active]="colorMode()==='auto'"
199-
[routerLink]="[]"
200-
cDropdownItem
201-
class="d-flex align-items-center"
202-
>
203-
<svg cIcon class="me-2" name="cilContrast" size="lg"></svg>
204-
Auto
205-
</button>
166+
@for (mode of colorModes; track mode.name) {
167+
<button
168+
(click)="colorMode.set(mode.name)"
169+
[active]="colorMode()===mode.name"
170+
[routerLink]="[]"
171+
cDropdownItem
172+
class="d-flex align-items-center"
173+
>
174+
<svg cIcon class="me-2" [name]="mode.icon" size="lg"></svg>
175+
{{ mode.text }}
176+
</button>
177+
}
206178
</div>
207179
</c-dropdown>
208180
</ng-template>

src/app/layout/default-layout/default-header/default-header.component.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, DestroyRef, inject, Input } from '@angular/core';
1+
import { Component, computed, DestroyRef, inject, Input } from '@angular/core';
22
import {
33
AvatarComponent,
44
BadgeComponent,
@@ -41,6 +41,17 @@ export class DefaultHeaderComponent extends HeaderComponent {
4141
readonly colorMode = this.#colorModeService.colorMode;
4242
readonly #destroyRef: DestroyRef = inject(DestroyRef);
4343

44+
readonly colorModes = [
45+
{ name: 'light', text: 'Light', icon: 'cilSun' },
46+
{ name: 'dark', text: 'Dark', icon: 'cilMoon' },
47+
{ name: 'auto', text: 'Auto', icon: 'cilContrast' }
48+
];
49+
50+
readonly icons = computed(() => {
51+
const currentMode = this.colorMode();
52+
return this.colorModes.find(mode=> mode.name === currentMode)?.icon ?? 'cilSun';
53+
});
54+
4455
constructor() {
4556
super();
4657
this.#colorModeService.localStorageItemName.set('coreui-free-angular-admin-template-theme-default');

src/app/views/buttons/buttons/buttons.component.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,21 @@ import { Component } from '@angular/core';
22
import { RouterLink } from '@angular/router';
33
import { IconDirective } from '@coreui/icons-angular';
44
import { DocsExampleComponent } from '@docs-components/public-api';
5-
import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, ButtonDirective } from '@coreui/angular';
5+
import {
6+
ButtonDirective,
7+
CardBodyComponent,
8+
CardComponent,
9+
CardHeaderComponent,
10+
ColComponent,
11+
RowComponent,
12+
TextColorDirective
13+
} from '@coreui/angular';
614

715
@Component({
8-
selector: 'app-buttons',
9-
templateUrl: './buttons.component.html',
10-
standalone: true,
11-
imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ButtonDirective, IconDirective, RouterLink]
16+
selector: 'app-buttons',
17+
templateUrl: './buttons.component.html',
18+
standalone: true,
19+
imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ButtonDirective, IconDirective, RouterLink]
1220
})
1321
export class ButtonsComponent {
1422

0 commit comments

Comments
 (0)