-
Notifications
You must be signed in to change notification settings - Fork 228
Expand file tree
/
Copy pathMethodModeling.tsx
More file actions
88 lines (81 loc) · 2.61 KB
/
MethodModeling.tsx
File metadata and controls
88 lines (81 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import { styled } from "styled-components";
import type { ModelingStatus } from "../../model-editor/shared/modeling-status";
import { ModelingStatusIndicator } from "../model-editor/ModelingStatusIndicator";
import type { Method } from "../../model-editor/method";
import { MethodName } from "../model-editor/MethodName";
import type { ModeledMethod } from "../../model-editor/modeled-method";
import { Tag } from "../common/Tag";
import { ReviewInEditorButton } from "./ReviewInEditorButton";
import { MultipleModeledMethodsPanel } from "./MultipleModeledMethodsPanel";
import type { QueryLanguage } from "../../common/query-language";
import type { ModelConfig } from "../../model-editor/languages";
const Container = styled.div`
padding-top: 0.5rem;
margin-bottom: 1rem;
width: 100%;
`;
const Title = styled.div`
padding-bottom: 0.5rem;
font-size: 0.9rem;
text-transform: uppercase;
display: flex;
justify-content: space-between;
align-items: center;
`;
const DependencyContainer = styled.div`
display: flex;
flex-direction: row;
align-items: center;
gap: 0.5em;
background-color: var(--vscode-editor-background);
border: 0.05rem solid var(--vscode-panelSection-border);
border-radius: 0.3rem;
padding: 0.5rem;
word-wrap: break-word;
word-break: break-all;
margin-bottom: 0.8rem;
`;
const StyledTag = styled(Tag)<{ $visible: boolean }>`
visibility: ${(props) => (props.$visible ? "visible" : "hidden")};
`;
const UnsavedTag = ({ modelingStatus }: { modelingStatus: ModelingStatus }) => (
<StyledTag $visible={modelingStatus === "unsaved"}>Unsaved</StyledTag>
);
export type MethodModelingProps = {
language: QueryLanguage;
modelConfig: ModelConfig;
modelingStatus: ModelingStatus;
method: Method;
modeledMethods: ModeledMethod[];
onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
};
export const MethodModeling = ({
language,
modelConfig,
modelingStatus,
modeledMethods,
method,
onChange,
}: MethodModelingProps): React.JSX.Element => {
return (
<Container>
<Title>
{method.packageName}
{method.libraryVersion && <>@{method.libraryVersion}</>}
<UnsavedTag modelingStatus={modelingStatus} />
</Title>
<DependencyContainer>
<ModelingStatusIndicator status={modelingStatus} />
<MethodName {...method} />
</DependencyContainer>
<MultipleModeledMethodsPanel
language={language}
modelConfig={modelConfig}
method={method}
modeledMethods={modeledMethods}
onChange={onChange}
/>
<ReviewInEditorButton method={method} />
</Container>
);
};