Rename MethodRow parameters to be in line with type

This commit is contained in:
Koen Vlaswinkel
2023-04-05 11:15:05 +02:00
parent 4b54679ee9
commit e300b40ee5
2 changed files with 73 additions and 55 deletions

View File

@@ -143,8 +143,8 @@ export function DataExtensionsEditor(): JSX.Element {
{externalApiUsages.map((externalApiUsage) => (
<MethodRow
key={externalApiUsage.signature}
method={externalApiUsage}
model={modeledMethods[externalApiUsage.signature]}
externalApiUsage={externalApiUsage}
modeledMethod={modeledMethods[externalApiUsage.signature]}
onChange={onChange}
/>
))}

View File

@@ -29,100 +29,111 @@ const SupportedUnsupportedSpan = styled.span<SupportedUnsupportedSpanProps>`
`;
type Props = {
method: ExternalApiUsage;
model: ModeledMethod | undefined;
onChange: (method: ExternalApiUsage, model: ModeledMethod) => void;
externalApiUsage: ExternalApiUsage;
modeledMethod: ModeledMethod | undefined;
onChange: (
externalApiUsage: ExternalApiUsage,
modeledMethod: ModeledMethod,
) => void;
};
export const MethodRow = ({ method, model, onChange }: Props) => {
export const MethodRow = ({
externalApiUsage,
modeledMethod,
onChange,
}: Props) => {
const argumentsList = useMemo(() => {
if (method.methodParameters === "()") {
if (externalApiUsage.methodParameters === "()") {
return [];
}
return method.methodParameters
.substring(1, method.methodParameters.length - 1)
return externalApiUsage.methodParameters
.substring(1, externalApiUsage.methodParameters.length - 1)
.split(",");
}, [method.methodParameters]);
}, [externalApiUsage.methodParameters]);
const handleTypeInput = useCallback(
(e: InputEvent) => {
const target = e.target as HTMLSelectElement;
onChange(method, {
onChange(externalApiUsage, {
input: argumentsList.length === 0 ? "Argument[-1]" : "Argument[0]",
output: "ReturnType",
kind: "value",
...model,
...modeledMethod,
type: target.value as ModeledMethod["type"],
});
},
[onChange, method, model, argumentsList],
[onChange, externalApiUsage, modeledMethod, argumentsList],
);
const handleInputInput = useCallback(
(e: InputEvent) => {
if (!model) {
if (!modeledMethod) {
return;
}
const target = e.target as HTMLSelectElement;
onChange(method, {
...model,
onChange(externalApiUsage, {
...modeledMethod,
input: target.value as ModeledMethod["input"],
});
},
[onChange, method, model],
[onChange, externalApiUsage, modeledMethod],
);
const handleOutputInput = useCallback(
(e: InputEvent) => {
if (!model) {
if (!modeledMethod) {
return;
}
const target = e.target as HTMLSelectElement;
onChange(method, {
...model,
onChange(externalApiUsage, {
...modeledMethod,
output: target.value as ModeledMethod["output"],
});
},
[onChange, method, model],
[onChange, externalApiUsage, modeledMethod],
);
const handleKindInput = useCallback(
(e: InputEvent) => {
if (!model) {
if (!modeledMethod) {
return;
}
const target = e.target as HTMLSelectElement;
onChange(method, {
...model,
onChange(externalApiUsage, {
...modeledMethod,
kind: target.value as ModeledMethod["kind"],
});
},
[onChange, method, model],
[onChange, externalApiUsage, modeledMethod],
);
return (
<VSCodeDataGridRow>
<VSCodeDataGridCell gridColumn={1}>
<SupportedUnsupportedSpan supported={method.supported}>
{method.packageName}.{method.typeName}
<SupportedUnsupportedSpan supported={externalApiUsage.supported}>
{externalApiUsage.packageName}.{externalApiUsage.typeName}
</SupportedUnsupportedSpan>
</VSCodeDataGridCell>
<VSCodeDataGridCell gridColumn={2}>
<SupportedUnsupportedSpan supported={method.supported}>
{method.methodName}
{method.methodParameters}
<SupportedUnsupportedSpan supported={externalApiUsage.supported}>
{externalApiUsage.methodName}
{externalApiUsage.methodParameters}
</SupportedUnsupportedSpan>
</VSCodeDataGridCell>
<VSCodeDataGridCell gridColumn={3}>
{method.usages.length}
{externalApiUsage.usages.length}
</VSCodeDataGridCell>
<VSCodeDataGridCell gridColumn={4}>
{(!method.supported || (model && model?.type !== "none")) && (
<Dropdown value={model?.type ?? "none"} onInput={handleTypeInput}>
{(!externalApiUsage.supported ||
(modeledMethod && modeledMethod?.type !== "none")) && (
<Dropdown
value={modeledMethod?.type ?? "none"}
onInput={handleTypeInput}
>
<VSCodeOption value="none">Unmodelled</VSCodeOption>
<VSCodeOption value="source">Source</VSCodeOption>
<VSCodeOption value="sink">Sink</VSCodeOption>
@@ -132,34 +143,41 @@ export const MethodRow = ({ method, model, onChange }: Props) => {
)}
</VSCodeDataGridCell>
<VSCodeDataGridCell gridColumn={5}>
{model?.type && ["sink", "summary"].includes(model?.type) && (
<Dropdown value={model?.input} onInput={handleInputInput}>
<VSCodeOption value="Argument[-1]">Argument[-1]: this</VSCodeOption>
{argumentsList.map((argument, index) => (
<VSCodeOption key={argument} value={`Argument[${index}]`}>
Argument[{index}]: {argument}
{modeledMethod?.type &&
["sink", "summary"].includes(modeledMethod?.type) && (
<Dropdown value={modeledMethod?.input} onInput={handleInputInput}>
<VSCodeOption value="Argument[-1]">
Argument[-1]: this
</VSCodeOption>
))}
</Dropdown>
)}
{argumentsList.map((argument, index) => (
<VSCodeOption key={argument} value={`Argument[${index}]`}>
Argument[{index}]: {argument}
</VSCodeOption>
))}
</Dropdown>
)}
</VSCodeDataGridCell>
<VSCodeDataGridCell gridColumn={6}>
{model?.type && ["source", "summary"].includes(model?.type) && (
<Dropdown value={model?.output} onInput={handleOutputInput}>
<VSCodeOption value="ReturnValue">ReturnValue</VSCodeOption>
<VSCodeOption value="Argument[-1]">Argument[-1]: this</VSCodeOption>
{argumentsList.map((argument, index) => (
<VSCodeOption key={argument} value={`Argument[${index}]`}>
Argument[{index}]: {argument}
{modeledMethod?.type &&
["source", "summary"].includes(modeledMethod?.type) && (
<Dropdown value={modeledMethod?.output} onInput={handleOutputInput}>
<VSCodeOption value="ReturnValue">ReturnValue</VSCodeOption>
<VSCodeOption value="Argument[-1]">
Argument[-1]: this
</VSCodeOption>
))}
</Dropdown>
)}
{argumentsList.map((argument, index) => (
<VSCodeOption key={argument} value={`Argument[${index}]`}>
Argument[{index}]: {argument}
</VSCodeOption>
))}
</Dropdown>
)}
</VSCodeDataGridCell>
<VSCodeDataGridCell gridColumn={7}>
{model?.type && ["source", "sink", "summary"].includes(model?.type) && (
<TextField value={model?.kind} onInput={handleKindInput} />
)}
{modeledMethod?.type &&
["source", "sink", "summary"].includes(modeledMethod?.type) && (
<TextField value={modeledMethod?.kind} onInput={handleKindInput} />
)}
</VSCodeDataGridCell>
</VSCodeDataGridRow>
);