(props: {
title: string
before: T | undefined
after: T | undefined
toChanges: (before?: T, after?: T) => Change[]
})
| 3 | import { throwExp } from 'shared/utility' |
| 4 | |
| 5 | export default function Diff<T>(props: { |
| 6 | title: string |
| 7 | before: T | undefined |
| 8 | after: T | undefined |
| 9 | toChanges: (before?: T, after?: T) => Change[] |
| 10 | }): JSX.Element { |
| 11 | return ( |
| 12 | <Show when={props.before !== props.after && props.before != null}> |
| 13 | <fieldset class='border-black border p-1'> |
| 14 | <legend> |
| 15 | <span class='p-2 px-4 font-bold'>{props.title}</span> |
| 16 | </legend> |
| 17 | {props.before == null || props.after == null ? ( |
| 18 | <>{props.after ?? props.before ?? throwExp()}</> |
| 19 | ) : ( |
| 20 | <For each={props.toChanges(props.before, props.after)}> |
| 21 | {({ added, removed, value }) => ( |
| 22 | <span |
| 23 | classList={{ |
| 24 | 'text-red-500': removed, |
| 25 | 'text-green-500': added, |
| 26 | }} |
| 27 | > |
| 28 | {value} |
| 29 | </span> |
| 30 | )} |
| 31 | </For> |
| 32 | )} |
| 33 | </fieldset> |
| 34 | </Show> |
| 35 | ) |
| 36 | } |
nothing calls this directly
no test coverage detected