@apia/scheduler-component 4.0.102 → 5.0.1
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/dist/Scheduler/Navigation.js +115 -0
- package/dist/Scheduler/Navigation.js.map +1 -0
- package/dist/Scheduler/ReserveDetails.js +42 -0
- package/dist/Scheduler/ReserveDetails.js.map +1 -0
- package/dist/Scheduler/SchedulerTablePlugin.js +100 -0
- package/dist/Scheduler/SchedulerTablePlugin.js.map +1 -0
- package/dist/Scheduler/SelectedDayInfo.js +24 -0
- package/dist/Scheduler/SelectedDayInfo.js.map +1 -0
- package/dist/Scheduler/Table.js +28 -0
- package/dist/Scheduler/Table.js.map +1 -0
- package/dist/Scheduler/index.d.ts +14 -0
- package/dist/Scheduler/index.d.ts.map +1 -0
- package/dist/Scheduler/index.js +57 -0
- package/dist/Scheduler/index.js.map +1 -0
- package/dist/Scheduler/mini/Mini.js +89 -0
- package/dist/Scheduler/mini/Mini.js.map +1 -0
- package/dist/Scheduler/mini/Stage.js +81 -0
- package/dist/Scheduler/mini/Stage.js.map +1 -0
- package/dist/Scheduler/mini/StageButton.js +43 -0
- package/dist/Scheduler/mini/StageButton.js.map +1 -0
- package/dist/index.d.ts +1 -13
- package/dist/index.js +1 -503
- package/dist/index.js.map +1 -1
- package/package.json +9 -10
- package/LICENSE.md +0 -6
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import dayjs from 'dayjs';
|
|
3
|
+
import { dateFormat } from './SchedulerTablePlugin.js';
|
|
4
|
+
import { useCallback } from 'react';
|
|
5
|
+
import { SimpleButton, DateInput } from '@apia/components';
|
|
6
|
+
import { Box } from '@apia/theme';
|
|
7
|
+
import { Icon } from '@apia/icons';
|
|
8
|
+
import { observer } from 'mobx-react-lite';
|
|
9
|
+
import { useScheduler } from './index.js';
|
|
10
|
+
|
|
11
|
+
const Navigation = observer(() => {
|
|
12
|
+
const controller = useScheduler();
|
|
13
|
+
const mondayWeek = controller.getState().data?.mondayWeek;
|
|
14
|
+
const {
|
|
15
|
+
isDisabled,
|
|
16
|
+
isTodayLoading,
|
|
17
|
+
isLastWeekLoading,
|
|
18
|
+
isDateInputLoading,
|
|
19
|
+
isNextWeekLoading,
|
|
20
|
+
isDeleteLoading
|
|
21
|
+
} = {
|
|
22
|
+
isDisabled: controller.getState()?.isLoading !== "NotLoading",
|
|
23
|
+
isTodayLoading: controller.getState()?.isLoading === "Today",
|
|
24
|
+
isLastWeekLoading: controller.getState()?.isLoading === "LastWeek",
|
|
25
|
+
isDateInputLoading: controller.getState()?.isLoading === "DateInput",
|
|
26
|
+
isNextWeekLoading: controller.getState()?.isLoading === "NextWeek",
|
|
27
|
+
isDeleteLoading: controller.getState()?.isLoading === "DeleteWeek"
|
|
28
|
+
};
|
|
29
|
+
const onTodayHandler = () => {
|
|
30
|
+
controller.setState({ isLoading: "Today" });
|
|
31
|
+
controller.makeDaysStage();
|
|
32
|
+
controller.loadWeek(dayjs().subtract(1, "day").format(dateFormat));
|
|
33
|
+
};
|
|
34
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Box, { className: "scheduler__navigator", children: [
|
|
35
|
+
/* @__PURE__ */ jsx(
|
|
36
|
+
SimpleButton,
|
|
37
|
+
{
|
|
38
|
+
variant: "outline",
|
|
39
|
+
className: "scheduler__navigator_todayBtn",
|
|
40
|
+
disabled: isDisabled,
|
|
41
|
+
"aria-label": window.LBL_TODAY,
|
|
42
|
+
isLoading: isTodayLoading,
|
|
43
|
+
onClick: useCallback(onTodayHandler, [controller]),
|
|
44
|
+
type: "button",
|
|
45
|
+
children: window.LBL_TODAY
|
|
46
|
+
}
|
|
47
|
+
),
|
|
48
|
+
/* @__PURE__ */ jsx(
|
|
49
|
+
SimpleButton,
|
|
50
|
+
{
|
|
51
|
+
variant: "outline",
|
|
52
|
+
className: "scheduler__navigator_lastBtn",
|
|
53
|
+
disabled: isDisabled,
|
|
54
|
+
title: window.LBL_SCHED_LAST_WEEK_TOOLTIP,
|
|
55
|
+
"aria-label": window.LBL_SCHED_LAST_WEEK_TEXT,
|
|
56
|
+
isLoading: isLastWeekLoading,
|
|
57
|
+
onClick: () => controller.goPreviousWeek(),
|
|
58
|
+
type: "button",
|
|
59
|
+
children: "<"
|
|
60
|
+
}
|
|
61
|
+
),
|
|
62
|
+
/* @__PURE__ */ jsx(
|
|
63
|
+
DateInput,
|
|
64
|
+
{
|
|
65
|
+
className: "scheduler__navigator_dateInput",
|
|
66
|
+
disabled: isDisabled,
|
|
67
|
+
isLoading: isDateInputLoading,
|
|
68
|
+
getCustomMask: useCallback(() => {
|
|
69
|
+
return "";
|
|
70
|
+
}, []),
|
|
71
|
+
renderLabel: controller.parsedDateLabel,
|
|
72
|
+
onChange: (newDate) => {
|
|
73
|
+
if (newDate) {
|
|
74
|
+
controller.setState({ isLoading: "DateInput" });
|
|
75
|
+
controller.loadWeek(
|
|
76
|
+
dayjs(newDate, dateFormat).format(dateFormat)
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
value: mondayWeek
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
/* @__PURE__ */ jsx(
|
|
84
|
+
SimpleButton,
|
|
85
|
+
{
|
|
86
|
+
variant: "outline",
|
|
87
|
+
className: "scheduler__navigator_nextBtn",
|
|
88
|
+
disabled: isDisabled,
|
|
89
|
+
title: window.LBL_SCHED_NEXT_WEEK_TOOLTIP,
|
|
90
|
+
"aria-label": window.LBL_SCHED_NEXT_WEEK_TEXT,
|
|
91
|
+
isLoading: isNextWeekLoading,
|
|
92
|
+
onClick: () => controller.goNextWeek(),
|
|
93
|
+
type: "button",
|
|
94
|
+
children: ">"
|
|
95
|
+
}
|
|
96
|
+
),
|
|
97
|
+
/* @__PURE__ */ jsx(
|
|
98
|
+
SimpleButton,
|
|
99
|
+
{
|
|
100
|
+
variant: "outline-danger",
|
|
101
|
+
title: window.LBL_SCHED_RESET_TOOLTIP,
|
|
102
|
+
"aria-label": window.LBL_SCHED_RESET_TEXT,
|
|
103
|
+
className: "scheduler__navigator_DeleteBtn",
|
|
104
|
+
disabled: isDisabled,
|
|
105
|
+
isLoading: isDeleteLoading,
|
|
106
|
+
onClick: () => controller.deleteDate(),
|
|
107
|
+
type: "button",
|
|
108
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "Trash", title: window.LBL_SCHED_RESET_TEXT })
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
] }) });
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
export { Navigation };
|
|
115
|
+
//# sourceMappingURL=Navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Navigation.js","sources":["../../src/Scheduler/Navigation.tsx"],"sourcesContent":["import dayjs from 'dayjs';\r\nimport { dateFormat } from './SchedulerTablePlugin';\r\nimport { useCallback } from 'react';\r\nimport { DateInput, SimpleButton } from '@apia/components';\r\nimport { Box } from '@apia/theme';\r\nimport { Icon } from '@apia/icons';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { useScheduler } from '.';\r\n\r\nexport const Navigation = observer(() => {\r\n const controller = useScheduler();\r\n const mondayWeek = controller.getState().data?.mondayWeek;\r\n\r\n const {\r\n isDisabled,\r\n isTodayLoading,\r\n isLastWeekLoading,\r\n isDateInputLoading,\r\n isNextWeekLoading,\r\n isDeleteLoading,\r\n } = {\r\n isDisabled: controller.getState()?.isLoading !== 'NotLoading',\r\n isTodayLoading: controller.getState()?.isLoading === 'Today',\r\n isLastWeekLoading: controller.getState()?.isLoading === 'LastWeek',\r\n isDateInputLoading: controller.getState()?.isLoading === 'DateInput',\r\n isNextWeekLoading: controller.getState()?.isLoading === 'NextWeek',\r\n isDeleteLoading: controller.getState()?.isLoading === 'DeleteWeek',\r\n };\r\n\r\n const onTodayHandler = () => {\r\n controller.setState({ isLoading: 'Today' });\r\n\r\n controller.makeDaysStage();\r\n controller.loadWeek(dayjs().subtract(1, 'day').format(dateFormat));\r\n };\r\n\r\n return (\r\n <>\r\n <Box className=\"scheduler__navigator\">\r\n <SimpleButton\r\n variant=\"outline\"\r\n className=\"scheduler__navigator_todayBtn\"\r\n disabled={isDisabled}\r\n aria-label={(window as any).LBL_TODAY}\r\n isLoading={isTodayLoading}\r\n onClick={useCallback(onTodayHandler, [controller])}\r\n type=\"button\"\r\n >\r\n {(window as any).LBL_TODAY}\r\n </SimpleButton>\r\n <SimpleButton\r\n variant=\"outline\"\r\n className=\"scheduler__navigator_lastBtn\"\r\n disabled={isDisabled}\r\n title={(window as any).LBL_SCHED_LAST_WEEK_TOOLTIP}\r\n aria-label={(window as any).LBL_SCHED_LAST_WEEK_TEXT}\r\n isLoading={isLastWeekLoading}\r\n onClick={() => controller.goPreviousWeek()}\r\n type=\"button\"\r\n >\r\n <\r\n </SimpleButton>\r\n <DateInput\r\n className=\"scheduler__navigator_dateInput\"\r\n disabled={isDisabled}\r\n isLoading={isDateInputLoading}\r\n getCustomMask={useCallback(() => {\r\n return '';\r\n }, [])}\r\n renderLabel={controller.parsedDateLabel}\r\n onChange={(newDate) => {\r\n if (newDate) {\r\n controller.setState({ isLoading: 'DateInput' });\r\n controller.loadWeek(\r\n dayjs(newDate, dateFormat).format(dateFormat),\r\n );\r\n }\r\n }}\r\n value={mondayWeek}\r\n />\r\n <SimpleButton\r\n variant=\"outline\"\r\n className=\"scheduler__navigator_nextBtn\"\r\n disabled={isDisabled}\r\n title={(window as any).LBL_SCHED_NEXT_WEEK_TOOLTIP}\r\n aria-label={(window as any).LBL_SCHED_NEXT_WEEK_TEXT}\r\n isLoading={isNextWeekLoading}\r\n onClick={() => controller.goNextWeek()}\r\n type=\"button\"\r\n >\r\n >\r\n </SimpleButton>\r\n <SimpleButton\r\n variant=\"outline-danger\"\r\n title={(window as any).LBL_SCHED_RESET_TOOLTIP}\r\n aria-label={(window as any).LBL_SCHED_RESET_TEXT}\r\n className=\"scheduler__navigator_DeleteBtn\"\r\n disabled={isDisabled}\r\n isLoading={isDeleteLoading}\r\n onClick={() => controller.deleteDate()}\r\n type=\"button\"\r\n >\r\n <Icon name=\"Trash\" title={(window as any).LBL_SCHED_RESET_TEXT} />\r\n </SimpleButton>\r\n </Box>\r\n </>\r\n );\r\n});\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { getLabel, arrayOrArray } from '@apia/util';
|
|
3
|
+
import { Box, getVariant } from '@apia/theme';
|
|
4
|
+
import { observer } from 'mobx-react-lite';
|
|
5
|
+
|
|
6
|
+
const ReserveDetails = observer(
|
|
7
|
+
({ processes }) => {
|
|
8
|
+
let content = /* @__PURE__ */ jsx(Box, { className: "no__appoinments", children: /* @__PURE__ */ jsxs(Box, { as: "span", children: [
|
|
9
|
+
getLabel("lblNoAppoinments").text,
|
|
10
|
+
" "
|
|
11
|
+
] }) });
|
|
12
|
+
if (processes.length > 0)
|
|
13
|
+
content = /* @__PURE__ */ jsxs("table", { className: "appoinments__details", children: [
|
|
14
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
15
|
+
/* @__PURE__ */ jsx("th", { children: getLabel("lblId").text }),
|
|
16
|
+
/* @__PURE__ */ jsx("th", { children: getLabel("flaAtr").text })
|
|
17
|
+
] }) }),
|
|
18
|
+
/* @__PURE__ */ jsx("tbody", { children: processes?.map((c) => {
|
|
19
|
+
const attributes = arrayOrArray(c.attributes.attribute);
|
|
20
|
+
return attributes.map((attr, index) => /* @__PURE__ */ jsxs("tr", { children: [
|
|
21
|
+
index === 0 && /* @__PURE__ */ jsx(
|
|
22
|
+
"td",
|
|
23
|
+
{
|
|
24
|
+
className: "appoinments__details_id",
|
|
25
|
+
rowSpan: attributes.length,
|
|
26
|
+
children: c.id
|
|
27
|
+
}
|
|
28
|
+
),
|
|
29
|
+
/* @__PURE__ */ jsxs("td", { className: "appoinments__details_attribute", children: [
|
|
30
|
+
attr.title,
|
|
31
|
+
": ",
|
|
32
|
+
attr.value
|
|
33
|
+
] })
|
|
34
|
+
] }, `${c.id}-${index}`));
|
|
35
|
+
}) })
|
|
36
|
+
] });
|
|
37
|
+
return /* @__PURE__ */ jsx(Box, { ...getVariant("layout.common.components.scheduler.details"), children: content });
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
export { ReserveDetails };
|
|
42
|
+
//# sourceMappingURL=ReserveDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReserveDetails.js","sources":["../../src/Scheduler/ReserveDetails.tsx"],"sourcesContent":["import { arrayOrArray, getLabel } from '@apia/util';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nexport type TProcesses = {\r\n id: number;\r\n attributes: {\r\n attribute: {\r\n title: string;\r\n value: string;\r\n }[];\r\n };\r\n}[];\r\n\r\nexport const ReserveDetails = observer(\r\n ({ processes }: { processes: TProcesses }) => {\r\n let content = (\r\n <Box className=\"no__appoinments\">\r\n <Box as=\"span\">{getLabel('lblNoAppoinments').text} </Box>\r\n </Box>\r\n );\r\n if (processes.length > 0)\r\n content = (\r\n <table className=\"appoinments__details\">\r\n <thead>\r\n <tr>\r\n <th>{getLabel('lblId').text}</th>\r\n <th>{getLabel('flaAtr').text}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {processes?.map((c) => {\r\n const attributes = arrayOrArray(c.attributes.attribute);\r\n return attributes.map((attr, index) => (\r\n <tr key={`${c.id}-${index}`}>\r\n {index === 0 && (\r\n <td\r\n className=\"appoinments__details_id\"\r\n rowSpan={attributes.length}\r\n >\r\n {c.id}\r\n </td>\r\n )}\r\n <td className=\"appoinments__details_attribute\">\r\n {attr.title}: {attr.value}\r\n </td>\r\n </tr>\r\n ));\r\n })}\r\n </tbody>\r\n </table>\r\n );\r\n return (\r\n <Box {...getVariant('layout.common.components.scheduler.details')}>\r\n {content}\r\n </Box>\r\n );\r\n },\r\n);\r\n"],"names":[],"mappings":";;;;;AAaO,MAAM,cAAA,GAAiB,QAAA;AAAA,EAC5B,CAAC,EAAE,SAAA,EAAU,KAAiC;AAC5C,IAAA,IAAI,OAAA,uBACD,GAAA,EAAA,EAAI,SAAA,EAAU,mBACb,QAAA,kBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,IAAG,MAAA,EAAQ,QAAA,EAAA;AAAA,MAAA,QAAA,CAAS,kBAAkB,CAAA,CAAE,IAAA;AAAA,MAAK;AAAA,KAAA,EAAC,CAAA,EACrD,CAAA;AAEF,IAAA,IAAI,UAAU,MAAA,GAAS,CAAA;AACrB,MAAA,OAAA,mBACE,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,sBAAA,EACf,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,EAAA,EACC,+BAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,QAAA,CAAS,OAAO,CAAA,CAAE,IAAA,EAAK,CAAA;AAAA,0BAC5B,GAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,QAAA,CAAS,QAAQ,EAAE,IAAA,EAAK;AAAA,SAAA,EAC/B,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,OAAA,EAAA,EACE,QAAA,EAAA,SAAA,EAAW,GAAA,CAAI,CAAC,CAAA,KAAM;AACrB,UAAA,MAAM,UAAA,GAAa,YAAA,CAAa,CAAA,CAAE,UAAA,CAAW,SAAS,CAAA;AACtD,UAAA,OAAO,WAAW,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,0BAC1B,IAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,KAAA,KAAU,CAAA,oBACT,GAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,yBAAA;AAAA,gBACV,SAAS,UAAA,CAAW,MAAA;AAAA,gBAEnB,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA,aACL;AAAA,4BAEF,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gCAAA,EACX,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,KAAA;AAAA,cAAM,IAAA;AAAA,cAAG,IAAA,CAAK;AAAA,aAAA,EACtB;AAAA,WAAA,EAAA,EAXO,GAAG,CAAA,CAAE,EAAE,CAAA,CAAA,EAAI,KAAK,EAYzB,CACD,CAAA;AAAA,SACF,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAEJ,IAAA,2BACG,GAAA,EAAA,EAAK,GAAG,UAAA,CAAW,4CAA4C,GAC7D,QAAA,EAAA,OAAA,EACH,CAAA;AAAA;AAGN;;;;"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { observer } from 'mobx-react-lite';
|
|
3
|
+
import { ApiaUtil, SimpleButton, IconButton } from '@apia/components';
|
|
4
|
+
import { Box, getVariant } from '@apia/theme';
|
|
5
|
+
import { getDateFormat, toBoolean, getLabel } from '@apia/util';
|
|
6
|
+
import dayjs from 'dayjs';
|
|
7
|
+
import { Icon } from '@apia/icons';
|
|
8
|
+
import { ReserveDetails } from './ReserveDetails.js';
|
|
9
|
+
import { useScheduler } from './index.js';
|
|
10
|
+
|
|
11
|
+
const dateFormat = getDateFormat();
|
|
12
|
+
const CellRenderer = observer(({ cell }) => {
|
|
13
|
+
const controller = useScheduler();
|
|
14
|
+
const state = controller.getState();
|
|
15
|
+
if (cell.getState("content")) {
|
|
16
|
+
return cell.getState("content");
|
|
17
|
+
}
|
|
18
|
+
const properties = cell.getState("properties");
|
|
19
|
+
if (!state)
|
|
20
|
+
return;
|
|
21
|
+
const isSelected = state.selectedCell === properties.cellId;
|
|
22
|
+
const ariaLabel = !properties.isEnabled ? `${dayjs(properties.weekDay, dateFormat).add(Number(properties.dayNumber) - 1, "day").format(dateFormat)},${properties.hour.slice(0, -2) ?? ""}:${properties.hour.slice(2) ?? ""}, ${String("disabled")}
|
|
23
|
+
` : `${dayjs(properties.weekDay, dateFormat).add(Number(properties.dayNumber) - 1, "day").format(dateFormat)},${properties.hour.slice(
|
|
24
|
+
0,
|
|
25
|
+
-2
|
|
26
|
+
)}:${properties.hour.slice(2)}, ${String(
|
|
27
|
+
properties.valuePlusOverassign
|
|
28
|
+
)}
|
|
29
|
+
`;
|
|
30
|
+
const title = !properties.isEnabled ? "" : `${dayjs(properties.weekDay, dateFormat).add(Number(properties.dayNumber) - 1, "day").format(dateFormat)},${properties.hour.slice(
|
|
31
|
+
0,
|
|
32
|
+
-2
|
|
33
|
+
)}:${properties.hour.slice(2)} ${String(
|
|
34
|
+
toBoolean(state.initialProps.showDisponibility) ? `, ${properties.valuePlusOverassign}` : ""
|
|
35
|
+
)}
|
|
36
|
+
`;
|
|
37
|
+
return /* @__PURE__ */ jsxs(
|
|
38
|
+
Box,
|
|
39
|
+
{
|
|
40
|
+
className: `scheduler_cell ${properties.isOverassignClassName ? "td_overassign" : ""}`,
|
|
41
|
+
children: [
|
|
42
|
+
/* @__PURE__ */ jsxs(
|
|
43
|
+
SimpleButton,
|
|
44
|
+
{
|
|
45
|
+
tabIndex: 0,
|
|
46
|
+
title,
|
|
47
|
+
"aria-label": ariaLabel,
|
|
48
|
+
disabled: !properties.isEnabled,
|
|
49
|
+
...getVariant("transparentIcon"),
|
|
50
|
+
onClick: () => controller.retriever.selectDayHandler({
|
|
51
|
+
cellId: properties.cellId,
|
|
52
|
+
weekDay: properties.weekDay,
|
|
53
|
+
dayNumber: properties.dayNumber,
|
|
54
|
+
hour: properties.hour,
|
|
55
|
+
currentDayDefinition: properties.currentDayDefinition,
|
|
56
|
+
controller
|
|
57
|
+
}),
|
|
58
|
+
className: `sched_cell__btn `,
|
|
59
|
+
children: [
|
|
60
|
+
isSelected && /* @__PURE__ */ jsx(Icon, { title: "", name: "Check" }),
|
|
61
|
+
!isSelected && properties.isEnabled && toBoolean(state.initialProps.showDisponibility) && Number(properties.valuePlusOverassign)
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
),
|
|
65
|
+
properties.currentDayDefinition?.type === "laboral" && ApiaUtil.instance.parsers.parseBool(
|
|
66
|
+
state.initialProps.showAttributes ?? "false"
|
|
67
|
+
) && /* @__PURE__ */ jsx(
|
|
68
|
+
IconButton,
|
|
69
|
+
{
|
|
70
|
+
size: 24,
|
|
71
|
+
icon: "Search",
|
|
72
|
+
...getVariant("transparentIcon"),
|
|
73
|
+
className: `schd__info ${!properties.isEnabled ? "schd__info_disabledColor" : ""}`,
|
|
74
|
+
onClick: async () => {
|
|
75
|
+
const processes = await controller.loadInfo(
|
|
76
|
+
properties.dayNumber,
|
|
77
|
+
properties.hour
|
|
78
|
+
);
|
|
79
|
+
ApiaUtil.instance.modals.open({
|
|
80
|
+
title: getLabel("lblAppointmentDetails").text,
|
|
81
|
+
children: /* @__PURE__ */ jsx(ReserveDetails, { processes }),
|
|
82
|
+
variant: "layout.execution.form.fields.scheduler.details"
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
});
|
|
91
|
+
class SchedulerTablePlugin {
|
|
92
|
+
getRenderers() {
|
|
93
|
+
return {
|
|
94
|
+
cell: CellRenderer
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export { SchedulerTablePlugin, dateFormat };
|
|
100
|
+
//# sourceMappingURL=SchedulerTablePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchedulerTablePlugin.js","sources":["../../src/Scheduler/SchedulerTablePlugin.tsx"],"sourcesContent":["import { Cell, TablePlugin } from '@apia/table2-component';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { SimpleButton, IconButton, ApiaUtil } from '@apia/components';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { getDateFormat, getLabel, TDateFormat, toBoolean } from '@apia/util';\r\nimport dayjs from 'dayjs';\r\nimport { Icon } from '@apia/icons';\r\nimport { ReserveDetails } from './ReserveDetails';\r\nimport { useScheduler } from '.';\r\nimport { TTskSchDay } from '@apia/scheduler-controller';\r\n\r\nexport const dateFormat: TDateFormat = getDateFormat();\r\n\r\ntype CellProperties = {\r\n cellId: string;\r\n currentDayDefinition: TTskSchDay;\r\n isEnabled: boolean;\r\n isQueriedDisabled: boolean;\r\n weekDay: string;\r\n dayNumber: number;\r\n hour: string;\r\n value: number;\r\n valuePlusOverassign: number;\r\n isOverassignClassName: boolean;\r\n};\r\n\r\nconst CellRenderer = observer(({ cell }: { cell: Cell }) => {\r\n const controller = useScheduler();\r\n const state = controller.getState();\r\n if (cell.getState('content')) {\r\n return cell.getState('content');\r\n }\r\n const properties = cell.getState('properties') as CellProperties;\r\n if (!state) return;\r\n const isSelected = state.selectedCell === properties.cellId;\r\n const ariaLabel = !properties!.isEnabled\r\n ? `${dayjs(properties!.weekDay, dateFormat)\r\n .add(Number(properties!.dayNumber) - 1, 'day')\r\n .format(dateFormat)},${\r\n properties!.hour.slice(0, -2) ?? ''\r\n }:${properties!.hour.slice(2) ?? ''}, ${String('disabled')}\r\n `\r\n : `${dayjs(properties!.weekDay, dateFormat)\r\n .add(Number(properties!.dayNumber) - 1, 'day')\r\n .format(dateFormat)},${properties!.hour.slice(\r\n 0,\r\n -2,\r\n )}:${properties!.hour.slice(2)}, ${String(\r\n properties!.valuePlusOverassign,\r\n )}\r\n `;\r\n\r\n const title = !properties!.isEnabled\r\n ? ''\r\n : `${dayjs(properties!.weekDay, dateFormat)\r\n .add(Number(properties!.dayNumber) - 1, 'day')\r\n .format(dateFormat)},${properties!.hour.slice(\r\n 0,\r\n -2,\r\n )}:${properties!.hour.slice(2)} ${String(\r\n toBoolean(state.initialProps.showDisponibility)\r\n ? `, ${properties!.valuePlusOverassign}`\r\n : '',\r\n )}\r\n `;\r\n\r\n return (\r\n <Box\r\n className={`scheduler_cell ${\r\n properties!.isOverassignClassName ? 'td_overassign' : ''\r\n }`}\r\n >\r\n <SimpleButton\r\n tabIndex={0}\r\n title={title}\r\n aria-label={ariaLabel}\r\n disabled={!properties!.isEnabled}\r\n {...getVariant('transparentIcon')}\r\n onClick={() =>\r\n controller.retriever.selectDayHandler({\r\n cellId: properties.cellId,\r\n weekDay: properties.weekDay,\r\n dayNumber: properties.dayNumber,\r\n hour: properties.hour,\r\n currentDayDefinition: properties.currentDayDefinition,\r\n controller: controller,\r\n })\r\n }\r\n className={`sched_cell__btn `}\r\n >\r\n {isSelected && <Icon title=\"\" name=\"Check\" />}\r\n {!isSelected &&\r\n properties!.isEnabled &&\r\n toBoolean(state.initialProps.showDisponibility) &&\r\n Number(properties!.valuePlusOverassign)}\r\n </SimpleButton>\r\n\r\n {properties!.currentDayDefinition?.type === 'laboral' &&\r\n ApiaUtil.instance.parsers.parseBool(\r\n state.initialProps.showAttributes ?? 'false',\r\n ) && (\r\n <IconButton\r\n size={24}\r\n icon=\"Search\"\r\n {...getVariant('transparentIcon')}\r\n className={`schd__info ${!properties!.isEnabled ? 'schd__info_disabledColor' : ''}`}\r\n onClick={async () => {\r\n const processes = await controller.loadInfo(\r\n properties.dayNumber,\r\n properties.hour,\r\n );\r\n\r\n ApiaUtil.instance.modals.open({\r\n title: getLabel('lblAppointmentDetails').text,\r\n children: <ReserveDetails processes={processes} />,\r\n variant: 'layout.execution.form.fields.scheduler.details',\r\n });\r\n }}\r\n />\r\n )}\r\n </Box>\r\n );\r\n});\r\n\r\nexport class SchedulerTablePlugin implements TablePlugin {\r\n getRenderers() {\r\n return {\r\n cell: CellRenderer,\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Label } from '@apia/theme';
|
|
3
|
+
import { formatMessage } from '@apia/util';
|
|
4
|
+
import { observer } from 'mobx-react-lite';
|
|
5
|
+
import { useScheduler } from './index.js';
|
|
6
|
+
|
|
7
|
+
const SelectedDateInfo = observer(() => {
|
|
8
|
+
const controller = useScheduler();
|
|
9
|
+
const data = controller.getState().data;
|
|
10
|
+
const selectedDay = controller.getState()?.selectedDay;
|
|
11
|
+
return /* @__PURE__ */ jsxs(Box, { className: "selectedDateInfo", children: [
|
|
12
|
+
selectedDay?.day && selectedDay?.hour && /* @__PURE__ */ jsx(Label, { children: formatMessage(window.LBL_SCHED_SELECTED_DATE, {
|
|
13
|
+
TOK1: selectedDay?.day,
|
|
14
|
+
TOK2: `${selectedDay.hour.slice(
|
|
15
|
+
0,
|
|
16
|
+
-2
|
|
17
|
+
)}:${selectedDay.hour.slice(2)}`
|
|
18
|
+
}) }),
|
|
19
|
+
!selectedDay?.day && !data?.weekNotConfigured && data?.tskSchDay && /* @__PURE__ */ jsx(Label, { sx: { display: "block" }, children: window.LBL_SCHED_DATE_NOT_SELECTED })
|
|
20
|
+
] });
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export { SelectedDateInfo as default };
|
|
24
|
+
//# sourceMappingURL=SelectedDayInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectedDayInfo.js","sources":["../../src/Scheduler/SelectedDayInfo.tsx"],"sourcesContent":["import { Box, Label } from '@apia/theme';\r\nimport { formatMessage } from '@apia/util';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { useScheduler } from '.';\r\n\r\nconst SelectedDateInfo = observer(() => {\r\n const controller = useScheduler();\r\n const data = controller.getState().data;\r\n const selectedDay = controller.getState()?.selectedDay;\r\n\r\n return (\r\n <Box className=\"selectedDateInfo\">\r\n {selectedDay?.day && selectedDay?.hour && (\r\n <Label>\r\n {formatMessage((window as any).LBL_SCHED_SELECTED_DATE, {\r\n TOK1: selectedDay?.day,\r\n TOK2: `${selectedDay.hour.slice(\r\n 0,\r\n -2,\r\n )}:${selectedDay.hour!.slice(2)}`,\r\n })}\r\n </Label>\r\n )}\r\n {!selectedDay?.day && !data?.weekNotConfigured && data?.tskSchDay && (\r\n <Label sx={{ display: 'block' }}>\r\n {(window as any).LBL_SCHED_DATE_NOT_SELECTED}\r\n </Label>\r\n )}\r\n </Box>\r\n );\r\n});\r\n\r\nexport default SelectedDateInfo;\r\n"],"names":[],"mappings":";;;;;;AAKA,MAAM,gBAAA,GAAmB,SAAS,MAAM;AACtC,EAAA,MAAM,aAAa,YAAA,EAAa;AAChC,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,QAAA,EAAS,CAAE,IAAA;AACnC,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,QAAA,EAAS,EAAG,WAAA;AAE3C,EAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,WAAA,EAAa,OAAO,WAAA,EAAa,IAAA,wBAC/B,KAAA,EAAA,EACE,QAAA,EAAA,aAAA,CAAe,OAAe,uBAAA,EAAyB;AAAA,MACtD,MAAM,WAAA,EAAa,GAAA;AAAA,MACnB,IAAA,EAAM,CAAA,EAAG,WAAA,CAAY,IAAA,CAAK,KAAA;AAAA,QACxB,CAAA;AAAA,QACA;AAAA,OACD,CAAA,CAAA,EAAI,WAAA,CAAY,IAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,KAChC,CAAA,EACH,CAAA;AAAA,IAED,CAAC,WAAA,EAAa,GAAA,IAAO,CAAC,IAAA,EAAM,qBAAqB,IAAA,EAAM,SAAA,oBACtD,GAAA,CAAC,KAAA,EAAA,EAAM,IAAI,EAAE,OAAA,EAAS,OAAA,EAAQ,EAC1B,iBAAe,2BAAA,EACnB;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Table } from '@apia/table2-component';
|
|
3
|
+
import { observer } from 'mobx-react-lite';
|
|
4
|
+
import { Box } from '@apia/theme';
|
|
5
|
+
import { useScheduler } from './index.js';
|
|
6
|
+
|
|
7
|
+
const SchedTable = observer(() => {
|
|
8
|
+
const controller = useScheduler();
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
Box,
|
|
11
|
+
{
|
|
12
|
+
onKeyDownCapture: (ev) => {
|
|
13
|
+
if (ev.code === "ArrowRight" && ev.ctrlKey) {
|
|
14
|
+
ev.stopPropagation();
|
|
15
|
+
controller.goNextWeek();
|
|
16
|
+
}
|
|
17
|
+
if (ev.code === "ArrowLeft" && ev.ctrlKey) {
|
|
18
|
+
ev.stopPropagation();
|
|
19
|
+
controller.goPreviousWeek();
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
children: /* @__PURE__ */ jsx(Table, { variant: "secondary", controller: controller.tableController })
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export { SchedTable };
|
|
28
|
+
//# sourceMappingURL=Table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../src/Scheduler/Table.tsx"],"sourcesContent":["import { Table } from '@apia/table2-component';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { Box } from '@apia/theme';\r\nimport { useScheduler } from '.';\r\n\r\nexport const SchedTable = observer(() => {\r\n const controller = useScheduler();\r\n\r\n return (\r\n <Box\r\n onKeyDownCapture={(ev) => {\r\n if (ev.code === 'ArrowRight' && ev.ctrlKey) {\r\n ev.stopPropagation();\r\n controller.goNextWeek();\r\n }\r\n if (ev.code === 'ArrowLeft' && ev.ctrlKey) {\r\n ev.stopPropagation();\r\n controller.goPreviousWeek();\r\n }\r\n }}\r\n >\r\n <Table variant=\"secondary\" controller={controller.tableController} />\r\n </Box>\r\n );\r\n});\r\n"],"names":[],"mappings":";;;;;;AAKO,MAAM,UAAA,GAAa,SAAS,MAAM;AACvC,EAAA,MAAM,aAAa,YAAA,EAAa;AAEhC,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,gBAAA,EAAkB,CAAC,EAAA,KAAO;AACxB,QAAA,IAAI,EAAA,CAAG,IAAA,KAAS,YAAA,IAAgB,EAAA,CAAG,OAAA,EAAS;AAC1C,UAAA,EAAA,CAAG,eAAA,EAAgB;AACnB,UAAA,UAAA,CAAW,UAAA,EAAW;AAAA;AAExB,QAAA,IAAI,EAAA,CAAG,IAAA,KAAS,WAAA,IAAe,EAAA,CAAG,OAAA,EAAS;AACzC,UAAA,EAAA,CAAG,eAAA,EAAgB;AACnB,UAAA,UAAA,CAAW,cAAA,EAAe;AAAA;AAC5B,OACF;AAAA,MAEA,8BAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,UAAA,EAAY,WAAW,eAAA,EAAiB;AAAA;AAAA,GACrE;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Scheduler, ISchedulerDataRetriever, IScheduleInitialProps } from '@apia/scheduler-controller';
|
|
3
|
+
|
|
4
|
+
declare const SchedulerComponent: (({ controller, retriever, properties, getController, }: {
|
|
5
|
+
controller?: Scheduler;
|
|
6
|
+
retriever?: ISchedulerDataRetriever;
|
|
7
|
+
properties?: IScheduleInitialProps;
|
|
8
|
+
getController?: (ctrl: Scheduler) => void;
|
|
9
|
+
}) => react_jsx_runtime.JSX.Element | null) & {
|
|
10
|
+
displayName: string;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export { SchedulerComponent };
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useBreakpointIndex, Box, getVariant } from '@apia/theme';
|
|
3
|
+
import { Navigation } from './Navigation.js';
|
|
4
|
+
import { SchedTable } from './Table.js';
|
|
5
|
+
import { Mini } from './mini/Mini.js';
|
|
6
|
+
import { SchedulerTablePlugin } from './SchedulerTablePlugin.js';
|
|
7
|
+
import { observer } from 'mobx-react-lite';
|
|
8
|
+
import SelectedDateInfo from './SelectedDayInfo.js';
|
|
9
|
+
import { Scheduler } from '@apia/scheduler-controller';
|
|
10
|
+
import { createContext, useState, useContext } from 'react';
|
|
11
|
+
|
|
12
|
+
const SchedulerController = createContext(null);
|
|
13
|
+
function useScheduler() {
|
|
14
|
+
return useContext(SchedulerController);
|
|
15
|
+
}
|
|
16
|
+
const SchedulerComponent = observer(
|
|
17
|
+
({
|
|
18
|
+
controller,
|
|
19
|
+
retriever,
|
|
20
|
+
properties,
|
|
21
|
+
getController
|
|
22
|
+
}) => {
|
|
23
|
+
if (!controller && !(properties && retriever)) {
|
|
24
|
+
console.error(
|
|
25
|
+
"Need to create controller or pass retriever and properties"
|
|
26
|
+
);
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const [actualController] = useState(() => {
|
|
30
|
+
const ctrl = controller ?? new Scheduler(properties, retriever);
|
|
31
|
+
getController?.(ctrl);
|
|
32
|
+
ctrl.tableController.setPlugins((current) => {
|
|
33
|
+
if (!current.some((plugin) => plugin instanceof SchedulerTablePlugin)) {
|
|
34
|
+
current.push(new SchedulerTablePlugin());
|
|
35
|
+
}
|
|
36
|
+
return current;
|
|
37
|
+
});
|
|
38
|
+
return ctrl;
|
|
39
|
+
});
|
|
40
|
+
const breakPoint = useBreakpointIndex();
|
|
41
|
+
return /* @__PURE__ */ jsx(SchedulerController.Provider, { value: actualController, children: /* @__PURE__ */ jsxs(
|
|
42
|
+
Box,
|
|
43
|
+
{
|
|
44
|
+
...getVariant("layout.common.components.scheduler"),
|
|
45
|
+
className: "scheduler",
|
|
46
|
+
children: [
|
|
47
|
+
/* @__PURE__ */ jsx(Navigation, {}),
|
|
48
|
+
/* @__PURE__ */ jsx(SelectedDateInfo, {}),
|
|
49
|
+
breakPoint > 4 ? /* @__PURE__ */ jsx(SchedTable, {}) : /* @__PURE__ */ jsx(Mini, {})
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
) });
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
export { SchedulerComponent, SchedulerController, useScheduler };
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Scheduler/index.tsx"],"sourcesContent":["import { Box, getVariant, useBreakpointIndex } from '@apia/theme';\r\nimport { Navigation } from './Navigation';\r\nimport { SchedTable } from './Table';\r\nimport { Mini } from './mini/Mini';\r\nimport { SchedulerTablePlugin } from './SchedulerTablePlugin';\r\nimport { observer } from 'mobx-react-lite';\r\nimport SelectedDateInfo from './SelectedDayInfo';\r\nimport {\r\n IScheduleInitialProps,\r\n ISchedulerDataRetriever,\r\n Scheduler,\r\n} from '@apia/scheduler-controller';\r\nimport { createContext, useContext, useState } from 'react';\r\n\r\nexport const SchedulerController = createContext<Scheduler | null>(null);\r\n\r\nexport function useScheduler() {\r\n return useContext(SchedulerController)!;\r\n}\r\n\r\nexport const SchedulerComponent = observer(\r\n ({\r\n controller,\r\n retriever,\r\n properties,\r\n getController,\r\n }: {\r\n controller?: Scheduler;\r\n retriever?: ISchedulerDataRetriever;\r\n properties?: IScheduleInitialProps;\r\n getController?: (ctrl: Scheduler) => void;\r\n }) => {\r\n if (!controller && !(properties && retriever)) {\r\n console.error(\r\n 'Need to create controller or pass retriever and properties',\r\n );\r\n return null;\r\n }\r\n\r\n const [actualController] = useState(() => {\r\n const ctrl = controller ?? new Scheduler(properties!, retriever!);\r\n\r\n getController?.(ctrl);\r\n\r\n ctrl.tableController.setPlugins((current) => {\r\n if (!current.some((plugin) => plugin instanceof SchedulerTablePlugin)) {\r\n current.push(new SchedulerTablePlugin());\r\n }\r\n return current;\r\n });\r\n\r\n return ctrl;\r\n });\r\n\r\n const breakPoint = useBreakpointIndex();\r\n\r\n return (\r\n <SchedulerController.Provider value={actualController}>\r\n <Box\r\n {...getVariant('layout.common.components.scheduler')}\r\n className=\"scheduler\"\r\n >\r\n <Navigation />\r\n <SelectedDateInfo />\r\n {breakPoint > 4 ? <SchedTable /> : <Mini />}\r\n </Box>\r\n </SchedulerController.Provider>\r\n );\r\n },\r\n);\r\n"],"names":[],"mappings":";;;;;;;;;;;AAcO,MAAM,mBAAA,GAAsB,cAAgC,IAAI;AAEhE,SAAS,YAAA,GAAe;AAC7B,EAAA,OAAO,WAAW,mBAAmB,CAAA;AACvC;AAEO,MAAM,kBAAA,GAAqB,QAAA;AAAA,EAChC,CAAC;AAAA,IACC,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,KAKM;AACJ,IAAA,IAAI,CAAC,UAAA,IAAc,EAAE,UAAA,IAAc,SAAA,CAAA,EAAY;AAC7C,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA;AAGT,IAAA,MAAM,CAAC,gBAAgB,CAAA,GAAI,QAAA,CAAS,MAAM;AACxC,MAAA,MAAM,IAAA,GAAO,UAAA,IAAc,IAAI,SAAA,CAAU,YAAa,SAAU,CAAA;AAEhE,MAAA,aAAA,GAAgB,IAAI,CAAA;AAEpB,MAAA,IAAA,CAAK,eAAA,CAAgB,UAAA,CAAW,CAAC,OAAA,KAAY;AAC3C,QAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,YAAkB,oBAAoB,CAAA,EAAG;AACrE,UAAA,OAAA,CAAQ,IAAA,CAAK,IAAI,oBAAA,EAAsB,CAAA;AAAA;AAEzC,QAAA,OAAO,OAAA;AAAA,OACR,CAAA;AAED,MAAA,OAAO,IAAA;AAAA,KACR,CAAA;AAED,IAAA,MAAM,aAAa,kBAAA,EAAmB;AAEtC,IAAA,uBACE,GAAA,CAAC,mBAAA,CAAoB,QAAA,EAApB,EAA6B,OAAO,gBAAA,EACnC,QAAA,kBAAA,IAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACE,GAAG,WAAW,oCAAoC,CAAA;AAAA,QACnD,SAAA,EAAU,WAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,CAAA;AAAA,8BACX,gBAAA,EAAA,EAAiB,CAAA;AAAA,UACjB,aAAa,CAAA,mBAAI,GAAA,CAAC,UAAA,EAAA,EAAW,CAAA,uBAAM,IAAA,EAAA,EAAK;AAAA;AAAA;AAAA,KAC3C,EACF,CAAA;AAAA;AAGN;;;;"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, getVariant, Heading, Spinner } from '@apia/theme';
|
|
3
|
+
import { observer } from 'mobx-react-lite';
|
|
4
|
+
import Stage from './Stage.js';
|
|
5
|
+
import { getSpecificParent } from '@apia/util';
|
|
6
|
+
import { Icon } from '@apia/icons';
|
|
7
|
+
import { useScheduler } from '../index.js';
|
|
8
|
+
|
|
9
|
+
const Mini = observer(() => {
|
|
10
|
+
const controller = useScheduler();
|
|
11
|
+
const data = controller.getState().data;
|
|
12
|
+
const stage = controller.getState()?.stageData;
|
|
13
|
+
const stagesLength = controller.getState().stageData?.length;
|
|
14
|
+
return /* @__PURE__ */ jsxs(
|
|
15
|
+
Box,
|
|
16
|
+
{
|
|
17
|
+
...getVariant("layout.execution.form.fields.scheduler"),
|
|
18
|
+
className: "schedulerMini",
|
|
19
|
+
onKeyDown: (ev) => {
|
|
20
|
+
if (ev.key.toLowerCase() === "arrowleft") {
|
|
21
|
+
const stageName = getSpecificParent(
|
|
22
|
+
ev.target,
|
|
23
|
+
(current) => current.classList.contains("stage")
|
|
24
|
+
)?.dataset.name;
|
|
25
|
+
const stageIndex = stage.findIndex(
|
|
26
|
+
(current) => current.name === stageName
|
|
27
|
+
);
|
|
28
|
+
if (stageIndex <= 0)
|
|
29
|
+
return;
|
|
30
|
+
const nextStage = stage[stageIndex - 1]?.name;
|
|
31
|
+
const firstButton = document.querySelector(
|
|
32
|
+
`[data-name="${nextStage}"] .selected`
|
|
33
|
+
) || document.querySelector(
|
|
34
|
+
`[data-name="${nextStage}"] button:not(:disabled)`
|
|
35
|
+
);
|
|
36
|
+
if (firstButton)
|
|
37
|
+
firstButton.focus();
|
|
38
|
+
}
|
|
39
|
+
if (ev.key.toLowerCase() === "arrowright") {
|
|
40
|
+
const stageName = getSpecificParent(
|
|
41
|
+
ev.target,
|
|
42
|
+
(current) => current.classList.contains("stage")
|
|
43
|
+
)?.dataset.name;
|
|
44
|
+
const stageIndex = stage.findIndex(
|
|
45
|
+
(current) => current.name === stageName
|
|
46
|
+
);
|
|
47
|
+
if (stageIndex >= stage.length - 1)
|
|
48
|
+
return;
|
|
49
|
+
const nextStage = stage[stageIndex + 1]?.name;
|
|
50
|
+
const firstButton = document.querySelector(
|
|
51
|
+
`[data-name="${nextStage}"] .selected`
|
|
52
|
+
) || document.querySelector(
|
|
53
|
+
`[data-name="${nextStage}"] button:not(:disabled)`
|
|
54
|
+
);
|
|
55
|
+
if (firstButton)
|
|
56
|
+
firstButton.focus();
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
children: [
|
|
60
|
+
data?.weekNotConfigured && /* @__PURE__ */ jsx(Heading, { as: "h1", children: window.LBL_SCHED_WEEK_NOT_CONFIGURED }),
|
|
61
|
+
!data?.weekNotConfigured && data?.tskSchDay && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
62
|
+
/* @__PURE__ */ jsx(Stage, { stageIndex: 0 }),
|
|
63
|
+
stagesLength >= 2 && /* @__PURE__ */ jsx(
|
|
64
|
+
Icon,
|
|
65
|
+
{
|
|
66
|
+
name: "ArrowDown",
|
|
67
|
+
title: "",
|
|
68
|
+
className: "schedulerMini_faCaretDown"
|
|
69
|
+
}
|
|
70
|
+
),
|
|
71
|
+
/* @__PURE__ */ jsx(Stage, { stageIndex: 1 }),
|
|
72
|
+
stagesLength >= 3 && /* @__PURE__ */ jsx(
|
|
73
|
+
Icon,
|
|
74
|
+
{
|
|
75
|
+
name: "ArrowDown",
|
|
76
|
+
title: "",
|
|
77
|
+
className: "schedulerMini_faCaretDown"
|
|
78
|
+
}
|
|
79
|
+
),
|
|
80
|
+
/* @__PURE__ */ jsx(Stage, { stageIndex: 2 })
|
|
81
|
+
] }),
|
|
82
|
+
!data?.weekNotConfigured && !data?.tskSchDay && /* @__PURE__ */ jsx(Box, { className: "box_spinner", title: window.WAIT_A_SECOND, children: /* @__PURE__ */ jsx(Spinner, {}) })
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
export { Mini };
|
|
89
|
+
//# sourceMappingURL=Mini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mini.js","sources":["../../../src/Scheduler/mini/Mini.tsx"],"sourcesContent":["import { Box, getVariant, Heading, Spinner } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport Stage from './Stage';\r\nimport { getSpecificParent } from '@apia/util';\r\nimport { Icon } from '@apia/icons';\r\nimport { useScheduler } from '..';\r\n\r\nexport const Mini = observer(() => {\r\n const controller = useScheduler();\r\n const data = controller.getState().data;\r\n const stage = controller.getState()?.stageData;\r\n\r\n const stagesLength = controller.getState().stageData?.length;\r\n\r\n return (\r\n <Box\r\n {...getVariant('layout.execution.form.fields.scheduler')}\r\n className=\"schedulerMini\"\r\n onKeyDown={(ev) => {\r\n if (ev.key.toLowerCase() === 'arrowleft') {\r\n const stageName = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.classList.contains('stage'),\r\n )?.dataset.name as string;\r\n const stageIndex = stage.findIndex(\r\n (current) => current.name === stageName,\r\n );\r\n if (stageIndex <= 0) return;\r\n\r\n const nextStage = stage[stageIndex - 1]?.name;\r\n const firstButton =\r\n document.querySelector<HTMLElement>(\r\n `[data-name=\"${nextStage}\"] .selected`,\r\n ) ||\r\n document.querySelector<HTMLElement>(\r\n `[data-name=\"${nextStage}\"] button:not(:disabled)`,\r\n );\r\n if (firstButton) firstButton.focus();\r\n }\r\n if (ev.key.toLowerCase() === 'arrowright') {\r\n const stageName = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.classList.contains('stage'),\r\n )?.dataset.name as string;\r\n const stageIndex = stage.findIndex(\r\n (current) => current.name === stageName,\r\n );\r\n if (stageIndex >= stage.length - 1) return;\r\n\r\n const nextStage = stage[stageIndex + 1]?.name;\r\n const firstButton =\r\n document.querySelector<HTMLElement>(\r\n `[data-name=\"${nextStage}\"] .selected`,\r\n ) ||\r\n document.querySelector<HTMLElement>(\r\n `[data-name=\"${nextStage}\"] button:not(:disabled)`,\r\n );\r\n if (firstButton) firstButton.focus();\r\n }\r\n }}\r\n >\r\n {data?.weekNotConfigured && (\r\n <Heading as=\"h1\">{window.LBL_SCHED_WEEK_NOT_CONFIGURED}</Heading>\r\n )}\r\n {!data?.weekNotConfigured && data?.tskSchDay && (\r\n <>\r\n <Stage stageIndex={0} />\r\n {stagesLength >= 2 && (\r\n <Icon\r\n name=\"ArrowDown\"\r\n title=\"\"\r\n className=\"schedulerMini_faCaretDown\"\r\n />\r\n )}\r\n <Stage stageIndex={1} />\r\n {stagesLength >= 3 && (\r\n <Icon\r\n name=\"ArrowDown\"\r\n title=\"\"\r\n className=\"schedulerMini_faCaretDown\"\r\n />\r\n )}\r\n <Stage stageIndex={2} />\r\n </>\r\n )}\r\n {!data?.weekNotConfigured && !data?.tskSchDay && (\r\n <Box className=\"box_spinner\" title={window.WAIT_A_SECOND}>\r\n <Spinner />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n});\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box } from '@apia/theme';
|
|
4
|
+
import StageButton from './StageButton.js';
|
|
5
|
+
import { useMountTransition, isChild } from '@apia/util';
|
|
6
|
+
import { observer } from 'mobx-react-lite';
|
|
7
|
+
import { useScheduler } from '../index.js';
|
|
8
|
+
|
|
9
|
+
const Stage = observer(({ stageIndex }) => {
|
|
10
|
+
const controller = useScheduler();
|
|
11
|
+
const stage = controller.getState().stageData?.[stageIndex];
|
|
12
|
+
const [ref, setRef] = React.useState(null);
|
|
13
|
+
const focusStage = controller.getState().focusStage;
|
|
14
|
+
const isMounted = !!stage?.name;
|
|
15
|
+
const hasTransitionedIn = useMountTransition(isMounted, 1e3);
|
|
16
|
+
const doFocus = React.useCallback(() => {
|
|
17
|
+
if (!stage || stage.name === "daysList")
|
|
18
|
+
return;
|
|
19
|
+
if (!ref)
|
|
20
|
+
return;
|
|
21
|
+
const firstBtn = ref.querySelector(
|
|
22
|
+
".stage_btn:not(:disabled)"
|
|
23
|
+
);
|
|
24
|
+
if (firstBtn) {
|
|
25
|
+
firstBtn.focus();
|
|
26
|
+
}
|
|
27
|
+
}, [ref, stage]);
|
|
28
|
+
React.useEffect(() => {
|
|
29
|
+
if (focusStage === stage?.name)
|
|
30
|
+
doFocus();
|
|
31
|
+
}, [focusStage]);
|
|
32
|
+
React.useLayoutEffect(doFocus, [ref, stage]);
|
|
33
|
+
const handleFocus = React.useCallback(
|
|
34
|
+
(sum) => {
|
|
35
|
+
const focusedElement = document.activeElement;
|
|
36
|
+
if (isChild(focusedElement, (current) => current === ref) && ref) {
|
|
37
|
+
const buttons = [
|
|
38
|
+
...ref.querySelectorAll(".stage_btn:not(:disabled)")
|
|
39
|
+
];
|
|
40
|
+
if (buttons) {
|
|
41
|
+
const index = buttons.findIndex(
|
|
42
|
+
(current) => current === focusedElement
|
|
43
|
+
);
|
|
44
|
+
if (buttons[index] === focusedElement && buttons[index - sum]) {
|
|
45
|
+
buttons[index - sum].focus();
|
|
46
|
+
controller.setState({ focusStage: stage?.name });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
[controller, ref, stage?.name]
|
|
52
|
+
);
|
|
53
|
+
const handleKeyDown = React.useCallback(
|
|
54
|
+
(ev) => {
|
|
55
|
+
if (ev.key.toLowerCase() === "arrowdown") {
|
|
56
|
+
ev.preventDefault();
|
|
57
|
+
handleFocus(-1);
|
|
58
|
+
}
|
|
59
|
+
if (ev.key.toLowerCase() === "arrowup") {
|
|
60
|
+
ev.preventDefault();
|
|
61
|
+
handleFocus(1);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
[handleFocus]
|
|
65
|
+
);
|
|
66
|
+
return stage ? /* @__PURE__ */ jsx(
|
|
67
|
+
Box,
|
|
68
|
+
{
|
|
69
|
+
"data-name": stage?.name,
|
|
70
|
+
className: `stage ${hasTransitionedIn && "in"} ${isMounted && "visible"}`,
|
|
71
|
+
ref: setRef,
|
|
72
|
+
onKeyDown: handleKeyDown,
|
|
73
|
+
children: (hasTransitionedIn || isMounted) && stage?.buttons?.map((elem) => {
|
|
74
|
+
return /* @__PURE__ */ jsx(StageButton, { button: elem }, elem.title);
|
|
75
|
+
})
|
|
76
|
+
}
|
|
77
|
+
) : null;
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
export { Stage as default };
|
|
81
|
+
//# sourceMappingURL=Stage.js.map
|