@progress/kendo-react-gantt 9.0.0-develop.2 → 9.0.0-develop.3
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/Gantt.mjs +88 -130
- package/README.md +24 -23
- package/cells/FilterCells/utils.mjs +4 -1
- package/components/BaseView.mjs +82 -72
- package/components/GanttTask.mjs +24 -11
- package/components/toolbar/AddButton.mjs +40 -38
- package/components/toolbar/Toolbar.mjs +1 -4
- package/components/toolbar/view-selector/ViewSelector.mjs +1 -4
- package/components/toolbar/view-selector/ViewSelectorItem.mjs +3 -6
- package/context/GanttContext.mjs +3 -1
- package/editors/FormDropDownList.mjs +11 -19
- package/editors/GanttEditor.js +1 -1
- package/editors/GanttEditor.mjs +56 -68
- package/editors/GanttEditorPredecessors.mjs +2 -13
- package/editors/GanttEditorSuccessors.mjs +3 -17
- package/editors/GanttForm.mjs +29 -16
- package/hooks/useDictionaryStore.mjs +10 -13
- package/hooks/useGanttTask.mjs +13 -15
- package/package-metadata.mjs +1 -1
- package/package.json +12 -12
- package/utils/data-operations.mjs +50 -19
- package/utils/index.mjs +22 -23
- package/views/GanttDayView.mjs +36 -28
- package/views/GanttMonthView.mjs +10 -20
- package/views/GanttWeekView.mjs +13 -19
- package/views/GanttYearView.mjs +11 -28
package/components/GanttTask.mjs
CHANGED
|
@@ -71,16 +71,21 @@ const se = e.forwardRef((t, K) => {
|
|
|
71
71
|
});
|
|
72
72
|
},
|
|
73
73
|
[t.dataItem, t.level]
|
|
74
|
-
), M = e.useCallback(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
74
|
+
), M = e.useCallback(() => {
|
|
75
|
+
const n = i.start, B = i.end, R = N.current, m = r.current, _ = f.current;
|
|
76
|
+
if (!C || R === null || m === null)
|
|
77
|
+
return;
|
|
78
|
+
const G = R.clientWidth / (B.getTime() - n.getTime()), P = (o.getTime() - n.getTime()) * G, w = (u.getTime() - o.getTime()) * G, J = (R.offsetHeight - m.offsetHeight) / 2;
|
|
79
|
+
m.style.left = `${Math.round(g ? P - le : P)}px`, m.style.top = `${Math.round(J)}px`, g || (m.style.width = `${Math.round(w)}px`, _ !== null && (_.style.width = `${Math.round(w * (h || 0))}px`)), q(!0);
|
|
80
|
+
}, [
|
|
81
|
+
i.start.getTime(),
|
|
82
|
+
i.end.getTime(),
|
|
83
|
+
y,
|
|
84
|
+
T,
|
|
85
|
+
C,
|
|
86
|
+
h,
|
|
87
|
+
O
|
|
88
|
+
]);
|
|
84
89
|
e.useEffect(M, [M]);
|
|
85
90
|
const A = {
|
|
86
91
|
visibility: j ? void 0 : "hidden",
|
|
@@ -142,7 +147,15 @@ const se = e.forwardRef((t, K) => {
|
|
|
142
147
|
onContextMenu: H
|
|
143
148
|
},
|
|
144
149
|
d ? /* @__PURE__ */ e.createElement("div", { className: "k-task-summary-progress", ref: f }, /* @__PURE__ */ e.createElement("div", { className: "k-task-summary-complete" })) : /* @__PURE__ */ e.createElement("div", { className: "k-task-complete", ref: f }),
|
|
145
|
-
!d && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("div", { className: "k-task-content" }, Y), l.onTaskRemoveClick ? /* @__PURE__ */ e.createElement("span", { className: "k-task-actions" }, /* @__PURE__ */ e.createElement(
|
|
150
|
+
!d && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("div", { className: "k-task-content" }, Y), l.onTaskRemoveClick ? /* @__PURE__ */ e.createElement("span", { className: "k-task-actions" }, /* @__PURE__ */ e.createElement(
|
|
151
|
+
"span",
|
|
152
|
+
{
|
|
153
|
+
onClick: z,
|
|
154
|
+
className: "k-link k-task-delete",
|
|
155
|
+
"aria-label": "Delete"
|
|
156
|
+
},
|
|
157
|
+
/* @__PURE__ */ e.createElement(p, { name: "x", icon: ee })
|
|
158
|
+
)) : null),
|
|
146
159
|
a.isEnabled && /* @__PURE__ */ e.createElement(
|
|
147
160
|
"div",
|
|
148
161
|
{
|
|
@@ -12,44 +12,46 @@ import { Button as C, DropDownButton as f } from "@progress/kendo-react-buttons"
|
|
|
12
12
|
import { messages as g, addTask as v, addChild as p, addAbove as b, addBelow as E } from "../../messages/index.mjs";
|
|
13
13
|
import { IconWrap as w } from "@progress/kendo-react-common";
|
|
14
14
|
import { plusIcon as B } from "@progress/kendo-svg-icons";
|
|
15
|
-
const h = e.forwardRef(
|
|
16
|
-
|
|
17
|
-
(t) =>
|
|
18
|
-
t
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
t
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
});
|
|
15
|
+
const h = e.forwardRef(
|
|
16
|
+
(n, M) => {
|
|
17
|
+
const a = k(), o = (t) => a.toLanguageString(t, g[t]), l = o(v), c = o(p), d = o(b), s = o(E), r = e.useCallback(
|
|
18
|
+
(t) => {
|
|
19
|
+
t.syntheticEvent.preventDefault();
|
|
20
|
+
const u = t.item && t.item.direction ? t.item.direction : "none";
|
|
21
|
+
n.onClick && n.onClick({
|
|
22
|
+
nativeEvent: t.nativeEvent,
|
|
23
|
+
syntheticEvent: t.syntheticEvent,
|
|
24
|
+
direction: u
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
[n.onClick]
|
|
28
|
+
), m = e.useCallback(
|
|
29
|
+
(t) => {
|
|
30
|
+
t.preventDefault(), n.onClick && n.onClick({
|
|
31
|
+
nativeEvent: t && t.nativeEvent,
|
|
32
|
+
syntheticEvent: t,
|
|
33
|
+
direction: "none"
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
[n.onClick]
|
|
37
|
+
), i = /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(w, { name: "plus", icon: B }), l);
|
|
38
|
+
return n.selectedTask ? /* @__PURE__ */ e.createElement(
|
|
39
|
+
f,
|
|
40
|
+
{
|
|
41
|
+
className: "k-views-dropdown",
|
|
42
|
+
onItemClick: r,
|
|
43
|
+
popupSettings: { popupClass: "k-gantt-toolbar" },
|
|
44
|
+
textField: "title",
|
|
45
|
+
items: [
|
|
46
|
+
{ title: c, direction: "child" },
|
|
47
|
+
{ title: d, direction: "above" },
|
|
48
|
+
{ title: s, direction: "below" }
|
|
49
|
+
],
|
|
50
|
+
text: i
|
|
51
|
+
}
|
|
52
|
+
) : /* @__PURE__ */ e.createElement(C, { onClick: m }, i);
|
|
53
|
+
}
|
|
54
|
+
);
|
|
53
55
|
h.displayName = "KendoReactGanttAddButton";
|
|
54
56
|
export {
|
|
55
57
|
h as AddButton
|
|
@@ -10,10 +10,7 @@ import * as e from "react";
|
|
|
10
10
|
import { classNames as c } from "@progress/kendo-react-common";
|
|
11
11
|
import { Toolbar as u } from "@progress/kendo-react-buttons";
|
|
12
12
|
const f = e.forwardRef((t, n) => {
|
|
13
|
-
const {
|
|
14
|
-
className: a,
|
|
15
|
-
...s
|
|
16
|
-
} = t, r = e.useRef(null), o = e.useRef(null);
|
|
13
|
+
const { className: a, ...s } = t, r = e.useRef(null), o = e.useRef(null);
|
|
17
14
|
e.useImperativeHandle(o, () => ({ element: r.current, props: t })), e.useImperativeHandle(n, () => o.current);
|
|
18
15
|
const m = e.useMemo(() => c("k-gantt-toolbar k-gantt-header", a), [a]);
|
|
19
16
|
return /* @__PURE__ */ e.createElement(
|
|
@@ -10,10 +10,7 @@ import * as e from "react";
|
|
|
10
10
|
import { ToolbarItem as m } from "@progress/kendo-react-buttons";
|
|
11
11
|
import { classNames as o } from "@progress/kendo-react-common";
|
|
12
12
|
const s = e.forwardRef((t, n) => {
|
|
13
|
-
const {
|
|
14
|
-
className: l,
|
|
15
|
-
...c
|
|
16
|
-
} = t, r = e.useRef(null);
|
|
13
|
+
const { className: l, ...c } = t, r = e.useRef(null);
|
|
17
14
|
return e.useImperativeHandle(n, () => ({ element: r.current, props: t })), /* @__PURE__ */ e.createElement(
|
|
18
15
|
m,
|
|
19
16
|
{
|
|
@@ -14,12 +14,9 @@ const w = (e) => {
|
|
|
14
14
|
const [a, i] = v(), n = m(), o = t.useMemo(
|
|
15
15
|
() => typeof e.view.title == "function" ? e.view.title.call(void 0, n) : e.view.title,
|
|
16
16
|
[e.view.title, n]
|
|
17
|
-
), l = t.useCallback(
|
|
18
|
-
()
|
|
19
|
-
|
|
20
|
-
},
|
|
21
|
-
[i, e.view.name]
|
|
22
|
-
);
|
|
17
|
+
), l = t.useCallback(() => {
|
|
18
|
+
e.view.name && i(e.view.name);
|
|
19
|
+
}, [i, e.view.name]);
|
|
23
20
|
return /* @__PURE__ */ t.createElement(
|
|
24
21
|
c,
|
|
25
22
|
{
|
package/context/GanttContext.mjs
CHANGED
|
@@ -16,7 +16,9 @@ const o = e.createContext([]), f = () => e.useContext(o);
|
|
|
16
16
|
o.displayName = "KendoReactGanttDependencyDataContext";
|
|
17
17
|
const a = e.createContext(N), A = () => e.useContext(a);
|
|
18
18
|
a.displayName = "KendoReactGanttTaskModelFieldsContext";
|
|
19
|
-
const s = e.createContext(
|
|
19
|
+
const s = e.createContext(
|
|
20
|
+
h
|
|
21
|
+
), V = () => e.useContext(s);
|
|
20
22
|
s.displayName = "KendoReactGanttDependencyModelFieldsContext";
|
|
21
23
|
const c = e.createContext({}), _ = () => e.useContext(c);
|
|
22
24
|
c.displayName = "KendoReactGanttPropsContext";
|
|
@@ -11,25 +11,17 @@ import { FieldWrapper as L } from "@progress/kendo-react-form";
|
|
|
11
11
|
import { Label as k, Hint as M, Error as N } from "@progress/kendo-react-labels";
|
|
12
12
|
import { findByFieldValue as V, DropDownList as x } from "@progress/kendo-react-dropdowns";
|
|
13
13
|
const S = (n) => {
|
|
14
|
-
const {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
} = n, I = { id: null, title: "-None-", parentId: null }, v = [], i = p && d, D = !i && h, f = D ? `${o}_hint` : "", g = i ? `${o}_error` : "", r = a.useCallback((t) => {
|
|
26
|
-
if (!t || !t.children)
|
|
27
|
-
return n.data;
|
|
28
|
-
for (const e of t.children)
|
|
29
|
-
v.push(e), e.children && r(e);
|
|
30
|
-
const c = v.map((e) => e.id);
|
|
31
|
-
return n.data.filter((e) => !c.includes(e.id));
|
|
32
|
-
}, [n.data]), $ = r(C), s = a.useMemo(
|
|
14
|
+
const { validationMessage: d, touched: p, label: w, id: o, valid: u, disabled: m, hint: h, idField: l, dataItem: C, ...E } = n, I = { id: null, title: "-None-", parentId: null }, v = [], i = p && d, D = !i && h, f = D ? `${o}_hint` : "", g = i ? `${o}_error` : "", r = a.useCallback(
|
|
15
|
+
(t) => {
|
|
16
|
+
if (!t || !t.children)
|
|
17
|
+
return n.data;
|
|
18
|
+
for (const e of t.children)
|
|
19
|
+
v.push(e), e.children && r(e);
|
|
20
|
+
const c = v.map((e) => e.id);
|
|
21
|
+
return n.data.filter((e) => !c.includes(e.id));
|
|
22
|
+
},
|
|
23
|
+
[n.data]
|
|
24
|
+
), $ = r(C), s = a.useMemo(
|
|
33
25
|
() => $.map((t) => {
|
|
34
26
|
const c = new Date(t.start).toLocaleDateString(), e = new Date(t.end).toLocaleDateString();
|
|
35
27
|
return { ...t, title: `${t.title} (${c}-${e})` };
|
package/editors/GanttEditor.js
CHANGED
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
* Licensed under commercial license. See LICENSE.md in the package root for more information
|
|
6
6
|
*-------------------------------------------------------------------------------------------
|
|
7
7
|
*/
|
|
8
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const le=require("react"),l=require("@progress/kendo-react-form"),me=require("@progress/kendo-react-treelist"),ue=require("../context/GanttContext.js"),W=require("./FormInput.js"),pe=require("@progress/kendo-react-intl"),f=require("@progress/kendo-react-layout"),i=require("../messages/index.js"),k=require("./FormDateTimePicker.js"),H=require("./FormNumericTextBox.js"),ye=require("./FormDropDownList.js"),b=require("@progress/kendo-react-common"),Te=require("./GanttEditorPredecessors.js"),De=require("./GanttEditorSuccessors.js"),m=require("../interfaces/DependencyType.js"),J=require("@progress/kendo-react-dropdowns");function Fe(a){const y=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const u in a)if(u!=="default"){const c=Object.getOwnPropertyDescriptor(a,u);Object.defineProperty(y,u,c.get?c:{enumerable:!0,get:()=>a[u]})}}return y.default=a,Object.freeze(y)}const t=Fe(le),ge=[{type:m.DependencyType.FF},{type:m.DependencyType.FS},{type:m.DependencyType.SF},{type:m.DependencyType.SS}],fe=a=>{const[y,u]=t.useState(0),[c,S]=t.useState(),[r,T]=t.useState([...a.dependencyData||[]]),[E,M]=t.useState([]),n=ue.useGanttTaskModelFieldsContext(),K=pe.useLocalization(),o=e=>K.toLanguageString(e,i.messages[e]),C=o(i.editorTaskTitle),q=o(i.editorTaskStart),v=o(i.editorTaskEnd),P=o(i.editorTaskComplete),Q=o(i.editorTaskParent),U=o(i.editorTabGeneral),X=o(i.editorTabPredecessors),Y=o(i.editorTabSuccessors),D=o(i.editorValidationRequired),w=o(i.editorValidationStart),x=o(i.editorValidationEnd),R=o(i.editorValidationPercentCompleteRange),F=t.useMemo(()=>me.flatData(a.taskData||[],e=>e.children||[],e=>{const d={title:e[n.title],id:e[n.id],start:e[n.start],end:e[n.end],parentId:null};return n.parentId&&(d.parentId=e[n.parentId]),d}),[a.taskData,n]),Z=t.useMemo(()=>F.filter(e=>e.id!==a.dataItem.id),[F,a.dataItem]),ee=t.useMemo(()=>r.filter(e=>e.toId===a.dataItem.id),[r,a.dataItem]),te=t.useMemo(()=>r.filter(e=>e.fromId===a.dataItem.id),[r,a.dataItem]),_=t.useMemo(()=>r.filter(e=>e.id===null).map(e=>({id:e.id,fromId:e.fromId,toId:e.toId,type:e.type})),[r]),V=t.useMemo(()=>r.filter(e=>e.id!==null&&e.uid).map(e=>({id:e.id,fromId:e.fromId,toId:e.toId,type:e.type})),[r]),G=()=>{if(c){if(c.id){const e=r.filter(s=>s.id!==c.id);T(e);const d=r.filter(s=>s.id===c.id);M(s=>[...s,...d])}else{const e=r.filter(s=>s.uid!==c.uid);T(e);const d=r.filter(s=>s.uid===c.uid);M(s=>[...s,...d])}S(void 0)}},p=t.useCallback(e=>e||e===0?void 0:D,[D]),$=t.useCallback(e=>e||e===0?e>=0&&e<=1?void 0:R:D,[D,R]),h=t.useCallback((e,d)=>e&&d(n.end)&&e.getTime()>d(n.end).getTime()?w:void 0,[n,w]),
|
|
8
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const le=require("react"),l=require("@progress/kendo-react-form"),me=require("@progress/kendo-react-treelist"),ue=require("../context/GanttContext.js"),W=require("./FormInput.js"),pe=require("@progress/kendo-react-intl"),f=require("@progress/kendo-react-layout"),i=require("../messages/index.js"),k=require("./FormDateTimePicker.js"),H=require("./FormNumericTextBox.js"),ye=require("./FormDropDownList.js"),b=require("@progress/kendo-react-common"),Te=require("./GanttEditorPredecessors.js"),De=require("./GanttEditorSuccessors.js"),m=require("../interfaces/DependencyType.js"),J=require("@progress/kendo-react-dropdowns");function Fe(a){const y=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const u in a)if(u!=="default"){const c=Object.getOwnPropertyDescriptor(a,u);Object.defineProperty(y,u,c.get?c:{enumerable:!0,get:()=>a[u]})}}return y.default=a,Object.freeze(y)}const t=Fe(le),ge=[{type:m.DependencyType.FF},{type:m.DependencyType.FS},{type:m.DependencyType.SF},{type:m.DependencyType.SS}],fe=a=>{const[y,u]=t.useState(0),[c,S]=t.useState(),[r,T]=t.useState([...a.dependencyData||[]]),[E,M]=t.useState([]),n=ue.useGanttTaskModelFieldsContext(),K=pe.useLocalization(),o=e=>K.toLanguageString(e,i.messages[e]),C=o(i.editorTaskTitle),q=o(i.editorTaskStart),v=o(i.editorTaskEnd),P=o(i.editorTaskComplete),Q=o(i.editorTaskParent),U=o(i.editorTabGeneral),X=o(i.editorTabPredecessors),Y=o(i.editorTabSuccessors),D=o(i.editorValidationRequired),w=o(i.editorValidationStart),x=o(i.editorValidationEnd),R=o(i.editorValidationPercentCompleteRange),F=t.useMemo(()=>me.flatData(a.taskData||[],e=>e.children||[],e=>{const d={title:e[n.title],id:e[n.id],start:e[n.start],end:e[n.end],parentId:null};return n.parentId&&(d.parentId=e[n.parentId]),d}),[a.taskData,n]),Z=t.useMemo(()=>F.filter(e=>e.id!==a.dataItem.id),[F,a.dataItem]),ee=t.useMemo(()=>r.filter(e=>e.toId===a.dataItem.id),[r,a.dataItem]),te=t.useMemo(()=>r.filter(e=>e.fromId===a.dataItem.id),[r,a.dataItem]),_=t.useMemo(()=>r.filter(e=>e.id===null).map(e=>({id:e.id,fromId:e.fromId,toId:e.toId,type:e.type})),[r]),V=t.useMemo(()=>r.filter(e=>e.id!==null&&e.uid).map(e=>({id:e.id,fromId:e.fromId,toId:e.toId,type:e.type})),[r]),G=()=>{if(c){if(c.id){const e=r.filter(s=>s.id!==c.id);T(e);const d=r.filter(s=>s.id===c.id);M(s=>[...s,...d])}else{const e=r.filter(s=>s.uid!==c.uid);T(e);const d=r.filter(s=>s.uid===c.uid);M(s=>[...s,...d])}S(void 0)}},p=t.useCallback(e=>e||e===0?void 0:D,[D]),$=t.useCallback(e=>e||e===0?e>=0&&e<=1?void 0:R:D,[D,R]),h=t.useCallback((e,d)=>e&&d(n.end)&&e.getTime()>d(n.end).getTime()?w:void 0,[n,w]),N=t.useCallback((e,d)=>e&&d(n.start)&&e.getTime()<d(n.start).getTime()?x:void 0,[n,x]),B=t.useMemo(()=>[p,h],[p,h]),O=t.useMemo(()=>[p,N],[p,N]),ne=t.useMemo(()=>J.findByFieldValue(r,"fromId",null)||J.findByFieldValue(r,"toId",null),[r]),ae=e=>{ne||(u(e.selected),S(void 0))},z=e=>{S(e.dataItem)},de=()=>{const e={uid:b.guid(),id:null,fromId:null,toId:a.dataItem.id,type:m.DependencyType.FS};T([...r,e])},re=()=>{const e={uid:b.guid(),id:null,fromId:a.dataItem.id,toId:null,type:m.DependencyType.FS};T([...r,e])},L=(e,d,s)=>{const I={...e,uid:e.uid||b.guid(),[d]:s},A=r.findIndex(g=>g.id&&g.id===I.id||g.uid&&g.uid===I.uid);A>-1&&(r.splice(A,1,I),T([...r]))},j=t.useMemo(()=>ge.map(e=>{let d;switch(e.type){case m.DependencyType.FF:d=o(i.editorDependencyTypesFF);break;case m.DependencyType.FS:d=o(i.editorDependencyTypesFS);break;case m.DependencyType.SF:d=o(i.editorDependencyTypesSF);break;case m.DependencyType.SS:d=o(i.editorDependencyTypesSS);break;default:d=o(i.editorDependencyTypesFF);break}return{...e,name:d}}),[o]);t.useEffect(()=>{a.onDependencyCreate&&a.onDependencyCreate.call(void 0,{createdDependencies:_,updatedDependencies:V,deletedDependencies:E})},[_,V,E,a.onDependencyCreate]);const oe=a.dependencyData&&a.taskData,ie=t.createElement(l.FormElement,{style:{width:400},horizontal:!0},t.createElement(l.Field,{id:`${n.title}_gantteditor`,name:n.title,label:C,component:W.FormInput,validator:p}),t.createElement(l.Field,{id:`${n.start}_gantteditor`,name:n.start,label:q,component:k.FormDateTimePicker,validator:B}),t.createElement(l.Field,{id:`${n.end}_gantteditor`,name:n.end,label:v,component:k.FormDateTimePicker,validator:O}),t.createElement(l.Field,{id:`${n.percentComplete}_gantteditor`,name:n.percentComplete,label:P,component:H.FormNumericTextBox,validator:$})),se=t.createElement(l.FormElement,{style:{paddingInline:"4px"}},t.createElement("div",{className:"k-form-fieldset"},t.createElement("div",{className:"k-form-layout k-d-grid k-grid-cols-4 k-gap-x-2"},t.createElement(l.Field,{id:`${n.title}_gantteditor`,name:n.title,label:C,component:W.FormInput,validator:p}),t.createElement(l.Field,{id:`${n.start}_gantteditor`,name:n.start,label:q,component:k.FormDateTimePicker,validator:B}),t.createElement(l.Field,{id:`${n.end}_gantteditor`,name:n.end,label:v,component:k.FormDateTimePicker,validator:O}),t.createElement(l.Field,{id:`${n.percentComplete}_gantteditor`,name:n.percentComplete,label:P,component:H.FormNumericTextBox,validator:$}),n.parentId&&t.createElement(l.Field,{id:`${n.parentId}_gantteditor`,name:n.parentId||"",idField:n.id,label:Q,component:ye.FormDropDownList,data:Z,dataItem:a.dataItem})))),ce=t.createElement(f.TabStrip,{selected:y,onSelect:ae},t.createElement(f.TabStripTab,{title:U},se),t.createElement(f.TabStripTab,{title:X},t.createElement(Te.GanttEditorPredecessors,{flatTasks:F,predecessors:ee,dependencyTypes:j,selectedItem:c,onSelectRow:z,addPredecessorsDependency:de,deleteDependency:G,updateDependency:L})),t.createElement(f.TabStripTab,{title:Y},t.createElement(De.GanttEditorSuccessors,{flatTasks:F,successors:te,dependencyTypes:j,selectedItem:c,onSelectRow:z,addSuccessorsDependency:re,deleteDependency:G,updateDependency:L})));return oe?ce:ie};exports.GanttEditor=fe;
|
package/editors/GanttEditor.mjs
CHANGED
|
@@ -27,39 +27,24 @@ const he = [
|
|
|
27
27
|
{ type: s.FS },
|
|
28
28
|
{ type: s.SF },
|
|
29
29
|
{ type: s.SS }
|
|
30
|
-
], Xe = (
|
|
31
|
-
const [O, Q] = t.useState(0), [l, D] = t.useState(), [d, p] = t.useState([...
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
),
|
|
46
|
-
[
|
|
47
|
-
),
|
|
48
|
-
() => f.filter((e) => e.id !== r.dataItem.id),
|
|
49
|
-
[f, r.dataItem]
|
|
50
|
-
), te = t.useMemo(
|
|
51
|
-
() => d.filter((e) => e.toId === r.dataItem.id),
|
|
52
|
-
[d, r.dataItem]
|
|
53
|
-
), ne = t.useMemo(
|
|
54
|
-
() => d.filter((e) => e.fromId === r.dataItem.id),
|
|
55
|
-
[d, r.dataItem]
|
|
56
|
-
), V = t.useMemo(
|
|
57
|
-
() => d.filter((e) => e.id === null).map((e) => ({ id: e.id, fromId: e.fromId, toId: e.toId, type: e.type })),
|
|
58
|
-
[d]
|
|
59
|
-
), _ = t.useMemo(
|
|
60
|
-
() => d.filter((e) => e.id !== null && e.uid).map((e) => ({ id: e.id, fromId: e.fromId, toId: e.toId, type: e.type })),
|
|
61
|
-
[d]
|
|
62
|
-
), $ = () => {
|
|
30
|
+
], Xe = (o) => {
|
|
31
|
+
const [O, Q] = t.useState(0), [l, D] = t.useState(), [d, p] = t.useState([...o.dependencyData || []]), [k, b] = t.useState([]), n = me(), U = pe(), r = (e) => U.toLanguageString(e, fe[e]), E = r(ye), F = r(Ie), M = r(De), C = r(Se), X = r(Te), Y = r(ge), Z = r(ke), j = r(be), u = r(Ee), v = r(Fe), P = r(Me), w = r(Ce), f = t.useMemo(() => le(
|
|
32
|
+
o.taskData || [],
|
|
33
|
+
(e) => e.children || [],
|
|
34
|
+
(e) => {
|
|
35
|
+
const a = {
|
|
36
|
+
title: e[n.title],
|
|
37
|
+
id: e[n.id],
|
|
38
|
+
start: e[n.start],
|
|
39
|
+
end: e[n.end],
|
|
40
|
+
parentId: null
|
|
41
|
+
};
|
|
42
|
+
return n.parentId && (a.parentId = e[n.parentId]), a;
|
|
43
|
+
}
|
|
44
|
+
), [o.taskData, n]), ee = t.useMemo(
|
|
45
|
+
() => f.filter((e) => e.id !== o.dataItem.id),
|
|
46
|
+
[f, o.dataItem]
|
|
47
|
+
), te = t.useMemo(() => d.filter((e) => e.toId === o.dataItem.id), [d, o.dataItem]), ne = t.useMemo(() => d.filter((e) => e.fromId === o.dataItem.id), [d, o.dataItem]), V = t.useMemo(() => d.filter((e) => e.id === null).map((e) => ({ id: e.id, fromId: e.fromId, toId: e.toId, type: e.type })), [d]), _ = t.useMemo(() => d.filter((e) => e.id !== null && e.uid).map((e) => ({ id: e.id, fromId: e.fromId, toId: e.toId, type: e.type })), [d]), $ = () => {
|
|
63
48
|
if (l) {
|
|
64
49
|
if (l.id) {
|
|
65
50
|
const e = d.filter((i) => i.id !== l.id);
|
|
@@ -86,26 +71,29 @@ const he = [
|
|
|
86
71
|
), R = t.useCallback(
|
|
87
72
|
(e, a) => e && a(n.start) && e.getTime() < a(n.start).getTime() ? P : void 0,
|
|
88
73
|
[n, P]
|
|
89
|
-
),
|
|
74
|
+
), G = t.useMemo(
|
|
90
75
|
() => [m, x],
|
|
91
76
|
[m, x]
|
|
92
|
-
),
|
|
77
|
+
), N = t.useMemo(
|
|
93
78
|
() => [m, R],
|
|
94
79
|
[m, R]
|
|
95
|
-
), ae = t.useMemo(
|
|
96
|
-
() => K(d, "fromId", null) || K(d, "toId", null),
|
|
97
|
-
[d]
|
|
98
|
-
), de = (e) => {
|
|
80
|
+
), ae = t.useMemo(() => K(d, "fromId", null) || K(d, "toId", null), [d]), de = (e) => {
|
|
99
81
|
ae || (Q(e.selected), D(void 0));
|
|
100
|
-
},
|
|
82
|
+
}, z = (e) => {
|
|
101
83
|
D(e.dataItem);
|
|
102
|
-
}, oe = () => {
|
|
103
|
-
const e = { uid: g(), id: null, fromId: null, toId: r.dataItem.id, type: s.FS };
|
|
104
|
-
p([...d, e]);
|
|
105
84
|
}, re = () => {
|
|
106
|
-
const e = { uid: g(), id: null, fromId:
|
|
85
|
+
const e = { uid: g(), id: null, fromId: null, toId: o.dataItem.id, type: s.FS };
|
|
107
86
|
p([...d, e]);
|
|
108
|
-
},
|
|
87
|
+
}, oe = () => {
|
|
88
|
+
const e = {
|
|
89
|
+
uid: g(),
|
|
90
|
+
id: null,
|
|
91
|
+
fromId: o.dataItem.id,
|
|
92
|
+
toId: null,
|
|
93
|
+
type: s.FS
|
|
94
|
+
};
|
|
95
|
+
p([...d, e]);
|
|
96
|
+
}, q = (e, a, i) => {
|
|
109
97
|
const S = {
|
|
110
98
|
...e,
|
|
111
99
|
uid: e.uid || g(),
|
|
@@ -114,38 +102,38 @@ const he = [
|
|
|
114
102
|
(y) => y.id && y.id === S.id || y.uid && y.uid === S.uid
|
|
115
103
|
);
|
|
116
104
|
L > -1 && (d.splice(L, 1, S), p([...d]));
|
|
117
|
-
},
|
|
105
|
+
}, B = t.useMemo(() => he.map((e) => {
|
|
118
106
|
let a;
|
|
119
107
|
switch (e.type) {
|
|
120
108
|
case s.FF:
|
|
121
|
-
a =
|
|
109
|
+
a = r(H);
|
|
122
110
|
break;
|
|
123
111
|
case s.FS:
|
|
124
|
-
a =
|
|
112
|
+
a = r(we);
|
|
125
113
|
break;
|
|
126
114
|
case s.SF:
|
|
127
|
-
a =
|
|
115
|
+
a = r(Pe);
|
|
128
116
|
break;
|
|
129
117
|
case s.SS:
|
|
130
|
-
a =
|
|
118
|
+
a = r(ve);
|
|
131
119
|
break;
|
|
132
120
|
default:
|
|
133
|
-
a =
|
|
121
|
+
a = r(H);
|
|
134
122
|
break;
|
|
135
123
|
}
|
|
136
124
|
return {
|
|
137
125
|
...e,
|
|
138
126
|
name: a
|
|
139
127
|
};
|
|
140
|
-
}), [
|
|
128
|
+
}), [r]);
|
|
141
129
|
t.useEffect(() => {
|
|
142
|
-
|
|
130
|
+
o.onDependencyCreate && o.onDependencyCreate.call(void 0, {
|
|
143
131
|
createdDependencies: V,
|
|
144
132
|
updatedDependencies: _,
|
|
145
133
|
deletedDependencies: k
|
|
146
134
|
});
|
|
147
|
-
}, [V, _, k,
|
|
148
|
-
const ie =
|
|
135
|
+
}, [V, _, k, o.onDependencyCreate]);
|
|
136
|
+
const ie = o.dependencyData && o.taskData, se = /* @__PURE__ */ t.createElement(A, { style: { width: 400 }, horizontal: !0 }, /* @__PURE__ */ t.createElement(
|
|
149
137
|
c,
|
|
150
138
|
{
|
|
151
139
|
id: `${n.title}_gantteditor`,
|
|
@@ -161,7 +149,7 @@ const he = [
|
|
|
161
149
|
name: n.start,
|
|
162
150
|
label: F,
|
|
163
151
|
component: I,
|
|
164
|
-
validator:
|
|
152
|
+
validator: G
|
|
165
153
|
}
|
|
166
154
|
), /* @__PURE__ */ t.createElement(
|
|
167
155
|
c,
|
|
@@ -170,7 +158,7 @@ const he = [
|
|
|
170
158
|
name: n.end,
|
|
171
159
|
label: M,
|
|
172
160
|
component: I,
|
|
173
|
-
validator:
|
|
161
|
+
validator: N
|
|
174
162
|
}
|
|
175
163
|
), /* @__PURE__ */ t.createElement(
|
|
176
164
|
c,
|
|
@@ -197,7 +185,7 @@ const he = [
|
|
|
197
185
|
name: n.start,
|
|
198
186
|
label: F,
|
|
199
187
|
component: I,
|
|
200
|
-
validator:
|
|
188
|
+
validator: G
|
|
201
189
|
}
|
|
202
190
|
), /* @__PURE__ */ t.createElement(
|
|
203
191
|
c,
|
|
@@ -206,7 +194,7 @@ const he = [
|
|
|
206
194
|
name: n.end,
|
|
207
195
|
label: M,
|
|
208
196
|
component: I,
|
|
209
|
-
validator:
|
|
197
|
+
validator: N
|
|
210
198
|
}
|
|
211
199
|
), /* @__PURE__ */ t.createElement(
|
|
212
200
|
c,
|
|
@@ -226,7 +214,7 @@ const he = [
|
|
|
226
214
|
label: X,
|
|
227
215
|
component: Ve,
|
|
228
216
|
data: ee,
|
|
229
|
-
dataItem:
|
|
217
|
+
dataItem: o.dataItem
|
|
230
218
|
}
|
|
231
219
|
))));
|
|
232
220
|
return ie ? /* @__PURE__ */ t.createElement(ue, { selected: O, onSelect: de }, /* @__PURE__ */ t.createElement(T, { title: Y }, ce), /* @__PURE__ */ t.createElement(T, { title: Z }, /* @__PURE__ */ t.createElement(
|
|
@@ -234,24 +222,24 @@ const he = [
|
|
|
234
222
|
{
|
|
235
223
|
flatTasks: f,
|
|
236
224
|
predecessors: te,
|
|
237
|
-
dependencyTypes:
|
|
225
|
+
dependencyTypes: B,
|
|
238
226
|
selectedItem: l,
|
|
239
|
-
onSelectRow:
|
|
240
|
-
addPredecessorsDependency:
|
|
227
|
+
onSelectRow: z,
|
|
228
|
+
addPredecessorsDependency: re,
|
|
241
229
|
deleteDependency: $,
|
|
242
|
-
updateDependency:
|
|
230
|
+
updateDependency: q
|
|
243
231
|
}
|
|
244
232
|
)), /* @__PURE__ */ t.createElement(T, { title: j }, /* @__PURE__ */ t.createElement(
|
|
245
233
|
$e,
|
|
246
234
|
{
|
|
247
235
|
flatTasks: f,
|
|
248
236
|
successors: ne,
|
|
249
|
-
dependencyTypes:
|
|
237
|
+
dependencyTypes: B,
|
|
250
238
|
selectedItem: l,
|
|
251
|
-
onSelectRow:
|
|
252
|
-
addSuccessorsDependency:
|
|
239
|
+
onSelectRow: z,
|
|
240
|
+
addSuccessorsDependency: oe,
|
|
253
241
|
deleteDependency: $,
|
|
254
|
-
updateDependency:
|
|
242
|
+
updateDependency: q
|
|
255
243
|
}
|
|
256
244
|
))) : se;
|
|
257
245
|
};
|
|
@@ -50,19 +50,8 @@ const P = (e, t, l, o) => {
|
|
|
50
50
|
return l.id === t.id;
|
|
51
51
|
if (l && t.id === null)
|
|
52
52
|
return l.uid === t.uid;
|
|
53
|
-
}, r = n.useMemo(
|
|
54
|
-
|
|
55
|
-
[e, t.type]
|
|
56
|
-
);
|
|
57
|
-
return /* @__PURE__ */ n.createElement("td", { className: E(d() && "k-selected") }, /* @__PURE__ */ n.createElement(
|
|
58
|
-
T,
|
|
59
|
-
{
|
|
60
|
-
textField: "name",
|
|
61
|
-
data: e,
|
|
62
|
-
value: r,
|
|
63
|
-
onChange: i
|
|
64
|
-
}
|
|
65
|
-
));
|
|
53
|
+
}, r = n.useMemo(() => u(e, "type", t.type), [e, t.type]);
|
|
54
|
+
return /* @__PURE__ */ n.createElement("td", { className: E(d() && "k-selected") }, /* @__PURE__ */ n.createElement(T, { textField: "name", data: e, value: r, onChange: i }));
|
|
66
55
|
}, K = (e) => {
|
|
67
56
|
var m;
|
|
68
57
|
const [t, l] = n.useState([]), o = F(), i = (a) => o.toLanguageString(a, M[a]), d = i(I), r = i(L), c = i(N), f = i(R), y = n.useMemo(() => {
|
|
@@ -23,10 +23,7 @@ const B = (e, t, l, o) => {
|
|
|
23
23
|
return l.id === t.id;
|
|
24
24
|
if (l && t.id === null)
|
|
25
25
|
return l.uid === t.uid;
|
|
26
|
-
}, u = n.useMemo(
|
|
27
|
-
() => s(e, "id", t.toId),
|
|
28
|
-
[e, t.toId]
|
|
29
|
-
), y = (d) => {
|
|
26
|
+
}, u = n.useMemo(() => s(e, "id", t.toId), [e, t.toId]), y = (d) => {
|
|
30
27
|
const a = x(e, d.filter);
|
|
31
28
|
r(a);
|
|
32
29
|
};
|
|
@@ -50,19 +47,8 @@ const B = (e, t, l, o) => {
|
|
|
50
47
|
return l.id === t.id;
|
|
51
48
|
if (l && t.id === null)
|
|
52
49
|
return l.uid === t.uid;
|
|
53
|
-
}, c = n.useMemo(
|
|
54
|
-
|
|
55
|
-
[e, t.type]
|
|
56
|
-
);
|
|
57
|
-
return /* @__PURE__ */ n.createElement("td", { className: E(r() && "k-selected") }, /* @__PURE__ */ n.createElement(
|
|
58
|
-
h,
|
|
59
|
-
{
|
|
60
|
-
textField: "name",
|
|
61
|
-
data: e,
|
|
62
|
-
value: c,
|
|
63
|
-
onChange: i
|
|
64
|
-
}
|
|
65
|
-
));
|
|
50
|
+
}, c = n.useMemo(() => s(e, "type", t.type), [e, t.type]);
|
|
51
|
+
return /* @__PURE__ */ n.createElement("td", { className: E(r() && "k-selected") }, /* @__PURE__ */ n.createElement(h, { textField: "name", data: e, value: c, onChange: i }));
|
|
66
52
|
}, K = (e) => {
|
|
67
53
|
var d;
|
|
68
54
|
const [t, l] = n.useState([]), o = N(), i = (a) => o.toLanguageString(a, b[a]), r = i(M), c = i(I), m = i(L), u = i(F), y = n.useMemo(() => {
|
package/editors/GanttForm.mjs
CHANGED
|
@@ -21,7 +21,11 @@ const P = (a) => {
|
|
|
21
21
|
const { onCancel: l, onDelete: c, onClose: d, onSubmit: m, ...D } = a, I = t.useRef(a.dataItem), [n, f] = t.useState({}), C = L(), i = (e) => C.toLanguageString(e, T[e]), g = i(V), h = i(x), b = i(A), E = i(N), k = t.useCallback(
|
|
22
22
|
(e) => {
|
|
23
23
|
if (l) {
|
|
24
|
-
const o = {
|
|
24
|
+
const o = {
|
|
25
|
+
syntheticEvent: e,
|
|
26
|
+
nativeEvent: e.nativeEvent,
|
|
27
|
+
dataItem: a.dataItem
|
|
28
|
+
};
|
|
25
29
|
l.call(void 0, o);
|
|
26
30
|
}
|
|
27
31
|
},
|
|
@@ -29,7 +33,11 @@ const P = (a) => {
|
|
|
29
33
|
), S = t.useCallback(
|
|
30
34
|
(e) => {
|
|
31
35
|
if (c) {
|
|
32
|
-
const o = {
|
|
36
|
+
const o = {
|
|
37
|
+
syntheticEvent: e,
|
|
38
|
+
nativeEvent: e.nativeEvent,
|
|
39
|
+
dataItem: a.dataItem
|
|
40
|
+
};
|
|
33
41
|
c.call(void 0, o);
|
|
34
42
|
}
|
|
35
43
|
},
|
|
@@ -37,7 +45,11 @@ const P = (a) => {
|
|
|
37
45
|
), M = t.useCallback(
|
|
38
46
|
({ syntheticEvent: e }) => {
|
|
39
47
|
if (d) {
|
|
40
|
-
const o = {
|
|
48
|
+
const o = {
|
|
49
|
+
syntheticEvent: e,
|
|
50
|
+
nativeEvent: e.nativeEvent,
|
|
51
|
+
dataItem: a.dataItem
|
|
52
|
+
};
|
|
41
53
|
d.call(void 0, o);
|
|
42
54
|
}
|
|
43
55
|
},
|
|
@@ -56,18 +68,9 @@ const P = (a) => {
|
|
|
56
68
|
}
|
|
57
69
|
},
|
|
58
70
|
[m, n]
|
|
59
|
-
), u = t.useMemo(
|
|
60
|
-
()
|
|
61
|
-
|
|
62
|
-
), p = t.useMemo(
|
|
63
|
-
() => n.createdDependencies && n.createdDependencies.length && u === void 0 || n.updatedDependencies && n.updatedDependencies.length || n.deletedDependencies && n.deletedDependencies.length,
|
|
64
|
-
[n, u]
|
|
65
|
-
), y = t.useCallback(
|
|
66
|
-
(e) => {
|
|
67
|
-
f(e);
|
|
68
|
-
},
|
|
69
|
-
[]
|
|
70
|
-
), w = /* @__PURE__ */ t.createElement(
|
|
71
|
+
), u = t.useMemo(() => v(n.createdDependencies, "fromId", null) || v(n.createdDependencies, "toId", null), [n]), p = t.useMemo(() => n.createdDependencies && n.createdDependencies.length && u === void 0 || n.updatedDependencies && n.updatedDependencies.length || n.deletedDependencies && n.deletedDependencies.length, [n, u]), y = t.useCallback((e) => {
|
|
72
|
+
f(e);
|
|
73
|
+
}, []), w = /* @__PURE__ */ t.createElement(
|
|
71
74
|
O,
|
|
72
75
|
{
|
|
73
76
|
initialValues: a.dataItem,
|
|
@@ -101,7 +104,17 @@ const P = (a) => {
|
|
|
101
104
|
themeColor: "primary"
|
|
102
105
|
},
|
|
103
106
|
g
|
|
104
|
-
), /* @__PURE__ */ t.createElement(s, { onClick: k, type: "button", icon: "cancel", svgIcon: j }, h), /* @__PURE__ */ t.createElement("div", { className: "k-spacer" }), c && /* @__PURE__ */ t.createElement(
|
|
107
|
+
), /* @__PURE__ */ t.createElement(s, { onClick: k, type: "button", icon: "cancel", svgIcon: j }, h), /* @__PURE__ */ t.createElement("div", { className: "k-spacer" }), c && /* @__PURE__ */ t.createElement(
|
|
108
|
+
s,
|
|
109
|
+
{
|
|
110
|
+
onClick: S,
|
|
111
|
+
icon: "trash",
|
|
112
|
+
svgIcon: q,
|
|
113
|
+
fillMode: "flat",
|
|
114
|
+
themeColor: "primary"
|
|
115
|
+
},
|
|
116
|
+
b
|
|
117
|
+
))
|
|
105
118
|
),
|
|
106
119
|
...D
|
|
107
120
|
}
|