Skip to content

Commit ba492d0

Browse files
authored
親子タスクの不具合を解消 (#98)
* 親子タスクの不具合を解消 * fix test
1 parent 22a024c commit ba492d0

File tree

13 files changed

+93
-178
lines changed

13 files changed

+93
-178
lines changed

public/index.html

-10
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,5 @@
1111
<body>
1212
<noscript>Lamact React Issue Gantt Chart</noscript>
1313
<div id="root"></div>
14-
<!--
15-
This HTML file is a template.
16-
If you open it directly in the browser, you will see an empty page.
17-
18-
You can add webfonts, meta tags, or analytics to this file.
19-
The build step will place the bundled scripts into the <body> tag.
20-
21-
To begin the development, run `npm start` or `yarn start`.
22-
To create a production bundle, use `npm run build` or `yarn build`.
23-
-->
2414
</body>
2515
</html>

src/components/Gantt/Gantt.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ const Gantt = (props) => {
2424
try {
2525
gantt.clearAll();
2626
if (isValidVariable(props.issue) && props.issue.length != 0) {
27-
gantt.clearAll();
2827
props.issue.map((issue) => {
2928
gantt.addTask(issue);
3029
if ('links' in issue) {
@@ -34,6 +33,11 @@ const Gantt = (props) => {
3433
});
3534
}
3635
});
36+
props.issue.map((issue) => {
37+
if (issue._parent !== "#0") {
38+
gantt.setParent(gantt.getTask(issue.id), issue._parent);
39+
}
40+
});
3741
gantt.sort('due_date', false);
3842
}
3943
} catch (err) {

src/components/Gantt/GanttAttachEvent.js

+2-54
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,6 @@ export const attachEvent = (gantt, props) => {
1515
});
1616

1717
gantt.attachEvent('onAfterTaskUpdate', (id, gantt_task) => {
18-
updateParentTaskDate(gantt, gantt_task);
19-
gantt.getChildren(gantt_task.id).map((child_gantt_task_id) => {
20-
updateChildTaskDate(gantt, gantt_task, child_gantt_task_id);
21-
});
2218
props.updateIssueByAPI(gantt_task, gantt);
2319
});
2420

@@ -27,12 +23,8 @@ export const attachEvent = (gantt, props) => {
2723

2824
gantt.attachEvent('onAfterTaskMove', (id, parent) => {
2925
let gantt_task = gantt.getTask(id);
30-
if ('parent' in gantt_task) {
31-
if (gantt_task.parent !== 0) {
32-
gantt_task.parent = parent;
33-
props.updateIssueByAPI(gantt_task, gantt);
34-
}
35-
}
26+
// gantt_task._parent = parent;
27+
props.updateIssueByAPI(gantt_task, gantt);
3628
});
3729

3830
gantt.attachEvent("onAfterLinkAdd", function (id, item) {
@@ -86,7 +78,6 @@ export const attachEvent = (gantt, props) => {
8678
// Custom QuickInfo
8779
// https://docs.dhtmlx.com/gantt/desktop__quick_info.html
8880
gantt.attachEvent('onQuickInfo', (id) => {
89-
console.log("onQuickInfo")
9081
let gantt_task = gantt.getTask(id);
9182
gantt.locale.labels.detail_button = 'DETAIL';
9283
gantt.$click.buttons.detail_button = (gantt_task_id) => {
@@ -138,46 +129,3 @@ export const attachEvent = (gantt, props) => {
138129
}
139130
});
140131
};
141-
142-
export const updateParentTaskDate = (gantt, gantt_task) => {
143-
if (!'parent' in gantt_task) {
144-
return null;
145-
}
146-
if (gantt_task.parent === 0) {
147-
return null;
148-
}
149-
let parent_gantt_task = gantt.getTask(gantt_task.parent).valueOf();
150-
if (
151-
parent_gantt_task.start_date.getTime() > gantt_task.start_date.getTime()
152-
) {
153-
parent_gantt_task.start_date = gantt_task.start_date;
154-
gantt.updateTask(parent_gantt_task.id, parent_gantt_task);
155-
gantt.render();
156-
}
157-
if (parent_gantt_task.end_date.getTime() < gantt_task.end_date.getTime()) {
158-
parent_gantt_task.end_date = gantt_task.end_date;
159-
gantt.updateTask(parent_gantt_task.id, parent_gantt_task);
160-
gantt.render();
161-
}
162-
};
163-
164-
export const updateChildTaskDate = (gantt, gantt_task, child_gantt_task_id) => {
165-
let child_gantt_task = gantt.getTask(child_gantt_task_id).valueOf();
166-
const date_duration = child_gantt_task.duration.valueOf();
167-
if (child_gantt_task.start_date.getTime() < gantt_task.start_date.getTime()) {
168-
child_gantt_task.start_date = gantt_task.start_date;
169-
child_gantt_task.end_date = new Date(
170-
calculateDueDate(gantt_task.start_date, date_duration)
171-
);
172-
gantt.updateTask(child_gantt_task.id, child_gantt_task);
173-
gantt.render();
174-
}
175-
if (child_gantt_task.end_date.getTime() > gantt_task.end_date.getTime()) {
176-
child_gantt_task.start_date = new Date(
177-
calculateStartDate(gantt_task.end_date, date_duration)
178-
);
179-
child_gantt_task.end_date = gantt_task.end_date;
180-
gantt.updateTask(child_gantt_task.id, child_gantt_task);
181-
gantt.render();
182-
}
183-
};

src/components/PageHeader/PageHeader.js

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ const PageHeader = (props) => {
77
<meta charSet="utf-8" />
88
<title>{props.title}</title>
99
</Helmet>
10-
...
1110
</div>
1211
);
1312
};

src/functions/Common/CommonHelper.js

+44
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,47 @@ export const getGanttDuration = (start_date, due_date, created_at) => {
133133
}
134134
return duration;
135135
};
136+
137+
export const ArrangeGanttTaskToGeneratedGanttTaskForCompare = (issue_info) => {
138+
let arrangelink = [];
139+
issue_info.links.map((list) => {
140+
arrangelink.push({ type: list.type, target: list.target, source: list.source });
141+
});
142+
var _parent
143+
if (issue_info.parent == 0)
144+
_parent = "#0";
145+
else {
146+
_parent = issue_info.parent;
147+
}
148+
149+
const arrange = {
150+
id: issue_info.id,
151+
text: issue_info.text,
152+
start_date: adjustDateString(issue_info.start_date),
153+
due_date: issue_info.due_date,
154+
duration: issue_info.duration,
155+
progress: issue_info.progress,
156+
assignee: issue_info.assignee,
157+
description: issue_info.description,
158+
update: issue_info.update,
159+
links: arrangelink,
160+
_parent: _parent,
161+
}
162+
return arrange;
163+
};
164+
165+
export const isEqualGanntTask = (GanntTaskA, GanntTaskB) => {
166+
return (
167+
GanntTaskA.id == GanntTaskB.id &&
168+
GanntTaskA.text == GanntTaskB.text &&
169+
GanntTaskA.start_date == GanntTaskB.start_date &&
170+
GanntTaskA.due_date == GanntTaskB.due_date.toString() &&
171+
GanntTaskA.duration == GanntTaskB.duration &&
172+
GanntTaskA.progress == GanntTaskB.progress &&
173+
GanntTaskA.assignee == GanntTaskB.assignee &&
174+
// GanntTaskA.description == GanntTaskB.description &&
175+
GanntTaskA.update == GanntTaskB.update &&
176+
GanntTaskA._parent == GanntTaskB._parent &&
177+
JSON.stringify(GanntTaskA.links) == JSON.stringify(GanntTaskB.links)
178+
);
179+
};

src/functions/Common/IssueAPI.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ export const getIssuesFromAPI = async (
3030
if (!isValidURL(git_url)) {
3131
return Promise.resolve();
3232
} else if (isGitHubURL(git_url)) {
33-
return getGitHubIssuesFromAPI(git_url, token, selected_labels, selected_assignee);
34-
} else if (
35-
isGitLabURL(git_url) ||
36-
getSelfHostingGitLabDomain(git_url) !== null
37-
) {
33+
return getGitHubIssuesFromAPI(
34+
git_url,
35+
token,
36+
selected_labels,
37+
selected_assignee
38+
);
39+
} else if (isGitLabURL(git_url) || getSelfHostingGitLabDomain(git_url) !== null) {
3840
return getGitLabIssuesFromAPI(
3941
git_url,
4042
token,

src/functions/Common/Parser.js

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import yaml from 'js-yaml';
33
import { gantt } from 'dhtmlx-gantt';
44

55
export const removeFirstSharp = (id_str) => {
6+
if(!isValidVariable(id_str)){
7+
return null;
8+
}
69
if (id_str.length > 1 && /^#/.test(id_str)) {
710
id_str = id_str.substring(1);
811
}

src/functions/GitHub/GitHubAPI.js

+10-5
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@ import {
1010
import {
1111
generateGanttTaskFromGitHub,
1212
updateGitHubDescriptionStringFromGanttTask,
13-
Arrangegantt,
14-
contentcheck,
1513
} from './GitHubHelper.js';
16-
import { date2string, isValidVariable } from '../Common/CommonHelper.js';
14+
import {
15+
date2string,
16+
isValidVariable,
17+
isEqualGanntTask,
18+
ArrangeGanttTaskToGeneratedGanttTaskForCompare,
19+
} from '../Common/CommonHelper.js';
1720
import {
1821
removeFirstSharp,
1922
replacePropertyInDescriptionString,
@@ -123,8 +126,10 @@ export const updateGitHubIssueFromGanttTask = (
123126
});
124127
} else {
125128
// Update if different from existing parameters
126-
if (!contentcheck(Arrangegantt(gantt_task),
127-
generateGanttTaskFromGitHub(issue_info.body, issue_info))) {
129+
if (!isEqualGanntTask(
130+
ArrangeGanttTaskToGeneratedGanttTaskForCompare(gantt_task),
131+
generateGanttTaskFromGitHub(issue_info.body, issue_info)
132+
)) {
128133
axios
129134
.post(
130135
url,

src/functions/GitHub/GitHubHelper.js

+2-46
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export const generateGanttTaskFromGitHub = (description, issue_info) => {
3636
progress: getNumberFromDescriptionYaml(description, 'progress'),
3737
assignee: getGitHubAssignee(issue_info),
3838
parent: '#' + getNumberFromDescriptionYaml(description, 'parent'),
39+
_parent: '#' + getNumberFromDescriptionYaml(description, 'parent'),
3940
description: description,
4041
update: getGanttUpdateDate(issue_info.created_at, issue_info.updated_at),
4142
};
@@ -89,55 +90,10 @@ export const updateGitHubDescriptionStringFromGanttTask = (
8990
due_date: due_date_str,
9091
progress: orgRound(gantt_task.progress, 0.01),
9192
};
92-
if ('parent' in gantt_task) {
93-
task.parent = parseInt(removeFirstSharp(gantt_task.parent));
94-
}
93+
task.parent = parseInt(removeFirstSharp(gantt_task.parent));
9594
if ('dependon' in gantt_task) {
9695
task.dependon = gantt_task.dependon;
9796
}
9897
description = replacePropertyInDescriptionString(description, task);
9998
return description;
10099
};
101-
102-
export const Arrangegantt = (issue_info) => {
103-
let arrangelink = [];
104-
issue_info.links.map((list) => {
105-
let prearrangelink = [];
106-
prearrangelink.type = list.type;
107-
prearrangelink.target = list.target;
108-
prearrangelink.source = list.source
109-
arrangelink.push(prearrangelink);
110-
});
111-
112-
const arrange = {
113-
id: issue_info.id,
114-
text: issue_info.text,
115-
start_date: adjustDateString(issue_info.start_date),
116-
due_date: issue_info.due_date,
117-
duration: issue_info.duration,
118-
progress: issue_info.progress,
119-
assignee: issue_info.assignee,
120-
description: issue_info.description,
121-
update: issue_info.update,
122-
links: arrangelink,
123-
parent: '#' + issue_info.parent,
124-
}
125-
126-
return arrange;
127-
};
128-
129-
export const contentcheck = (Arrange, generate) => {
130-
return (
131-
Arrange.id == generate.id &&
132-
Arrange.text == generate.text &&
133-
Arrange.start_date == generate.start_date &&
134-
Arrange.due_date == generate.due_date.toString() &&
135-
Arrange.duration == generate.duration &&
136-
Arrange.progress == generate.progress &&
137-
Arrange.assignee == generate.assignee &&
138-
// Arrange.description == generate.description &&
139-
Arrange.update == generate.update &&
140-
Arrange.parent == generate.parent &&
141-
JSON.stringify(Arrange.links) == JSON.stringify(generate.links)
142-
);
143-
};

src/functions/GitHub/GitHubHelper.test.js

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const gantt_task = {
3131
progress: 0.5,
3232
assignee: 'satoshi',
3333
parent: '#5',
34+
_parent: '#5',
3435
description: description,
3536
update:'2021/2/5',
3637
links: [],

src/functions/GitLab/GitLabAPI.js

+7-8
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ import {
1010
import {
1111
generateGanttTaskFromGitLab,
1212
updateGitLabDescriptionStringFromGanttTask,
13-
Arrangegantt,
14-
contentcheck,
1513
} from './GitLabHelper.js';
1614
import {
1715
adjustDateString,
16+
ArrangeGanttTaskToGeneratedGanttTaskForCompare,
1817
calculateDueDate,
1918
date2string,
19+
isEqualGanntTask,
2020
} from '../Common/CommonHelper.js';
2121
import {
2222
removeFirstSharp,
@@ -34,9 +34,7 @@ export const getGitLabIssuesFromAPI = async (
3434
.then((res) => {
3535
let data = [];
3636
res.data.map((issue_info) => {
37-
const gantt_task = generateGanttTaskFromGitLab(issue_info);
38-
39-
data.push(gantt_task);
37+
data.push(generateGanttTaskFromGitLab(issue_info));
4038
});
4139
return data;
4240
})
@@ -97,9 +95,10 @@ export const updateGitLabIssueFromGanttTask = (
9795
.then((res) => {
9896
const issue_info = res.data;
9997
// Update if different from existing parameters
100-
if (!contentcheck(
101-
Arrangegantt(gantt_task),
102-
generateGanttTaskFromGitLab(issue_info))) {
98+
if (!isEqualGanntTask(
99+
ArrangeGanttTaskToGeneratedGanttTaskForCompare(gantt_task),
100+
generateGanttTaskFromGitLab(issue_info)
101+
)) {
103102
if (
104103
parseInt(issue_info.iid) === parseInt(removeFirstSharp(gantt_task.id))
105104
) {

0 commit comments

Comments
 (0)