73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
import { type BulkActionMode } from "~/components/BulkActionFilterSummary";
|
|
import { TaskRunListSearchFilters } from "~/components/runs/v3/RunFilters";
|
|
import { getUsername } from "~/utils/username";
|
|
import { BasePresenter } from "./basePresenter.server";
|
|
|
|
type BulkActionOptions = {
|
|
environmentId: string;
|
|
bulkActionId: string;
|
|
};
|
|
|
|
export class BulkActionPresenter extends BasePresenter {
|
|
public async call({ environmentId, bulkActionId }: BulkActionOptions) {
|
|
const bulkAction = await this._replica.bulkActionGroup.findFirst({
|
|
select: {
|
|
friendlyId: true,
|
|
name: true,
|
|
status: true,
|
|
type: true,
|
|
createdAt: true,
|
|
completedAt: true,
|
|
totalCount: true,
|
|
successCount: true,
|
|
failureCount: true,
|
|
user: {
|
|
select: {
|
|
name: true,
|
|
displayName: true,
|
|
avatarUrl: true,
|
|
},
|
|
},
|
|
params: true,
|
|
project: {
|
|
select: {
|
|
id: true,
|
|
organizationId: true,
|
|
},
|
|
},
|
|
},
|
|
where: {
|
|
environmentId,
|
|
friendlyId: bulkActionId,
|
|
},
|
|
});
|
|
|
|
if (!bulkAction) {
|
|
throw new Error("Bulk action not found");
|
|
}
|
|
|
|
//parse filters
|
|
const filtersParsed = TaskRunListSearchFilters.safeParse(
|
|
bulkAction.params && typeof bulkAction.params === "object" ? bulkAction.params : {}
|
|
);
|
|
|
|
let mode: BulkActionMode = "filter";
|
|
if (
|
|
filtersParsed.success &&
|
|
Object.keys(filtersParsed.data).length === 1 &&
|
|
filtersParsed.data.runId?.length
|
|
) {
|
|
mode = "selected";
|
|
}
|
|
|
|
return {
|
|
...bulkAction,
|
|
user: bulkAction.user
|
|
? { name: getUsername(bulkAction.user), avatarUrl: bulkAction.user.avatarUrl }
|
|
: undefined,
|
|
filters: filtersParsed.data ?? {},
|
|
mode,
|
|
};
|
|
}
|
|
}
|