@scm-manager/ui-components 2.27.3-20211117-144126 → 2.27.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +8 -7
- package/src/Autocomplete.tsx +6 -7
- package/src/BranchSelector.tsx +2 -2
- package/src/Breadcrumb.tsx +0 -1
- package/src/CardColumnGroup.tsx +6 -6
- package/src/DangerZone.tsx +0 -1
- package/src/DateFromNow.tsx +1 -2
- package/src/DateShort.tsx +1 -2
- package/src/ErrorBoundary.tsx +2 -2
- package/src/Icon.tsx +4 -4
- package/src/Logo.stories.tsx +0 -1
- package/src/OverviewPageActions.tsx +2 -2
- package/src/SplitAndReplace.tsx +2 -3
- package/src/SyntaxHighlighter.stories.tsx +1 -1
- package/src/Tooltip.tsx +1 -1
- package/src/__snapshots__/storyshots.test.ts.snap +2086 -1068
- package/src/buttons/Button.tsx +34 -33
- package/src/forms/FileInput.tsx +1 -1
- package/src/forms/FileUpload.tsx +1 -1
- package/src/forms/FilterInput.tsx +0 -1
- package/src/forms/InputField.tsx +2 -2
- package/src/forms/Select.tsx +4 -4
- package/src/forms/TriStateCheckbox.tsx +2 -2
- package/src/index.ts +3 -4
- package/src/languages.test.ts +5 -1
- package/src/languages.ts +10 -1
- package/src/layout/Footer.tsx +1 -1
- package/src/layout/Header.tsx +2 -2
- package/src/layout/index.ts +1 -2
- package/src/modals/FullscreenModal.tsx +1 -1
- package/src/modals/Modal.tsx +6 -6
- package/src/navigation/RoutingProps.ts +1 -3
- package/src/navigation/SecondaryNavigation.stories.tsx +3 -3
- package/src/navigation/SecondaryNavigation.tsx +1 -1
- package/src/popover/Popover.tsx +7 -7
- package/src/repos/DiffFile.tsx +15 -21
- package/src/repos/HealthCheckFailureDetail.tsx +2 -2
- package/src/repos/RepositoryEntry.tsx +6 -9
- package/src/repos/RepositoryFlags.tsx +2 -2
- package/src/repos/TokenizedDiffView.tsx +2 -20
- package/src/repos/annotate/Annotate.stories.tsx +1 -1
- package/src/repos/annotate/AnnotateLine.tsx +0 -1
- package/src/repos/index.ts +0 -2
- package/src/repos/refractorAdapter.ts +6 -11
- package/src/search/HighlightedFragment.tsx +4 -7
- package/src/search/TextHitField.tsx +18 -34
- package/src/styleConstants.ts +1 -2
- package/src/syntax-highlighting.module.css +1 -1
- package/src/SmallLoadingSpinner.stories.tsx +0 -32
- package/src/SmallLoadingSpinner.tsx +0 -34
- package/src/__resources__/ContentSearchHit.ts +0 -73
- package/src/layout/SubSubtitle.tsx +0 -41
- package/src/search/SyntaxHighlightedFragment.tsx +0 -130
- package/src/search/TextHitField.stories.tsx +0 -54
package/src/buttons/Button.tsx
CHANGED
|
@@ -61,43 +61,32 @@ const Button: FC<Props> = ({
|
|
|
61
61
|
loading,
|
|
62
62
|
disabled,
|
|
63
63
|
action,
|
|
64
|
-
color = "default"
|
|
64
|
+
color = "default",
|
|
65
65
|
}) => {
|
|
66
66
|
const renderIcon = () => {
|
|
67
67
|
return <>{icon ? <Icon name={icon} color="inherit" className="is-medium pr-1" /> : null}</>;
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
-
const classes = classNames(
|
|
71
|
-
"button",
|
|
72
|
-
"is-" + color,
|
|
73
|
-
{ "is-loading": loading },
|
|
74
|
-
{ "is-fullwidth": fullWidth },
|
|
75
|
-
{ "is-reduced-mobile": reducedMobile },
|
|
76
|
-
className
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
const content = (
|
|
80
|
-
<>
|
|
81
|
-
{renderIcon()}{" "}
|
|
82
|
-
{(label || children) && (
|
|
83
|
-
<>
|
|
84
|
-
{label} {children}
|
|
85
|
-
</>
|
|
86
|
-
)}
|
|
87
|
-
</>
|
|
88
|
-
);
|
|
89
|
-
|
|
90
70
|
if (link && !disabled) {
|
|
91
|
-
if (link.includes("://")) {
|
|
92
|
-
return (
|
|
93
|
-
<a className={classes} href={link} aria-label={label}>
|
|
94
|
-
{content}
|
|
95
|
-
</a>
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
71
|
return (
|
|
99
|
-
<Link
|
|
100
|
-
{
|
|
72
|
+
<Link
|
|
73
|
+
className={classNames(
|
|
74
|
+
"button",
|
|
75
|
+
"is-" + color,
|
|
76
|
+
{ "is-loading": loading },
|
|
77
|
+
{ "is-fullwidth": fullWidth },
|
|
78
|
+
{ "is-reduced-mobile": reducedMobile },
|
|
79
|
+
className
|
|
80
|
+
)}
|
|
81
|
+
to={link}
|
|
82
|
+
aria-label={label}
|
|
83
|
+
>
|
|
84
|
+
{renderIcon()}{" "}
|
|
85
|
+
{(label || children) && (
|
|
86
|
+
<>
|
|
87
|
+
{label} {children}
|
|
88
|
+
</>
|
|
89
|
+
)}
|
|
101
90
|
</Link>
|
|
102
91
|
);
|
|
103
92
|
}
|
|
@@ -107,11 +96,23 @@ const Button: FC<Props> = ({
|
|
|
107
96
|
type={type}
|
|
108
97
|
title={title}
|
|
109
98
|
disabled={disabled}
|
|
110
|
-
onClick={event => action && action(event)}
|
|
111
|
-
className={
|
|
99
|
+
onClick={(event) => action && action(event)}
|
|
100
|
+
className={classNames(
|
|
101
|
+
"button",
|
|
102
|
+
"is-" + color,
|
|
103
|
+
{ "is-loading": loading },
|
|
104
|
+
{ "is-fullwidth": fullWidth },
|
|
105
|
+
{ "is-reduced-mobile": reducedMobile },
|
|
106
|
+
className
|
|
107
|
+
)}
|
|
112
108
|
{...createAttributesForTesting(testId)}
|
|
113
109
|
>
|
|
114
|
-
{
|
|
110
|
+
{renderIcon()}{" "}
|
|
111
|
+
{(label || children) && (
|
|
112
|
+
<>
|
|
113
|
+
{label} {children}
|
|
114
|
+
</>
|
|
115
|
+
)}
|
|
115
116
|
</button>
|
|
116
117
|
);
|
|
117
118
|
};
|
package/src/forms/FileInput.tsx
CHANGED
|
@@ -102,7 +102,7 @@ const FileInput: FC<Props> = ({
|
|
|
102
102
|
{file?.name ? (
|
|
103
103
|
<span className="file-name">{file?.name}</span>
|
|
104
104
|
) : (
|
|
105
|
-
<span className="file-name has-text-weight-light has-text-
|
|
105
|
+
<span className="file-name has-text-weight-light has-text-grey-light">
|
|
106
106
|
{filenamePlaceholder || t("fileInput.noFileChosen")}
|
|
107
107
|
</span>
|
|
108
108
|
)}
|
package/src/forms/FileUpload.tsx
CHANGED
|
@@ -60,7 +60,7 @@ const FileUpload: FC<Props> = ({ handleFile, filenamePlaceholder = "", disabled
|
|
|
60
60
|
{file?.name ? (
|
|
61
61
|
<span className="file-name">{file?.name}</span>
|
|
62
62
|
) : (
|
|
63
|
-
<span className="file-name has-text-weight-light has-text-
|
|
63
|
+
<span className="file-name has-text-weight-light has-text-grey-light ">{filenamePlaceholder}</span>
|
|
64
64
|
)}
|
|
65
65
|
</label>
|
|
66
66
|
</div>
|
|
@@ -77,7 +77,6 @@ const FilterInput: FC<Props> = ({ filter, value, testId, placeholder, autoFocus,
|
|
|
77
77
|
onChange={event => setStateValue(event.target.value)}
|
|
78
78
|
autoFocus={autoFocus || false}
|
|
79
79
|
aria-describedby={id}
|
|
80
|
-
aria-label={t("filterEntries")}
|
|
81
80
|
{...createAttributesForTesting(testId)}
|
|
82
81
|
/>
|
|
83
82
|
<span className="icon is-small is-left">
|
package/src/forms/InputField.tsx
CHANGED
|
@@ -33,7 +33,7 @@ type BaseProps = {
|
|
|
33
33
|
label?: string;
|
|
34
34
|
name?: string;
|
|
35
35
|
placeholder?: string;
|
|
36
|
-
value?: string
|
|
36
|
+
value?: string;
|
|
37
37
|
type?: string;
|
|
38
38
|
autofocus?: boolean;
|
|
39
39
|
onReturnPressed?: () => void;
|
|
@@ -44,7 +44,7 @@ type BaseProps = {
|
|
|
44
44
|
helpText?: string;
|
|
45
45
|
className?: string;
|
|
46
46
|
testId?: string;
|
|
47
|
-
defaultValue?: string
|
|
47
|
+
defaultValue?: string;
|
|
48
48
|
readOnly?: boolean;
|
|
49
49
|
};
|
|
50
50
|
|
package/src/forms/Select.tsx
CHANGED
|
@@ -69,7 +69,7 @@ const InnerSelect: FC<FieldProps<BaseProps, HTMLSelectElement, string>> = ({
|
|
|
69
69
|
const field = useInnerRef(props.innerRef);
|
|
70
70
|
|
|
71
71
|
let opts = options;
|
|
72
|
-
if (value && addValueToOptions && !options.some(o => o.value === value)) {
|
|
72
|
+
if (value && addValueToOptions && !options.some((o) => o.value === value)) {
|
|
73
73
|
opts = [{ label: value, value }, ...options];
|
|
74
74
|
}
|
|
75
75
|
|
|
@@ -124,11 +124,11 @@ const InnerSelect: FC<FieldProps<BaseProps, HTMLSelectElement, string>> = ({
|
|
|
124
124
|
onChange={handleInput}
|
|
125
125
|
onBlur={handleBlur}
|
|
126
126
|
disabled={disabled}
|
|
127
|
-
aria-labelledby={
|
|
128
|
-
aria-describedby={
|
|
127
|
+
aria-labelledby={a11yId}
|
|
128
|
+
aria-describedby={helpId}
|
|
129
129
|
{...createAttributesForTesting(testId)}
|
|
130
130
|
>
|
|
131
|
-
{opts.map(opt => {
|
|
131
|
+
{opts.map((opt) => {
|
|
132
132
|
return (
|
|
133
133
|
<option value={opt.value} key={"KEY_" + opt.value}>
|
|
134
134
|
{opt.label}
|
|
@@ -51,11 +51,11 @@ const TriStateCheckbox: FC<Props> = ({ checked, indeterminate, disabled, label,
|
|
|
51
51
|
|
|
52
52
|
let color;
|
|
53
53
|
if (disabled) {
|
|
54
|
-
color = "
|
|
54
|
+
color = "grey-light";
|
|
55
55
|
} else if (checked || indeterminate) {
|
|
56
56
|
color = "link";
|
|
57
57
|
} else {
|
|
58
|
-
color = "
|
|
58
|
+
color = "black";
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
// We need a tabIndex to make the checkbox accessible from keyboard.
|
package/src/index.ts
CHANGED
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
DiffEventHandler,
|
|
38
38
|
File,
|
|
39
39
|
FileChangeType,
|
|
40
|
-
Hunk
|
|
40
|
+
Hunk,
|
|
41
41
|
} from "./repos";
|
|
42
42
|
|
|
43
43
|
export { validation, repositories };
|
|
@@ -51,7 +51,6 @@ export { default as ErrorPage } from "./ErrorPage";
|
|
|
51
51
|
export { default as Icon } from "./Icon";
|
|
52
52
|
export { default as Image } from "./Image";
|
|
53
53
|
export { default as Loading } from "./Loading";
|
|
54
|
-
export { default as SmallLoadingSpinner } from "./SmallLoadingSpinner";
|
|
55
54
|
export { default as Logo } from "./Logo";
|
|
56
55
|
export { default as MailLink } from "./MailLink";
|
|
57
56
|
export { default as Notification } from "./Notification";
|
|
@@ -114,7 +113,7 @@ export {
|
|
|
114
113
|
AnnotationFactory,
|
|
115
114
|
AnnotationFactoryContext,
|
|
116
115
|
DiffEventHandler,
|
|
117
|
-
DiffEventContext
|
|
116
|
+
DiffEventContext,
|
|
118
117
|
};
|
|
119
118
|
|
|
120
119
|
// Re-export from ui-api
|
|
@@ -131,7 +130,7 @@ export {
|
|
|
131
130
|
MissingLinkError,
|
|
132
131
|
createBackendError,
|
|
133
132
|
isBackendError,
|
|
134
|
-
TOKEN_EXPIRED_ERROR_CODE
|
|
133
|
+
TOKEN_EXPIRED_ERROR_CODE,
|
|
135
134
|
} from "@scm-manager/ui-api";
|
|
136
135
|
|
|
137
136
|
export { urls };
|
package/src/languages.test.ts
CHANGED
|
@@ -35,7 +35,7 @@ describe("syntax highlighter", () => {
|
|
|
35
35
|
expect(java).toBe("java");
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
it("should return text if language is
|
|
38
|
+
it("should return text if language is undefied", () => {
|
|
39
39
|
const lang = determineLanguage();
|
|
40
40
|
expect(lang).toBe("text");
|
|
41
41
|
});
|
|
@@ -45,4 +45,8 @@ describe("syntax highlighter", () => {
|
|
|
45
45
|
expect(lang).toBe("text");
|
|
46
46
|
});
|
|
47
47
|
|
|
48
|
+
it("should use alias go for golang", () => {
|
|
49
|
+
const go = determineLanguage("golang");
|
|
50
|
+
expect(go).toBe("go");
|
|
51
|
+
});
|
|
48
52
|
});
|
package/src/languages.ts
CHANGED
|
@@ -22,11 +22,20 @@
|
|
|
22
22
|
* SOFTWARE.
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
+
// this aliases are only to map from spotter detection to prismjs
|
|
26
|
+
const languageAliases: { [key: string]: string } = {
|
|
27
|
+
golang: "go",
|
|
28
|
+
};
|
|
29
|
+
|
|
25
30
|
export const defaultLanguage = "text";
|
|
26
31
|
|
|
27
32
|
export const determineLanguage = (language?: string) => {
|
|
28
33
|
if (!language) {
|
|
29
34
|
return defaultLanguage;
|
|
30
35
|
}
|
|
31
|
-
|
|
36
|
+
const lang = language.toLowerCase();
|
|
37
|
+
if (languageAliases[lang]) {
|
|
38
|
+
return languageAliases[lang];
|
|
39
|
+
}
|
|
40
|
+
return lang;
|
|
32
41
|
};
|
package/src/layout/Footer.tsx
CHANGED
|
@@ -97,7 +97,7 @@ const Footer: FC<Props> = ({ me, version, links }) => {
|
|
|
97
97
|
<div className="columns is-size-7">
|
|
98
98
|
{me ? (
|
|
99
99
|
<FooterSection title={meSectionTile}>
|
|
100
|
-
<NavLink to="/me
|
|
100
|
+
<NavLink to="/me" label={t("footer.user.profile")} testId="footer-user-profile" />
|
|
101
101
|
{me?._links?.password && (
|
|
102
102
|
<NavLink to="/me/settings/password" label={t("profile.changePasswordNavLink")} />
|
|
103
103
|
)}
|
package/src/layout/Header.tsx
CHANGED
|
@@ -37,7 +37,7 @@ const SmallHeader: FC<{ children: ReactNode }> = ({ children }) => {
|
|
|
37
37
|
|
|
38
38
|
const LargeHeader: FC = () => {
|
|
39
39
|
return (
|
|
40
|
-
<
|
|
40
|
+
<section className="hero has-scm-background is-small">
|
|
41
41
|
<div className="hero-body">
|
|
42
42
|
<div className="container">
|
|
43
43
|
<div className="columns is-vcentered">
|
|
@@ -47,7 +47,7 @@ const LargeHeader: FC = () => {
|
|
|
47
47
|
</div>
|
|
48
48
|
</div>
|
|
49
49
|
</div>
|
|
50
|
-
</
|
|
50
|
+
</section>
|
|
51
51
|
);
|
|
52
52
|
};
|
|
53
53
|
|
package/src/layout/index.ts
CHANGED
|
@@ -29,9 +29,8 @@ export { default as Header } from "./Header";
|
|
|
29
29
|
export { default as Level } from "./Level";
|
|
30
30
|
export { default as Page } from "./Page";
|
|
31
31
|
export { default as PageActions } from "./PageActions";
|
|
32
|
-
export { default as Title } from "./Title";
|
|
33
32
|
export { default as Subtitle } from "./Subtitle";
|
|
34
|
-
export { default as
|
|
33
|
+
export { default as Title } from "./Title";
|
|
35
34
|
export { default as CustomQueryFlexWrappedColumns } from "./CustomQueryFlexWrappedColumns";
|
|
36
35
|
export { default as PrimaryContentColumn } from "./PrimaryContentColumn";
|
|
37
36
|
export { default as SecondaryNavigationColumn } from "./SecondaryNavigationColumn";
|
|
@@ -45,7 +45,7 @@ const FullSizedModal = styled(Modal)`
|
|
|
45
45
|
|
|
46
46
|
const FullscreenModal: FC<Props> = ({ title, closeFunction, body, active, closeButtonLabel }) => {
|
|
47
47
|
const [t] = useTranslation("repos");
|
|
48
|
-
const footer = <Button label={closeButtonLabel || t("diff.fullscreen.close")} action={closeFunction} color="
|
|
48
|
+
const footer = <Button label={closeButtonLabel || t("diff.fullscreen.close")} action={closeFunction} color="grey" />;
|
|
49
49
|
|
|
50
50
|
return <FullSizedModal title={title} closeFunction={closeFunction} body={body} footer={footer} active={active} />;
|
|
51
51
|
};
|
package/src/modals/Modal.tsx
CHANGED
|
@@ -45,7 +45,7 @@ type Props = {
|
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
const SizedModal = styled.div<{ size?: ModalSize }>`
|
|
48
|
-
width: ${props => (props.size ? `${modalSizes[props.size]}%` : "640px")};
|
|
48
|
+
width: ${(props) => (props.size ? `${modalSizes[props.size]}%` : "640px")};
|
|
49
49
|
`;
|
|
50
50
|
|
|
51
51
|
export const Modal: FC<Props> = ({
|
|
@@ -55,9 +55,9 @@ export const Modal: FC<Props> = ({
|
|
|
55
55
|
footer,
|
|
56
56
|
active,
|
|
57
57
|
className,
|
|
58
|
-
headColor = "
|
|
59
|
-
headTextColor = "
|
|
60
|
-
size
|
|
58
|
+
headColor = "light",
|
|
59
|
+
headTextColor = "black",
|
|
60
|
+
size,
|
|
61
61
|
}) => {
|
|
62
62
|
const portalRootElement = usePortalRootElement("modalsRoot");
|
|
63
63
|
const initialFocusRef = useRef(null);
|
|
@@ -65,7 +65,7 @@ export const Modal: FC<Props> = ({
|
|
|
65
65
|
includeContainer: true,
|
|
66
66
|
initialFocus: initialFocusRef.current,
|
|
67
67
|
returnFocus: true,
|
|
68
|
-
updateNodes: false
|
|
68
|
+
updateNodes: false,
|
|
69
69
|
});
|
|
70
70
|
|
|
71
71
|
if (!portalRootElement) {
|
|
@@ -90,7 +90,7 @@ export const Modal: FC<Props> = ({
|
|
|
90
90
|
<div className="modal-background" onClick={closeFunction} />
|
|
91
91
|
<SizedModal className="modal-card" size={size}>
|
|
92
92
|
<header className={classNames("modal-card-head", `has-background-${headColor}`)}>
|
|
93
|
-
<
|
|
93
|
+
<p className={`modal-card-title m-0 has-text-${headTextColor}`}>{title}</p>
|
|
94
94
|
<button className="delete" aria-label="close" onClick={closeFunction} ref={initialFocusRef} autoFocus />
|
|
95
95
|
</header>
|
|
96
96
|
<section className="modal-card-body">{body}</section>
|
|
@@ -22,10 +22,8 @@
|
|
|
22
22
|
* SOFTWARE.
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
-
import { RouteProps } from "react-router-dom";
|
|
26
|
-
|
|
27
25
|
export type RoutingProps = {
|
|
28
26
|
to: string;
|
|
29
27
|
activeOnlyWhenExact?: boolean;
|
|
30
|
-
activeWhenMatch?: (route:
|
|
28
|
+
activeWhenMatch?: (route: any) => boolean;
|
|
31
29
|
};
|
|
@@ -53,8 +53,8 @@ const withRoute = (route: string) => {
|
|
|
53
53
|
};
|
|
54
54
|
|
|
55
55
|
storiesOf("Secondary Navigation", module)
|
|
56
|
-
.addDecorator(story => <StateMenuContextProvider>{story()}</StateMenuContextProvider>)
|
|
57
|
-
.addDecorator(story => (
|
|
56
|
+
.addDecorator((story) => <StateMenuContextProvider>{story()}</StateMenuContextProvider>)
|
|
57
|
+
.addDecorator((story) => (
|
|
58
58
|
<Columns className="columns">
|
|
59
59
|
<div className="column is-3">{story()}</div>
|
|
60
60
|
</Columns>
|
|
@@ -92,7 +92,7 @@ storiesOf("Secondary Navigation", module)
|
|
|
92
92
|
<SecondaryNavigation label="Hitchhiker">
|
|
93
93
|
<SecondaryNavigationItem to="/42" icon="fas fa-puzzle-piece" label="Puzzle 42" title="Puzzle 42" />
|
|
94
94
|
<SecondaryNavigationItem
|
|
95
|
-
activeWhenMatch={route => route.location
|
|
95
|
+
activeWhenMatch={(route) => route.location.pathname === "/hog"}
|
|
96
96
|
to="/heart-of-gold"
|
|
97
97
|
icon="fas fa-star"
|
|
98
98
|
label="Heart Of Gold"
|
|
@@ -91,7 +91,7 @@ const SecondaryNavigation: FC<Props> = ({ label, children, collapsible = true })
|
|
|
91
91
|
aria-label={menuAriaLabel}
|
|
92
92
|
>
|
|
93
93
|
{collapsible ? (
|
|
94
|
-
<Icon className="is-medium" collapsed={isCollapsed}>
|
|
94
|
+
<Icon color="info" className="is-medium" collapsed={isCollapsed}>
|
|
95
95
|
{arrowIcon}
|
|
96
96
|
</Icon>
|
|
97
97
|
) : null}
|
package/src/popover/Popover.tsx
CHANGED
|
@@ -43,7 +43,7 @@ type ContainerProps = {
|
|
|
43
43
|
const PopoverContainer = styled.div<ContainerProps>`
|
|
44
44
|
position: absolute;
|
|
45
45
|
z-index: 100;
|
|
46
|
-
width: ${props => props.width}px;
|
|
46
|
+
width: ${(props) => props.width}px;
|
|
47
47
|
display: block;
|
|
48
48
|
|
|
49
49
|
&:before {
|
|
@@ -54,7 +54,7 @@ const PopoverContainer = styled.div<ContainerProps>`
|
|
|
54
54
|
height: 0;
|
|
55
55
|
width: 0;
|
|
56
56
|
top: 100%;
|
|
57
|
-
left: ${props => props.width / 2}px;
|
|
57
|
+
left: ${(props) => props.width / 2}px;
|
|
58
58
|
border-color: transparent;
|
|
59
59
|
border-bottom-color: white;
|
|
60
60
|
border-left-color: white;
|
|
@@ -71,7 +71,7 @@ const PopoverHeading = styled.div`
|
|
|
71
71
|
height: 1.5em;
|
|
72
72
|
`;
|
|
73
73
|
|
|
74
|
-
const Popover: FC<Props> = props => {
|
|
74
|
+
const Popover: FC<Props> = (props) => {
|
|
75
75
|
if (!props.show) {
|
|
76
76
|
return null;
|
|
77
77
|
}
|
|
@@ -89,13 +89,13 @@ const InnerPopover: FC<Props> = ({ title, show, width, offsetTop, offsetLeft, di
|
|
|
89
89
|
|
|
90
90
|
const onMouseEnter = () => {
|
|
91
91
|
dispatch({
|
|
92
|
-
type: "enter-popover"
|
|
92
|
+
type: "enter-popover",
|
|
93
93
|
});
|
|
94
94
|
};
|
|
95
95
|
|
|
96
96
|
const onMouseLeave = () => {
|
|
97
97
|
dispatch({
|
|
98
|
-
type: "leave-popover"
|
|
98
|
+
type: "leave-popover",
|
|
99
99
|
});
|
|
100
100
|
};
|
|
101
101
|
|
|
@@ -105,7 +105,7 @@ const InnerPopover: FC<Props> = ({ title, show, width, offsetTop, offsetLeft, di
|
|
|
105
105
|
<PopoverContainer
|
|
106
106
|
onMouseEnter={onMouseEnter}
|
|
107
107
|
onMouseLeave={onMouseLeave}
|
|
108
|
-
className="box
|
|
108
|
+
className="box"
|
|
109
109
|
style={{ top: `${top}px`, left: `${left}px` }}
|
|
110
110
|
width={width!}
|
|
111
111
|
ref={ref}
|
|
@@ -118,7 +118,7 @@ const InnerPopover: FC<Props> = ({ title, show, width, offsetTop, offsetLeft, di
|
|
|
118
118
|
};
|
|
119
119
|
|
|
120
120
|
Popover.defaultProps = {
|
|
121
|
-
width: 120
|
|
121
|
+
width: 120,
|
|
122
122
|
};
|
|
123
123
|
|
|
124
124
|
export default Popover;
|
package/src/repos/DiffFile.tsx
CHANGED
|
@@ -81,7 +81,7 @@ const MarginlessModalContent = styled.div`
|
|
|
81
81
|
class DiffFile extends React.Component<Props, State> {
|
|
82
82
|
static defaultProps: Partial<Props> = {
|
|
83
83
|
defaultCollapse: false,
|
|
84
|
-
markConflicts: true
|
|
84
|
+
markConflicts: true,
|
|
85
85
|
};
|
|
86
86
|
|
|
87
87
|
constructor(props: Props) {
|
|
@@ -90,14 +90,14 @@ class DiffFile extends React.Component<Props, State> {
|
|
|
90
90
|
collapsed: this.defaultCollapse(),
|
|
91
91
|
sideBySide: props.sideBySide,
|
|
92
92
|
diffExpander: new DiffExpander(props.file),
|
|
93
|
-
file: props.file
|
|
93
|
+
file: props.file,
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
componentDidUpdate(prevProps: Readonly<Props>) {
|
|
98
98
|
if (!this.props.isCollapsed && this.props.defaultCollapse !== prevProps.defaultCollapse) {
|
|
99
99
|
this.setState({
|
|
100
|
-
collapsed: this.defaultCollapse()
|
|
100
|
+
collapsed: this.defaultCollapse(),
|
|
101
101
|
});
|
|
102
102
|
}
|
|
103
103
|
}
|
|
@@ -120,8 +120,8 @@ class DiffFile extends React.Component<Props, State> {
|
|
|
120
120
|
if (onCollapseStateChange) {
|
|
121
121
|
onCollapseStateChange(file);
|
|
122
122
|
} else {
|
|
123
|
-
this.setState(state => ({
|
|
124
|
-
collapsed: !state.collapsed
|
|
123
|
+
this.setState((state) => ({
|
|
124
|
+
collapsed: !state.collapsed,
|
|
125
125
|
}));
|
|
126
126
|
}
|
|
127
127
|
}
|
|
@@ -129,8 +129,8 @@ class DiffFile extends React.Component<Props, State> {
|
|
|
129
129
|
|
|
130
130
|
toggleSideBySide = (callback: () => void) => {
|
|
131
131
|
this.setState(
|
|
132
|
-
state => ({
|
|
133
|
-
sideBySide: !state.sideBySide
|
|
132
|
+
(state) => ({
|
|
133
|
+
sideBySide: !state.sideBySide,
|
|
134
134
|
}),
|
|
135
135
|
() => callback()
|
|
136
136
|
);
|
|
@@ -142,7 +142,7 @@ class DiffFile extends React.Component<Props, State> {
|
|
|
142
142
|
onCollapseStateChange(this.state.file, collapsed);
|
|
143
143
|
} else {
|
|
144
144
|
this.setState({
|
|
145
|
-
collapsed
|
|
145
|
+
collapsed,
|
|
146
146
|
});
|
|
147
147
|
}
|
|
148
148
|
};
|
|
@@ -236,19 +236,13 @@ class DiffFile extends React.Component<Props, State> {
|
|
|
236
236
|
|
|
237
237
|
expandHead = (expandableHunk: ExpandableHunk, count: number) => {
|
|
238
238
|
return () => {
|
|
239
|
-
return expandableHunk
|
|
240
|
-
.expandHead(count)
|
|
241
|
-
.then(this.diffExpanded)
|
|
242
|
-
.catch(this.diffExpansionFailed);
|
|
239
|
+
return expandableHunk.expandHead(count).then(this.diffExpanded).catch(this.diffExpansionFailed);
|
|
243
240
|
};
|
|
244
241
|
};
|
|
245
242
|
|
|
246
243
|
expandBottom = (expandableHunk: ExpandableHunk, count: number) => {
|
|
247
244
|
return () => {
|
|
248
|
-
return expandableHunk
|
|
249
|
-
.expandBottom(count)
|
|
250
|
-
.then(this.diffExpanded)
|
|
251
|
-
.catch(this.diffExpansionFailed);
|
|
245
|
+
return expandableHunk.expandBottom(count).then(this.diffExpanded).catch(this.diffExpansionFailed);
|
|
252
246
|
};
|
|
253
247
|
};
|
|
254
248
|
|
|
@@ -266,7 +260,7 @@ class DiffFile extends React.Component<Props, State> {
|
|
|
266
260
|
if (annotationFactory) {
|
|
267
261
|
return annotationFactory({
|
|
268
262
|
hunk,
|
|
269
|
-
file
|
|
263
|
+
file,
|
|
270
264
|
});
|
|
271
265
|
} else {
|
|
272
266
|
return EMPTY_ANNOTATION_FACTORY;
|
|
@@ -280,7 +274,7 @@ class DiffFile extends React.Component<Props, State> {
|
|
|
280
274
|
changeId: getChangeKey(change),
|
|
281
275
|
change,
|
|
282
276
|
hunk,
|
|
283
|
-
file
|
|
277
|
+
file,
|
|
284
278
|
};
|
|
285
279
|
if (onClick) {
|
|
286
280
|
onClick(context);
|
|
@@ -293,7 +287,7 @@ class DiffFile extends React.Component<Props, State> {
|
|
|
293
287
|
return {
|
|
294
288
|
onClick: (event: ChangeEvent) => {
|
|
295
289
|
this.handleClickEvent(event.change, hunk);
|
|
296
|
-
}
|
|
290
|
+
},
|
|
297
291
|
};
|
|
298
292
|
}
|
|
299
293
|
};
|
|
@@ -502,9 +496,9 @@ class DiffFile extends React.Component<Props, State> {
|
|
|
502
496
|
title={this.hoverFileTitle(file)}
|
|
503
497
|
>
|
|
504
498
|
{collapseIcon}
|
|
505
|
-
<
|
|
499
|
+
<span className={classNames("is-ellipsis-overflow", "is-size-6", "ml-1")}>
|
|
506
500
|
{this.renderFileTitle(file)}
|
|
507
|
-
</
|
|
501
|
+
</span>
|
|
508
502
|
{this.renderChangeTag(file)}
|
|
509
503
|
</FullWidthTitleHeader>
|
|
510
504
|
{headerButtons}
|
|
@@ -38,7 +38,7 @@ type Props = {
|
|
|
38
38
|
const HealthCheckFailureDetail: FC<Props> = ({ active, closeFunction, failures }) => {
|
|
39
39
|
const [t] = useTranslation("repos");
|
|
40
40
|
|
|
41
|
-
const footer = <Button label={t("healthCheckFailure.close")} action={closeFunction} color="
|
|
41
|
+
const footer = <Button label={t("healthCheckFailure.close")} action={closeFunction} color="grey" />;
|
|
42
42
|
|
|
43
43
|
return (
|
|
44
44
|
<Modal
|
|
@@ -52,7 +52,7 @@ const HealthCheckFailureDetail: FC<Props> = ({ active, closeFunction, failures }
|
|
|
52
52
|
active={active}
|
|
53
53
|
footer={footer}
|
|
54
54
|
headColor={"danger"}
|
|
55
|
-
headTextColor="
|
|
55
|
+
headTextColor={"white"}
|
|
56
56
|
/>
|
|
57
57
|
);
|
|
58
58
|
};
|
|
@@ -49,6 +49,9 @@ const ContentRightContainer = styled.div`
|
|
|
49
49
|
|
|
50
50
|
const QuickAction = styled(Icon)`
|
|
51
51
|
margin-top: 0.2rem;
|
|
52
|
+
:hover {
|
|
53
|
+
color: #363636 !important;
|
|
54
|
+
}
|
|
52
55
|
`;
|
|
53
56
|
|
|
54
57
|
const ContactAvatar = styled.img`
|
|
@@ -76,15 +79,9 @@ const RepositoryEntry: FC<Props> = ({ repository, baseDate }) => {
|
|
|
76
79
|
|
|
77
80
|
const renderContactIcon = () => {
|
|
78
81
|
if (avatarFactory) {
|
|
79
|
-
return (
|
|
80
|
-
<ContactAvatar
|
|
81
|
-
className="has-rounded-border"
|
|
82
|
-
src={avatarFactory({ mail: repository.contact })}
|
|
83
|
-
alt={repository.contact}
|
|
84
|
-
/>
|
|
85
|
-
);
|
|
82
|
+
return <ContactAvatar className="has-rounded-border" src={avatarFactory({ mail: repository.contact })} alt={repository.contact} />;
|
|
86
83
|
}
|
|
87
|
-
return <QuickAction className={classNames("is-clickable"
|
|
84
|
+
return <QuickAction className={classNames("is-clickable")} name="envelope" color="info" />;
|
|
88
85
|
};
|
|
89
86
|
|
|
90
87
|
const createContentRight = () => (
|
|
@@ -127,7 +124,7 @@ const RepositoryEntry: FC<Props> = ({ repository, baseDate }) => {
|
|
|
127
124
|
</ContactActionWrapper>
|
|
128
125
|
) : null}
|
|
129
126
|
<QuickAction
|
|
130
|
-
className={classNames("is-clickable", "is-size-5"
|
|
127
|
+
className={classNames("is-clickable", "is-size-5")}
|
|
131
128
|
name="download"
|
|
132
129
|
color="info"
|
|
133
130
|
onClick={() => setOpenCloneModal(true)}
|
|
@@ -86,13 +86,13 @@ const RepositoryFlags: FC<Props> = ({ repository, className, tooltipLocation = "
|
|
|
86
86
|
);
|
|
87
87
|
|
|
88
88
|
return (
|
|
89
|
-
<
|
|
89
|
+
<span className={classNames("is-flex", "is-align-items-center", className)}>
|
|
90
90
|
{modal}
|
|
91
91
|
<RepositoryFlagContainer>
|
|
92
92
|
{repositoryFlags}
|
|
93
93
|
<ExtensionPoint name="repository.flags" props={{ repository, tooltipLocation }} renderAll={true} />
|
|
94
94
|
</RepositoryFlagContainer>
|
|
95
|
-
</
|
|
95
|
+
</span>
|
|
96
96
|
);
|
|
97
97
|
};
|
|
98
98
|
|