Skip to content

Commit 1a3ae6c

Browse files
committed
Moves into utils
1 parent 0226ba6 commit 1a3ae6c

File tree

10 files changed

+82
-84
lines changed

10 files changed

+82
-84
lines changed

src/views/nodes/branchNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ import { BranchTrackingStatusNode } from './branchTrackingStatusNode';
4141
import { CommitNode } from './commitNode';
4242
import { LoadMoreNode, MessageNode } from './common';
4343
import { CompareBranchNode } from './compareBranchNode';
44-
import { insertDateMarkers } from './helpers';
4544
import { PausedOperationStatusNode } from './pausedOperationStatusNode';
4645
import { PullRequestNode } from './pullRequestNode';
4746
import { StashNode } from './stashNode';
47+
import { insertDateMarkers } from './utils/-webview/node.utils';
4848

4949
type State = {
5050
pullRequest: PullRequest | null | undefined;

src/views/nodes/branchTrackingStatusNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { ContextValues, getViewNodeId, ViewNode } from './abstract/viewNode';
2020
import { BranchTrackingStatusFilesNode } from './branchTrackingStatusFilesNode';
2121
import { CommitNode } from './commitNode';
2222
import { LoadMoreNode } from './common';
23-
import { insertDateMarkers } from './helpers';
23+
import { insertDateMarkers } from './utils/-webview/node.utils';
2424

2525
export interface BranchTrackingStatus {
2626
ref: string;

src/views/nodes/contributorNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import type { ClipboardType, PageableViewNode } from './abstract/viewNode';
1616
import { ContextValues, getViewNodeId, ViewNode } from './abstract/viewNode';
1717
import { CommitNode } from './commitNode';
1818
import { LoadMoreNode, MessageNode } from './common';
19-
import { insertDateMarkers } from './helpers';
19+
import { insertDateMarkers } from './utils/-webview/node.utils';
2020

2121
export class ContributorNode extends ViewNode<'contributor', ViewsWithContributors> implements PageableViewNode {
2222
limit: number | undefined;

src/views/nodes/fileHistoryNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { CommitNode } from './commitNode';
2323
import { LoadMoreNode, MessageNode } from './common';
2424
import { FileHistoryTrackerNode } from './fileHistoryTrackerNode';
2525
import { FileRevisionAsCommitNode } from './fileRevisionAsCommitNode';
26-
import { insertDateMarkers } from './helpers';
26+
import { insertDateMarkers } from './utils/-webview/node.utils';
2727

2828
export class FileHistoryNode
2929
extends SubscribeableViewNode<'file-history', FileHistoryView>

src/views/nodes/helpers.ts

Lines changed: 0 additions & 75 deletions
This file was deleted.

src/views/nodes/lineHistoryNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import type { PageableViewNode, ViewNode } from './abstract/viewNode';
2222
import { ContextValues, getViewNodeId } from './abstract/viewNode';
2323
import { LoadMoreNode, MessageNode } from './common';
2424
import { FileRevisionAsCommitNode } from './fileRevisionAsCommitNode';
25-
import { insertDateMarkers } from './helpers';
2625
import { LineHistoryTrackerNode } from './lineHistoryTrackerNode';
26+
import { insertDateMarkers } from './utils/-webview/node.utils';
2727

2828
export class LineHistoryNode
2929
extends SubscribeableViewNode<'line-history', FileHistoryView | LineHistoryView>

src/views/nodes/resultsCommitsNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import { AutolinkedItemsNode } from './autolinkedItemsNode';
1818
import { CommitNode } from './commitNode';
1919
import { LoadMoreNode, MessageNode } from './common';
2020
import { ContributorsNode } from './contributorsNode';
21-
import { insertDateMarkers } from './helpers';
2221
import { ResultsFilesNode } from './resultsFilesNode';
2322
import { StashNode } from './stashNode';
23+
import { insertDateMarkers } from './utils/-webview/node.utils';
2424

2525
interface Options {
2626
autolinks: boolean;

src/views/nodes/tagNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { ContextValues, getViewNodeId } from './abstract/viewNode';
1616
import { ViewRefNode } from './abstract/viewRefNode';
1717
import { CommitNode } from './commitNode';
1818
import { LoadMoreNode, MessageNode } from './common';
19-
import { insertDateMarkers } from './helpers';
19+
import { insertDateMarkers } from './utils/-webview/node.utils';
2020

2121
export class TagNode extends ViewRefNode<'tag', ViewsWithTags, GitTagReference> implements PageableViewNode {
2222
limit: number | undefined;

src/views/nodes/utils/-webview/node.utils.ts

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import type { TreeViewNodeTypes } from '../../../../constants.views';
22
import { treeViewFileNodeTypes, treeViewRefFileNodeTypes, treeViewRefNodeTypes } from '../../../../constants.views';
3+
import type { GitCommit } from '../../../../git/models/commit';
34
import type { LaunchpadItemNode } from '../../../launchpadView';
45
import type { RepositoryFolderNode } from '../../abstract/repositoryFolderNode';
5-
import { ViewNode } from '../../abstract/viewNode';
6+
import { ContextValues, ViewNode } from '../../abstract/viewNode';
67
import type { BranchNode } from '../../branchNode';
78
import type { BranchTrackingStatusFilesNode } from '../../branchTrackingStatusFilesNode';
89
import type { BranchTrackingStatusNode } from '../../branchTrackingStatusNode';
910
import type { CodeSuggestionsNode } from '../../codeSuggestionsNode';
1011
import type { CommitFileNode } from '../../commitFileNode';
1112
import type { CommitNode } from '../../commitNode';
13+
import { MessageNode } from '../../common';
1214
import type { CompareBranchNode } from '../../compareBranchNode';
1315
import type { CompareResultsNode } from '../../compareResultsNode';
1416
import type { FileRevisionAsCommitNode } from '../../fileRevisionAsCommitNode';
@@ -86,6 +88,77 @@ type FilterNodesByType<T extends keyof TreeViewNodesByType | (keyof TreeViewNode
8688
? TreeViewNodesByType[T[number]]
8789
: never;
8890

91+
export const markers: [number, string][] = [
92+
[0, 'Less than a week ago'],
93+
[7, 'Over a week ago'],
94+
[25, 'Over a month ago'],
95+
[77, 'Over 3 months ago'],
96+
];
97+
98+
export function* insertDateMarkers<T extends ViewNode & { commit: GitCommit }>(
99+
iterable: Iterable<T>,
100+
parent: ViewNode,
101+
skip?: number,
102+
{ show }: { show: boolean } = { show: true },
103+
): Iterable<ViewNode> {
104+
if (!parent.view.config.showRelativeDateMarkers || !show) {
105+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
106+
return yield* iterable;
107+
}
108+
109+
let index = skip ?? 0;
110+
let time = undefined;
111+
const now = Date.now();
112+
113+
let first = true;
114+
115+
for (const node of iterable) {
116+
if (index < markers.length) {
117+
let [daysAgo, marker] = markers[index];
118+
if (time === undefined) {
119+
const date = new Date(now);
120+
time = date.setDate(date.getDate() - daysAgo);
121+
}
122+
123+
const date = new Date(node.commit.committer.date).setUTCHours(0, 0, 0, 0);
124+
if (date <= time) {
125+
while (index < markers.length - 1) {
126+
[daysAgo] = markers[index + 1];
127+
const nextDate = new Date(now);
128+
const nextTime = nextDate.setDate(nextDate.getDate() - daysAgo);
129+
130+
if (date > nextTime) break;
131+
132+
index++;
133+
time = undefined;
134+
[, marker] = markers[index];
135+
}
136+
137+
// Don't show the marker if it is the first node
138+
if (!first) {
139+
yield new MessageNode(
140+
parent.view,
141+
parent,
142+
'',
143+
marker,
144+
undefined,
145+
undefined,
146+
ContextValues.DateMarker,
147+
);
148+
}
149+
150+
index++;
151+
time = undefined;
152+
}
153+
}
154+
155+
first = false;
156+
yield node;
157+
}
158+
159+
return undefined;
160+
}
161+
89162
export function isViewNode(node: unknown): node is ViewNode;
90163
export function isViewNode<T extends keyof TreeViewNodesByType | (keyof TreeViewNodesByType)[]>(
91164
node: unknown,

src/views/nodes/worktreeNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ import { ContextValues, getViewNodeId } from './abstract/viewNode';
2727
import { CommitNode } from './commitNode';
2828
import { LoadMoreNode, MessageNode } from './common';
2929
import { CompareBranchNode } from './compareBranchNode';
30-
import { insertDateMarkers } from './helpers';
3130
import { PullRequestNode } from './pullRequestNode';
3231
import { StashNode } from './stashNode';
3332
import { UncommittedFilesNode } from './UncommittedFilesNode';
33+
import { insertDateMarkers } from './utils/-webview/node.utils';
3434

3535
type State = {
3636
pullRequest: PullRequest | null | undefined;

0 commit comments

Comments
 (0)