diff --git a/src/app/app.component.html b/src/app/app.component.html
index ff4d3ff09f..d4dd4972c5 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -97,12 +97,17 @@
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 42e7dff820..7f2eff8509 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -22,7 +22,7 @@ import { SnackService } from './core/snack/snack.service';
import { IS_ELECTRON } from './app.constants';
import { expandAnimation } from './ui/animations/expand.ani';
import { warpRouteAnimation } from './ui/animations/warp-route';
-import { Subscription } from 'rxjs';
+import { firstValueFrom, Subscription } from 'rxjs';
import { fadeAnimation } from './ui/animations/fade.ani';
import { BannerService } from './core/banner/banner.service';
import { LS } from './core/persistence/storage-keys.const';
@@ -33,7 +33,7 @@ import { LanguageService } from './core/language/language.service';
import { WorkContextService } from './features/work-context/work-context.service';
import { SyncTriggerService } from './imex/sync/sync-trigger.service';
import { ActivatedRoute, RouterOutlet } from '@angular/router';
-import { concatMap, filter, first, map, switchMap, take } from 'rxjs/operators';
+import { concatMap, first, take } from 'rxjs/operators';
import { IS_MOBILE } from './util/is-mobile';
import { warpAnimation, warpInAnimation } from './ui/animations/warp.ani';
@@ -54,12 +54,12 @@ import { MarkdownPasteService } from './features/tasks/markdown-paste.service';
import { TaskService } from './features/tasks/task.service';
import { MatMenuItem } from '@angular/material/menu';
import { MatIcon } from '@angular/material/icon';
-import { DialogUnsplashPickerComponent } from './ui/dialog-unsplash-picker/dialog-unsplash-picker.component';
import { NoteStartupBannerService } from './features/note/note-startup-banner.service';
import { ProjectService } from './features/project/project.service';
import { TagService } from './features/tag/tag.service';
import { ContextMenuComponent } from './ui/context-menu/context-menu.component';
-import { WorkContextThemeCfg } from './features/work-context/work-context.model';
+import { WorkContextType } from './features/work-context/work-context.model';
+import type { WorkContextSettingsDialogData } from './features/work-context/dialog-work-context-settings/dialog-work-context-settings.component';
import { isInputElement } from './util/dom-element';
import { MobileBottomNavComponent } from './core-ui/mobile-bottom-nav/mobile-bottom-nav.component';
import { StartupService } from './core/startup/startup.service';
@@ -342,56 +342,27 @@ export class AppComponent implements OnDestroy, AfterViewInit {
return baseOpacity * 0.01;
});
- changeBackgroundFromUnsplash(): void {
- const dialogRef = this._matDialog.open(DialogUnsplashPickerComponent, {
- width: '900px',
- maxWidth: '95vw',
+ async openSettings(): Promise {
+ const isForProject =
+ this.workContextService.activeWorkContextType === WorkContextType.PROJECT;
+ const contextId = this.workContextService.activeWorkContextId;
+ if (!contextId) {
+ return;
+ }
+ const entity = isForProject
+ ? await firstValueFrom(this._projectService.getByIdOnce$(contextId))
+ : await firstValueFrom(this._tagService.getTagById$(contextId).pipe(first()));
+
+ const { DialogWorkContextSettingsComponent } =
+ await import('./features/work-context/dialog-work-context-settings/dialog-work-context-settings.component');
+ this._matDialog.open(DialogWorkContextSettingsComponent, {
+ restoreFocus: true,
+ backdropClass: 'cdk-overlay-transparent-backdrop',
+ data: {
+ isProject: isForProject,
+ entity,
+ } as WorkContextSettingsDialogData,
});
-
- dialogRef
- .afterClosed()
- .pipe(
- filter((result) => !!result),
- switchMap((result) =>
- this.workContextService.activeWorkContext$.pipe(
- take(1),
- map((activeContext) => ({ result, activeContext })),
- ),
- ),
- )
- .subscribe(({ result, activeContext }) => {
- if (!activeContext) {
- this._snackService.open({
- type: 'ERROR',
- msg: 'No active work context',
- });
- return;
- }
-
- // Extract the URL from the result object
- const backgroundUrl = result.url || result;
- const isDarkMode = this._globalThemeService.isDarkTheme();
- const contextKey: keyof WorkContextThemeCfg = isDarkMode
- ? 'backgroundImageDark'
- : 'backgroundImageLight';
-
- // Update the theme based on context type
- if (activeContext.type === 'PROJECT') {
- this._projectService.update(activeContext.id, {
- theme: {
- ...(activeContext.theme || {}),
- [contextKey]: backgroundUrl,
- },
- });
- } else if (activeContext.type === 'TAG') {
- this._tagService.updateTag(activeContext.id, {
- theme: {
- ...(activeContext.theme || {}),
- [contextKey]: backgroundUrl,
- },
- });
- }
- });
}
isAppEntrance = signal(!this.isShowOnboardingPresets());
diff --git a/src/app/t.const.ts b/src/app/t.const.ts
index 711f362f85..b0b1f02092 100644
--- a/src/app/t.const.ts
+++ b/src/app/t.const.ts
@@ -7,7 +7,8 @@ const T = {
},
B_OFFLINE: 'APP.B_OFFLINE',
CONTEXT_MENU: {
- CHANGE_BACKGROUND: 'APP.CONTEXT_MENU.CHANGE_BACKGROUND',
+ CHANGE_PROJECT_SETTINGS: 'APP.CONTEXT_MENU.CHANGE_PROJECT_SETTINGS',
+ CHANGE_TAG_SETTINGS: 'APP.CONTEXT_MENU.CHANGE_TAG_SETTINGS',
},
SKIP_SYNC_WAIT: 'APP.SKIP_SYNC_WAIT',
UPDATE_WEB_APP: 'APP.UPDATE_WEB_APP',
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 84059a9952..ba53135475 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -7,7 +7,8 @@
},
"B_OFFLINE": "You are disconnected from the internet. Syncing and requesting issue provider data will not work.",
"CONTEXT_MENU": {
- "CHANGE_BACKGROUND": "Change Background"
+ "CHANGE_PROJECT_SETTINGS": "Change Project Settings",
+ "CHANGE_TAG_SETTINGS": "Change Tag Settings"
},
"SKIP_SYNC_WAIT": "Skip waiting for sync",
"UPDATE_WEB_APP": "New version available. Load new version?"