[COMMAND MENU ITEMS] Create union type for command menu item payload (#19432)
Replace generic JSON scalar with a typed GraphQL union CommandMenuItemPayload (PathNavigationPayload | ObjectMetadataNavigationPayload) for the CommandMenuItem.payload field
This commit is contained in:
+29
@@ -0,0 +1,29 @@
|
||||
import { createUnionType } from '@nestjs/graphql';
|
||||
|
||||
import { ObjectMetadataCommandMenuItemPayloadDTO } from 'src/engine/metadata-modules/command-menu-item/dtos/object-metadata-command-menu-item-payload.dto';
|
||||
import { PathCommandMenuItemPayloadDTO } from 'src/engine/metadata-modules/command-menu-item/dtos/path-command-menu-item-payload.dto';
|
||||
import { type ObjectMetadataCommandMenuItemPayload } from 'src/engine/metadata-modules/command-menu-item/dtos/types/object-metadata-command-menu-item-payload.type';
|
||||
import { type PathCommandMenuItemPayload } from 'src/engine/metadata-modules/command-menu-item/dtos/types/path-command-menu-item-payload.type';
|
||||
|
||||
export type CommandMenuItemPayload =
|
||||
| PathCommandMenuItemPayload
|
||||
| ObjectMetadataCommandMenuItemPayload;
|
||||
|
||||
export const CommandMenuItemPayloadUnion = createUnionType({
|
||||
name: 'CommandMenuItemPayload',
|
||||
types: () => [
|
||||
PathCommandMenuItemPayloadDTO,
|
||||
ObjectMetadataCommandMenuItemPayloadDTO,
|
||||
],
|
||||
resolveType(payload: CommandMenuItemPayload) {
|
||||
if ('path' in payload) {
|
||||
return PathCommandMenuItemPayloadDTO;
|
||||
}
|
||||
|
||||
if ('objectMetadataItemId' in payload) {
|
||||
return ObjectMetadataCommandMenuItemPayloadDTO;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
},
|
||||
});
|
||||
+6
-3
@@ -10,10 +10,13 @@ import {
|
||||
IsString,
|
||||
IsUUID,
|
||||
} from 'class-validator';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/enums/command-menu-item-availability-type.enum';
|
||||
import {
|
||||
type CommandMenuItemPayload,
|
||||
CommandMenuItemPayloadUnion,
|
||||
} from 'src/engine/metadata-modules/command-menu-item/dtos/command-menu-item-payload.union';
|
||||
import { EngineComponentKey } from 'src/engine/metadata-modules/command-menu-item/enums/engine-component-key.enum';
|
||||
import { FrontComponentDTO } from 'src/engine/metadata-modules/front-component/dtos/front-component.dto';
|
||||
|
||||
@@ -70,8 +73,8 @@ export class CommandMenuItemDTO {
|
||||
availabilityType: CommandMenuItemAvailabilityType;
|
||||
|
||||
@IsOptional()
|
||||
@Field(() => GraphQLJSON, { nullable: true })
|
||||
payload?: Record<string, unknown>;
|
||||
@Field(() => CommandMenuItemPayloadUnion, { nullable: true })
|
||||
payload?: CommandMenuItemPayload;
|
||||
|
||||
@IsString({ each: true })
|
||||
@IsOptional()
|
||||
|
||||
+2
-1
@@ -13,6 +13,7 @@ import {
|
||||
import GraphQLJSON from 'graphql-type-json';
|
||||
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
import { type CommandMenuItemPayload } from 'src/engine/metadata-modules/command-menu-item/dtos/command-menu-item-payload.union';
|
||||
import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/enums/command-menu-item-availability-type.enum';
|
||||
import { EngineComponentKey } from 'src/engine/metadata-modules/command-menu-item/enums/engine-component-key.enum';
|
||||
|
||||
@@ -81,5 +82,5 @@ export class CreateCommandMenuItemInput {
|
||||
@IsObject()
|
||||
@IsOptional()
|
||||
@Field(() => GraphQLJSON, { nullable: true })
|
||||
payload?: Record<string, unknown>;
|
||||
payload?: CommandMenuItemPayload;
|
||||
}
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
import { Field, ObjectType } from '@nestjs/graphql';
|
||||
|
||||
import { IsNotEmpty, IsUUID } from 'class-validator';
|
||||
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
|
||||
@ObjectType('ObjectMetadataCommandMenuItemPayload')
|
||||
export class ObjectMetadataCommandMenuItemPayloadDTO {
|
||||
@IsUUID()
|
||||
@IsNotEmpty()
|
||||
@Field(() => UUIDScalarType)
|
||||
objectMetadataItemId: string;
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
import { Field, ObjectType } from '@nestjs/graphql';
|
||||
|
||||
import { IsNotEmpty, IsString } from 'class-validator';
|
||||
|
||||
@ObjectType('PathCommandMenuItemPayload')
|
||||
export class PathCommandMenuItemPayloadDTO {
|
||||
@IsString()
|
||||
@IsNotEmpty()
|
||||
@Field()
|
||||
path: string;
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export type ObjectMetadataCommandMenuItemPayload = {
|
||||
objectMetadataItemId: string;
|
||||
};
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export type PathCommandMenuItemPayload = {
|
||||
path: string;
|
||||
};
|
||||
+2
-1
@@ -11,6 +11,7 @@ import {
|
||||
UpdateDateColumn,
|
||||
} from 'typeorm';
|
||||
|
||||
import { type CommandMenuItemPayload } from 'src/engine/metadata-modules/command-menu-item/dtos/command-menu-item-payload.union';
|
||||
import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/enums/command-menu-item-availability-type.enum';
|
||||
import { EngineComponentKey } from 'src/engine/metadata-modules/command-menu-item/enums/engine-component-key.enum';
|
||||
import { FrontComponentEntity } from 'src/engine/metadata-modules/front-component/entities/front-component.entity';
|
||||
@@ -80,7 +81,7 @@ export class CommandMenuItemEntity
|
||||
availabilityType: CommandMenuItemAvailabilityType;
|
||||
|
||||
@Column({ type: 'jsonb', nullable: true })
|
||||
payload: Record<string, unknown> | null;
|
||||
payload: CommandMenuItemPayload | null;
|
||||
|
||||
@Column({ type: 'text', array: true, nullable: true })
|
||||
hotKeys: string[] | null;
|
||||
|
||||
Reference in New Issue
Block a user