@stoked-ui/github 0.0.0-a.0
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/CHANGELOG.md +15014 -0
- package/GithubCalendar/GithubCalendar.d.ts +7 -0
- package/GithubCalendar/GithubCalendar.js +330 -0
- package/GithubCalendar/index.d.ts +2 -0
- package/GithubCalendar/index.js +2 -0
- package/GithubCalendar/package.json +6 -0
- package/GithubEvents/EventTypes/CreateEvent.d.ts +7 -0
- package/GithubEvents/EventTypes/CreateEvent.js +72 -0
- package/GithubEvents/EventTypes/DeleteEvent.d.ts +7 -0
- package/GithubEvents/EventTypes/DeleteEvent.js +65 -0
- package/GithubEvents/EventTypes/ForkEvent.d.ts +7 -0
- package/GithubEvents/EventTypes/ForkEvent.js +77 -0
- package/GithubEvents/EventTypes/IssueCommentEvent.d.ts +7 -0
- package/GithubEvents/EventTypes/IssueCommentEvent.js +210 -0
- package/GithubEvents/EventTypes/IssuesEvent.d.ts +7 -0
- package/GithubEvents/EventTypes/IssuesEvent.js +97 -0
- package/GithubEvents/EventTypes/ProjectsV2ColumnEvent.d.ts +7 -0
- package/GithubEvents/EventTypes/ProjectsV2ColumnEvent.js +69 -0
- package/GithubEvents/EventTypes/ProjectsV2Event.d.ts +7 -0
- package/GithubEvents/EventTypes/ProjectsV2Event.js +74 -0
- package/GithubEvents/EventTypes/ProjectsV2FieldEvent.d.ts +7 -0
- package/GithubEvents/EventTypes/ProjectsV2FieldEvent.js +77 -0
- package/GithubEvents/EventTypes/ProjectsV2ItemEvent.d.ts +7 -0
- package/GithubEvents/EventTypes/ProjectsV2ItemEvent.js +79 -0
- package/GithubEvents/EventTypes/PullRequest/CommitsList.d.ts +17 -0
- package/GithubEvents/EventTypes/PullRequest/CommitsList.js +99 -0
- package/GithubEvents/EventTypes/PullRequest/FileChanges.d.ts +17 -0
- package/GithubEvents/EventTypes/PullRequest/FileChanges.js +182 -0
- package/GithubEvents/EventTypes/PullRequest/PullRequestEvent.d.ts +8 -0
- package/GithubEvents/EventTypes/PullRequest/PullRequestEvent.js +374 -0
- package/GithubEvents/EventTypes/PullRequest/PullRequestView.d.ts +29 -0
- package/GithubEvents/EventTypes/PullRequest/PullRequestView.js +132 -0
- package/GithubEvents/EventTypes/PushEvent.d.ts +7 -0
- package/GithubEvents/EventTypes/PushEvent.js +106 -0
- package/GithubEvents/GithubEvents.d.ts +49 -0
- package/GithubEvents/GithubEvents.js +1454 -0
- package/GithubEvents/index.d.ts +2 -0
- package/GithubEvents/index.js +2 -0
- package/GithubEvents/package.json +6 -0
- package/LICENSE +21 -0
- package/README.md +29 -0
- package/apiHandlers/getPullRequestDetails.d.ts +7 -0
- package/apiHandlers/getPullRequestDetails.js +120 -0
- package/apiHandlers/index.d.ts +1 -0
- package/apiHandlers/index.js +1 -0
- package/apiHandlers/package.json +6 -0
- package/index.d.ts +3 -0
- package/index.js +10 -0
- package/modern/GithubCalendar/GithubCalendar.js +330 -0
- package/modern/GithubCalendar/index.js +2 -0
- package/modern/GithubEvents/EventTypes/CreateEvent.js +72 -0
- package/modern/GithubEvents/EventTypes/DeleteEvent.js +65 -0
- package/modern/GithubEvents/EventTypes/ForkEvent.js +77 -0
- package/modern/GithubEvents/EventTypes/IssueCommentEvent.js +210 -0
- package/modern/GithubEvents/EventTypes/IssuesEvent.js +97 -0
- package/modern/GithubEvents/EventTypes/ProjectsV2ColumnEvent.js +69 -0
- package/modern/GithubEvents/EventTypes/ProjectsV2Event.js +74 -0
- package/modern/GithubEvents/EventTypes/ProjectsV2FieldEvent.js +77 -0
- package/modern/GithubEvents/EventTypes/ProjectsV2ItemEvent.js +79 -0
- package/modern/GithubEvents/EventTypes/PullRequest/CommitsList.js +99 -0
- package/modern/GithubEvents/EventTypes/PullRequest/FileChanges.js +182 -0
- package/modern/GithubEvents/EventTypes/PullRequest/PullRequestEvent.js +374 -0
- package/modern/GithubEvents/EventTypes/PullRequest/PullRequestView.js +132 -0
- package/modern/GithubEvents/EventTypes/PushEvent.js +106 -0
- package/modern/GithubEvents/GithubEvents.js +1454 -0
- package/modern/GithubEvents/index.js +2 -0
- package/modern/apiHandlers/getPullRequestDetails.js +120 -0
- package/modern/apiHandlers/index.js +1 -0
- package/modern/index.js +10 -0
- package/modern/types/github.js +1 -0
- package/node/GithubCalendar/GithubCalendar.js +337 -0
- package/node/GithubCalendar/index.js +9 -0
- package/node/GithubEvents/EventTypes/CreateEvent.js +80 -0
- package/node/GithubEvents/EventTypes/DeleteEvent.js +73 -0
- package/node/GithubEvents/EventTypes/ForkEvent.js +85 -0
- package/node/GithubEvents/EventTypes/IssueCommentEvent.js +218 -0
- package/node/GithubEvents/EventTypes/IssuesEvent.js +105 -0
- package/node/GithubEvents/EventTypes/ProjectsV2ColumnEvent.js +77 -0
- package/node/GithubEvents/EventTypes/ProjectsV2Event.js +82 -0
- package/node/GithubEvents/EventTypes/ProjectsV2FieldEvent.js +85 -0
- package/node/GithubEvents/EventTypes/ProjectsV2ItemEvent.js +87 -0
- package/node/GithubEvents/EventTypes/PullRequest/CommitsList.js +107 -0
- package/node/GithubEvents/EventTypes/PullRequest/FileChanges.js +188 -0
- package/node/GithubEvents/EventTypes/PullRequest/PullRequestEvent.js +381 -0
- package/node/GithubEvents/EventTypes/PullRequest/PullRequestView.js +138 -0
- package/node/GithubEvents/EventTypes/PushEvent.js +114 -0
- package/node/GithubEvents/GithubEvents.js +1463 -0
- package/node/GithubEvents/index.js +9 -0
- package/node/apiHandlers/getPullRequestDetails.js +127 -0
- package/node/apiHandlers/index.js +13 -0
- package/node/index.js +27 -0
- package/node/types/github.js +5 -0
- package/package.json +71 -0
- package/types/github.d.ts +107 -0
- package/types/github.js +1 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = ProjectsV2ItemEvent;
|
|
8
|
+
var React = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
10
|
+
var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
|
|
11
|
+
var _Link = _interopRequireDefault(require("@mui/material/Link"));
|
|
12
|
+
var _Chip = _interopRequireDefault(require("@mui/material/Chip"));
|
|
13
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
15
|
+
function ProjectsV2ItemEvent({
|
|
16
|
+
event
|
|
17
|
+
}) {
|
|
18
|
+
var _event$payload, _event$payload2, _item$content_type;
|
|
19
|
+
if (!(event != null && event.date)) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const item = (_event$payload = event.payload) == null ? void 0 : _event$payload.projects_v2_item;
|
|
23
|
+
const action = (_event$payload2 = event.payload) == null ? void 0 : _event$payload2.action;
|
|
24
|
+
if (!item) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const itemTitle = item.title || 'Untitled Item';
|
|
28
|
+
const itemUrl = item.html_url;
|
|
29
|
+
const itemType = ((_item$content_type = item.content_type) == null ? void 0 : _item$content_type.toLowerCase()) || 'item';
|
|
30
|
+
const projectNumber = item.project_number;
|
|
31
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
32
|
+
sx: {
|
|
33
|
+
p: '16px'
|
|
34
|
+
},
|
|
35
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
36
|
+
sx: {
|
|
37
|
+
display: 'flex',
|
|
38
|
+
alignItems: 'center',
|
|
39
|
+
gap: 1,
|
|
40
|
+
mb: 2
|
|
41
|
+
},
|
|
42
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
43
|
+
variant: "caption",
|
|
44
|
+
color: "text.secondary",
|
|
45
|
+
children: event.date
|
|
46
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Chip.default, {
|
|
47
|
+
label: `Project #${projectNumber}`,
|
|
48
|
+
size: "small",
|
|
49
|
+
color: "default"
|
|
50
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Chip.default, {
|
|
51
|
+
label: itemType,
|
|
52
|
+
size: "small",
|
|
53
|
+
color: "info"
|
|
54
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Chip.default, {
|
|
55
|
+
label: action,
|
|
56
|
+
size: "small",
|
|
57
|
+
color: action === 'created' ? 'success' : action === 'deleted' ? 'error' : 'primary'
|
|
58
|
+
})]
|
|
59
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
60
|
+
variant: "h6",
|
|
61
|
+
component: "h3",
|
|
62
|
+
sx: {
|
|
63
|
+
mb: 1
|
|
64
|
+
},
|
|
65
|
+
children: itemUrl ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Link.default, {
|
|
66
|
+
href: itemUrl,
|
|
67
|
+
target: "_blank",
|
|
68
|
+
rel: "noopener noreferrer",
|
|
69
|
+
sx: {
|
|
70
|
+
textDecoration: 'none'
|
|
71
|
+
},
|
|
72
|
+
children: itemTitle
|
|
73
|
+
}) : itemTitle
|
|
74
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
75
|
+
sx: {
|
|
76
|
+
display: 'flex',
|
|
77
|
+
alignItems: 'center',
|
|
78
|
+
gap: 1
|
|
79
|
+
},
|
|
80
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Typography.default, {
|
|
81
|
+
variant: "body2",
|
|
82
|
+
color: "text.secondary",
|
|
83
|
+
children: [itemType, " ", action, " in project #", projectNumber]
|
|
84
|
+
})
|
|
85
|
+
})]
|
|
86
|
+
});
|
|
87
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = CommitsList;
|
|
8
|
+
var React = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
10
|
+
var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
|
|
11
|
+
var _Avatar = _interopRequireDefault(require("@mui/material/Avatar"));
|
|
12
|
+
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
13
|
+
var _styles = require("@mui/material/styles");
|
|
14
|
+
var _ContentCopy = _interopRequireDefault(require("@mui/icons-material/ContentCopy"));
|
|
15
|
+
var _CallMade = _interopRequireDefault(require("@mui/icons-material/CallMade"));
|
|
16
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
|
+
var _CopyIcon, _CheckoutIcon;
|
|
18
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
19
|
+
const CommitItem = (0, _styles.styled)(_Box.default)(({
|
|
20
|
+
theme
|
|
21
|
+
}) => ({
|
|
22
|
+
display: 'flex',
|
|
23
|
+
alignItems: 'flex-start',
|
|
24
|
+
padding: theme.spacing(2),
|
|
25
|
+
borderBottom: `1px solid ${theme.palette.divider}`,
|
|
26
|
+
'&:last-child': {
|
|
27
|
+
borderBottom: 'none'
|
|
28
|
+
},
|
|
29
|
+
'&:hover': {
|
|
30
|
+
backgroundColor: theme.palette.action.hover,
|
|
31
|
+
'.commit-actions': {
|
|
32
|
+
visibility: 'visible'
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
const CommitActions = (0, _styles.styled)(_Box.default)({
|
|
37
|
+
visibility: 'hidden',
|
|
38
|
+
display: 'flex',
|
|
39
|
+
gap: '8px'
|
|
40
|
+
});
|
|
41
|
+
function CommitsList({
|
|
42
|
+
commits,
|
|
43
|
+
onCheckout
|
|
44
|
+
}) {
|
|
45
|
+
const handleCopyHash = hash => {
|
|
46
|
+
navigator.clipboard.writeText(hash);
|
|
47
|
+
};
|
|
48
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
49
|
+
children: commits.map(commit => /*#__PURE__*/(0, _jsxRuntime.jsx)(CommitItem, {
|
|
50
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
51
|
+
sx: {
|
|
52
|
+
display: 'flex',
|
|
53
|
+
width: '100%'
|
|
54
|
+
},
|
|
55
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, {
|
|
56
|
+
src: commit.author.avatar,
|
|
57
|
+
alt: commit.author.name,
|
|
58
|
+
sx: {
|
|
59
|
+
width: 32,
|
|
60
|
+
height: 32,
|
|
61
|
+
mr: 2
|
|
62
|
+
}
|
|
63
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
64
|
+
sx: {
|
|
65
|
+
flex: 1
|
|
66
|
+
},
|
|
67
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
68
|
+
variant: "body1",
|
|
69
|
+
sx: {
|
|
70
|
+
mb: 0.5,
|
|
71
|
+
wordBreak: 'break-word'
|
|
72
|
+
},
|
|
73
|
+
children: commit.message
|
|
74
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
75
|
+
sx: {
|
|
76
|
+
display: 'flex',
|
|
77
|
+
alignItems: 'center',
|
|
78
|
+
justifyContent: 'space-between'
|
|
79
|
+
},
|
|
80
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Typography.default, {
|
|
81
|
+
variant: "body2",
|
|
82
|
+
color: "text.secondary",
|
|
83
|
+
children: [commit.author.name, " committed ", commit.date]
|
|
84
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(CommitActions, {
|
|
85
|
+
className: "commit-actions",
|
|
86
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
87
|
+
size: "small",
|
|
88
|
+
onClick: () => handleCopyHash(commit.hash),
|
|
89
|
+
title: "Copy commit SHA",
|
|
90
|
+
children: _CopyIcon || (_CopyIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_ContentCopy.default, {
|
|
91
|
+
fontSize: "small"
|
|
92
|
+
}))
|
|
93
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
94
|
+
size: "small",
|
|
95
|
+
onClick: () => onCheckout == null ? void 0 : onCheckout(commit.hash),
|
|
96
|
+
title: "Checkout commit",
|
|
97
|
+
children: _CheckoutIcon || (_CheckoutIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_CallMade.default, {
|
|
98
|
+
fontSize: "small"
|
|
99
|
+
}))
|
|
100
|
+
})]
|
|
101
|
+
})]
|
|
102
|
+
})]
|
|
103
|
+
})]
|
|
104
|
+
})
|
|
105
|
+
}, commit.id))
|
|
106
|
+
});
|
|
107
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = FileChanges;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
11
|
+
var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
|
|
12
|
+
var _SimpleTreeView = require("@mui/x-tree-view/SimpleTreeView");
|
|
13
|
+
var _TreeItem = require("@mui/x-tree-view/TreeItem");
|
|
14
|
+
var _styles = require("@mui/material/styles");
|
|
15
|
+
var _InsertDriveFile = _interopRequireDefault(require("@mui/icons-material/InsertDriveFile"));
|
|
16
|
+
var _ChevronRight = _interopRequireDefault(require("@mui/icons-material/ChevronRight"));
|
|
17
|
+
var _ExpandMore = _interopRequireDefault(require("@mui/icons-material/ExpandMore"));
|
|
18
|
+
var _Chip4 = _interopRequireDefault(require("@mui/material/Chip"));
|
|
19
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
20
|
+
var _Chip, _Chip2, _Chip3, _FileIcon; // import FolderIcon from '@mui/icons-material/Folder';
|
|
21
|
+
// const StyledTreeItem = styled(TreeItem)((props) => ({
|
|
22
|
+
// '& .MuiTreeItem-content': {
|
|
23
|
+
// padding: props.theme.spacing(1),
|
|
24
|
+
// borderRadius: props.theme.shape.borderRadius,
|
|
25
|
+
// '&:hover': {
|
|
26
|
+
// backgroundColor: props.theme.palette.action.hover,
|
|
27
|
+
// },
|
|
28
|
+
// '& .MuiTreeItem-label': {
|
|
29
|
+
// display: 'flex',
|
|
30
|
+
// alignItems: 'center',
|
|
31
|
+
// gap: props.theme.spacing(1),
|
|
32
|
+
// },
|
|
33
|
+
// },
|
|
34
|
+
// }));
|
|
35
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
36
|
+
const DiffView = (0, _styles.styled)(_Box.default)(({
|
|
37
|
+
theme
|
|
38
|
+
}) => ({
|
|
39
|
+
backgroundColor: theme.palette.background.paper,
|
|
40
|
+
border: `1px solid ${theme.palette.divider}`,
|
|
41
|
+
borderRadius: theme.shape.borderRadius,
|
|
42
|
+
fontFamily: 'ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace',
|
|
43
|
+
fontSize: '12px',
|
|
44
|
+
lineHeight: 1.5,
|
|
45
|
+
overflow: 'auto'
|
|
46
|
+
}));
|
|
47
|
+
const DiffLine = (0, _styles.styled)(_Box.default, {
|
|
48
|
+
shouldForwardProp: prop => prop !== 'type'
|
|
49
|
+
})(({
|
|
50
|
+
theme,
|
|
51
|
+
type
|
|
52
|
+
}) => (0, _extends2.default)({
|
|
53
|
+
padding: '0 16px',
|
|
54
|
+
whiteSpace: 'pre'
|
|
55
|
+
}, type === 'addition' && {
|
|
56
|
+
backgroundColor: 'rgba(46, 160, 67, 0.15)',
|
|
57
|
+
borderLeft: '4px solid #2ea043'
|
|
58
|
+
}, type === 'deletion' && {
|
|
59
|
+
backgroundColor: 'rgba(248, 81, 73, 0.15)',
|
|
60
|
+
borderLeft: '4px solid #f85149'
|
|
61
|
+
}, type === 'context' && {
|
|
62
|
+
backgroundColor: 'transparent',
|
|
63
|
+
borderLeft: '4px solid transparent'
|
|
64
|
+
}));
|
|
65
|
+
// interface TreeNode {
|
|
66
|
+
// id: string;
|
|
67
|
+
// name: string;
|
|
68
|
+
// type: FileChange['type'];
|
|
69
|
+
// additions: number;
|
|
70
|
+
// deletions: number;
|
|
71
|
+
// diff: FileChange['diff'];
|
|
72
|
+
// children?: TreeNode[];
|
|
73
|
+
// }
|
|
74
|
+
|
|
75
|
+
function FileChanges({
|
|
76
|
+
files
|
|
77
|
+
}) {
|
|
78
|
+
const [expanded, setExpanded] = React.useState([]);
|
|
79
|
+
const [selected, setSelected] = React.useState([]);
|
|
80
|
+
const handleToggle = (_event, nodeIds) => {
|
|
81
|
+
setExpanded(nodeIds);
|
|
82
|
+
};
|
|
83
|
+
const handleSelect = (_event, nodeIds) => {
|
|
84
|
+
setSelected(nodeIds);
|
|
85
|
+
};
|
|
86
|
+
const getFileIcon = type => {
|
|
87
|
+
switch (type) {
|
|
88
|
+
case 'added':
|
|
89
|
+
return _Chip || (_Chip = /*#__PURE__*/(0, _jsxRuntime.jsx)(_Chip4.default, {
|
|
90
|
+
label: "A",
|
|
91
|
+
size: "small",
|
|
92
|
+
color: "success"
|
|
93
|
+
}));
|
|
94
|
+
case 'modified':
|
|
95
|
+
return _Chip2 || (_Chip2 = /*#__PURE__*/(0, _jsxRuntime.jsx)(_Chip4.default, {
|
|
96
|
+
label: "M",
|
|
97
|
+
size: "small",
|
|
98
|
+
color: "warning"
|
|
99
|
+
}));
|
|
100
|
+
case 'deleted':
|
|
101
|
+
return _Chip3 || (_Chip3 = /*#__PURE__*/(0, _jsxRuntime.jsx)(_Chip4.default, {
|
|
102
|
+
label: "D",
|
|
103
|
+
size: "small",
|
|
104
|
+
color: "error"
|
|
105
|
+
}));
|
|
106
|
+
default:
|
|
107
|
+
return _FileIcon || (_FileIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_InsertDriveFile.default, {}));
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// Transform files into tree nodes
|
|
112
|
+
// const items: TreeNode[] = files.map((file, index) => ({
|
|
113
|
+
// id: `file-${index}-${file.path.replace(/[^a-zA-Z0-9]/g, '-')}`,
|
|
114
|
+
// name: file.path,
|
|
115
|
+
// type: file.type,
|
|
116
|
+
// additions: file.additions,
|
|
117
|
+
// deletions: file.deletions,
|
|
118
|
+
// diff: file.diff
|
|
119
|
+
// }));
|
|
120
|
+
|
|
121
|
+
// const renderLabel = (node: TreeNode) => (
|
|
122
|
+
// <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
|
|
123
|
+
// {getFileIcon(node.type)}
|
|
124
|
+
// <Typography variant="body2">{node.name}</Typography>
|
|
125
|
+
// <Typography variant="caption" color="text.secondary">
|
|
126
|
+
// +{node.additions} -{node.deletions}
|
|
127
|
+
// </Typography>
|
|
128
|
+
// </Box>
|
|
129
|
+
// );
|
|
130
|
+
|
|
131
|
+
// const renderContent = (node: TreeNode) => (
|
|
132
|
+
// <Box sx={{ p: '16px' }}>
|
|
133
|
+
// <DiffView>
|
|
134
|
+
// {node.diff.map((line, index) => (
|
|
135
|
+
// <DiffLine key={`${node.id}-line-${index}`} type={line.type}>
|
|
136
|
+
// {line.content}
|
|
137
|
+
// </DiffLine>
|
|
138
|
+
// ))}
|
|
139
|
+
// </DiffView>
|
|
140
|
+
// </Box>
|
|
141
|
+
// );
|
|
142
|
+
|
|
143
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
144
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SimpleTreeView.SimpleTreeView, {
|
|
145
|
+
slots: {
|
|
146
|
+
collapseIcon: _ExpandMore.default,
|
|
147
|
+
expandIcon: _ChevronRight.default
|
|
148
|
+
},
|
|
149
|
+
expandedItems: expanded,
|
|
150
|
+
selectedItems: selected,
|
|
151
|
+
onExpandedItemsChange: handleToggle,
|
|
152
|
+
onSelectedItemsChange: handleSelect,
|
|
153
|
+
multiSelect: true,
|
|
154
|
+
children: files.map((file, index) => {
|
|
155
|
+
const itemId = `file-${index}-${file.path.replace(/[^a-zA-Z0-9]/g, '-')}`;
|
|
156
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem.TreeItem, {
|
|
157
|
+
itemId: itemId,
|
|
158
|
+
label: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
159
|
+
sx: {
|
|
160
|
+
display: 'flex',
|
|
161
|
+
alignItems: 'center',
|
|
162
|
+
gap: 1
|
|
163
|
+
},
|
|
164
|
+
children: [getFileIcon(file.type), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
165
|
+
variant: "body2",
|
|
166
|
+
children: file.path
|
|
167
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Typography.default, {
|
|
168
|
+
variant: "caption",
|
|
169
|
+
color: "text.secondary",
|
|
170
|
+
children: ["+", file.additions, " -", file.deletions]
|
|
171
|
+
})]
|
|
172
|
+
}),
|
|
173
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
174
|
+
sx: {
|
|
175
|
+
p: '16px'
|
|
176
|
+
},
|
|
177
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DiffView, {
|
|
178
|
+
children: file.diff.map((line, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(DiffLine, {
|
|
179
|
+
type: line.type,
|
|
180
|
+
children: line.content
|
|
181
|
+
}, `${itemId}-line-${index}`))
|
|
182
|
+
})
|
|
183
|
+
})
|
|
184
|
+
}, itemId);
|
|
185
|
+
})
|
|
186
|
+
})
|
|
187
|
+
});
|
|
188
|
+
}
|