1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-05-26 01:17:00 +02:00

chore: suggest nested properties in action filters (#6533)

https://linear.app/unleash/issue/2-2029/support-filtering-on-nested-properties

Suggests nested properties in action filters. Also sorts them
alphabetically.

Follow up to https://github.com/Unleash/unleash/pull/6531

<img width="381" alt="image"
src="https://github.com/Unleash/unleash/assets/14320932/4e2c900d-335b-4360-8be4-186f3887e42b">
This commit is contained in:
Nuno Góis 2024-03-13 16:07:01 +00:00 committed by GitHub
parent f7062e2296
commit bc6a96cf6b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 37 additions and 28 deletions

View File

@ -13,6 +13,7 @@ import Add from '@mui/icons-material/Add';
import { ProjectActionsPreviewPayload } from './ProjectActionsPreviewPayload';
import { useSignalEndpointSignals } from 'hooks/api/getters/useSignalEndpointSignals/useSignalEndpointSignals';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import { flattenPayload } from '@server/util/flattenPayload';
const StyledDivider = styled(Divider)(({ theme }) => ({
margin: theme.spacing(2, 0),
@ -86,7 +87,9 @@ export const ProjectActionsFormStepSource = ({
const lastSourcePayload = signalEndpointSignals[0]?.payload;
return {
lastSourcePayload,
filterSuggestions: Object.keys(lastSourcePayload || {}),
filterSuggestions: Object.keys(
flattenPayload(lastSourcePayload) || {},
).sort(),
};
}, [signalEndpointSignals]);

View File

@ -1,32 +1,38 @@
export const flattenPayload = (
payload = {},
payload: Record<string, unknown> = {},
parentKey = '',
): Record<string, unknown> =>
Object.entries(payload).reduce((acc, [key, value]) => {
const newKey = parentKey ? `${parentKey}.${key}` : key;
Object.entries(payload).reduce(
(acc, [key, value]) => {
const newKey = parentKey ? `${parentKey}.${key}` : key;
if (
typeof value === 'object' &&
value !== null &&
!Array.isArray(value)
) {
// If it's an object, recurse and merge the results
Object.assign(acc, flattenPayload(value, newKey));
} else if (Array.isArray(value)) {
// If it's an array, map through it and handle objects and non-objects differently
value.forEach((item, index) => {
if (typeof item === 'object' && item !== null) {
Object.assign(
acc,
flattenPayload(item, `${newKey}[${index}]`),
);
} else {
acc[`${newKey}[${index}]`] = item;
}
});
} else {
acc[newKey] = value;
}
if (
typeof value === 'object' &&
value !== null &&
!Array.isArray(value)
) {
// If it's an object, recurse and merge the results
Object.assign(
acc,
flattenPayload(value as Record<string, unknown>, newKey),
);
} else if (Array.isArray(value)) {
// If it's an array, map through it and handle objects and non-objects differently
value.forEach((item, index) => {
if (typeof item === 'object' && item !== null) {
Object.assign(
acc,
flattenPayload(item, `${newKey}[${index}]`),
);
} else {
acc[`${newKey}[${index}]`] = item;
}
});
} else {
acc[newKey] = value;
}
return acc;
}, {});
return acc;
},
{} as Record<string, unknown>,
);