summaryrefslogtreecommitdiff
path: root/apps/web/src/lib/commands/project/update-project-settings.ts
blob: b7ab75ee33c4a1b1551f1c3fa95c90eb22580620 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import { Command } from "@/lib/commands/base-command";
import { EditorCore } from "@/core";
import type { TProject, TProjectSettings } from "@/types/project";

export class UpdateProjectSettingsCommand extends Command {
	private savedSettings: TProjectSettings | null = null;
	private savedUpdatedAt: Date | null = null;

	constructor(private updates: Partial<TProjectSettings>) {
		super();
	}

	execute(): void {
		const editor = EditorCore.getInstance();
		const activeProject = editor.project.getActive();
		if (!activeProject) return;

		this.savedSettings = activeProject.settings;
		this.savedUpdatedAt = activeProject.metadata.updatedAt;

		const updatedProject: TProject = {
			...activeProject,
			settings: { ...activeProject.settings, ...this.updates },
			metadata: { ...activeProject.metadata, updatedAt: new Date() },
		};

		editor.project.setActiveProject({ project: updatedProject });
		editor.save.markDirty();
	}

	undo(): void {
		if (!this.savedSettings || !this.savedUpdatedAt) return;
		const editor = EditorCore.getInstance();
		const activeProject = editor.project.getActive();
		if (!activeProject) return;

		const updatedProject: TProject = {
			...activeProject,
			settings: this.savedSettings,
			metadata: { ...activeProject.metadata, updatedAt: this.savedUpdatedAt },
		};

		editor.project.setActiveProject({ project: updatedProject });
		editor.save.markDirty();
	}
}