mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-10-28 23:57:17 +09:00
## Description 1. What is this PR about (link the issue and add a short description) ## Steps for reproduction 1. click button 2. expect xyz ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [ ] made a self-review - [ ] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [ ] tested locally and on preview environment (preview dev login: 0000) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env` file
48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import type { Project } from "@webstudio-is/project";
|
|
import type { Build } from "@webstudio-is/project-build";
|
|
import type { Change } from "immerhin";
|
|
import type { Transaction } from "~/shared/sync-client";
|
|
|
|
type Command =
|
|
| {
|
|
type: "transactions";
|
|
projectId: Project["id"];
|
|
transactions: Transaction<Change[]>[];
|
|
}
|
|
| {
|
|
type: "setDetails";
|
|
projectId: Project["id"];
|
|
version: number;
|
|
buildId: Build["id"];
|
|
authToken: string | undefined;
|
|
};
|
|
|
|
const projectCommandsQueue: Command[] = [];
|
|
|
|
export const enqueue = (command: Command) => {
|
|
if (command.type !== "transactions") {
|
|
projectCommandsQueue.push(command);
|
|
return;
|
|
}
|
|
|
|
// merge transactions in case of no commands in queue
|
|
for (const projectCommand of projectCommandsQueue.reverse()) {
|
|
if (projectCommand.type !== "transactions") {
|
|
break;
|
|
}
|
|
|
|
if (projectCommand.projectId === command.projectId) {
|
|
projectCommand.transactions.push(...command.transactions);
|
|
return;
|
|
}
|
|
}
|
|
|
|
projectCommandsQueue.push(command);
|
|
};
|
|
|
|
export const dequeueAll = () => {
|
|
const commands = [...projectCommandsQueue];
|
|
projectCommandsQueue.length = 0;
|
|
return commands;
|
|
};
|