46 lines
1.9 KiB
TypeScript
46 lines
1.9 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
|
|
import { assertIsDefinedOrThrow, isDefined } from 'twenty-shared/utils';
|
|
|
|
import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
|
import { type CreateOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
|
|
|
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
|
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
|
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
|
import { DashboardToPageLayoutSyncService } from 'src/modules/dashboard/services/dashboard-to-page-layout-sync.service';
|
|
import { type DashboardWorkspaceEntity } from 'src/modules/dashboard/standard-objects/dashboard.workspace-entity';
|
|
|
|
@Injectable()
|
|
@WorkspaceQueryHook(`dashboard.createOne`)
|
|
export class DashboardCreateOnePreQueryHook
|
|
implements WorkspacePreQueryHookInstance
|
|
{
|
|
constructor(
|
|
private readonly dashboardToPageLayoutSyncService: DashboardToPageLayoutSyncService,
|
|
) {}
|
|
|
|
async execute(
|
|
authContext: WorkspaceAuthContext,
|
|
_objectName: string,
|
|
payload: CreateOneResolverArgs<DashboardWorkspaceEntity>,
|
|
): Promise<CreateOneResolverArgs<DashboardWorkspaceEntity>> {
|
|
const workspace = authContext.workspace;
|
|
|
|
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
|
|
|
if (isDefined(payload.data.pageLayoutId)) {
|
|
return payload;
|
|
}
|
|
|
|
const pageLayoutId =
|
|
await this.dashboardToPageLayoutSyncService.createPageLayoutForDashboard({
|
|
workspaceId: workspace.id,
|
|
});
|
|
|
|
payload.data.pageLayoutId = pageLayoutId;
|
|
|
|
return payload;
|
|
}
|
|
}
|