github-issue-tower-defence-management 1.176.0 → 1.177.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/.github/workflows/umino-project.yml +4 -107
- package/CHANGELOG.md +13 -0
- package/bin/adapter/entry-points/console/ui-dist/assets/{index-BhDothvr.js → index-D6aAQrf7.js} +2 -2
- package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
- package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +1 -0
- package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
- package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js +6 -0
- package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js.map +1 -1
- package/bin/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.js +3 -0
- package/bin/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.js.map +1 -1
- package/bin/domain/usecases/SetupTowerDefenceProjectUseCase.js +23 -10
- package/bin/domain/usecases/SetupTowerDefenceProjectUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/entry-points/console/ui/src/features/console/components/list/ConsoleItemList.stories.tsx +36 -0
- package/src/adapter/entry-points/console/ui/src/features/console/logic/grouping.test.ts +88 -0
- package/src/adapter/entry-points/console/ui/src/features/console/logic/grouping.ts +16 -4
- package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +13 -3
- package/src/adapter/entry-points/console/ui-dist/assets/{index-BhDothvr.js → index-D6aAQrf7.js} +2 -2
- package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
- package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +5 -0
- package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +1 -0
- package/src/adapter/repositories/issue/GraphqlProjectItemRepository.ts +12 -5
- package/src/domain/entities/Issue.ts +1 -0
- package/src/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.test.ts +49 -0
- package/src/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.ts +4 -0
- package/src/domain/usecases/SetupTowerDefenceProjectUseCase.test.ts +138 -0
- package/src/domain/usecases/SetupTowerDefenceProjectUseCase.ts +41 -17
- package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
- package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts +1 -0
- package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts.map +1 -1
- package/types/domain/entities/Issue.d.ts +1 -0
- package/types/domain/entities/Issue.d.ts.map +1 -1
- package/types/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.d.ts.map +1 -1
- package/types/domain/usecases/SetupTowerDefenceProjectUseCase.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SetupTowerDefenceProjectUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/SetupTowerDefenceProjectUseCase.ts"],"names":[],"mappings":";;;AAGA,+
|
|
1
|
+
{"version":3,"file":"SetupTowerDefenceProjectUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/SetupTowerDefenceProjectUseCase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
2
|
import { buildConsoleListRows } from '../../logic/grouping';
|
|
3
|
+
import type { ConsoleOverlay } from '../../logic/types';
|
|
3
4
|
import {
|
|
4
5
|
consoleListItemsFixture,
|
|
5
6
|
consoleStoryColorsFixture,
|
|
@@ -59,3 +60,38 @@ export const ErrorState: Story = {
|
|
|
59
60
|
onSelectItem: () => {},
|
|
60
61
|
},
|
|
61
62
|
};
|
|
63
|
+
|
|
64
|
+
const staleOverlay: ConsoleOverlay = {
|
|
65
|
+
PVTI_lADOABCD1234zgABCD01: {
|
|
66
|
+
ts: 100,
|
|
67
|
+
mode: 'prs',
|
|
68
|
+
story: { name: 'OldStory', color: 'GRAY' },
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const StaleOverlayBefore: Story = {
|
|
73
|
+
args: {
|
|
74
|
+
rows: buildConsoleListRows([consoleListItemsFixture[0]], staleOverlay, []),
|
|
75
|
+
storyColors: consoleStoryColorsFixture,
|
|
76
|
+
activeItemId: null,
|
|
77
|
+
isLoading: false,
|
|
78
|
+
error: null,
|
|
79
|
+
onSelectItem: () => {},
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const StaleOverlayAfter: Story = {
|
|
84
|
+
args: {
|
|
85
|
+
rows: buildConsoleListRows(
|
|
86
|
+
[consoleListItemsFixture[0]],
|
|
87
|
+
staleOverlay,
|
|
88
|
+
[],
|
|
89
|
+
'2026-08-24T00:00:00Z',
|
|
90
|
+
),
|
|
91
|
+
storyColors: consoleStoryColorsFixture,
|
|
92
|
+
activeItemId: null,
|
|
93
|
+
isLoading: false,
|
|
94
|
+
error: null,
|
|
95
|
+
onSelectItem: () => {},
|
|
96
|
+
},
|
|
97
|
+
};
|
|
@@ -67,6 +67,73 @@ describe('resolveItemStory', () => {
|
|
|
67
67
|
CONSOLE_NO_STORY_LABEL,
|
|
68
68
|
);
|
|
69
69
|
});
|
|
70
|
+
|
|
71
|
+
it('returns overlay story when overlay entry is fresh (ts >= snapshot)', () => {
|
|
72
|
+
const snapshotTs = 1000;
|
|
73
|
+
const overlay: ConsoleOverlay = {
|
|
74
|
+
PVTI_4: {
|
|
75
|
+
ts: snapshotTs,
|
|
76
|
+
mode: 'triage',
|
|
77
|
+
story: { name: 'FreshOverlay', color: 'GREEN' },
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
expect(
|
|
81
|
+
resolveItemStory(
|
|
82
|
+
item({ number: 4, story: 'ItemStory' }),
|
|
83
|
+
overlay,
|
|
84
|
+
new Date(snapshotTs).toISOString(),
|
|
85
|
+
),
|
|
86
|
+
).toBe('FreshOverlay');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('falls back to item story when overlay entry is stale (ts < snapshot)', () => {
|
|
90
|
+
const overlayTs = 999;
|
|
91
|
+
const snapshotTs = 1000;
|
|
92
|
+
const overlay: ConsoleOverlay = {
|
|
93
|
+
PVTI_5: {
|
|
94
|
+
ts: overlayTs,
|
|
95
|
+
mode: 'triage',
|
|
96
|
+
story: { name: 'StaleOverlay', color: 'RED' },
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
expect(
|
|
100
|
+
resolveItemStory(
|
|
101
|
+
item({ number: 5, story: 'ItemStory' }),
|
|
102
|
+
overlay,
|
|
103
|
+
new Date(snapshotTs).toISOString(),
|
|
104
|
+
),
|
|
105
|
+
).toBe('ItemStory');
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it('returns overlay story when snapshotGeneratedAt is null (backward compat)', () => {
|
|
109
|
+
const overlay: ConsoleOverlay = {
|
|
110
|
+
PVTI_6: {
|
|
111
|
+
ts: 1,
|
|
112
|
+
mode: 'triage',
|
|
113
|
+
story: { name: 'OverlayStory', color: 'BLUE' },
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
expect(
|
|
117
|
+
resolveItemStory(item({ number: 6, story: 'ItemStory' }), overlay, null),
|
|
118
|
+
).toBe('OverlayStory');
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('returns overlay story when snapshotGeneratedAt is an invalid date string (NaN guard)', () => {
|
|
122
|
+
const overlay: ConsoleOverlay = {
|
|
123
|
+
PVTI_7: {
|
|
124
|
+
ts: 1,
|
|
125
|
+
mode: 'triage',
|
|
126
|
+
story: { name: 'OverlayStory', color: 'BLUE' },
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
expect(
|
|
130
|
+
resolveItemStory(
|
|
131
|
+
item({ number: 7, story: 'ItemStory' }),
|
|
132
|
+
overlay,
|
|
133
|
+
'not-a-date',
|
|
134
|
+
),
|
|
135
|
+
).toBe('OverlayStory');
|
|
136
|
+
});
|
|
70
137
|
});
|
|
71
138
|
|
|
72
139
|
describe('buildConsoleListRows', () => {
|
|
@@ -138,4 +205,25 @@ describe('buildConsoleListRows', () => {
|
|
|
138
205
|
it('returns no rows for an empty list', () => {
|
|
139
206
|
expect(buildConsoleListRows([], {}, [])).toEqual([]);
|
|
140
207
|
});
|
|
208
|
+
|
|
209
|
+
it('uses item story for group header when overlay entry is stale', () => {
|
|
210
|
+
const overlayTs = 999;
|
|
211
|
+
const snapshotTs = 1000;
|
|
212
|
+
const overlay: ConsoleOverlay = {
|
|
213
|
+
PVTI_1: {
|
|
214
|
+
ts: overlayTs,
|
|
215
|
+
mode: 'triage',
|
|
216
|
+
story: { name: 'StaleStory', color: 'RED' },
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
const items = [item({ number: 1, story: 'ItemStory' })];
|
|
220
|
+
const rows = buildConsoleListRows(
|
|
221
|
+
items,
|
|
222
|
+
overlay,
|
|
223
|
+
[],
|
|
224
|
+
new Date(snapshotTs).toISOString(),
|
|
225
|
+
);
|
|
226
|
+
const header = rows[0];
|
|
227
|
+
expect(header.kind === 'group-header' && header.story).toBe('ItemStory');
|
|
228
|
+
});
|
|
141
229
|
});
|
|
@@ -24,6 +24,7 @@ export const resolveStoryColorEnum = (
|
|
|
24
24
|
export const resolveItemStory = (
|
|
25
25
|
item: ConsoleListItem,
|
|
26
26
|
overlay: ConsoleOverlay,
|
|
27
|
+
snapshotGeneratedAt: string | null = null,
|
|
27
28
|
): string => {
|
|
28
29
|
const overlayKey =
|
|
29
30
|
item.projectItemId !== '' ? item.projectItemId : item.itemId;
|
|
@@ -32,6 +33,16 @@ export const resolveItemStory = (
|
|
|
32
33
|
overlayEntry?.story?.name !== undefined &&
|
|
33
34
|
overlayEntry.story.name !== ''
|
|
34
35
|
) {
|
|
36
|
+
if (snapshotGeneratedAt !== null) {
|
|
37
|
+
const snapshotGeneratedAtMs = Date.parse(snapshotGeneratedAt);
|
|
38
|
+
if (
|
|
39
|
+
!Number.isNaN(snapshotGeneratedAtMs) &&
|
|
40
|
+
overlayEntry.ts < snapshotGeneratedAtMs
|
|
41
|
+
) {
|
|
42
|
+
const trimmed = item.story.trim();
|
|
43
|
+
return trimmed !== '' ? item.story : CONSOLE_NO_STORY_LABEL;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
35
46
|
return overlayEntry.story.name;
|
|
36
47
|
}
|
|
37
48
|
const trimmed = item.story.trim();
|
|
@@ -57,14 +68,15 @@ export const buildConsoleListRows = (
|
|
|
57
68
|
items: ConsoleListItem[],
|
|
58
69
|
overlay: ConsoleOverlay,
|
|
59
70
|
storyOrder: string[],
|
|
71
|
+
snapshotGeneratedAt: string | null = null,
|
|
60
72
|
): ConsoleListRow[] => {
|
|
61
73
|
const indexByStory = new Map(storyOrder.map((name, index) => [name, index]));
|
|
62
74
|
const sorted =
|
|
63
75
|
storyOrder.length === 0
|
|
64
76
|
? items
|
|
65
77
|
: [...items].sort((a, b) => {
|
|
66
|
-
const storyA = resolveItemStory(a, overlay);
|
|
67
|
-
const storyB = resolveItemStory(b, overlay);
|
|
78
|
+
const storyA = resolveItemStory(a, overlay, snapshotGeneratedAt);
|
|
79
|
+
const storyB = resolveItemStory(b, overlay, snapshotGeneratedAt);
|
|
68
80
|
const indexA = indexByStory.get(storyA) ?? UNKNOWN_STORY_SORT_INDEX;
|
|
69
81
|
const indexB = indexByStory.get(storyB) ?? UNKNOWN_STORY_SORT_INDEX;
|
|
70
82
|
return indexA - indexB;
|
|
@@ -72,14 +84,14 @@ export const buildConsoleListRows = (
|
|
|
72
84
|
|
|
73
85
|
const storyCounts = new Map<string, number>();
|
|
74
86
|
for (const item of sorted) {
|
|
75
|
-
const story = resolveItemStory(item, overlay);
|
|
87
|
+
const story = resolveItemStory(item, overlay, snapshotGeneratedAt);
|
|
76
88
|
storyCounts.set(story, (storyCounts.get(story) ?? 0) + 1);
|
|
77
89
|
}
|
|
78
90
|
|
|
79
91
|
const rows: ConsoleListRow[] = [];
|
|
80
92
|
let previousStory: string | null = null;
|
|
81
93
|
for (const item of sorted) {
|
|
82
|
-
const story = resolveItemStory(item, overlay);
|
|
94
|
+
const story = resolveItemStory(item, overlay, snapshotGeneratedAt);
|
|
83
95
|
if (story !== previousStory) {
|
|
84
96
|
rows.push({
|
|
85
97
|
kind: 'group-header',
|
|
@@ -120,8 +120,14 @@ export const ConsolePage = () => {
|
|
|
120
120
|
const storyOrder = activeSnapshot?.storyOrder ?? [];
|
|
121
121
|
|
|
122
122
|
const rows = useMemo(
|
|
123
|
-
() =>
|
|
124
|
-
|
|
123
|
+
() =>
|
|
124
|
+
buildConsoleListRows(
|
|
125
|
+
pendingItems,
|
|
126
|
+
overlayState.overlay,
|
|
127
|
+
storyOrder,
|
|
128
|
+
activeSnapshot?.generatedAt ?? null,
|
|
129
|
+
),
|
|
130
|
+
[pendingItems, overlayState.overlay, storyOrder, activeSnapshot],
|
|
125
131
|
);
|
|
126
132
|
|
|
127
133
|
const storyColors = activeSnapshot?.storyColors ?? {};
|
|
@@ -183,7 +189,11 @@ export const ConsolePage = () => {
|
|
|
183
189
|
|
|
184
190
|
const storyNameForSelected =
|
|
185
191
|
selectedItem !== null
|
|
186
|
-
? resolveItemStory(
|
|
192
|
+
? resolveItemStory(
|
|
193
|
+
selectedItem,
|
|
194
|
+
overlayState.overlay,
|
|
195
|
+
snapshots[activeTab]?.generatedAt ?? null,
|
|
196
|
+
)
|
|
187
197
|
: null;
|
|
188
198
|
|
|
189
199
|
const advanceToNext = useCallback(
|