react-weekly-planning 1.0.18 → 1.0.20
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/README.md +0 -2
- package/definition.txt +1 -0
- package/definitions/index.ts +2 -0
- package/index.js +48 -1
- package/index.tsx +50 -3
- package/lib/utils.js +25 -5
- package/lib/utils.ts +24 -12
- package/package.json +1 -1
- package/style.css +1 -1
package/README.md
CHANGED
|
@@ -13,8 +13,6 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
13
13
|
|
|
14
14
|
[See the demo](https://react-weekly-planning-demo.vercel.app)
|
|
15
15
|
|
|
16
|
-
[Demo repository](https://github.com/Yvesmorel/react-weekly-planning-demo.git)
|
|
17
|
-
|
|
18
16
|
#### `weekOffset`
|
|
19
17
|
|
|
20
18
|
- **Description**: This prop sets the offset for the week being displayed in the calendar.
|
package/definition.txt
CHANGED
package/definitions/index.ts
CHANGED
package/index.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
1
12
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
13
|
import "./style.css";
|
|
3
|
-
import { getWeekDays, getDayHourly, calculerEcartSemaine, getSessionStorageRecordForDragAndDrop, sumHoursByGroups, millisecondsToDate, compareWeekOffset, } from "./lib/utils";
|
|
14
|
+
import { getWeekDays, getDayHourly, calculerEcartSemaine, getSessionStorageRecordForDragAndDrop, sumHoursByGroups, millisecondsToDate, compareWeekOffset, saveTasksToLocalStorage, } from "./lib/utils";
|
|
4
15
|
const theadTrStyle = {
|
|
5
16
|
color: "#0f5173",
|
|
6
17
|
fontWeight: "300",
|
|
@@ -74,6 +85,7 @@ const Calendar = ({ style, className, groups, weekOffset, date, groupRender, day
|
|
|
74
85
|
const handleDragOver = (event) => {
|
|
75
86
|
event.preventDefault();
|
|
76
87
|
};
|
|
88
|
+
saveTasksToLocalStorage(tasks);
|
|
77
89
|
return (_jsxs("table", { className: `planningCalendar ${className}`, style: Object.assign({}, style), children: [_jsx("thead", { children: _jsxs("tr", { className: `${rowsClassName}`, style: Object.assign(Object.assign({}, theadTrStyle), rowsStyle), children: [_jsx("th", { className: "dayTh", children: _jsx(GroupsHeadContainer, { className: `${groupHeadContainerClassName}`, style: groupHeadContainerStyle, groupsHeadRender: groupsHeadRender }) }), weekDays.map((day, i) => (_jsx("th", { className: `${daysColsClassName}`, style: Object.assign({}, daysColsStyle), children: _jsx(DayContainer, { style: dayStyle, className: dayClassName, dayIndex: i, dayRender: dayRender, day: day.day, dayOfTheMonth: day.dayOfTheMonth, dayMonth: day.dayMonth, dayYear: day.dayYear }) }, i))), _jsx("th", { className: "totalTh", children: _jsx(SumHoursHead, { className: sumHoursHeadClassName, style: sumHoursHeadStyle, sumHoursHeadRender: sumHoursHeadRender }) })] }, "") }), _jsx("tbody", { children: groups === null || groups === void 0 ? void 0 : groups.map((group, i) => (_jsxs("tr", { className: `${rowsClassName}`, style: Object.assign({}, rowsStyle), children: [_jsx("td", { className: `${groupsColsClassName}`, style: Object.assign(Object.assign({}, groupTdStyle), groupsColsStyle), children: _jsx(GroupContainer, { style: groupStyle, className: groupClassName, groupRender: groupRender, currentGroup: group, handleClickGroup: handleClickGroup }) }, i), dailyHours.map((_, positionDay) => (_jsx("td", { onDragOver: handleDragOver, onDrop: (event) => {
|
|
78
90
|
if (!handleDropTask || !tasks)
|
|
79
91
|
return;
|
|
@@ -205,4 +217,39 @@ export const checkDuplicates = (tasks, taskStart, taskEnd, groupId) => {
|
|
|
205
217
|
taskStart <= task.taskEnd)).filter((task) => task.groupId === groupId);
|
|
206
218
|
return findDuplicates.length > 0;
|
|
207
219
|
};
|
|
220
|
+
export const getTasksSaved = () => {
|
|
221
|
+
const taskSavedString = window.localStorage.getItem("CalendarTaskSaved");
|
|
222
|
+
if (!taskSavedString) {
|
|
223
|
+
return [];
|
|
224
|
+
}
|
|
225
|
+
const tasksTable = JSON.parse(taskSavedString);
|
|
226
|
+
const validTasks = tasksTable
|
|
227
|
+
.filter((task) => {
|
|
228
|
+
if (task === null || task === void 0 ? void 0 : task.taskExpiryDate) {
|
|
229
|
+
const taskDate = new Date(task === null || task === void 0 ? void 0 : task.taskExpiryDate);
|
|
230
|
+
return taskDate.getTime() >= Date.now();
|
|
231
|
+
}
|
|
232
|
+
})
|
|
233
|
+
.map((task) => {
|
|
234
|
+
const { taskDate, taskExpiryDate } = task, rest = __rest(task, ["taskDate", "taskExpiryDate"]);
|
|
235
|
+
if (taskExpiryDate) {
|
|
236
|
+
return Object.assign({ taskDate: new Date(taskDate), taskExpiryDate: new Date(taskExpiryDate) }, rest);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
return validTasks;
|
|
240
|
+
};
|
|
241
|
+
export const deleteTaskSaved = (taskId) => {
|
|
242
|
+
const tasksSavedString = window.localStorage.getItem("CalendarTaskSaved");
|
|
243
|
+
if (!tasksSavedString)
|
|
244
|
+
return;
|
|
245
|
+
const tasksSavedTable = JSON.parse(tasksSavedString);
|
|
246
|
+
const taskIndex = tasksSavedTable.findIndex((task) => task.taskId === taskId);
|
|
247
|
+
if (taskIndex) {
|
|
248
|
+
tasksSavedTable.splice(taskIndex, 1);
|
|
249
|
+
window.localStorage.setItem("CalendarTaskSaved", JSON.stringify(tasksSavedTable));
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
export const deleteTasksSaved = () => {
|
|
253
|
+
window.localStorage.removeItem("CalendarTaskSaved");
|
|
254
|
+
};
|
|
208
255
|
export default Calendar;
|
package/index.tsx
CHANGED
|
@@ -19,9 +19,9 @@ import {
|
|
|
19
19
|
sumHoursByGroups,
|
|
20
20
|
millisecondsToDate,
|
|
21
21
|
compareWeekOffset,
|
|
22
|
+
saveTasksToLocalStorage,
|
|
22
23
|
} from "./lib/utils";
|
|
23
24
|
|
|
24
|
-
|
|
25
25
|
const theadTrStyle: StyleType = {
|
|
26
26
|
color: "#0f5173",
|
|
27
27
|
fontWeight: "300",
|
|
@@ -139,6 +139,8 @@ const Calendar = ({
|
|
|
139
139
|
const handleDragOver = (event: React.DragEvent<HTMLTableDataCellElement>) => {
|
|
140
140
|
event.preventDefault();
|
|
141
141
|
};
|
|
142
|
+
|
|
143
|
+
saveTasksToLocalStorage(tasks);
|
|
142
144
|
return (
|
|
143
145
|
<table className={`planningCalendar ${className}`} style={{ ...style }}>
|
|
144
146
|
<thead>
|
|
@@ -158,7 +160,7 @@ const Calendar = ({
|
|
|
158
160
|
<th
|
|
159
161
|
key={i}
|
|
160
162
|
className={`${daysColsClassName}`}
|
|
161
|
-
style={{...daysColsStyle }}
|
|
163
|
+
style={{ ...daysColsStyle }}
|
|
162
164
|
>
|
|
163
165
|
<DayContainer
|
|
164
166
|
style={dayStyle}
|
|
@@ -191,7 +193,7 @@ const Calendar = ({
|
|
|
191
193
|
<td
|
|
192
194
|
className={`${groupsColsClassName}`}
|
|
193
195
|
key={i}
|
|
194
|
-
style={{ ...groupTdStyle
|
|
196
|
+
style={{ ...groupTdStyle, ...groupsColsStyle }}
|
|
195
197
|
>
|
|
196
198
|
<GroupContainer
|
|
197
199
|
style={groupStyle}
|
|
@@ -579,4 +581,49 @@ export const checkDuplicates = (
|
|
|
579
581
|
.filter((task) => task.groupId === groupId);
|
|
580
582
|
return findDuplicates.length > 0;
|
|
581
583
|
};
|
|
584
|
+
|
|
585
|
+
export const getTasksSaved = () => {
|
|
586
|
+
const taskSavedString = window.localStorage.getItem("CalendarTaskSaved");
|
|
587
|
+
if (!taskSavedString) {
|
|
588
|
+
return [];
|
|
589
|
+
}
|
|
590
|
+
const tasksTable: TasksType = JSON.parse(taskSavedString);
|
|
591
|
+
const validTasks = tasksTable
|
|
592
|
+
.filter((task) => {
|
|
593
|
+
if (task?.taskExpiryDate) {
|
|
594
|
+
const taskDate = new Date(task?.taskExpiryDate);
|
|
595
|
+
return taskDate.getTime() >= Date.now();
|
|
596
|
+
}
|
|
597
|
+
})
|
|
598
|
+
.map((task) => {
|
|
599
|
+
const { taskDate, taskExpiryDate, ...rest } = task;
|
|
600
|
+
if (taskExpiryDate) {
|
|
601
|
+
return {
|
|
602
|
+
taskDate: new Date(taskDate),
|
|
603
|
+
taskExpiryDate: new Date(taskExpiryDate),
|
|
604
|
+
...rest,
|
|
605
|
+
};
|
|
606
|
+
}
|
|
607
|
+
});
|
|
608
|
+
return validTasks;
|
|
609
|
+
};
|
|
610
|
+
|
|
611
|
+
export const deleteTaskSaved = (taskId: string) => {
|
|
612
|
+
const tasksSavedString = window.localStorage.getItem("CalendarTaskSaved");
|
|
613
|
+
if (!tasksSavedString) return;
|
|
614
|
+
const tasksSavedTable: TasksType = JSON.parse(tasksSavedString);
|
|
615
|
+
const taskIndex = tasksSavedTable.findIndex((task) => task.taskId === taskId);
|
|
616
|
+
if (taskIndex) {
|
|
617
|
+
tasksSavedTable.splice(taskIndex, 1);
|
|
618
|
+
window.localStorage.setItem(
|
|
619
|
+
"CalendarTaskSaved",
|
|
620
|
+
JSON.stringify(tasksSavedTable)
|
|
621
|
+
);
|
|
622
|
+
}
|
|
623
|
+
};
|
|
624
|
+
|
|
625
|
+
export const deleteTasksSaved = () => {
|
|
626
|
+
window.localStorage.removeItem("CalendarTaskSaved");
|
|
627
|
+
};
|
|
628
|
+
|
|
582
629
|
export default Calendar;
|
package/lib/utils.js
CHANGED
|
@@ -26,6 +26,10 @@ endDate.setHours(23, 59, 59, 999);
|
|
|
26
26
|
const endDateMilliseconds = endDate.getTime();
|
|
27
27
|
function getDayHourly(weekOffset) {
|
|
28
28
|
const dailyHours = [];
|
|
29
|
+
let dayOffset = weekOffset;
|
|
30
|
+
if (currentDate.getDay() === 0) {
|
|
31
|
+
dayOffset = dayOffset - 7;
|
|
32
|
+
}
|
|
29
33
|
// Boucle pour calculer les heures de début et de fin de chaque jour de la semaine
|
|
30
34
|
for (let i = 0; i < 7; i++) {
|
|
31
35
|
const dayDate = new Date(startDate);
|
|
@@ -36,9 +40,9 @@ function getDayHourly(weekOffset) {
|
|
|
36
40
|
dayEnd.setHours(23, 59, 59, 59);
|
|
37
41
|
dailyHours.push({
|
|
38
42
|
positionDay: i,
|
|
39
|
-
day: new Date(dayStart.getTime() +
|
|
40
|
-
start: dayStart.getTime() +
|
|
41
|
-
end: dayEnd.getTime() +
|
|
43
|
+
day: new Date(dayStart.getTime() + dayOffset * 86400000),
|
|
44
|
+
start: dayStart.getTime() + dayOffset * 86400000,
|
|
45
|
+
end: dayEnd.getTime() + dayOffset * 86400000,
|
|
42
46
|
});
|
|
43
47
|
}
|
|
44
48
|
return dailyHours;
|
|
@@ -125,7 +129,12 @@ function getWeekDays(jump) {
|
|
|
125
129
|
for (let i = 0; i < 7; i++) {
|
|
126
130
|
const day = new Date();
|
|
127
131
|
const diff = i - currentDayOfWeek;
|
|
128
|
-
|
|
132
|
+
if (currentDayOfWeek === 0) {
|
|
133
|
+
day.setDate(currentDate.getDate() + diff + jump - 7);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
day.setDate(currentDate.getDate() + diff + jump);
|
|
137
|
+
}
|
|
129
138
|
const formattedDay = `${days[day.getDay()]}. ${day.getDate()}, ${month[day.getMonth()]} ${day.getFullYear()}`;
|
|
130
139
|
weekDays.push({
|
|
131
140
|
day: days[day.getDay()],
|
|
@@ -400,6 +409,7 @@ function calculerEcartSemaine(dateSelectionnee) {
|
|
|
400
409
|
function semainesDepuisOrigine(annee, numeroSemaine) {
|
|
401
410
|
const dateActuelle = new Date();
|
|
402
411
|
const dateOrigine = new Date(dateActuelle.getFullYear() - 2, 0, 1);
|
|
412
|
+
console.log(dateOrigine);
|
|
403
413
|
const anneeOrigine = dateOrigine.getFullYear();
|
|
404
414
|
const numeroSemaineOrigine = getWeekNumber(dateOrigine);
|
|
405
415
|
let nombreSemaines = 0;
|
|
@@ -456,4 +466,14 @@ const sumHoursByGroups = (groupId, tasks, weekOffset, calendarDate) => {
|
|
|
456
466
|
});
|
|
457
467
|
return sum;
|
|
458
468
|
};
|
|
459
|
-
|
|
469
|
+
function saveTasksToLocalStorage(tasks) {
|
|
470
|
+
const tasksSavedString = window.localStorage.getItem("CalendarTaskSaved");
|
|
471
|
+
const tasksString = JSON.stringify(tasks);
|
|
472
|
+
if (tasksSavedString === tasksString)
|
|
473
|
+
return;
|
|
474
|
+
if (tasksString === "[]")
|
|
475
|
+
return;
|
|
476
|
+
const backup = [...tasks.filter((task) => task.taskExpiryDate)];
|
|
477
|
+
window.localStorage.setItem("CalendarTaskSaved", JSON.stringify(backup));
|
|
478
|
+
}
|
|
479
|
+
export { getWeeksListUpdate, saveTasksToLocalStorage, clickedDate, getCalandarDays, startDateMilliseconds, endDateMilliseconds, getDayHourly, millisecondsToDate, getWeekDays, formatDateToCustomFormat, displayDayOnModalLeft, millisecondsToInt, getWeekMonthAndYear, getWeeksList, getDoubleWeeksList, calculerEcartSemaine, calculateTimeOfDayRange, getSessionStorageRecordForDragAndDrop, compareWeekOffset, sumHoursByGroups, };
|
package/lib/utils.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import moment from "moment";
|
|
2
|
-
import {
|
|
3
|
-
TasksType,
|
|
4
|
-
TaskType,
|
|
5
|
-
TaskFeildsType,
|
|
6
|
-
GroupFeildsType,
|
|
7
|
-
} from "../definitions";
|
|
2
|
+
import { TasksType, TaskType, TaskFeildsType } from "../definitions";
|
|
8
3
|
// Obtenir la date actuelle
|
|
9
4
|
const currentDate = new Date();
|
|
10
5
|
// Obtenir le jour de la semaine (dimanche = 0, lundi = 1, ..., samedi = 6)
|
|
@@ -28,7 +23,10 @@ function getDayHourly(weekOffset: number) {
|
|
|
28
23
|
start: number;
|
|
29
24
|
end: number;
|
|
30
25
|
}[] = [];
|
|
31
|
-
|
|
26
|
+
let dayOffset = weekOffset;
|
|
27
|
+
if (currentDate.getDay() === 0) {
|
|
28
|
+
dayOffset = dayOffset - 7;
|
|
29
|
+
}
|
|
32
30
|
// Boucle pour calculer les heures de début et de fin de chaque jour de la semaine
|
|
33
31
|
for (let i = 0; i < 7; i++) {
|
|
34
32
|
const dayDate = new Date(startDate);
|
|
@@ -40,9 +38,9 @@ function getDayHourly(weekOffset: number) {
|
|
|
40
38
|
|
|
41
39
|
dailyHours.push({
|
|
42
40
|
positionDay: i,
|
|
43
|
-
day: new Date(dayStart.getTime() +
|
|
44
|
-
start: dayStart.getTime() +
|
|
45
|
-
end: dayEnd.getTime() +
|
|
41
|
+
day: new Date(dayStart.getTime() + dayOffset * 86400000),
|
|
42
|
+
start: dayStart.getTime() + dayOffset * 86400000,
|
|
43
|
+
end: dayEnd.getTime() + dayOffset * 86400000,
|
|
46
44
|
});
|
|
47
45
|
}
|
|
48
46
|
return dailyHours;
|
|
@@ -144,8 +142,11 @@ function getWeekDays(jump: number) {
|
|
|
144
142
|
for (let i = 0; i < 7; i++) {
|
|
145
143
|
const day = new Date();
|
|
146
144
|
const diff = i - currentDayOfWeek;
|
|
147
|
-
|
|
148
|
-
|
|
145
|
+
if (currentDayOfWeek === 0) {
|
|
146
|
+
day.setDate(currentDate.getDate() + diff + jump - 7);
|
|
147
|
+
} else {
|
|
148
|
+
day.setDate(currentDate.getDate() + diff + jump);
|
|
149
|
+
}
|
|
149
150
|
|
|
150
151
|
const formattedDay = `${days[day.getDay()]}. ${day.getDate()}, ${
|
|
151
152
|
month[day.getMonth()]
|
|
@@ -597,8 +598,19 @@ const sumHoursByGroups = (
|
|
|
597
598
|
});
|
|
598
599
|
return sum;
|
|
599
600
|
};
|
|
601
|
+
|
|
602
|
+
function saveTasksToLocalStorage(tasks: TasksType) {
|
|
603
|
+
const tasksSavedString = window.localStorage.getItem("CalendarTaskSaved");
|
|
604
|
+
const tasksString = JSON.stringify(tasks);
|
|
605
|
+
if (tasksSavedString === tasksString) return;
|
|
606
|
+
if (tasksString === "[]") return;
|
|
607
|
+
const backup = [...tasks.filter((task) => task.taskExpiryDate)];
|
|
608
|
+
window.localStorage.setItem("CalendarTaskSaved", JSON.stringify(backup));
|
|
609
|
+
}
|
|
610
|
+
|
|
600
611
|
export {
|
|
601
612
|
getWeeksListUpdate,
|
|
613
|
+
saveTasksToLocalStorage,
|
|
602
614
|
clickedDate,
|
|
603
615
|
getCalandarDays,
|
|
604
616
|
startDateMilliseconds,
|
package/package.json
CHANGED