Skip to content

Commit e8a5496

Browse files
committed
fix: Fix issues ordering if "pin tracked issues" enabled (#16)
1 parent 0d3518f commit e8a5496

File tree

4 files changed

+49
-45
lines changed

4 files changed

+49
-45
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "redmine-time-tracking",
33
"description": "Redmine Time Tracking",
4-
"version": "1.16.0",
4+
"version": "1.16.1",
55
"author": {
66
"name": "CrawlerCode",
77
"email": "[email protected]"
@@ -12,7 +12,7 @@
1212
},
1313
"type": "module",
1414
"scripts": {
15-
"dev": "tsc && vite build --watch",
15+
"dev": "node scripts/updateVersion.js && tsc && vite build --watch",
1616
"build": "node scripts/updateVersion.js && tsc && vite build",
1717
"pack": "node scripts/pack.js",
1818
"release": "gh release create v%npm_package_version% release/redmine-time-tracking-v%npm_package_version%.zip --notes-file release_notes.md --generate-notes",

public/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"manifest_version": 3,
3-
"version": "1.16.0",
3+
"version": "1.16.1",
44
"name": "__MSG_extName__",
55
"description": "__MSG_extDesc__",
66
"default_locale": "en",

src/components/issues/IssuesList.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ const IssuesList = ({ account, issues: rawIssues, issuePriorities, projectVersio
3636

3737
return (
3838
<>
39-
{groupedIssues.map(({ project, versions, groups }) => (
40-
<Fragment key={project.id}>
39+
{groupedIssues.map(({ type, project, versions, groups }) => (
40+
<Fragment key={type}>
41+
{project && (
4142
<div
4243
className={clsx("flex justify-between gap-x-2", {
4344
"sticky top-0 z-[5] -mx-2 -my-1 bg-white px-2 py-1 shadow shadow-white dark:bg-gray-800 dark:shadow-gray-800": settings.style.stickyScroll,
@@ -52,6 +53,7 @@ const IssuesList = ({ account, issues: rawIssues, issuePriorities, projectVersio
5253
</button>
5354
)}
5455
</div>
56+
)}
5557
{groups.map(({ type, version, issues }) => (
5658
<Fragment key={`${type}-${version?.id}`}>
5759
{settings.style.groupIssuesByVersion && versions.length > 0 && ["version", "no-version"].includes(type) && (

src/utils/issue.ts

Lines changed: 42 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { IssuesData } from "../components/issues/IssuesList";
22
import { Settings } from "../provider/SettingsProvider";
33
import { TIssue, TIssuesPriority, TReference, TVersion } from "../types/redmine";
44

5-
type GroupType = "active" | "paused" | "pinned" | "version" | "no-version";
5+
type GroupType = "pinned" | "version" | "no-version";
66

77
type IssueGroup = {
88
type: GroupType;
@@ -11,7 +11,8 @@ type IssueGroup = {
1111
};
1212

1313
type GroupedIssues = {
14-
project: TReference;
14+
type: string;
15+
project?: TReference;
1516
versions: TVersion[];
1617
groups: {
1718
type: GroupType;
@@ -21,14 +22,11 @@ type GroupedIssues = {
2122
}[];
2223

2324
type GroupedIssuesHelper = Record<
24-
number,
25+
number | string,
2526
{
27+
type: string;
2628
// The project reference
27-
project: TReference;
28-
// Pinned issues
29-
activeIssues: TIssue[];
30-
// Pinned issues
31-
pausedIssues: TIssue[];
29+
project?: TReference;
3230
// Pinned issues
3331
pinnedIssues: TIssue[];
3432
// All versions of project
@@ -76,30 +74,49 @@ export const getSortedIssues = (issues: TIssue[], issuePriorities: TIssuesPriori
7674
*/
7775
export const getGroupedIssues = (issues: TIssue[], projectVersions: Record<number, TVersion[]>, issuesData: IssuesData, settings: Settings): GroupedIssues => {
7876
const grouped = issues.reduce((result: GroupedIssuesHelper, issue) => {
79-
if (!(issue.project.id in result)) {
80-
result[issue.project.id] = {
81-
project: issue.project,
82-
pinnedIssues: [],
83-
activeIssues: [],
84-
pausedIssues: [],
85-
versions: {},
86-
issues: [],
87-
sort: Object.keys(result).length,
88-
};
89-
}
90-
9177
if (settings.style.pinTrackedIssues) {
9278
if (issuesData[issue.id]?.active) {
93-
result[issue.project.id].activeIssues.push(issue);
79+
if (!("active" in result)) {
80+
result["active"] = {
81+
type: "active",
82+
pinnedIssues: [],
83+
versions: {},
84+
issues: [],
85+
sort: -2,
86+
};
87+
}
88+
89+
result["active"].issues.push(issue);
9490
return result;
9591
}
9692

9793
if (issuesData[issue.id]?.time) {
98-
result[issue.project.id].pausedIssues.push(issue);
94+
if (!("paused" in result)) {
95+
result["paused"] = {
96+
type: "paused",
97+
pinnedIssues: [],
98+
versions: {},
99+
issues: [],
100+
sort: -1,
101+
};
102+
}
103+
104+
result["paused"].issues.push(issue);
99105
return result;
100106
}
101107
}
102108

109+
if (!(issue.project.id in result)) {
110+
result[issue.project.id] = {
111+
type: issue.project.id.toString(),
112+
project: issue.project,
113+
pinnedIssues: [],
114+
versions: {},
115+
issues: [],
116+
sort: Object.keys(result).length,
117+
};
118+
}
119+
103120
if (issuesData[issue.id]?.pinned) {
104121
result[issue.project.id].pinnedIssues.push(issue);
105122
return result;
@@ -132,26 +149,11 @@ export const getGroupedIssues = (issues: TIssue[], projectVersions: Record<numbe
132149

133150
return Object.values(grouped)
134151
.sort((a, b) => a.sort - b.sort)
135-
.map(({ project, activeIssues, pausedIssues, pinnedIssues, versions, issues }) => ({
152+
.map(({ type, project, pinnedIssues, versions, issues }) => ({
153+
type,
136154
project: project,
137-
versions: projectVersions[project.id] ?? [],
155+
versions: (project ? projectVersions[project.id] : undefined) ?? [],
138156
groups: [
139-
...(activeIssues.length > 0
140-
? [
141-
{
142-
type: "active",
143-
issues: activeIssues,
144-
} satisfies IssueGroup,
145-
]
146-
: []),
147-
...(pausedIssues.length > 0
148-
? [
149-
{
150-
type: "paused",
151-
issues: pausedIssues,
152-
} satisfies IssueGroup,
153-
]
154-
: []),
155157
...(pinnedIssues.length > 0
156158
? [
157159
{

0 commit comments

Comments
 (0)