function createAttachmentReducers()

in src/views/create-issue/create-issue-reducers.ts [131:210]


function createAttachmentReducers() {
  return {
    [attachmentTypes.ATTACH_START_ADDING](
      state: CreateIssueState,
      action: {
        attachingImage: Attachment;
      }
    ): CreateIssueState {
      const {attachingImage} = action;
      return {
        ...state,
        issue: {
          ...state.issue,
          attachments: [...state.issue.attachments, attachingImage],
        },
        attachingImage,
      };
    },

    [attachmentTypes.ATTACH_CANCEL_ADDING](
      state: CreateIssueState,
      action: {
        attachingImage: Record<string, any>;
      }
    ): CreateIssueState {
      const {attachingImage} = action;
      return {
        ...state,
        issue: {
          ...state.issue,
          attachments: state.issue.attachments.filter(attachment => attachment !== attachingImage),
        },
        attachingImage: null,
      };
    },

    [attachmentTypes.ATTACH_REMOVE](
      state: CreateIssueState,
      action: {
        attachmentId: string;
      }
    ): CreateIssueState {
      return {
        ...state,
        issue: {
          ...state.issue,
          attachments: state.issue.attachments.filter(attach => attach.id !== action.attachmentId),
        },
      };
    },

    [attachmentTypes.ATTACH_STOP_ADDING](state: CreateIssueState): CreateIssueState {
      return {...state, attachingImage: null};
    },

    [attachmentTypes.ATTACH_TOGGLE_ADD_FILE_DIALOG](
      state: CreateIssueState,
      action: {
        isAttachFileDialogVisible: boolean;
      }
    ): CreateIssueState {
      return {
        ...state,
        isAttachFileDialogVisible: action.isAttachFileDialogVisible,
      };
    },

    [attachmentTypes.ATTACH_RECEIVE_ALL_ATTACHMENTS](
      state: CreateIssueState,
      action: {
        attachments: Attachment[];
      }
    ): CreateIssueState {
      return {
        ...state,
        issue: {...state.issue, attachments: action.attachments},
      };
    },
  };
}