@feedmepos/mf-hrm-portal 2.2.5-dev.9 → 2.3.0-dev
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-D5l9vIsE.js → ApprovalCodeList-cG0zmQVJ.js} +5 -5
- package/dist/{AuditLogList-ByTa5UJY.js → AuditLogList-BTifJhO1.js} +4 -4
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-mNdn1TYV.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js} +2 -2
- package/dist/{EmployeeList-Bv6ANk-P.js → EmployeeList-DzcMtxJ3.js} +6 -6
- package/dist/{GrantUserList-Bt8w3p4j.js → GrantUserList-D5b7tJ8Y.js} +6 -6
- package/dist/{Main-DqiGpT4v.js → Main-B2r59IOW.js} +5 -5
- package/dist/{Main-DHJcgePj.js → Main-DFwdAWqn.js} +8 -8
- package/dist/{Main-DkP8dWgn.js → Main-DkLBemi7.js} +11 -11
- package/dist/{PermissionSetList-BIGv1u67.js → PermissionSetList-B80hrfMW.js} +7 -7
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js +4167 -0
- package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-XHuHin8t.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fe-Rdwn4.js} +1 -1
- package/dist/{RoleList-CH6NDKPU.js → RoleList-DHO4JRKF.js} +9 -9
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +452 -0
- package/dist/ScheduleGeneralPage-WlBM8bxV.js +629 -0
- package/dist/SchedulePage-Nm0krGVU.js +17056 -0
- package/dist/SchedulePositionPage-C0hrO11d.js +263 -0
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +1150 -0
- package/dist/{TeamMemberList-BwfG3go2.js → TeamMemberList-CgFWLRBM.js} +10 -10
- package/dist/{TimesheetList-DcoqzbLO.js → TimesheetList-Dp40G-0I.js} +7 -7
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-RyhiKTSd.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js} +3 -3
- package/dist/{app-BcZ6C8M8.js → app-CmBSTvaI.js} +851 -739
- package/dist/app.js +1 -1
- package/dist/{approval-code-jIjkeVEb.js → approval-code-C9DmR4Md.js} +1 -1
- package/dist/{dayjs.min-Ch0iysTG.js → dayjs.min-CfL2DQ3d.js} +1 -1
- package/dist/{employee-DwYHFacQ.js → employee-DQcHjoij.js} +4 -4
- package/dist/{grant-user-SNiDV22U.js → grant-user-Bv-pJ9Wt.js} +1 -1
- package/dist/{iteration-D1uWLp0V.js → iteration-BlavheWG.js} +1 -1
- package/dist/{lodash-DErxm7xf.js → lodash-QerqayrJ.js} +1 -1
- package/dist/{restaurant-BTpBmfBV.js → restaurant-D7PEQjPY.js} +257 -251
- package/dist/{role-B9VanAny.js → role-RM2YLO7n.js} +2 -2
- package/dist/{rule-C4f_Ilzr.js → rule-DjlvYIuP.js} +3 -3
- package/dist/src/api/restaurant/index.d.ts +2 -0
- package/dist/src/api/schedule/index.d.ts +12 -2
- package/dist/src/composables/useMessage.d.ts +8 -2
- package/dist/src/types/schedule.d.ts +10 -218
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +11 -0
- package/dist/src/views/scheduling/components/ScheduleAutoScheduleDetailsModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleCloneOutletModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/{ScheduleLegendBar.vue.d.ts → ScheduleCoach.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +9 -1
- package/dist/src/views/scheduling/components/ScheduleCostRailEmptyArt.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleExportDoneDialog.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +0 -2
- package/dist/src/views/scheduling/components/ScheduleOnboardingComplete.vue.d.ts +10 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingDoneArt.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +1 -2
- package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +2 -2
- package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +6 -6
- package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +0 -2
- package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +6 -6
- package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +6 -0
- package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +33 -0
- package/dist/src/views/scheduling/composables/onboarding-constants.d.ts +5 -0
- package/dist/src/views/scheduling/composables/onboarding-hours.d.ts +7 -0
- package/dist/src/views/scheduling/composables/onboarding-types.d.ts +50 -0
- package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +8 -2
- package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +22 -1
- package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +3 -0
- package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +2 -8
- package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +12 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +11 -8
- package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +10 -2
- package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +13 -0
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +158 -12
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +110 -13
- package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +11 -1
- package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +19 -0
- package/dist/src/views/scheduling/composables/useScheduleCoach.d.ts +80 -0
- package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -3
- package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +24 -1
- package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +4 -2
- package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +33 -1
- package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +17 -0
- package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +1 -3
- package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +20 -31
- package/dist/src/views/scheduling/composables/useScheduleOnboardingFlow.d.ts +9 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingPersistence.d.ts +13 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +327 -75
- package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +5 -3
- package/dist/src/views/scheduling/composables/useSchedulePageBootstrap.d.ts +9 -0
- package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +20 -0
- package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +2 -0
- package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +0 -5
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +25 -0
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +53 -1
- package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +7 -4
- package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +8 -9
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +63 -92
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +30 -2
- package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +5 -11
- package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +0 -1
- package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +4 -4
- package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +93 -0
- package/dist/src/views/scheduling/data.d.ts +6 -19
- package/dist/src/views/scheduling/locales/index.d.ts +116 -4
- package/dist/src/views/scheduling/schedule-state.d.ts +679 -0
- package/dist/src/views/scheduling/schedule-store.d.ts +16 -60
- package/dist/src/views/scheduling/types.d.ts +29 -2
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useAppStore-DCwd8GWN.js → useAppStore-d_nHyK5u.js} +1 -1
- package/dist/{useLoading-CXzTpIVv.js → useLoading-JFoghhRz.js} +1 -1
- package/dist/{useReportPermissions-CTr56kBo.js → useReportPermissions-Bl6Br79r.js} +3 -3
- package/package.json +3 -2
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-niywl_DX.js +0 -4167
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-T1ACkX_6.js +0 -426
- package/dist/ScheduleButton.vue_vue_type_script_setup_true_lang-BzQuLLf5.js +0 -690
- package/dist/ScheduleGeneralPage-DJPENJZ2.js +0 -320
- package/dist/SchedulePage-C1egcbIC.js +0 -14421
- package/dist/SchedulePositionPage-OhL_hsqG.js +0 -293
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-B8W4sTsA.js +0 -242
- package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +0 -21
- package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +0 -35
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Employee, OpenShift, PendingChange, ScheduleStatusInfo, ScheduleVersion, ScheduleVersionSnapshot, Section, WorkSlot } from '../types';
|
|
2
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, };
|
|
3
|
+
import { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
|
|
4
|
+
export { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf, };
|
|
5
5
|
export { RANGE_LEN };
|
|
6
6
|
export type ScheduleGranularity = 'day' | 'week';
|
|
7
7
|
export declare function useScheduleBoard(handlers?: {
|
|
@@ -10,11 +10,6 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
10
10
|
dayNote: (dayIdx: number) => import("../types").ScheduleDayNote | null;
|
|
11
11
|
setDayNote: (dayIdx: number, title: string, desc: string) => void;
|
|
12
12
|
clearDayNote: (dayIdx: number) => void;
|
|
13
|
-
toggleClosed: (dayIdx: number) => {
|
|
14
|
-
closed: boolean;
|
|
15
|
-
rostered: number;
|
|
16
|
-
};
|
|
17
|
-
isManuallyClosed: (dayIdx: number) => boolean;
|
|
18
13
|
isStandingClosedWeekday: (dayIdx: number) => boolean;
|
|
19
14
|
holidayName: (dayIdx: number) => string | null;
|
|
20
15
|
holidayIsAuto: (dayIdx: number) => boolean;
|
|
@@ -28,6 +23,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
28
23
|
employees: import("vue").Ref<{
|
|
29
24
|
id: number;
|
|
30
25
|
name: string;
|
|
26
|
+
employmentType: "FULLTIME" | "PARTTIME";
|
|
31
27
|
role: string;
|
|
32
28
|
initials: string;
|
|
33
29
|
color: string;
|
|
@@ -50,9 +46,23 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
50
46
|
conflictReason?: string | undefined;
|
|
51
47
|
openId?: number | undefined;
|
|
52
48
|
breakMins?: number | undefined;
|
|
49
|
+
breaks?: ({
|
|
50
|
+
type: "DURATION";
|
|
51
|
+
minutes: number;
|
|
52
|
+
breakPayType: "PAID" | "UNPAID";
|
|
53
|
+
} | {
|
|
54
|
+
type: "TIME_RANGE";
|
|
55
|
+
startTime: string;
|
|
56
|
+
endTime: string;
|
|
57
|
+
breakPayType: "PAID" | "UNPAID";
|
|
58
|
+
})[] | undefined;
|
|
53
59
|
assignmentId?: string | undefined;
|
|
60
|
+
splitGroupId?: string | undefined;
|
|
54
61
|
} | {
|
|
55
62
|
timeOff: "approved" | "pending";
|
|
63
|
+
requestId?: string | undefined;
|
|
64
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
65
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
56
66
|
reason: string;
|
|
57
67
|
half?: boolean | undefined;
|
|
58
68
|
halfPart?: "AM" | "PM" | undefined;
|
|
@@ -83,7 +93,18 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
83
93
|
conflictReason?: string | undefined;
|
|
84
94
|
openId?: number | undefined;
|
|
85
95
|
breakMins?: number | undefined;
|
|
96
|
+
breaks?: ({
|
|
97
|
+
type: "DURATION";
|
|
98
|
+
minutes: number;
|
|
99
|
+
breakPayType: "PAID" | "UNPAID";
|
|
100
|
+
} | {
|
|
101
|
+
type: "TIME_RANGE";
|
|
102
|
+
startTime: string;
|
|
103
|
+
endTime: string;
|
|
104
|
+
breakPayType: "PAID" | "UNPAID";
|
|
105
|
+
})[] | undefined;
|
|
86
106
|
assignmentId?: string | undefined;
|
|
107
|
+
splitGroupId?: string | undefined;
|
|
87
108
|
}[] | null)[];
|
|
88
109
|
remarks: {
|
|
89
110
|
author: string;
|
|
@@ -114,6 +135,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
114
135
|
}[], Employee[] | {
|
|
115
136
|
id: number;
|
|
116
137
|
name: string;
|
|
138
|
+
employmentType: "FULLTIME" | "PARTTIME";
|
|
117
139
|
role: string;
|
|
118
140
|
initials: string;
|
|
119
141
|
color: string;
|
|
@@ -136,9 +158,23 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
136
158
|
conflictReason?: string | undefined;
|
|
137
159
|
openId?: number | undefined;
|
|
138
160
|
breakMins?: number | undefined;
|
|
161
|
+
breaks?: ({
|
|
162
|
+
type: "DURATION";
|
|
163
|
+
minutes: number;
|
|
164
|
+
breakPayType: "PAID" | "UNPAID";
|
|
165
|
+
} | {
|
|
166
|
+
type: "TIME_RANGE";
|
|
167
|
+
startTime: string;
|
|
168
|
+
endTime: string;
|
|
169
|
+
breakPayType: "PAID" | "UNPAID";
|
|
170
|
+
})[] | undefined;
|
|
139
171
|
assignmentId?: string | undefined;
|
|
172
|
+
splitGroupId?: string | undefined;
|
|
140
173
|
} | {
|
|
141
174
|
timeOff: "approved" | "pending";
|
|
175
|
+
requestId?: string | undefined;
|
|
176
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
177
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
142
178
|
reason: string;
|
|
143
179
|
half?: boolean | undefined;
|
|
144
180
|
halfPart?: "AM" | "PM" | undefined;
|
|
@@ -169,7 +205,18 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
169
205
|
conflictReason?: string | undefined;
|
|
170
206
|
openId?: number | undefined;
|
|
171
207
|
breakMins?: number | undefined;
|
|
208
|
+
breaks?: ({
|
|
209
|
+
type: "DURATION";
|
|
210
|
+
minutes: number;
|
|
211
|
+
breakPayType: "PAID" | "UNPAID";
|
|
212
|
+
} | {
|
|
213
|
+
type: "TIME_RANGE";
|
|
214
|
+
startTime: string;
|
|
215
|
+
endTime: string;
|
|
216
|
+
breakPayType: "PAID" | "UNPAID";
|
|
217
|
+
})[] | undefined;
|
|
172
218
|
assignmentId?: string | undefined;
|
|
219
|
+
splitGroupId?: string | undefined;
|
|
173
220
|
}[] | null)[];
|
|
174
221
|
remarks: {
|
|
175
222
|
author: string;
|
|
@@ -284,9 +331,23 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
284
331
|
conflictReason?: string | undefined;
|
|
285
332
|
openId?: number | undefined;
|
|
286
333
|
breakMins?: number | undefined;
|
|
334
|
+
breaks?: ({
|
|
335
|
+
type: "DURATION";
|
|
336
|
+
minutes: number;
|
|
337
|
+
breakPayType: "PAID" | "UNPAID";
|
|
338
|
+
} | {
|
|
339
|
+
type: "TIME_RANGE";
|
|
340
|
+
startTime: string;
|
|
341
|
+
endTime: string;
|
|
342
|
+
breakPayType: "PAID" | "UNPAID";
|
|
343
|
+
})[] | undefined;
|
|
287
344
|
assignmentId?: string | undefined;
|
|
345
|
+
splitGroupId?: string | undefined;
|
|
288
346
|
} | {
|
|
289
347
|
timeOff: "approved" | "pending";
|
|
348
|
+
requestId?: string | undefined;
|
|
349
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
350
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
290
351
|
reason: string;
|
|
291
352
|
half?: boolean | undefined;
|
|
292
353
|
halfPart?: "AM" | "PM" | undefined;
|
|
@@ -317,7 +378,18 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
317
378
|
conflictReason?: string | undefined;
|
|
318
379
|
openId?: number | undefined;
|
|
319
380
|
breakMins?: number | undefined;
|
|
381
|
+
breaks?: ({
|
|
382
|
+
type: "DURATION";
|
|
383
|
+
minutes: number;
|
|
384
|
+
breakPayType: "PAID" | "UNPAID";
|
|
385
|
+
} | {
|
|
386
|
+
type: "TIME_RANGE";
|
|
387
|
+
startTime: string;
|
|
388
|
+
endTime: string;
|
|
389
|
+
breakPayType: "PAID" | "UNPAID";
|
|
390
|
+
})[] | undefined;
|
|
320
391
|
assignmentId?: string | undefined;
|
|
392
|
+
splitGroupId?: string | undefined;
|
|
321
393
|
}[] | null)[];
|
|
322
394
|
}[];
|
|
323
395
|
}[], ScheduleVersion[] | {
|
|
@@ -345,9 +417,23 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
345
417
|
conflictReason?: string | undefined;
|
|
346
418
|
openId?: number | undefined;
|
|
347
419
|
breakMins?: number | undefined;
|
|
420
|
+
breaks?: ({
|
|
421
|
+
type: "DURATION";
|
|
422
|
+
minutes: number;
|
|
423
|
+
breakPayType: "PAID" | "UNPAID";
|
|
424
|
+
} | {
|
|
425
|
+
type: "TIME_RANGE";
|
|
426
|
+
startTime: string;
|
|
427
|
+
endTime: string;
|
|
428
|
+
breakPayType: "PAID" | "UNPAID";
|
|
429
|
+
})[] | undefined;
|
|
348
430
|
assignmentId?: string | undefined;
|
|
431
|
+
splitGroupId?: string | undefined;
|
|
349
432
|
} | {
|
|
350
433
|
timeOff: "approved" | "pending";
|
|
434
|
+
requestId?: string | undefined;
|
|
435
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
436
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
351
437
|
reason: string;
|
|
352
438
|
half?: boolean | undefined;
|
|
353
439
|
halfPart?: "AM" | "PM" | undefined;
|
|
@@ -378,7 +464,18 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
378
464
|
conflictReason?: string | undefined;
|
|
379
465
|
openId?: number | undefined;
|
|
380
466
|
breakMins?: number | undefined;
|
|
467
|
+
breaks?: ({
|
|
468
|
+
type: "DURATION";
|
|
469
|
+
minutes: number;
|
|
470
|
+
breakPayType: "PAID" | "UNPAID";
|
|
471
|
+
} | {
|
|
472
|
+
type: "TIME_RANGE";
|
|
473
|
+
startTime: string;
|
|
474
|
+
endTime: string;
|
|
475
|
+
breakPayType: "PAID" | "UNPAID";
|
|
476
|
+
})[] | undefined;
|
|
381
477
|
assignmentId?: string | undefined;
|
|
478
|
+
splitGroupId?: string | undefined;
|
|
382
479
|
}[] | null)[];
|
|
383
480
|
}[];
|
|
384
481
|
}[]>;
|
|
@@ -407,12 +504,12 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
407
504
|
sectionCost: (sectionId: string, members?: Employee[]) => number;
|
|
408
505
|
totalWeeklyCost: import("vue").ComputedRef<number>;
|
|
409
506
|
employeeById: (id: number) => Employee | undefined;
|
|
410
|
-
commitShift: (empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[]) => void;
|
|
411
|
-
commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[]) => void;
|
|
412
|
-
removeShift: (empId: number, dayIdx: number) => void;
|
|
413
|
-
removeShiftAt: (offset: number, empId: number, dayIdx: number) => void;
|
|
414
|
-
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number) => boolean;
|
|
415
|
-
swapShifts: (empIdA: number, empIdB: number,
|
|
507
|
+
commitShift: (empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], replaceIndex?: number, replaceCount?: number) => void;
|
|
508
|
+
commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], replaceIndex?: number, replaceCount?: number) => void;
|
|
509
|
+
removeShift: (empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
|
|
510
|
+
removeShiftAt: (offset: number, empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
|
|
511
|
+
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
|
|
512
|
+
swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
|
|
416
513
|
clearShiftsInRange: () => {
|
|
417
514
|
shifts: number;
|
|
418
515
|
open: number;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export interface ScheduleClashState {
|
|
2
2
|
open: boolean;
|
|
3
3
|
message: string;
|
|
4
|
+
/** Per-call overrides, falling back to the "might conflict" wording every call used before
|
|
5
|
+
* these existed — only the closed-day confirmation (see SchedulePage's onAddShift/
|
|
6
|
+
* onOpenDemandSheet) needs its own title and button label so far. */
|
|
7
|
+
title: string | null;
|
|
8
|
+
confirmLabel: string | null;
|
|
4
9
|
onConfirm: (() => void) | null;
|
|
5
10
|
}
|
|
6
11
|
/** Generic Yes/No conflict-confirmation primitive — the mockup's `askClash`/clashModal,
|
|
@@ -9,9 +14,14 @@ export declare function useScheduleClashDetection(): {
|
|
|
9
14
|
state: {
|
|
10
15
|
open: boolean;
|
|
11
16
|
message: string;
|
|
17
|
+
title: string | null;
|
|
18
|
+
confirmLabel: string | null;
|
|
12
19
|
onConfirm: (() => void) | null;
|
|
13
20
|
};
|
|
14
|
-
ask: (message: string, onConfirm: () => void
|
|
21
|
+
ask: (message: string, onConfirm: () => void, opts?: {
|
|
22
|
+
title?: string;
|
|
23
|
+
confirmLabel?: string;
|
|
24
|
+
}) => void;
|
|
15
25
|
confirm: () => void;
|
|
16
26
|
close: () => void;
|
|
17
27
|
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ScheduleOutletApi } from './useScheduleOutlet';
|
|
2
|
+
/** "Clone setup to…" on the General page. Copies this outlet's *saved* pay rates — `RULES`,
|
|
3
|
+
* not the page's draft — to one or more other outlets the manager ticks. Scoped to pay rates
|
|
4
|
+
* because that is the only outlet-scoped setting this page persists; the mockup's broader
|
|
5
|
+
* "rules, shifts, coverage and positions" clone lives on pages this one doesn't own. */
|
|
6
|
+
export declare function useScheduleCloneOutletModal(outlet: ScheduleOutletApi): {
|
|
7
|
+
open: import("vue").Ref<boolean, boolean>;
|
|
8
|
+
query: import("vue").Ref<string, string>;
|
|
9
|
+
selected: import("vue").Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
|
|
10
|
+
saving: import("vue").Ref<boolean, boolean>;
|
|
11
|
+
done: import("vue").Ref<number | null, number | null>;
|
|
12
|
+
sourceLabel: import("vue").ComputedRef<string>;
|
|
13
|
+
targets: import("vue").ComputedRef<import("../components/ScheduleSelect.vue").ScheduleSelectOption[]>;
|
|
14
|
+
openModal: () => void;
|
|
15
|
+
close: () => void;
|
|
16
|
+
toggle: (id: string) => void;
|
|
17
|
+
confirm: () => Promise<void>;
|
|
18
|
+
};
|
|
19
|
+
export type ScheduleCloneOutletModalApi = ReturnType<typeof useScheduleCloneOutletModal>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export interface CoachTipData {
|
|
2
|
+
title: string;
|
|
3
|
+
body: string;
|
|
4
|
+
count?: string;
|
|
5
|
+
nextLabel?: string;
|
|
6
|
+
skipLabel?: string;
|
|
7
|
+
next?: () => void;
|
|
8
|
+
skip?: () => void;
|
|
9
|
+
}
|
|
10
|
+
type CoachArrowSide = 'top' | 'bottom' | 'left' | 'right';
|
|
11
|
+
/** A spotlight-and-tooltip overlay that frames one live element at a time — the engine behind
|
|
12
|
+
* the guided tour. Ported from V6.2's `coach*` functions: same 4-panel mask, same below /
|
|
13
|
+
* above / left / right tip placement with viewport clamping, same arrow-follows-target-center
|
|
14
|
+
* math. Deliberately has no Back button and no "click to advance" wiring — every tour step
|
|
15
|
+
* here always supplies `next`, so the Next button is the one way on. */
|
|
16
|
+
export declare function useScheduleCoach(): {
|
|
17
|
+
open: import("vue").Ref<boolean, boolean>;
|
|
18
|
+
placing: import("vue").Ref<boolean, boolean>;
|
|
19
|
+
tip: import("vue").Ref<{
|
|
20
|
+
title: string;
|
|
21
|
+
body: string;
|
|
22
|
+
count?: string | undefined;
|
|
23
|
+
nextLabel?: string | undefined;
|
|
24
|
+
skipLabel?: string | undefined;
|
|
25
|
+
next?: (() => void) | undefined;
|
|
26
|
+
skip?: (() => void) | undefined;
|
|
27
|
+
} | null, CoachTipData | {
|
|
28
|
+
title: string;
|
|
29
|
+
body: string;
|
|
30
|
+
count?: string | undefined;
|
|
31
|
+
nextLabel?: string | undefined;
|
|
32
|
+
skipLabel?: string | undefined;
|
|
33
|
+
next?: (() => void) | undefined;
|
|
34
|
+
skip?: (() => void) | undefined;
|
|
35
|
+
} | null>;
|
|
36
|
+
maskT: {
|
|
37
|
+
left: number;
|
|
38
|
+
top: number;
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
};
|
|
42
|
+
maskB: {
|
|
43
|
+
left: number;
|
|
44
|
+
top: number;
|
|
45
|
+
width: number;
|
|
46
|
+
height: number;
|
|
47
|
+
};
|
|
48
|
+
maskL: {
|
|
49
|
+
left: number;
|
|
50
|
+
top: number;
|
|
51
|
+
width: number;
|
|
52
|
+
height: number;
|
|
53
|
+
};
|
|
54
|
+
maskR: {
|
|
55
|
+
left: number;
|
|
56
|
+
top: number;
|
|
57
|
+
width: number;
|
|
58
|
+
height: number;
|
|
59
|
+
};
|
|
60
|
+
spot: {
|
|
61
|
+
left: number;
|
|
62
|
+
top: number;
|
|
63
|
+
width: number;
|
|
64
|
+
height: number;
|
|
65
|
+
};
|
|
66
|
+
tipPos: {
|
|
67
|
+
left: number;
|
|
68
|
+
top: number;
|
|
69
|
+
};
|
|
70
|
+
arrow: {
|
|
71
|
+
side: CoachArrowSide;
|
|
72
|
+
offset: number;
|
|
73
|
+
};
|
|
74
|
+
start: (el: HTMLElement, data: CoachTipData, onMiss?: () => void) => void;
|
|
75
|
+
end: () => void;
|
|
76
|
+
next: () => void;
|
|
77
|
+
skip: () => void;
|
|
78
|
+
};
|
|
79
|
+
export type ScheduleCoachApi = ReturnType<typeof useScheduleCoach>;
|
|
80
|
+
export {};
|
|
@@ -33,14 +33,11 @@ export declare function useScheduleDayNote(board: ScheduleBoardApi, opts?: Sched
|
|
|
33
33
|
savedNote: import("vue").ComputedRef<import("../types").ScheduleDayNote | null>;
|
|
34
34
|
hasSaved: import("vue").ComputedRef<boolean>;
|
|
35
35
|
whenLabel: import("vue").ComputedRef<string>;
|
|
36
|
-
isClosed: import("vue").ComputedRef<boolean>;
|
|
37
36
|
isAuto: import("vue").ComputedRef<boolean>;
|
|
38
37
|
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
38
|
holidayHint: import("vue").ComputedRef<string>;
|
|
41
39
|
openFor: (dayIdx: number, anchor: HTMLElement) => void;
|
|
42
40
|
close: () => void;
|
|
43
|
-
toggleClosed: () => void;
|
|
44
41
|
toggleHoliday: () => void;
|
|
45
42
|
save: () => void;
|
|
46
43
|
remove: () => void;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
2
|
import type { ScheduleRosterApi } from './useScheduleRoster';
|
|
3
3
|
import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
|
|
4
|
+
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
4
5
|
declare function minToHHMM(m: number): string;
|
|
5
6
|
export interface ScheduleTimelineBar {
|
|
6
7
|
key: string;
|
|
@@ -25,6 +26,11 @@ export interface ScheduleTimelineRow {
|
|
|
25
26
|
swatchClass?: string;
|
|
26
27
|
avatarInitials?: string;
|
|
27
28
|
avatarColor?: string;
|
|
29
|
+
employeeId?: number;
|
|
30
|
+
roleLabel?: string;
|
|
31
|
+
hoursLabel?: string;
|
|
32
|
+
hoursPct?: number;
|
|
33
|
+
onMenu?: (anchor: HTMLElement) => void;
|
|
28
34
|
name: string;
|
|
29
35
|
sub: string;
|
|
30
36
|
bars: ScheduleTimelineBar[];
|
|
@@ -41,12 +47,15 @@ export interface ScheduleHourCell {
|
|
|
41
47
|
title: string;
|
|
42
48
|
n: number;
|
|
43
49
|
}
|
|
44
|
-
export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, handlers: {
|
|
50
|
+
export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, demand: ScheduleDemandApi, handlers: {
|
|
45
51
|
onAddShift: (empId: number, dayIdx: number) => void;
|
|
46
52
|
onEditShift: (empId: number, dayIdx: number) => void;
|
|
47
53
|
onEditLeave: (empId: number, dayIdx: number) => void;
|
|
48
54
|
onOpenAssign: (openId: number) => void;
|
|
49
55
|
onAddAreaShift: (dayIdx: number, position: string) => void;
|
|
56
|
+
onOpenDemand: (dayIdx: number) => void;
|
|
57
|
+
onOpenEmployeeMenu: (empId: number, anchor: HTMLElement) => void;
|
|
58
|
+
onDemandSegment: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
|
|
50
59
|
}): {
|
|
51
60
|
dayIdx: import("vue").ComputedRef<number>;
|
|
52
61
|
axis: import("vue").ComputedRef<{
|
|
@@ -62,6 +71,20 @@ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster:
|
|
|
62
71
|
openShiftsRow: import("vue").ComputedRef<ScheduleTimelineRow | null>;
|
|
63
72
|
employeeRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
|
|
64
73
|
positionTimelineRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
|
|
74
|
+
demandRow: import("vue").ComputedRef<{
|
|
75
|
+
blank: boolean;
|
|
76
|
+
segments: {
|
|
77
|
+
key: string;
|
|
78
|
+
from: number;
|
|
79
|
+
to: number;
|
|
80
|
+
left: number;
|
|
81
|
+
width: number;
|
|
82
|
+
cls: string;
|
|
83
|
+
}[];
|
|
84
|
+
title: string;
|
|
85
|
+
}>;
|
|
86
|
+
openDemand: () => void;
|
|
87
|
+
openDemandSegment: (from: number, to: number, anchor: HTMLElement) => void;
|
|
65
88
|
footer: import("vue").ComputedRef<{
|
|
66
89
|
cells: ScheduleHourCell[];
|
|
67
90
|
staffCount: number;
|
|
@@ -12,8 +12,10 @@ export interface ScheduleDemandSeg {
|
|
|
12
12
|
}
|
|
13
13
|
export interface ScheduleDemandCell {
|
|
14
14
|
dayIdx: number;
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
/** No demand stated on this day — the cell carries its own "+ Set demand" instead. Whether
|
|
16
|
+
* the day is closed is a separate, purely visual fact read off cellStateClasses by the
|
|
17
|
+
* template — closing a day is informational for staffing, not a lock, so it doesn't change
|
|
18
|
+
* what this cell has to show. */
|
|
17
19
|
blank: boolean;
|
|
18
20
|
pct: number;
|
|
19
21
|
tone: '' | 'part' | 'short';
|
|
@@ -2,6 +2,20 @@ import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
|
2
2
|
export interface ScheduleDragPayload {
|
|
3
3
|
empId: number;
|
|
4
4
|
dayIdx: number;
|
|
5
|
+
/** Which period on that day this card is — 0 for an ordinary single shift. A genuine split
|
|
6
|
+
* shift's one merged card drags both periods together (`slotCount` > 1); any other card on
|
|
7
|
+
* a multi-shift day is its own independent slot and carries just itself. */
|
|
8
|
+
slotIndex: number;
|
|
9
|
+
slotCount: number;
|
|
10
|
+
}
|
|
11
|
+
/** Where a drag is currently hovering — read by ScheduleShiftCell to decide what to light up.
|
|
12
|
+
* `onCard`/`slotIndex` distinguish the two outcomes a drop here actually has: over an existing
|
|
13
|
+
* card it's a swap offer (that one card), over the rest of the cell it lands alongside it. */
|
|
14
|
+
export interface ScheduleDragHoverTarget {
|
|
15
|
+
empId: number;
|
|
16
|
+
dayIdx: number;
|
|
17
|
+
onCard: boolean;
|
|
18
|
+
slotIndex: number | null;
|
|
5
19
|
}
|
|
6
20
|
/** Native HTML5 drag & drop for moving an existing shift card between employee/day cells.
|
|
7
21
|
* The mockup's other drag source — a staff-rail row dragged onto an open shift — is an
|
|
@@ -12,11 +26,29 @@ export declare function useScheduleDragDrop(board: ScheduleBoardApi): {
|
|
|
12
26
|
dragging: import("vue").Ref<{
|
|
13
27
|
empId: number;
|
|
14
28
|
dayIdx: number;
|
|
29
|
+
slotIndex: number;
|
|
30
|
+
slotCount: number;
|
|
15
31
|
} | null, ScheduleDragPayload | {
|
|
16
32
|
empId: number;
|
|
17
33
|
dayIdx: number;
|
|
34
|
+
slotIndex: number;
|
|
35
|
+
slotCount: number;
|
|
36
|
+
} | null>;
|
|
37
|
+
hoverTarget: import("vue").Ref<{
|
|
38
|
+
empId: number;
|
|
39
|
+
dayIdx: number;
|
|
40
|
+
onCard: boolean;
|
|
41
|
+
slotIndex: number | null;
|
|
42
|
+
} | null, ScheduleDragHoverTarget | {
|
|
43
|
+
empId: number;
|
|
44
|
+
dayIdx: number;
|
|
45
|
+
onCard: boolean;
|
|
46
|
+
slotIndex: number | null;
|
|
18
47
|
} | null>;
|
|
19
|
-
startShiftDrag: (empId: number, dayIdx: number, ev: DragEvent) => void;
|
|
48
|
+
startShiftDrag: (empId: number, dayIdx: number, ev: DragEvent, slotIndex?: number) => void;
|
|
20
49
|
endDrag: () => void;
|
|
50
|
+
setDragHover: (empId: number, dayIdx: number, onCard: boolean, slotIndex: number | null) => void;
|
|
51
|
+
clearDragHover: (empId: number, dayIdx: number) => void;
|
|
21
52
|
dropOnCell: (targetEmpId: number, targetDayIdx: number) => void;
|
|
22
53
|
};
|
|
54
|
+
export type ScheduleDragDropApi = ReturnType<typeof useScheduleDragDrop>;
|
|
@@ -10,6 +10,10 @@ export interface ExportMatrix {
|
|
|
10
10
|
head: string[];
|
|
11
11
|
body: (string | ExportShiftCell)[][];
|
|
12
12
|
foot: string[];
|
|
13
|
+
/** Worked shifts across the whole matrix, split-shift pairs counted once — whether there is
|
|
14
|
+
* anything to print. Not read off the footer's own last column: that column is OT hours now,
|
|
15
|
+
* and a fully-staffed week with nobody over contract totals 0.0 there. */
|
|
16
|
+
shiftTotal: number;
|
|
13
17
|
}
|
|
14
18
|
/** The mockup's Share/export feature (buildExportMatrix/exportPDF/exportJPG) — no external
|
|
15
19
|
* PDF/canvas library anywhere in the mockup; PDF is an HTML preview handed to window.print(),
|
|
@@ -18,9 +22,22 @@ export declare function useScheduleExport(board: ScheduleBoardApi): {
|
|
|
18
22
|
buildExportMatrix: () => ExportMatrix;
|
|
19
23
|
pdfPreviewOpen: import("vue").Ref<boolean, boolean>;
|
|
20
24
|
pdfHtml: import("vue").ComputedRef<string>;
|
|
25
|
+
pdfBarMeta: import("vue").ComputedRef<string>;
|
|
21
26
|
openPdfPreview: () => void;
|
|
22
27
|
closePdfPreview: () => void;
|
|
23
28
|
printNow: () => void;
|
|
24
29
|
exportJpg: () => void;
|
|
30
|
+
exportDoneOpen: import("vue").Ref<boolean, boolean>;
|
|
31
|
+
exportDoneRecap: import("vue").Ref<{
|
|
32
|
+
label: string;
|
|
33
|
+
value: string;
|
|
34
|
+
}[], {
|
|
35
|
+
label: string;
|
|
36
|
+
value: string;
|
|
37
|
+
}[] | {
|
|
38
|
+
label: string;
|
|
39
|
+
value: string;
|
|
40
|
+
}[]>;
|
|
41
|
+
closeExportDone: () => void;
|
|
25
42
|
};
|
|
26
43
|
export type ScheduleExportApi = ReturnType<typeof useScheduleExport>;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { CoverageSegment } from '../types';
|
|
2
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
3
3
|
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
4
|
-
import type { ScheduleAssignApi } from './useScheduleAssign';
|
|
5
4
|
export interface ScheduleGapActions {
|
|
6
5
|
/** Open the shift editor on a brand new shift for this day and these hours. */
|
|
7
6
|
addShift: (dayIdx: number, position: string, start: string, end: string) => void;
|
|
8
7
|
}
|
|
9
|
-
export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi,
|
|
8
|
+
export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi, actions: ScheduleGapActions): {
|
|
10
9
|
state: {
|
|
11
10
|
open: boolean;
|
|
12
11
|
pinned: boolean;
|
|
@@ -76,7 +75,6 @@ export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: S
|
|
|
76
75
|
segClick: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
|
|
77
76
|
segFocus: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
|
|
78
77
|
addShift: () => void;
|
|
79
|
-
suggestStaffing: () => void;
|
|
80
78
|
close: () => void;
|
|
81
79
|
};
|
|
82
80
|
export type ScheduleGapPopoverApi = ReturnType<typeof useScheduleGapPopover>;
|
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
import type { LeaveSlot } from '../types';
|
|
2
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export type ScheduleLeaveMode = 'all' | 'am' | 'pm'
|
|
3
|
+
export type TimeOffSelection = 'OFF_DAY' | 'ANNUAL' | 'MEDICAL' | 'EMERGENCY' | 'UNPAID';
|
|
4
|
+
export declare const TIME_OFF_OPTIONS: Array<{
|
|
5
|
+
value: TimeOffSelection;
|
|
6
|
+
label: string;
|
|
7
|
+
}>;
|
|
8
|
+
export type ScheduleLeaveMode = 'all' | 'am' | 'pm';
|
|
9
9
|
export interface ScheduleLeaveState {
|
|
10
10
|
open: boolean;
|
|
11
11
|
empId: number | null;
|
|
12
12
|
dayIdx: number | null;
|
|
13
13
|
/** Booking a new record, rather than editing one that is already on the day. */
|
|
14
14
|
isNew: boolean;
|
|
15
|
-
|
|
15
|
+
selection: TimeOffSelection;
|
|
16
16
|
mode: ScheduleLeaveMode;
|
|
17
|
-
/** The hours when mode is 'custom'. */
|
|
18
|
-
from: string;
|
|
19
|
-
to: string;
|
|
20
17
|
}
|
|
21
18
|
/** The leave editor — V6.2's "Book leave" dialog: a reason, how much of the day it covers, and
|
|
22
|
-
* what that does to the person's availability. Opened from the add popup's
|
|
19
|
+
* what that does to the person's availability. Opened from the add popup's Off day / Leave rows
|
|
23
20
|
* (booking) and from an existing leave card (editing, or approving a pending request). */
|
|
24
21
|
export declare function useScheduleLeave(board: ScheduleBoardApi): {
|
|
25
22
|
state: {
|
|
@@ -27,29 +24,20 @@ export declare function useScheduleLeave(board: ScheduleBoardApi): {
|
|
|
27
24
|
empId: number | null;
|
|
28
25
|
dayIdx: number | null;
|
|
29
26
|
isNew: boolean;
|
|
30
|
-
|
|
27
|
+
selection: TimeOffSelection;
|
|
31
28
|
mode: ScheduleLeaveMode;
|
|
32
|
-
from: string;
|
|
33
|
-
to: string;
|
|
34
29
|
};
|
|
35
30
|
employee: import("vue").ComputedRef<import("../types").Employee | undefined>;
|
|
36
31
|
activeSlot: import("vue").ComputedRef<LeaveSlot | null>;
|
|
37
32
|
options: import("vue").ComputedRef<({
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
name: "Specific hours";
|
|
41
|
-
} | {
|
|
42
|
-
hrs: string;
|
|
43
|
-
mode: "all";
|
|
44
|
-
name: "All day";
|
|
33
|
+
readonly mode: "all";
|
|
34
|
+
readonly name: "Full day";
|
|
45
35
|
} | {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
name: "Morning";
|
|
36
|
+
readonly mode: "am";
|
|
37
|
+
readonly name: "Half day AM";
|
|
49
38
|
} | {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
name: "Afternoon";
|
|
39
|
+
readonly mode: "pm";
|
|
40
|
+
readonly name: "Half day PM";
|
|
53
41
|
})[]>;
|
|
54
42
|
span: import("vue").ComputedRef<{
|
|
55
43
|
from: string;
|
|
@@ -57,14 +45,15 @@ export declare function useScheduleLeave(board: ScheduleBoardApi): {
|
|
|
57
45
|
hours: number;
|
|
58
46
|
}>;
|
|
59
47
|
valid: import("vue").ComputedRef<boolean>;
|
|
48
|
+
selectionLabel: import("vue").ComputedRef<string>;
|
|
60
49
|
dayLabel: import("vue").ComputedRef<string>;
|
|
61
50
|
hoursText: import("vue").ComputedRef<string>;
|
|
62
|
-
coverText: import("vue").ComputedRef<
|
|
51
|
+
coverText: import("vue").ComputedRef<"Full day" | "Half day AM" | "Half day PM">;
|
|
63
52
|
openFor: (empId: number, dayIdx: number, reason?: string | null) => void;
|
|
64
53
|
close: () => void;
|
|
65
|
-
save: () => void
|
|
66
|
-
approve: () => void
|
|
54
|
+
save: () => Promise<void>;
|
|
55
|
+
approve: () => Promise<void>;
|
|
67
56
|
reject: () => void;
|
|
68
|
-
remove: () => void
|
|
57
|
+
remove: () => Promise<void>;
|
|
69
58
|
};
|
|
70
59
|
export type ScheduleLeaveApi = ReturnType<typeof useScheduleLeave>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { useScheduleOnboardingWizard } from './useScheduleOnboardingWizard';
|
|
2
|
+
import type { useScheduleSetupBanner } from './useScheduleSetupBanner';
|
|
3
|
+
type SetupBannerApi = ReturnType<typeof useScheduleSetupBanner>;
|
|
4
|
+
type OnboardingWizardApi = ReturnType<typeof useScheduleOnboardingWizard>;
|
|
5
|
+
/** Coordinates the welcome banner and wizard without making SchedulePage own onboarding flow. */
|
|
6
|
+
export declare function useScheduleOnboardingFlow(setupBanner: SetupBannerApi, wizard: OnboardingWizardApi): {
|
|
7
|
+
onWelcomeSetUp: () => void;
|
|
8
|
+
};
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Employee } from '../types';
|
|
2
|
+
import type { FdtoScheduleEmployee } from '@feedmepos/hrm-schedule-contract';
|
|
3
|
+
import type { TeamRow } from './onboarding-types';
|
|
4
|
+
export interface OnboardingProfileRow {
|
|
5
|
+
emp: Employee;
|
|
6
|
+
row: TeamRow;
|
|
7
|
+
}
|
|
8
|
+
/** Writes the queued team and availability drafts once per employee. */
|
|
9
|
+
export declare function saveOnboardingProfiles(pendingTeam: Set<number>, pendingAvail: Map<number, Array<{
|
|
10
|
+
dayOfWeek: number;
|
|
11
|
+
start: string;
|
|
12
|
+
end: string;
|
|
13
|
+
}>>, rows: OnboardingProfileRow[], rawEmployee: (id: number) => FdtoScheduleEmployee | undefined): Promise<void>;
|