## Description Fixes breaking of app when the source data inside menu items evaluated to NULL. Fixes #19106 ## Type of change - Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? - Manual - Jest ### Test Plan > https://github.com/appsmithorg/TestSmith/issues/2128 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
44 lines
1002 B
TypeScript
44 lines
1002 B
TypeScript
import { isArray } from "lodash";
|
|
|
|
export const getKeysFromSourceDataForEventAutocomplete = (
|
|
sourceData?: Array<Record<string, unknown>> | unknown,
|
|
) => {
|
|
if (isArray(sourceData) && sourceData?.length) {
|
|
const keys = getUniqueKeysFromSourceData(sourceData);
|
|
|
|
return {
|
|
currentItem: keys.reduce((prev, cur) => ({ ...prev, [cur]: "" }), {}),
|
|
};
|
|
} else {
|
|
return { currentItem: {} };
|
|
}
|
|
};
|
|
|
|
export const getUniqueKeysFromSourceData = (
|
|
sourceData?: Array<Record<string, unknown>>,
|
|
) => {
|
|
if (!isArray(sourceData) || !sourceData?.length) {
|
|
return [];
|
|
}
|
|
|
|
const allKeys: string[] = [];
|
|
|
|
// get all keys
|
|
sourceData?.forEach((item) => {
|
|
if (item) {
|
|
if (isArray(item) && item?.length) {
|
|
item.forEach((subItem) => {
|
|
allKeys.push(...Object.keys(subItem));
|
|
});
|
|
} else {
|
|
allKeys.push(...Object.keys(item));
|
|
}
|
|
}
|
|
});
|
|
|
|
// return unique keys
|
|
const uniqueKeys = [...new Set(allKeys)];
|
|
|
|
return uniqueKeys;
|
|
};
|