Compare commits

...
Author SHA1 Message Date
Shivam Mishra ce0388d9de test: remove conditions for value 2023-05-17 16:46:34 +05:30
Shivam Mishra 17052113f5 revert: priority conditions change 2023-05-17 16:37:25 +05:30
Shivam Mishra c4dd3df6ad revert: action query value change 2023-05-17 16:37:02 +05:30
Shivam Mishra ad278c5d60 refactor: update id 2023-05-17 16:14:10 +05:30
Shivam Mishra d66c95d0b6 test: actionQueryGenerator 2023-05-17 15:48:22 +05:30
Shivam Mishra 6adc1f31e9 refactor: allow checking value prop 2023-05-17 15:48:10 +05:30
Shivam Mishra 1db4850a5d feat: add value prop 2023-05-17 15:29:31 +05:30
Shivam Mishra d67c541943 feat: add better test 2023-05-17 15:28:47 +05:30
Shivam Mishra e89e213245 refactor: add js docs 2023-05-17 15:15:37 +05:30
Shivam Mishra c57a108f13 refactor: actionQueryGenerator
The previous implementation would heavily modify any parameters passed to it, this change fixes it
2023-05-17 15:11:20 +05:30
3 changed files with 128 additions and 26 deletions
@@ -1,46 +1,87 @@
/**
* Formats an array of elements into a string.
* @param {Array} arr - The array of elements.
* @returns {boolean} - Returns true if all elements in the array are of type 'string', otherwise returns false.
*/
const allElementsString = arr => { const allElementsString = arr => {
return arr.every(elem => typeof elem === 'string'); return arr.every(elem => typeof elem === 'string');
}; };
/**
* Checks if all elements in an array are of type 'number'.
* @param {Array} arr - The array of elements.
* @returns {boolean} - Returns true if all elements in the array are of type 'number', otherwise returns false.
*/
const allElementsNumbers = arr => { const allElementsNumbers = arr => {
return arr.every(elem => typeof elem === 'number'); return arr.every(elem => typeof elem === 'number');
}; };
const formatArray = params => { /**
if (params.length <= 0) { * Formats an array of action parameters.
params = []; * @param {Array} params - The array of action parameters.
} else if (allElementsString(params) || allElementsNumbers(params)) { * @returns {Array} - Returns the formatted array of action parameters.
params = [...params]; */
} else { const formatActionParamsArray = params => {
params = params.map(val => val.id); if (params.length === 0) {
return [];
} }
return params;
if (allElementsString(params) || allElementsNumbers(params)) {
return [...params];
}
return params.map(val => val.id);
}; };
const generatePayloadForObject = item => { /**
if (item.action_params.id) { * Formats an object of action parameters.
item.action_params = [item.action_params.id]; * @param {Object} params - The object of action parameters.
} else { * @returns {Array} - Returns the formatted array of action parameters.
item.action_params = [item.action_params]; */
const formatActionParamsObject = params => {
if (params?.id) {
return [params.id];
} }
return item.action_params;
return [params];
}; };
/**
* Processes the action parameters and returns them in a formatted array.
* @param {Array|Object} action_params - The action parameters to be processed.
* @returns {Array} - Returns the processed and formatted array of action parameters.
*/
const processActionParams = action_params => {
if (!action_params) {
return [];
}
if (Array.isArray(action_params)) {
return formatActionParamsArray(action_params);
}
if (typeof action_params === 'object') {
return formatActionParamsObject(action_params);
}
return [action_params];
};
/**
* Generates the payload by processing the data and formatting the action parameters.
* @param {Array} data - The data containing actions and their parameters.
* @returns {Array} - Returns the generated payload with processed action parameters.
*/
const generatePayload = data => { const generatePayload = data => {
const actions = JSON.parse(JSON.stringify(data)); const actions = JSON.parse(JSON.stringify(data));
let payload = actions.map(item => {
if (Array.isArray(item.action_params)) { return actions.map(item => {
item.action_params = formatArray(item.action_params); const { action_params } = item;
} else if (typeof item.action_params === 'object') { return {
item.action_params = generatePayloadForObject(item); ...item,
} else if (!item.action_params) { action_params: processActionParams(action_params),
item.action_params = []; };
} else {
item.action_params = [item.action_params];
}
return item;
}); });
return payload;
}; };
export default generatePayload; export default generatePayload;
@@ -5,6 +5,7 @@ import {
} from 'dashboard/routes/dashboard/settings/automation/operators'; } from 'dashboard/routes/dashboard/settings/automation/operators';
import filterQueryGenerator from './filterQueryGenerator'; import filterQueryGenerator from './filterQueryGenerator';
import actionQueryGenerator from './actionQueryGenerator'; import actionQueryGenerator from './actionQueryGenerator';
const MESSAGE_CONDITION_VALUES = [ const MESSAGE_CONDITION_VALUES = [
{ {
id: 'incoming', id: 'incoming',
@@ -5,6 +5,18 @@ const testData = [
action_name: 'add_label', action_name: 'add_label',
action_params: [{ id: 'testlabel', name: 'testlabel' }], action_params: [{ id: 'testlabel', name: 'testlabel' }],
}, },
{
action_name: 'add_label_empty',
action_params: [],
},
{
action_name: 'add_label_string_array',
action_params: ['test_1', 'test_2', 'test_3'],
},
{
action_name: 'add_label_number_array',
action_params: [1, 2, 3],
},
{ {
action_name: 'assign_team', action_name: 'assign_team',
action_params: [ action_params: [
@@ -18,6 +30,22 @@ const testData = [
}, },
], ],
}, },
{
action_name: 'assign_priority',
action_params: { id: 'high', name: 'High' },
},
{
action_name: 'test_action_with_no_id_no_value',
action_params: { name: 'High' },
},
{
action_name: 'test_action_with_nullish_action_params',
action_params: null,
},
{
action_name: 'test_action_with_simple_value_as_action_params',
action_params: 'some-value',
},
]; ];
const finalResult = [ const finalResult = [
@@ -25,10 +53,42 @@ const finalResult = [
action_name: 'add_label', action_name: 'add_label',
action_params: ['testlabel'], action_params: ['testlabel'],
}, },
{
action_name: 'add_label_empty',
action_params: [],
},
{
action_name: 'add_label_string_array',
action_params: ['test_1', 'test_2', 'test_3'],
},
{
action_name: 'add_label_number_array',
action_params: [1, 2, 3],
},
{ {
action_name: 'assign_team', action_name: 'assign_team',
action_params: [1], action_params: [1],
}, },
{
action_name: 'assign_priority',
action_params: ['high'],
},
{
action_name: 'test_action_with_no_id_no_value',
action_params: [
{
name: 'High',
},
],
},
{
action_name: 'test_action_with_nullish_action_params',
action_params: [],
},
{
action_name: 'test_action_with_simple_value_as_action_params',
action_params: ['some-value'],
},
]; ];
describe('#actionQueryGenerator', () => { describe('#actionQueryGenerator', () => {