File size: 1,676 Bytes
d9494a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { type MessageDescriptor } from '@lingui/core';
import { msg } from '@lingui/core/macro';
import { assertUnreachable } from 'twenty-shared/utils';

import { CustomException } from 'src/utils/custom-exception';

export enum CommandMenuItemExceptionCode {
  COMMAND_MENU_ITEM_NOT_FOUND = 'COMMAND_MENU_ITEM_NOT_FOUND',
  INVALID_COMMAND_MENU_ITEM_INPUT = 'INVALID_COMMAND_MENU_ITEM_INPUT',
  WORKFLOW_OR_FRONT_COMPONENT_REQUIRED = 'WORKFLOW_OR_FRONT_COMPONENT_REQUIRED',
  COMMAND_MENU_ITEM_CANNOT_BE_RESET = 'COMMAND_MENU_ITEM_CANNOT_BE_RESET',
}

const getCommandMenuItemExceptionUserFriendlyMessage = (
  code: CommandMenuItemExceptionCode,
) => {
  switch (code) {
    case CommandMenuItemExceptionCode.COMMAND_MENU_ITEM_NOT_FOUND:
      return msg`Command menu item not found.`;
    case CommandMenuItemExceptionCode.INVALID_COMMAND_MENU_ITEM_INPUT:
      return msg`Invalid command menu item input.`;
    case CommandMenuItemExceptionCode.WORKFLOW_OR_FRONT_COMPONENT_REQUIRED:
      return msg`Either workflow version or front component is required.`;
    case CommandMenuItemExceptionCode.COMMAND_MENU_ITEM_CANNOT_BE_RESET:
      return msg`Custom command menu item cannot be reset to default.`;
    default:
      assertUnreachable(code);
  }
};

export class CommandMenuItemException extends CustomException<CommandMenuItemExceptionCode> {
  constructor(
    message: string,
    code: CommandMenuItemExceptionCode,
    { userFriendlyMessage }: { userFriendlyMessage?: MessageDescriptor } = {},
  ) {
    super(message, code, {
      userFriendlyMessage:
        userFriendlyMessage ??
        getCommandMenuItemExceptionUserFriendlyMessage(code),
    });
  }
}