@feedmepos/mf-hrm-portal 2.2.5-dev.3 → 2.2.5-dev.4
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/{ApprovalCodeList-BuIPVwsl.js → ApprovalCodeList-D0B_X3Sf.js} +4 -4
- package/dist/{AuditLogList-l3fv_3jD.js → AuditLogList-D9anf4YQ.js} +18 -17
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BYY9dMSQ.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-4oENMRO3.js} +2 -2
- package/dist/{EmployeeList-HjNxPBcN.js → EmployeeList-DREDu3Ou.js} +29 -27
- package/dist/{FormItem.vue_vue_type_script_setup_true_lang-DPT2FoIc.js → FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js} +1 -1
- package/dist/{GrantUserList-B91EBl82.js → GrantUserList-CLDshEN9.js} +5 -5
- package/dist/{Main-DeqJPnm7.js → Main-DtMaG42L.js} +2 -2
- package/dist/{Main-TuG-h_qY.js → Main-QhQxU593.js} +5 -5
- package/dist/{Main-C_tQuQsU.js → Main-lqlb8tPw.js} +9 -9
- package/dist/{PermissionSetList-qVaYkiQ4.js → PermissionSetList-BK8yBpJJ.js} +11 -10
- package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DcpNr0M4.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-uSdvH81B.js} +676 -675
- package/dist/{RoleList-CM0m4nya.js → RoleList-D6AX6BqB.js} +7 -7
- package/dist/ScheduleGeneralPage-DAECTCDu.js +242 -0
- package/dist/SchedulePage-CdFR7JuO.js +10751 -0
- package/dist/SchedulePositionPage-DTtKg0sx.js +220 -0
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-BiuUrr50.js +199 -0
- package/dist/SelectFilter-CG13h83-.js +264 -0
- package/dist/{TeamMemberList-GkMQuyoE.js → TeamMemberList-BM5JoR6J.js} +36 -34
- package/dist/{TimesheetList-Ci2r3AOF.js → TimesheetList-Ch_f_PD5.js} +54 -53
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-QbQ7tbJP.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-CxqxqwyD.js} +2 -2
- package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
- package/dist/{app-MXDLzWd6.js → app-tDHL6k4G.js} +2884 -2299
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-DRqYbe11.js → dayjs.min-B_XWc0Hu.js} +1 -1
- package/dist/employee-Bs_2vqBY.js +139 -0
- package/dist/index-Cz2b95YF.js +70 -0
- package/dist/{iteration-CtN8sidV.js → index-jxRluZiW.js} +698 -726
- package/dist/iteration-CcXrOMQe.js +30 -0
- package/dist/{lodash-BwY7earz.js → lodash-D5vM3paU.js} +1 -1
- package/dist/{role-Ds1yN3BN.js → role-7ccipEEe.js} +4 -3
- package/dist/{rule-DkG2eGGH.js → rule-7faruCdz.js} +71 -70
- package/dist/src/api/schedule/index.d.ts +44 -0
- package/dist/src/components/layout/AppSidebar.vue.d.ts +2 -0
- package/dist/src/components/layout/PortalShell.vue.d.ts +12 -0
- package/dist/src/components/layout/withShell.d.ts +14 -0
- package/dist/src/router/shared.d.ts +4 -1
- package/dist/src/types/schedule.d.ts +232 -0
- package/dist/src/views/scheduling/ScheduleGeneralPage.vue.d.ts +4 -0
- package/dist/src/views/scheduling/SchedulePage.vue.d.ts +4 -0
- package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +4 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeIdentitySection.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeModeStep.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeePosAccessSection.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeePositionsSection.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeSchedulingSection.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddPickPopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +22 -0
- package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +34 -0
- package/dist/src/views/scheduling/components/ScheduleAssignEmployeePopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAutoScheduleModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleChangeEmployeeModal.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +24 -0
- package/dist/src/views/scheduling/components/ScheduleCostRail.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleDateRangePopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleDayNotePopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleDemandRow.vue.d.ts +23 -0
- package/dist/src/views/scheduling/components/ScheduleDemandSheet.vue.d.ts +10 -0
- package/dist/src/views/scheduling/components/ScheduleDotsIcon.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleEmployeeDetailPanel.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleEmployeeIdentity.vue.d.ts +17 -0
- package/dist/src/views/scheduling/components/ScheduleFilterBar.vue.d.ts +18 -0
- package/dist/src/views/scheduling/components/ScheduleGapPopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleGridHeader.vue.d.ts +18 -0
- package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleLegendBar.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +14 -0
- package/dist/src/views/scheduling/components/SchedulePdfPreview.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/SchedulePublishModal.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleReviewBar.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +24 -0
- package/dist/src/views/scheduling/components/ScheduleSelectExistingEmployeeModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +31 -0
- package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleShiftImpact.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +14 -0
- package/dist/src/views/scheduling/components/ScheduleShiftRepeatDaysRow.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleShiftSegmentsEditor.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleShiftWhoPicker.vue.d.ts +25 -0
- package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +14 -0
- package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +16 -0
- package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +54 -0
- package/dist/src/views/scheduling/components/ScheduleStatsRow.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleSwapShiftsModal.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleTimePickerPopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +22 -0
- package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +67 -0
- package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +38 -0
- package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +29 -0
- package/dist/src/views/scheduling/composables/schedule-employee-profile.d.ts +7 -0
- package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +14 -0
- package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +10 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +86 -0
- package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +66 -0
- package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +77 -0
- package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +50 -0
- package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +113 -0
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +136 -0
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +415 -0
- package/dist/src/views/scheduling/composables/useScheduleCellState.d.ts +27 -0
- package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +17 -0
- package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +43 -0
- package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +48 -0
- package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +82 -0
- package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +68 -0
- package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +45 -0
- package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +139 -0
- package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +22 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +32 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeProfile.d.ts +16 -0
- package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +26 -0
- package/dist/src/views/scheduling/composables/useScheduleFilterBar.d.ts +14 -0
- package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +80 -0
- package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +20 -0
- package/dist/src/views/scheduling/composables/useScheduleLegend.d.ts +15 -0
- package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +35 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +179 -0
- package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +23 -0
- package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +19 -0
- package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +32 -0
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +91 -0
- package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +183 -0
- package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +54 -0
- package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +225 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +174 -0
- package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +20 -0
- package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +25 -0
- package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +44 -0
- package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +10 -0
- package/dist/src/views/scheduling/data.d.ts +105 -0
- package/dist/src/views/scheduling/locales/index.d.ts +496 -0
- package/dist/src/views/scheduling/schedule-store.d.ts +116 -0
- package/dist/src/views/scheduling/types.d.ts +311 -0
- package/dist/src/views/team/components/PortalConditionForm.vue.d.ts +2 -2
- package/dist/src/views/team/condition-builders/ConditionBuilderForm.vue.d.ts +2 -2
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useReportPermissions-B_YakoB-.js → useReportPermissions-FieO4EAD.js} +3 -3
- package/dist/useScheduleOutlet-CmIG5dwQ.js +557 -0
- package/dist/useSchedulePositions-DPVAgdB2.js +103 -0
- package/package.json +1 -1
- package/dist/SelectFilter-ATOm0hdn.js +0 -269
- package/dist/employee-zsQMMIVM.js +0 -204
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
import type { Employee, OpenShift, PendingChange, ScheduleStatusInfo, ScheduleVersion, ScheduleVersionSnapshot, Section, WorkSlot } from '../types';
|
|
2
|
+
import { RANGE_LEN } from './schedule-week-cache';
|
|
3
|
+
import { contractCapFor, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
|
|
4
|
+
export { contractCapFor, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf, };
|
|
5
|
+
export { RANGE_LEN };
|
|
6
|
+
export type ScheduleGranularity = 'day' | 'week';
|
|
7
|
+
export declare function useScheduleBoard(handlers?: {
|
|
8
|
+
onPersistError?: (message: string) => void;
|
|
9
|
+
}): {
|
|
10
|
+
dayNote: (dayIdx: number) => import("../types").ScheduleDayNote | null;
|
|
11
|
+
setDayNote: (dayIdx: number, title: string, desc: string) => void;
|
|
12
|
+
clearDayNote: (dayIdx: number) => void;
|
|
13
|
+
toggleClosed: (dayIdx: number) => {
|
|
14
|
+
closed: boolean;
|
|
15
|
+
rostered: number;
|
|
16
|
+
};
|
|
17
|
+
isManuallyClosed: (dayIdx: number) => boolean;
|
|
18
|
+
isStandingClosedWeekday: (dayIdx: number) => boolean;
|
|
19
|
+
holidayName: (dayIdx: number) => string | null;
|
|
20
|
+
holidayIsAuto: (dayIdx: number) => boolean;
|
|
21
|
+
isPublicHoliday: (dayIdx: number) => boolean;
|
|
22
|
+
holidayRateApplies: (dayIdx: number) => boolean;
|
|
23
|
+
setHolidayNormal: (dayIdx: number, toNormal: boolean) => void;
|
|
24
|
+
setPublicHoliday: (dayIdx: number, on: boolean) => void;
|
|
25
|
+
otRateOn: (dayIdx: number) => number;
|
|
26
|
+
regularRateOn: (dayIdx: number) => number;
|
|
27
|
+
isHoliday: (dayIdx: number) => boolean;
|
|
28
|
+
employees: import("vue").Ref<{
|
|
29
|
+
id: number;
|
|
30
|
+
name: string;
|
|
31
|
+
role: string;
|
|
32
|
+
initials: string;
|
|
33
|
+
color: string;
|
|
34
|
+
weekHours: number;
|
|
35
|
+
pct: number;
|
|
36
|
+
contractHours?: number | undefined;
|
|
37
|
+
rate: number;
|
|
38
|
+
positions: string[];
|
|
39
|
+
shifts: ({
|
|
40
|
+
start: string;
|
|
41
|
+
end: string;
|
|
42
|
+
role: string;
|
|
43
|
+
status: import("../types").ShiftStatus;
|
|
44
|
+
clock?: {
|
|
45
|
+
in: string | null;
|
|
46
|
+
out: string | null;
|
|
47
|
+
status: "on-time" | "late" | "early-out" | "absent";
|
|
48
|
+
} | undefined;
|
|
49
|
+
conflict?: boolean | undefined;
|
|
50
|
+
conflictReason?: string | undefined;
|
|
51
|
+
openId?: number | undefined;
|
|
52
|
+
breakMins?: number | undefined;
|
|
53
|
+
assignmentId?: string | undefined;
|
|
54
|
+
} | {
|
|
55
|
+
timeOff: "approved" | "pending";
|
|
56
|
+
reason: string;
|
|
57
|
+
half?: boolean | undefined;
|
|
58
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
59
|
+
appliedOn?: string | undefined;
|
|
60
|
+
note?: string | undefined;
|
|
61
|
+
cert?: {
|
|
62
|
+
name: string;
|
|
63
|
+
size: string;
|
|
64
|
+
} | null | undefined;
|
|
65
|
+
bal?: {
|
|
66
|
+
type: string;
|
|
67
|
+
entitled: number;
|
|
68
|
+
used: number;
|
|
69
|
+
} | undefined;
|
|
70
|
+
} | {
|
|
71
|
+
start: string;
|
|
72
|
+
end: string;
|
|
73
|
+
role: string;
|
|
74
|
+
status: import("../types").ShiftStatus;
|
|
75
|
+
clock?: {
|
|
76
|
+
in: string | null;
|
|
77
|
+
out: string | null;
|
|
78
|
+
status: "on-time" | "late" | "early-out" | "absent";
|
|
79
|
+
} | undefined;
|
|
80
|
+
conflict?: boolean | undefined;
|
|
81
|
+
conflictReason?: string | undefined;
|
|
82
|
+
openId?: number | undefined;
|
|
83
|
+
breakMins?: number | undefined;
|
|
84
|
+
assignmentId?: string | undefined;
|
|
85
|
+
}[] | null)[];
|
|
86
|
+
remarks: {
|
|
87
|
+
author: string;
|
|
88
|
+
date: string;
|
|
89
|
+
type: "note" | "warning" | "praise";
|
|
90
|
+
text: string;
|
|
91
|
+
}[];
|
|
92
|
+
section: string;
|
|
93
|
+
compGroup?: string | undefined;
|
|
94
|
+
mobile?: string | undefined;
|
|
95
|
+
dial?: string | undefined;
|
|
96
|
+
locations?: string[] | undefined;
|
|
97
|
+
payBasis?: "hourly" | "monthly" | undefined;
|
|
98
|
+
payAmount?: number | undefined;
|
|
99
|
+
maxHours?: number | undefined;
|
|
100
|
+
maxOtHours?: number | undefined;
|
|
101
|
+
otAfterDaily?: number | undefined;
|
|
102
|
+
preferences?: string[] | undefined;
|
|
103
|
+
seniority?: "senior" | "junior" | "" | undefined;
|
|
104
|
+
availDays?: boolean[] | undefined;
|
|
105
|
+
availHours?: {
|
|
106
|
+
from: string;
|
|
107
|
+
to: string;
|
|
108
|
+
}[] | undefined;
|
|
109
|
+
passcode?: string | undefined;
|
|
110
|
+
masterUser?: boolean | undefined;
|
|
111
|
+
}[], Employee[] | {
|
|
112
|
+
id: number;
|
|
113
|
+
name: string;
|
|
114
|
+
role: string;
|
|
115
|
+
initials: string;
|
|
116
|
+
color: string;
|
|
117
|
+
weekHours: number;
|
|
118
|
+
pct: number;
|
|
119
|
+
contractHours?: number | undefined;
|
|
120
|
+
rate: number;
|
|
121
|
+
positions: string[];
|
|
122
|
+
shifts: ({
|
|
123
|
+
start: string;
|
|
124
|
+
end: string;
|
|
125
|
+
role: string;
|
|
126
|
+
status: import("../types").ShiftStatus;
|
|
127
|
+
clock?: {
|
|
128
|
+
in: string | null;
|
|
129
|
+
out: string | null;
|
|
130
|
+
status: "on-time" | "late" | "early-out" | "absent";
|
|
131
|
+
} | undefined;
|
|
132
|
+
conflict?: boolean | undefined;
|
|
133
|
+
conflictReason?: string | undefined;
|
|
134
|
+
openId?: number | undefined;
|
|
135
|
+
breakMins?: number | undefined;
|
|
136
|
+
assignmentId?: string | undefined;
|
|
137
|
+
} | {
|
|
138
|
+
timeOff: "approved" | "pending";
|
|
139
|
+
reason: string;
|
|
140
|
+
half?: boolean | undefined;
|
|
141
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
142
|
+
appliedOn?: string | undefined;
|
|
143
|
+
note?: string | undefined;
|
|
144
|
+
cert?: {
|
|
145
|
+
name: string;
|
|
146
|
+
size: string;
|
|
147
|
+
} | null | undefined;
|
|
148
|
+
bal?: {
|
|
149
|
+
type: string;
|
|
150
|
+
entitled: number;
|
|
151
|
+
used: number;
|
|
152
|
+
} | undefined;
|
|
153
|
+
} | {
|
|
154
|
+
start: string;
|
|
155
|
+
end: string;
|
|
156
|
+
role: string;
|
|
157
|
+
status: import("../types").ShiftStatus;
|
|
158
|
+
clock?: {
|
|
159
|
+
in: string | null;
|
|
160
|
+
out: string | null;
|
|
161
|
+
status: "on-time" | "late" | "early-out" | "absent";
|
|
162
|
+
} | undefined;
|
|
163
|
+
conflict?: boolean | undefined;
|
|
164
|
+
conflictReason?: string | undefined;
|
|
165
|
+
openId?: number | undefined;
|
|
166
|
+
breakMins?: number | undefined;
|
|
167
|
+
assignmentId?: string | undefined;
|
|
168
|
+
}[] | null)[];
|
|
169
|
+
remarks: {
|
|
170
|
+
author: string;
|
|
171
|
+
date: string;
|
|
172
|
+
type: "note" | "warning" | "praise";
|
|
173
|
+
text: string;
|
|
174
|
+
}[];
|
|
175
|
+
section: string;
|
|
176
|
+
compGroup?: string | undefined;
|
|
177
|
+
mobile?: string | undefined;
|
|
178
|
+
dial?: string | undefined;
|
|
179
|
+
locations?: string[] | undefined;
|
|
180
|
+
payBasis?: "hourly" | "monthly" | undefined;
|
|
181
|
+
payAmount?: number | undefined;
|
|
182
|
+
maxHours?: number | undefined;
|
|
183
|
+
maxOtHours?: number | undefined;
|
|
184
|
+
otAfterDaily?: number | undefined;
|
|
185
|
+
preferences?: string[] | undefined;
|
|
186
|
+
seniority?: "senior" | "junior" | "" | undefined;
|
|
187
|
+
availDays?: boolean[] | undefined;
|
|
188
|
+
availHours?: {
|
|
189
|
+
from: string;
|
|
190
|
+
to: string;
|
|
191
|
+
}[] | undefined;
|
|
192
|
+
passcode?: string | undefined;
|
|
193
|
+
masterUser?: boolean | undefined;
|
|
194
|
+
}[]>;
|
|
195
|
+
sections: import("vue").Ref<{
|
|
196
|
+
id: string;
|
|
197
|
+
label: string;
|
|
198
|
+
roles: string[];
|
|
199
|
+
system?: boolean | undefined;
|
|
200
|
+
}[], Section[] | {
|
|
201
|
+
id: string;
|
|
202
|
+
label: string;
|
|
203
|
+
roles: string[];
|
|
204
|
+
system?: boolean | undefined;
|
|
205
|
+
}[]>;
|
|
206
|
+
openShifts: import("vue").Ref<{
|
|
207
|
+
id: number;
|
|
208
|
+
dayIdx: number;
|
|
209
|
+
position: string;
|
|
210
|
+
required: number;
|
|
211
|
+
filledBy: number | null;
|
|
212
|
+
sen?: "junior" | "senior" | undefined;
|
|
213
|
+
empType?: "full" | "part" | undefined;
|
|
214
|
+
name?: string | undefined;
|
|
215
|
+
start: string;
|
|
216
|
+
end: string;
|
|
217
|
+
breakMins?: number | undefined;
|
|
218
|
+
}[], OpenShift[] | {
|
|
219
|
+
id: number;
|
|
220
|
+
dayIdx: number;
|
|
221
|
+
position: string;
|
|
222
|
+
required: number;
|
|
223
|
+
filledBy: number | null;
|
|
224
|
+
sen?: "junior" | "senior" | undefined;
|
|
225
|
+
empType?: "full" | "part" | undefined;
|
|
226
|
+
name?: string | undefined;
|
|
227
|
+
start: string;
|
|
228
|
+
end: string;
|
|
229
|
+
breakMins?: number | undefined;
|
|
230
|
+
}[]>;
|
|
231
|
+
rangeStart: import("vue").Ref<Date, Date>;
|
|
232
|
+
weekOffset: import("vue").ComputedRef<number>;
|
|
233
|
+
peekWeek: (offset: number) => import("./schedule-week-cache").WeekBucket;
|
|
234
|
+
isRecentlySaved: (empId: number, dayIdx: number) => boolean;
|
|
235
|
+
isWeekLocked: (offset?: number) => boolean;
|
|
236
|
+
dayLocked: (dayIdx: number) => boolean;
|
|
237
|
+
pendingChanges: import("vue").Ref<{
|
|
238
|
+
empId: number;
|
|
239
|
+
dayIdx: number;
|
|
240
|
+
kind: "add" | "change" | "remove";
|
|
241
|
+
label: string;
|
|
242
|
+
}[], PendingChange[] | {
|
|
243
|
+
empId: number;
|
|
244
|
+
dayIdx: number;
|
|
245
|
+
kind: "add" | "change" | "remove";
|
|
246
|
+
label: string;
|
|
247
|
+
}[]>;
|
|
248
|
+
unpublishedChanges: import("vue").ComputedRef<PendingChange[]>;
|
|
249
|
+
persistPublish: (items: Array<{
|
|
250
|
+
empId: number;
|
|
251
|
+
dayIdx: number;
|
|
252
|
+
slot: WorkSlot;
|
|
253
|
+
}>) => Promise<void>;
|
|
254
|
+
recordChange: (empId: number, dayIdx: number, kind: PendingChange["kind"], label: string) => void;
|
|
255
|
+
scheduleVersions: import("vue").Ref<{
|
|
256
|
+
v: number;
|
|
257
|
+
at: Date;
|
|
258
|
+
by: string;
|
|
259
|
+
note: string;
|
|
260
|
+
changeCount: number;
|
|
261
|
+
staffAffected: number;
|
|
262
|
+
snapshot: {
|
|
263
|
+
id: number;
|
|
264
|
+
name: string;
|
|
265
|
+
weekHours: number;
|
|
266
|
+
shifts: ({
|
|
267
|
+
start: string;
|
|
268
|
+
end: string;
|
|
269
|
+
role: string;
|
|
270
|
+
status: import("../types").ShiftStatus;
|
|
271
|
+
clock?: {
|
|
272
|
+
in: string | null;
|
|
273
|
+
out: string | null;
|
|
274
|
+
status: "on-time" | "late" | "early-out" | "absent";
|
|
275
|
+
} | undefined;
|
|
276
|
+
conflict?: boolean | undefined;
|
|
277
|
+
conflictReason?: string | undefined;
|
|
278
|
+
openId?: number | undefined;
|
|
279
|
+
breakMins?: number | undefined;
|
|
280
|
+
assignmentId?: string | undefined;
|
|
281
|
+
} | {
|
|
282
|
+
timeOff: "approved" | "pending";
|
|
283
|
+
reason: string;
|
|
284
|
+
half?: boolean | undefined;
|
|
285
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
286
|
+
appliedOn?: string | undefined;
|
|
287
|
+
note?: string | undefined;
|
|
288
|
+
cert?: {
|
|
289
|
+
name: string;
|
|
290
|
+
size: string;
|
|
291
|
+
} | null | undefined;
|
|
292
|
+
bal?: {
|
|
293
|
+
type: string;
|
|
294
|
+
entitled: number;
|
|
295
|
+
used: number;
|
|
296
|
+
} | undefined;
|
|
297
|
+
} | {
|
|
298
|
+
start: string;
|
|
299
|
+
end: string;
|
|
300
|
+
role: string;
|
|
301
|
+
status: import("../types").ShiftStatus;
|
|
302
|
+
clock?: {
|
|
303
|
+
in: string | null;
|
|
304
|
+
out: string | null;
|
|
305
|
+
status: "on-time" | "late" | "early-out" | "absent";
|
|
306
|
+
} | undefined;
|
|
307
|
+
conflict?: boolean | undefined;
|
|
308
|
+
conflictReason?: string | undefined;
|
|
309
|
+
openId?: number | undefined;
|
|
310
|
+
breakMins?: number | undefined;
|
|
311
|
+
assignmentId?: string | undefined;
|
|
312
|
+
}[] | null)[];
|
|
313
|
+
}[];
|
|
314
|
+
}[], ScheduleVersion[] | {
|
|
315
|
+
v: number;
|
|
316
|
+
at: Date;
|
|
317
|
+
by: string;
|
|
318
|
+
note: string;
|
|
319
|
+
changeCount: number;
|
|
320
|
+
staffAffected: number;
|
|
321
|
+
snapshot: {
|
|
322
|
+
id: number;
|
|
323
|
+
name: string;
|
|
324
|
+
weekHours: number;
|
|
325
|
+
shifts: ({
|
|
326
|
+
start: string;
|
|
327
|
+
end: string;
|
|
328
|
+
role: string;
|
|
329
|
+
status: import("../types").ShiftStatus;
|
|
330
|
+
clock?: {
|
|
331
|
+
in: string | null;
|
|
332
|
+
out: string | null;
|
|
333
|
+
status: "on-time" | "late" | "early-out" | "absent";
|
|
334
|
+
} | undefined;
|
|
335
|
+
conflict?: boolean | undefined;
|
|
336
|
+
conflictReason?: string | undefined;
|
|
337
|
+
openId?: number | undefined;
|
|
338
|
+
breakMins?: number | undefined;
|
|
339
|
+
assignmentId?: string | undefined;
|
|
340
|
+
} | {
|
|
341
|
+
timeOff: "approved" | "pending";
|
|
342
|
+
reason: string;
|
|
343
|
+
half?: boolean | undefined;
|
|
344
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
345
|
+
appliedOn?: string | undefined;
|
|
346
|
+
note?: string | undefined;
|
|
347
|
+
cert?: {
|
|
348
|
+
name: string;
|
|
349
|
+
size: string;
|
|
350
|
+
} | null | undefined;
|
|
351
|
+
bal?: {
|
|
352
|
+
type: string;
|
|
353
|
+
entitled: number;
|
|
354
|
+
used: number;
|
|
355
|
+
} | undefined;
|
|
356
|
+
} | {
|
|
357
|
+
start: string;
|
|
358
|
+
end: string;
|
|
359
|
+
role: string;
|
|
360
|
+
status: import("../types").ShiftStatus;
|
|
361
|
+
clock?: {
|
|
362
|
+
in: string | null;
|
|
363
|
+
out: string | null;
|
|
364
|
+
status: "on-time" | "late" | "early-out" | "absent";
|
|
365
|
+
} | undefined;
|
|
366
|
+
conflict?: boolean | undefined;
|
|
367
|
+
conflictReason?: string | undefined;
|
|
368
|
+
openId?: number | undefined;
|
|
369
|
+
breakMins?: number | undefined;
|
|
370
|
+
assignmentId?: string | undefined;
|
|
371
|
+
}[] | null)[];
|
|
372
|
+
}[];
|
|
373
|
+
}[]>;
|
|
374
|
+
lastUpdatedAt: import("vue").Ref<Date | null, Date | null>;
|
|
375
|
+
lastPublishedAt: import("vue").Ref<Date | null, Date | null>;
|
|
376
|
+
pushVersion: (note: string, opts?: Partial<ScheduleVersion>) => ScheduleVersion;
|
|
377
|
+
snapshotSchedule: () => ScheduleVersionSnapshot[];
|
|
378
|
+
scheduleStatus: import("vue").ComputedRef<ScheduleStatusInfo>;
|
|
379
|
+
conflictCount: () => number;
|
|
380
|
+
granularity: import("vue").Ref<ScheduleGranularity, ScheduleGranularity>;
|
|
381
|
+
focusDayIdx: import("vue").Ref<number, number>;
|
|
382
|
+
setGranularity: (value: ScheduleGranularity) => void;
|
|
383
|
+
dayDates: import("vue").ComputedRef<Date[]>;
|
|
384
|
+
dayLabels: import("vue").ComputedRef<string[]>;
|
|
385
|
+
visibleDayIndices: import("vue").ComputedRef<number[]>;
|
|
386
|
+
visibleDays: import("vue").ComputedRef<{
|
|
387
|
+
dayIdx: number;
|
|
388
|
+
date: Date;
|
|
389
|
+
}[]>;
|
|
390
|
+
rangeLabel: import("vue").ComputedRef<string>;
|
|
391
|
+
isToday: (dayIdx: number) => boolean;
|
|
392
|
+
dateKey: (dayIdx: number) => string | null;
|
|
393
|
+
navigate: (delta: number) => void;
|
|
394
|
+
goToday: () => void;
|
|
395
|
+
membersOf: (sectionId: string) => Employee[];
|
|
396
|
+
sectionCost: (sectionId: string, members?: Employee[]) => number;
|
|
397
|
+
totalWeeklyCost: import("vue").ComputedRef<number>;
|
|
398
|
+
employeeById: (id: number) => Employee | undefined;
|
|
399
|
+
commitShift: (empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[]) => void;
|
|
400
|
+
commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[]) => void;
|
|
401
|
+
removeShift: (empId: number, dayIdx: number) => void;
|
|
402
|
+
removeShiftAt: (offset: number, empId: number, dayIdx: number) => void;
|
|
403
|
+
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number) => boolean;
|
|
404
|
+
swapShifts: (empIdA: number, empIdB: number, dayIdx: number) => boolean;
|
|
405
|
+
clearShiftsInRange: () => {
|
|
406
|
+
shifts: number;
|
|
407
|
+
open: number;
|
|
408
|
+
leave: number;
|
|
409
|
+
};
|
|
410
|
+
requiredFor: (dayIdx: number, position: string) => number;
|
|
411
|
+
scheduledFor: (dayIdx: number, position: string) => number;
|
|
412
|
+
compGroupRate: (name: string | undefined) => number | undefined;
|
|
413
|
+
UNASSIGNED: string;
|
|
414
|
+
};
|
|
415
|
+
export type ScheduleBoardApi = ReturnType<typeof useScheduleBoard>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
/** Column facts shared by the day header and every `.shift-cell` under it.
|
|
3
|
+
*
|
|
4
|
+
* The mockup builds these inline in its cell loop (`cell.className = 'shift-cell' + …`) and
|
|
5
|
+
* again in its header loop, which is exactly how the two drifted: closing a day painted the
|
|
6
|
+
* header and left the cells beneath it clean. One helper, both consumers.
|
|
7
|
+
*
|
|
8
|
+
* Two of the mockup's cell states are deliberately absent here:
|
|
9
|
+
* - `wk-off` — this board has no standing weekly-off pattern to read (same reason
|
|
10
|
+
* `otRateOn()` drops the mockup's rest-day case).
|
|
11
|
+
* - `peek` / `week-start` — the mockup renders a multi-week horizon, so it has columns
|
|
12
|
+
* outside the selected range and interior week boundaries. This board's visible range
|
|
13
|
+
* is exactly one week, so neither can ever fire.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isPastDate(date: Date): boolean;
|
|
16
|
+
export declare function isWeekendDate(date: Date): boolean;
|
|
17
|
+
/** Month-edge compares neighbours in the VISIBLE column order, not raw weekday
|
|
18
|
+
* index — a lone Daily-view column has no on-screen neighbour to differ from. */
|
|
19
|
+
export declare function isMonthEdgeAt(board: ScheduleBoardApi, colIndex: number): boolean;
|
|
20
|
+
export interface ScheduleCellState {
|
|
21
|
+
locked: boolean;
|
|
22
|
+
'closed-day': boolean;
|
|
23
|
+
'month-edge': boolean;
|
|
24
|
+
past: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** The class object for one grid cell in column `colIndex` (its weekday is `dayIdx`). */
|
|
27
|
+
export declare function cellStateClasses(board: ScheduleBoardApi, dayIdx: number, colIndex: number): ScheduleCellState;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface ScheduleClashState {
|
|
2
|
+
open: boolean;
|
|
3
|
+
message: string;
|
|
4
|
+
onConfirm: (() => void) | null;
|
|
5
|
+
}
|
|
6
|
+
/** Generic Yes/No conflict-confirmation primitive — the mockup's `askClash`/clashModal,
|
|
7
|
+
* reused across several flows (leave clashes, overlapping shifts, etc). */
|
|
8
|
+
export declare function useScheduleClashDetection(): {
|
|
9
|
+
state: {
|
|
10
|
+
open: boolean;
|
|
11
|
+
message: string;
|
|
12
|
+
onConfirm: (() => void) | null;
|
|
13
|
+
};
|
|
14
|
+
ask: (message: string, onConfirm: () => void) => void;
|
|
15
|
+
confirm: () => void;
|
|
16
|
+
close: () => void;
|
|
17
|
+
};
|
|
18
|
+
export type ScheduleClashDetectionApi = ReturnType<typeof useScheduleClashDetection>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
export interface ScheduleCopySkipReport {
|
|
3
|
+
leave: number;
|
|
4
|
+
already: number;
|
|
5
|
+
hours: number;
|
|
6
|
+
full: number;
|
|
7
|
+
closed: number;
|
|
8
|
+
}
|
|
9
|
+
/** The mockup's Copy schedule feature (copyLastWeek/copyThisWeekForward), ported against this
|
|
10
|
+
* board's per-week-offset bucket cache instead of the mockup's absolute 91-day horizon. Split
|
|
11
|
+
* shifts (copyUnitsOf in the mockup) aren't ported — WorkSlot has no splitId concept in this
|
|
12
|
+
* data model, so each slot is copied as its own unit. */
|
|
13
|
+
export declare function useScheduleCopyWeek(board: ScheduleBoardApi): {
|
|
14
|
+
copyLastWeek: (mode: "staffed" | "open") => void;
|
|
15
|
+
copyThisWeekForward: (mode: "staffed" | "open") => void;
|
|
16
|
+
};
|
|
17
|
+
export type ScheduleCopyWeekApi = ReturnType<typeof useScheduleCopyWeek>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
export declare function slotHours(start: string, end: string): number;
|
|
3
|
+
export interface ScheduleDayCost {
|
|
4
|
+
hours: number;
|
|
5
|
+
otHours: number;
|
|
6
|
+
base: number;
|
|
7
|
+
ot: number;
|
|
8
|
+
total: number;
|
|
9
|
+
}
|
|
10
|
+
export interface SchedulePositionCost {
|
|
11
|
+
position: string;
|
|
12
|
+
base: number;
|
|
13
|
+
ot: number;
|
|
14
|
+
total: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ScheduleSectionCost {
|
|
17
|
+
id: string;
|
|
18
|
+
label: string;
|
|
19
|
+
base: number;
|
|
20
|
+
ot: number;
|
|
21
|
+
total: number;
|
|
22
|
+
rows: SchedulePositionCost[];
|
|
23
|
+
}
|
|
24
|
+
export interface ScheduleOtRisk {
|
|
25
|
+
empId: number;
|
|
26
|
+
name: string;
|
|
27
|
+
hours: number;
|
|
28
|
+
contract: number;
|
|
29
|
+
}
|
|
30
|
+
/** Weekly labour cost + monthly OT gauge for the collapsible cost rail, built off one
|
|
31
|
+
* per-day breakdown so the rail's totals and the stats row's per-day figures can never
|
|
32
|
+
* disagree about what a day cost. */
|
|
33
|
+
export declare function useScheduleCostRail(board: ScheduleBoardApi): {
|
|
34
|
+
collapsed: import("vue").Ref<boolean, boolean>;
|
|
35
|
+
byDay: import("vue").ComputedRef<ScheduleDayCost[]>;
|
|
36
|
+
weeklyCost: import("vue").ComputedRef<number>;
|
|
37
|
+
otHours: import("vue").ComputedRef<number>;
|
|
38
|
+
monthlyOtUsed: import("vue").ComputedRef<number>;
|
|
39
|
+
monthlyOtCapHours: number;
|
|
40
|
+
bySection: import("vue").ComputedRef<ScheduleSectionCost[]>;
|
|
41
|
+
otRisk: import("vue").ComputedRef<ScheduleOtRisk[]>;
|
|
42
|
+
};
|
|
43
|
+
export type ScheduleCostRailApi = ReturnType<typeof useScheduleCostRail>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
export interface ScheduleDayNoteState {
|
|
3
|
+
open: boolean;
|
|
4
|
+
dayIdx: number | null;
|
|
5
|
+
left: number;
|
|
6
|
+
top: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ScheduleDayNoteOptions {
|
|
9
|
+
/** Toasts for the writes that happen on the spot — closing a day, repricing it, saving. */
|
|
10
|
+
onToast?: (message: string) => void;
|
|
11
|
+
}
|
|
12
|
+
/** One decimal, always: "2×" reads as a count, and 1.5 beside a bare 2 in one sentence looks
|
|
13
|
+
* like two different kinds of number. Ported from the mockup's fmtRate(). */
|
|
14
|
+
export declare function fmtRate(rate: number): string;
|
|
15
|
+
/** The date card editor — opened by clicking a day card or its pencil. Everything on it is a
|
|
16
|
+
* fact about the DATE, applying to the whole column: a titled note, whether the venue opens,
|
|
17
|
+
* and whether the day bills at the holiday rate. Ported from the mockup's openDayNote() /
|
|
18
|
+
* saveDayNote() / dnToggleClosed() / dnToggleHoliday().
|
|
19
|
+
*
|
|
20
|
+
* The mockup re-renders the grid on the two toggles and rebuilds the popover from a stashed
|
|
21
|
+
* draft so half-typed text survives; Vue re-renders in place, so the draft just stays in the
|
|
22
|
+
* refs and there is nothing to stash. */
|
|
23
|
+
export declare function useScheduleDayNote(board: ScheduleBoardApi, opts?: ScheduleDayNoteOptions): {
|
|
24
|
+
state: {
|
|
25
|
+
open: boolean;
|
|
26
|
+
dayIdx: number | null;
|
|
27
|
+
left: number;
|
|
28
|
+
top: number;
|
|
29
|
+
};
|
|
30
|
+
dayIdx: import("vue").ComputedRef<number | null>;
|
|
31
|
+
title: import("vue").Ref<string, string>;
|
|
32
|
+
desc: import("vue").Ref<string, string>;
|
|
33
|
+
savedNote: import("vue").ComputedRef<import("../types").ScheduleDayNote | null>;
|
|
34
|
+
hasSaved: import("vue").ComputedRef<boolean>;
|
|
35
|
+
whenLabel: import("vue").ComputedRef<string>;
|
|
36
|
+
isClosed: import("vue").ComputedRef<boolean>;
|
|
37
|
+
isAuto: import("vue").ComputedRef<boolean>;
|
|
38
|
+
rateApplies: import("vue").ComputedRef<boolean>;
|
|
39
|
+
closedHint: import("vue").ComputedRef<"Nothing is required or rostered on this date." | "The venue does not open — this date only.">;
|
|
40
|
+
holidayHint: import("vue").ComputedRef<string>;
|
|
41
|
+
openFor: (dayIdx: number, anchor: HTMLElement) => void;
|
|
42
|
+
close: () => void;
|
|
43
|
+
toggleClosed: () => void;
|
|
44
|
+
toggleHoliday: () => void;
|
|
45
|
+
save: () => void;
|
|
46
|
+
remove: () => void;
|
|
47
|
+
};
|
|
48
|
+
export type ScheduleDayNoteApi = ReturnType<typeof useScheduleDayNote>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
import type { ScheduleRosterApi } from './useScheduleRoster';
|
|
3
|
+
import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
|
|
4
|
+
declare function minToHHMM(m: number): string;
|
|
5
|
+
export interface ScheduleTimelineBar {
|
|
6
|
+
key: string;
|
|
7
|
+
left: number;
|
|
8
|
+
width: number;
|
|
9
|
+
cls: string;
|
|
10
|
+
label: string;
|
|
11
|
+
sub?: string;
|
|
12
|
+
title: string;
|
|
13
|
+
brk?: {
|
|
14
|
+
left: number;
|
|
15
|
+
width: number;
|
|
16
|
+
};
|
|
17
|
+
laneTop?: number;
|
|
18
|
+
laneHeight?: number;
|
|
19
|
+
onClick?: () => void;
|
|
20
|
+
}
|
|
21
|
+
export interface ScheduleTimelineRow {
|
|
22
|
+
key: string;
|
|
23
|
+
kind: 'open' | 'employee' | 'position';
|
|
24
|
+
swatchColor?: string;
|
|
25
|
+
swatchClass?: string;
|
|
26
|
+
avatarInitials?: string;
|
|
27
|
+
avatarColor?: string;
|
|
28
|
+
name: string;
|
|
29
|
+
sub: string;
|
|
30
|
+
bars: ScheduleTimelineBar[];
|
|
31
|
+
minHeight?: number;
|
|
32
|
+
emptyText?: string;
|
|
33
|
+
onTrackClick?: () => void;
|
|
34
|
+
}
|
|
35
|
+
export interface ScheduleHourCell {
|
|
36
|
+
m: number;
|
|
37
|
+
clock: string;
|
|
38
|
+
open: boolean;
|
|
39
|
+
state: '' | 'short' | 'met' | 'over';
|
|
40
|
+
barHeightPct: number;
|
|
41
|
+
title: string;
|
|
42
|
+
n: number;
|
|
43
|
+
}
|
|
44
|
+
/** The day's hourly timeline (rows with shift bars placed by time), replacing the multi-day
|
|
45
|
+
* grid for the one day Daily view is looking at. Ported from the mockup's
|
|
46
|
+
* renderDayTimeline() + renderHourFooter() — the `else` (area) branch groups rows by position
|
|
47
|
+
* instead of by employee, reusing the same axis/bar/lane geometry. Auto-Schedule proposal
|
|
48
|
+
* review isn't carried over here; it stays week-view-only for now. */
|
|
49
|
+
export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, handlers: {
|
|
50
|
+
onAddShift: (empId: number, dayIdx: number) => void;
|
|
51
|
+
onEditShift: (empId: number, dayIdx: number) => void;
|
|
52
|
+
onEditLeave: (empId: number, dayIdx: number) => void;
|
|
53
|
+
onOpenAssign: (openId: number) => void;
|
|
54
|
+
onAddAreaShift: (dayIdx: number, position: string) => void;
|
|
55
|
+
}): {
|
|
56
|
+
dayIdx: import("vue").ComputedRef<number>;
|
|
57
|
+
axis: import("vue").ComputedRef<{
|
|
58
|
+
from: number;
|
|
59
|
+
to: number;
|
|
60
|
+
span: number;
|
|
61
|
+
}>;
|
|
62
|
+
hours: import("vue").ComputedRef<{
|
|
63
|
+
m: number;
|
|
64
|
+
clock: string;
|
|
65
|
+
}[]>;
|
|
66
|
+
isOpenHour: (m: number) => boolean;
|
|
67
|
+
openShiftsRow: import("vue").ComputedRef<ScheduleTimelineRow | null>;
|
|
68
|
+
employeeRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
|
|
69
|
+
positionTimelineRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
|
|
70
|
+
footer: import("vue").ComputedRef<{
|
|
71
|
+
cells: ScheduleHourCell[];
|
|
72
|
+
staffCount: number;
|
|
73
|
+
totalHours: number;
|
|
74
|
+
totalWages: number;
|
|
75
|
+
peakN: number;
|
|
76
|
+
lowN: number;
|
|
77
|
+
peakAt: number | undefined;
|
|
78
|
+
}>;
|
|
79
|
+
minToHHMM: typeof minToHHMM;
|
|
80
|
+
};
|
|
81
|
+
export type ScheduleDayTimelineApi = ReturnType<typeof useScheduleDayTimeline>;
|
|
82
|
+
export {};
|