fix(striker-ui): allow skip entry in form summary

main
Tsu-ba-me 11 months ago
parent e8ac1a9c4f
commit 1cfd588448
  1. 46
      striker-ui/components/FormSummary.tsx
  2. 6
      striker-ui/types/FormSummary.d.ts

@ -42,6 +42,7 @@ const buildEntryList = ({
maxDepth,
renderEntry,
renderEntryValue,
skip,
}: {
depth?: number;
entries: FormEntries;
@ -52,6 +53,7 @@ const buildEntryList = ({
maxDepth: number;
renderEntry: RenderFormEntryFunction;
renderEntryValue: RenderFormValueFunction;
skip: Exclude<FormSummaryOptionalProps['skip'], undefined>;
}): ReactElement => {
const result: ReactElement[] = [];
@ -59,24 +61,33 @@ const buildEntryList = ({
const itemId = `form-summary-entry-${itemKey}`;
const nest = entry !== null && typeof entry === 'object';
const value = nest ? null : entry;
result.push(
<MUIListItem
key={itemId}
sx={{ paddingLeft: `${depth}em` }}
{...getListItemProps?.call(null, { depth, entry: value, key: itemKey })}
>
{renderEntry({
depth,
entry: value,
getLabel: getEntryLabel,
key: itemKey,
nest,
renderValue: renderEntryValue,
})}
</MUIListItem>,
);
const fnArgs: CommonFormEntryHandlerArgs = {
depth,
entry: value,
key: itemKey,
};
if (skip(({ key }) => !/confirm/i.test(key), fnArgs)) {
result.push(
<MUIListItem
key={itemId}
sx={{ paddingLeft: `${depth}em` }}
{...getListItemProps?.call(null, fnArgs)}
>
{renderEntry({
depth,
entry: value,
getLabel: getEntryLabel,
key: itemKey,
nest,
renderValue: renderEntryValue,
})}
</MUIListItem>,
);
}
if (nest && depth < maxDepth) {
result.push(
@ -88,6 +99,7 @@ const buildEntryList = ({
maxDepth,
renderEntry,
renderEntryValue,
skip,
}),
);
}
@ -134,6 +146,7 @@ const FormSummary = <T extends FormEntries>({
? renderEntryValueWithPassword(args)
: renderEntryValueWithMono(args);
},
skip = (base, ...args) => base(...args),
}: FormSummaryProps<T>): ReturnType<FC<FormSummaryProps<T>>> =>
buildEntryList({
entries,
@ -143,6 +156,7 @@ const FormSummary = <T extends FormEntries>({
maxDepth,
renderEntry,
renderEntryValue,
skip,
});
export default FormSummary;

@ -40,6 +40,8 @@ type RenderFormEntryFunction = (
},
) => import('react').ReactElement;
type SkipFormEntryFunction = (args: CommonFormEntryHandlerArgs) => boolean;
type FormSummaryOptionalProps = {
getEntryLabel?: GetFormEntryLabelFunction;
getListProps?: GetFormEntriesPropsFunction;
@ -48,6 +50,10 @@ type FormSummaryOptionalProps = {
maxDepth?: number;
renderEntry?: RenderFormEntryFunction;
renderEntryValue?: RenderFormValueFunction;
skip?: (
base: SkipFormEntryFunction,
...args: Parameters<SkipFormEntryFunction>
) => ReturnType<SkipFormEntryFunction>;
};
type FormSummaryProps<T extends FormEntries> = FormSummaryOptionalProps & {

Loading…
Cancel
Save