@apia/scheduler-component 5.0.0 → 5.0.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.
@@ -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 &lt;\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 &gt;\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":";;;;;;;;;;AAWO,MAAM,aAA0B,aAAA;AAevC,MAAM,YAAA,GAAe,QAAA,CAAS,CAAC,EAAE,MAAK,KAAsB;AAC1D,EAAA,MAAM,aAAa,YAAA,EAAa;AAChC,EAAA,MAAM,KAAA,GAAQ,WAAW,QAAA,EAAS;AAClC,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAS,SAAS,CAAA;AAAA;AAEhC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA;AAC7C,EAAA,IAAI,CAAC,KAAA;AAAO,IAAA;AACZ,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,YAAA,KAAiB,UAAA,CAAW,MAAA;AACrD,EAAA,MAAM,YAAY,CAAC,UAAA,CAAY,SAAA,GAC3B,CAAA,EAAG,MAAM,UAAA,CAAY,OAAA,EAAS,UAAU,CAAA,CACrC,IAAI,MAAA,CAAO,UAAA,CAAY,SAAS,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,CAC5C,MAAA,CAAO,UAAU,CAAC,IACnB,UAAA,CAAY,IAAA,CAAK,MAAM,CAAA,EAAG,EAAE,KAAK,EACnC,CAAA,CAAA,EAAI,UAAA,CAAY,IAAA,CAAK,MAAM,CAAC,CAAA,IAAK,EAAE,CAAA,EAAA,EAAK,MAAA,CAAO,UAAU,CAAC;AAAA,cAAA,CAAA,GAE1D,GAAG,KAAA,CAAM,UAAA,CAAY,SAAS,UAAU,CAAA,CACrC,IAAI,MAAA,CAAO,UAAA,CAAY,SAAS,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,CAC5C,MAAA,CAAO,UAAU,CAAC,CAAA,CAAA,EAAI,WAAY,IAAA,CAAK,KAAA;AAAA,IACxC,CAAA;AAAA,IACA;AAAA,GACD,CAAA,CAAA,EAAI,UAAA,CAAY,KAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA;AAAA,IACjC,UAAA,CAAY;AAAA,GACb;AAAA,cAAA,CAAA;AAGL,EAAA,MAAM,KAAA,GAAQ,CAAC,UAAA,CAAY,SAAA,GACvB,EAAA,GACA,GAAG,KAAA,CAAM,UAAA,CAAY,OAAA,EAAS,UAAU,CAAA,CACrC,GAAA,CAAI,OAAO,UAAA,CAAY,SAAS,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,CAC5C,OAAO,UAAU,CAAC,CAAA,CAAA,EAAI,UAAA,CAAY,IAAA,CAAK,KAAA;AAAA,IACxC,CAAA;AAAA,IACA;AAAA,GACD,CAAA,CAAA,EAAI,UAAA,CAAY,KAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA;AAAA,IAChC,SAAA,CAAU,MAAM,YAAA,CAAa,iBAAiB,IAC1C,CAAA,EAAA,EAAK,UAAA,CAAY,mBAAmB,CAAA,CAAA,GACpC;AAAA,GACL;AAAA,cAAA,CAAA;AAGL,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,eAAA,EACT,UAAA,CAAY,qBAAA,GAAwB,kBAAkB,EACxD,CAAA,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,CAAA;AAAA,YACV,KAAA;AAAA,YACA,YAAA,EAAY,SAAA;AAAA,YACZ,QAAA,EAAU,CAAC,UAAA,CAAY,SAAA;AAAA,YACtB,GAAG,WAAW,iBAAiB,CAAA;AAAA,YAChC,OAAA,EAAS,MACP,UAAA,CAAW,SAAA,CAAU,gBAAA,CAAiB;AAAA,cACpC,QAAQ,UAAA,CAAW,MAAA;AAAA,cACnB,SAAS,UAAA,CAAW,OAAA;AAAA,cACpB,WAAW,UAAA,CAAW,SAAA;AAAA,cACtB,MAAM,UAAA,CAAW,IAAA;AAAA,cACjB,sBAAsB,UAAA,CAAW,oBAAA;AAAA,cACjC;AAAA,aACD,CAAA;AAAA,YAEH,SAAA,EAAW,CAAA,gBAAA,CAAA;AAAA,YAEV,QAAA,EAAA;AAAA,cAAA,UAAA,oBAAc,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,EAAA,EAAG,MAAK,OAAA,EAAQ,CAAA;AAAA,cAC1C,CAAC,UAAA,IACA,UAAA,CAAY,SAAA,IACZ,SAAA,CAAU,KAAA,CAAM,YAAA,CAAa,iBAAiB,CAAA,IAC9C,MAAA,CAAO,UAAA,CAAY,mBAAmB;AAAA;AAAA;AAAA,SAC1C;AAAA,QAEC,WAAY,oBAAA,EAAsB,IAAA,KAAS,SAAA,IAC1C,QAAA,CAAS,SAAS,OAAA,CAAQ,SAAA;AAAA,UACxB,KAAA,CAAM,aAAa,cAAA,IAAkB;AAAA,SACvC,oBACE,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,EAAA;AAAA,YACN,IAAA,EAAK,QAAA;AAAA,YACJ,GAAG,WAAW,iBAAiB,CAAA;AAAA,YAChC,WAAW,CAAA,WAAA,EAAc,CAAC,UAAA,CAAY,SAAA,GAAY,6BAA6B,EAAE,CAAA,CAAA;AAAA,YACjF,SAAS,YAAY;AACnB,cAAA,MAAM,SAAA,GAAY,MAAM,UAAA,CAAW,QAAA;AAAA,gBACjC,UAAA,CAAW,SAAA;AAAA,gBACX,UAAA,CAAW;AAAA,eACb;AAEA,cAAA,QAAA,CAAS,QAAA,CAAS,OAAO,IAAA,CAAK;AAAA,gBAC5B,KAAA,EAAO,QAAA,CAAS,uBAAuB,CAAA,CAAE,IAAA;AAAA,gBACzC,QAAA,kBAAU,GAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAsB,CAAA;AAAA,gBAChD,OAAA,EAAS;AAAA,eACV,CAAA;AAAA;AACH;AAAA;AACF;AAAA;AAAA,GAEN;AAEJ,CAAC,CAAA;AAEM,MAAM,oBAAA,CAA4C;AAAA,EACvD,YAAA,GAAe;AACb,IAAA,OAAO;AAAA,MACL,IAAA,EAAM;AAAA,KACR;AAAA;AAEJ;;;;"}
@@ -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