fix(work-context): align settings dialog size #8048 (#8087)

Co-authored-by: cocojojo5213 <cocojojo5213@users.noreply.github.com>
This commit is contained in:
felix bear 2026-06-08 18:40:23 +09:00 committed by GitHub
parent 667e8c3aa0
commit 3221cf001c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 77 additions and 20 deletions

View file

@ -68,7 +68,7 @@ import { SectionService } from './features/section/section.service';
import { DialogPromptComponent } from './ui/dialog-prompt/dialog-prompt.component';
import { TODAY_TAG } from './features/tag/tag.const';
import { normalizeBackgroundImageBlur } from './features/work-context/work-context.const';
import type { WorkContextSettingsDialogData } from './features/work-context/dialog-work-context-settings/dialog-work-context-settings.component';
import { openWorkContextSettingsDialog } from './features/work-context/dialog-work-context-settings/open-work-context-settings-dialog';
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';
@ -468,16 +468,13 @@ export class AppComponent implements OnDestroy, AfterViewInit {
const entity = isForProject
? await firstValueFrom(this._projectService.getByIdOnce$(contextId))
: await firstValueFrom(this._tagService.getTagById$(contextId).pipe(first()));
if (!entity) {
return;
}
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,
await openWorkContextSettingsDialog(this._matDialog, {
isProject: isForProject,
entity,
});
}

View file

@ -31,7 +31,7 @@ import { TaskSharedActions } from '../../root-store/meta/task-shared.actions';
import { TaskWithSubTasks } from '../../features/tasks/task.model';
import { firstValueFrom, Observable, of } from 'rxjs';
import { AsyncPipe } from '@angular/common';
import type { WorkContextSettingsDialogData } from '../../features/work-context/dialog-work-context-settings/dialog-work-context-settings.component';
import { openWorkContextSettingsDialog } from '../../features/work-context/dialog-work-context-settings/open-work-context-settings-dialog';
@Component({
selector: 'work-context-menu',
@ -306,16 +306,13 @@ export class WorkContextMenuComponent implements OnInit {
: await firstValueFrom(
this._tagService.getTagById$(this.contextId).pipe(first()),
);
if (!entity) {
throw new Error(`Unable to find work context ${this.contextId}`);
}
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: this.isForProject,
entity,
} as WorkContextSettingsDialogData,
await openWorkContextSettingsDialog(this._matDialog, {
isProject: this.isForProject,
entity,
});
} catch (err) {
this._snackService.open({

View file

@ -0,0 +1,37 @@
import type { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { DEFAULT_PROJECT } from '../../project/project.const';
import { DialogWorkContextSettingsComponent } from './dialog-work-context-settings.component';
import {
openWorkContextSettingsDialog,
WORK_CONTEXT_SETTINGS_DIALOG_CONFIG,
} from './open-work-context-settings-dialog';
import type { WorkContextSettingsDialogData } from './dialog-work-context-settings.component';
describe('openWorkContextSettingsDialog', () => {
it('uses a shared responsive width for project and tag settings dialogs', () => {
expect(WORK_CONTEXT_SETTINGS_DIALOG_CONFIG).toEqual({
restoreFocus: true,
backdropClass: 'cdk-overlay-transparent-backdrop',
width: '600px',
maxWidth: '95vw',
});
});
it('opens the dialog with the shared size config and caller data', async () => {
const matDialog = jasmine.createSpyObj<MatDialog>('MatDialog', ['open']);
matDialog.open.and.returnValue(
{} as MatDialogRef<DialogWorkContextSettingsComponent>,
);
const data: WorkContextSettingsDialogData = {
isProject: true,
entity: DEFAULT_PROJECT,
};
await openWorkContextSettingsDialog(matDialog, data);
expect(matDialog.open).toHaveBeenCalledOnceWith(DialogWorkContextSettingsComponent, {
...WORK_CONTEXT_SETTINGS_DIALOG_CONFIG,
data,
});
});
});

View file

@ -0,0 +1,26 @@
import type { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';
import type {
DialogWorkContextSettingsComponent,
WorkContextSettingsDialogData,
} from './dialog-work-context-settings.component';
export const WORK_CONTEXT_SETTINGS_DIALOG_CONFIG: MatDialogConfig<WorkContextSettingsDialogData> =
{
restoreFocus: true,
backdropClass: 'cdk-overlay-transparent-backdrop',
width: '600px',
maxWidth: '95vw',
};
export const openWorkContextSettingsDialog = async (
matDialog: MatDialog,
data: WorkContextSettingsDialogData,
): Promise<MatDialogRef<DialogWorkContextSettingsComponent>> => {
const { DialogWorkContextSettingsComponent } =
await import('./dialog-work-context-settings.component');
return matDialog.open(DialogWorkContextSettingsComponent, {
...WORK_CONTEXT_SETTINGS_DIALOG_CONFIG,
data,
});
};