/*!
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
import keyMirror from 'nfvo-utils/KeyMirror.js';

export const actionTypes = keyMirror({

	OPEN_FLOW_DETAILS_EDITOR: null,
	CLOSE_FLOW_DETAILS_EDITOR: null,

	OPEN_FLOW_DIAGRAM_EDITOR: null,
	CLOSE_FLOW_DIAGRAM_EDITOR: null,

	FLOW_LIST_LOADED: null,
	ADD_OR_UPDATE_FLOW: null,
	ARTIFACT_LOADED: null,
	DELETE_FLOW: null,

	CURRENT_FLOW_DATA_CHANGED: null,

	RESET: null

});

export const enums = {
	WORKFLOW: 'WORKFLOW',
	NETWORK: 'NETWORK_CALL_FLOW',
	INFORMATIONAL: 'INFORMATIONAL',
	INSTANTIATION_FLOWS: 'instantiationflows',
	MESSAGE_FLOWS: 'messageflows'
};

export const FLOWS_EDITOR_FORM = 'FLOWS_FORM';
