PromucFlow_constructor/app/client/src/widgets/MenuButtonWidget/widget/helper.ts
Dhruvik Neharia dcb93797cf
fix: Prevent falsy values from breaking the app (#20243)
## 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
2023-02-03 00:29:00 +05:30

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;
};