wcz-layout 6.7.2 → 8.3.2
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/Approval-BTJTexDo.js +143 -0
- package/dist/Approval-BTJTexDo.js.map +1 -0
- package/dist/DialogsContext-DLqA8RJ_.js +7 -0
- package/dist/DialogsContext-DLqA8RJ_.js.map +1 -0
- package/dist/Email-C9qwj7GD.js +20 -0
- package/dist/Email-C9qwj7GD.js.map +1 -0
- package/dist/FileMeta-DDqUju1Y.js +19 -0
- package/dist/FileMeta-DDqUju1Y.js.map +1 -0
- package/dist/FileMeta-ILLTOjaM.d.ts +20 -0
- package/dist/NotificationContext-CgwUOeW0.js +7 -0
- package/dist/NotificationContext-CgwUOeW0.js.map +1 -0
- package/dist/RouterListItemButton-owZVvuC_.js +78 -0
- package/dist/RouterListItemButton-owZVvuC_.js.map +1 -0
- package/dist/User-CT_IDGuG.d.ts +15 -0
- package/dist/apiMiddleware-CtY4rOFU.js +23 -0
- package/dist/apiMiddleware-CtY4rOFU.js.map +1 -0
- package/dist/components.d.ts +118 -0
- package/dist/components.js +1554 -0
- package/dist/components.js.map +1 -0
- package/dist/data/client.d.ts +3111 -0
- package/dist/data/client.js +188 -0
- package/dist/data/client.js.map +1 -0
- package/dist/data/server.d.ts +19 -0
- package/dist/data/server.js +16 -0
- package/dist/data/server.js.map +1 -0
- package/dist/data.d.ts +7 -0
- package/dist/data.js +2 -0
- package/dist/env-ON-cyE3N.js +31 -0
- package/dist/env-ON-cyE3N.js.map +1 -0
- package/dist/file-BUdLb7H1.js +148 -0
- package/dist/file-BUdLb7H1.js.map +1 -0
- package/dist/file-Dsht7yOP.js +100 -0
- package/dist/file-Dsht7yOP.js.map +1 -0
- package/dist/hooks.d.ts +226 -0
- package/dist/hooks.js +1180 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.js +2106 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware.d.ts +47 -0
- package/dist/middleware.js +80 -0
- package/dist/middleware.js.map +1 -0
- package/dist/models.d.ts +474 -0
- package/dist/models.js +74 -0
- package/dist/models.js.map +1 -0
- package/dist/msalClient-CYiQAFnY.d.ts +15 -0
- package/dist/msalServer-B9sVqpQ2.js +47 -0
- package/dist/msalServer-B9sVqpQ2.js.map +1 -0
- package/dist/peoplesoft-BCjRje6b.js +240 -0
- package/dist/peoplesoft-BCjRje6b.js.map +1 -0
- package/dist/peoplesoft-Cze2ngGd.d.ts +1150 -0
- package/dist/queryClient-D64McLhZ.js +7 -0
- package/dist/queryClient-D64McLhZ.js.map +1 -0
- package/dist/useDialogs-BJVhBr8S.js +248 -0
- package/dist/useDialogs-BJVhBr8S.js.map +1 -0
- package/dist/utils-BMUmv2ws.js +191 -0
- package/dist/utils-BMUmv2ws.js.map +1 -0
- package/dist/utils-CvvyM8Xw.d.ts +56 -0
- package/dist/utils.d.ts +21 -0
- package/dist/utils.js +6 -0
- package/dist/vite.d.ts +7 -0
- package/dist/vite.js +147 -0
- package/dist/vite.js.map +1 -0
- package/package.json +158 -62
- package/skills/client-db/SKILL.md +107 -0
- package/skills/data-grid/SKILL.md +147 -0
- package/skills/db-schema/SKILL.md +68 -0
- package/skills/dialogs/SKILL.md +79 -0
- package/skills/forms/SKILL.md +82 -0
- package/skills/general/SKILL.md +17 -0
- package/skills/notifications/SKILL.md +43 -0
- package/skills/routing/SKILL.md +123 -0
- package/skills/server-functions/SKILL.md +109 -0
- package/skills/services/SKILL.md +28 -0
- package/skills/services/docs/approval.md +204 -0
- package/skills/services/docs/email.md +32 -0
- package/skills/services/docs/file.md +85 -0
- package/skills/services/docs/peoplesoft.md +110 -0
- package/skills/start/SKILL.md +46 -0
- package/skills/start/steps/01-git-setup.md +10 -0
- package/skills/start/steps/02-project-name-setup.md +14 -0
- package/skills/start/steps/03-apm-setup.md +208 -0
- package/skills/start/steps/04-database-setup.md +37 -0
- package/skills/start/steps/05-entra-setup.md +59 -0
- package/skills/start/steps/06-vault-setup.md +53 -0
- package/skills/start/steps/07-generate-favicon.md +10 -0
- package/skills/start/steps/08-commit.md +15 -0
- package/dist/src/components/Layout.d.ts +0 -16
- package/dist/src/components/Layout.js +0 -122
- package/dist/src/components/Layout.js.map +0 -1
- package/dist/src/components/dataGrid/ChipInputCell.d.ts +0 -9
- package/dist/src/components/dataGrid/ChipInputCell.js +0 -17
- package/dist/src/components/dataGrid/ChipInputCell.js.map +0 -1
- package/dist/src/components/dataGrid/EditableColumnHeader.d.ts +0 -2
- package/dist/src/components/dataGrid/EditableColumnHeader.js +0 -7
- package/dist/src/components/dataGrid/EditableColumnHeader.js.map +0 -1
- package/dist/src/components/dataGrid/GridToolbar.d.ts +0 -8
- package/dist/src/components/dataGrid/GridToolbar.js +0 -40
- package/dist/src/components/dataGrid/GridToolbar.js.map +0 -1
- package/dist/src/components/dataGrid/TableContainer.d.ts +0 -3
- package/dist/src/components/dataGrid/TableContainer.js +0 -32
- package/dist/src/components/dataGrid/TableContainer.js.map +0 -1
- package/dist/src/components/form/FormAutocomplete.d.ts +0 -7
- package/dist/src/components/form/FormAutocomplete.js +0 -10
- package/dist/src/components/form/FormAutocomplete.js.map +0 -1
- package/dist/src/components/form/FormCheckbox.d.ts +0 -7
- package/dist/src/components/form/FormCheckbox.js +0 -11
- package/dist/src/components/form/FormCheckbox.js.map +0 -1
- package/dist/src/components/form/FormDatePicker.d.ts +0 -9
- package/dist/src/components/form/FormDatePicker.js +0 -19
- package/dist/src/components/form/FormDatePicker.js.map +0 -1
- package/dist/src/components/form/FormDateTimePicker.d.ts +0 -9
- package/dist/src/components/form/FormDateTimePicker.js +0 -19
- package/dist/src/components/form/FormDateTimePicker.js.map +0 -1
- package/dist/src/components/form/FormNumberField.d.ts +0 -12
- package/dist/src/components/form/FormNumberField.js +0 -12
- package/dist/src/components/form/FormNumberField.js.map +0 -1
- package/dist/src/components/form/FormRadioGroup.d.ts +0 -13
- package/dist/src/components/form/FormRadioGroup.js +0 -11
- package/dist/src/components/form/FormRadioGroup.js.map +0 -1
- package/dist/src/components/form/FormSlider.d.ts +0 -7
- package/dist/src/components/form/FormSlider.js +0 -11
- package/dist/src/components/form/FormSlider.js.map +0 -1
- package/dist/src/components/form/FormSubmitButton.d.ts +0 -5
- package/dist/src/components/form/FormSubmitButton.js +0 -13
- package/dist/src/components/form/FormSubmitButton.js.map +0 -1
- package/dist/src/components/form/FormSwitch.d.ts +0 -7
- package/dist/src/components/form/FormSwitch.js +0 -11
- package/dist/src/components/form/FormSwitch.js.map +0 -1
- package/dist/src/components/form/FormTextField.d.ts +0 -7
- package/dist/src/components/form/FormTextField.js +0 -11
- package/dist/src/components/form/FormTextField.js.map +0 -1
- package/dist/src/components/layout/AccountMenu.d.ts +0 -9
- package/dist/src/components/layout/AccountMenu.js +0 -44
- package/dist/src/components/layout/AccountMenu.js.map +0 -1
- package/dist/src/components/layout/DevelopmentBanner.d.ts +0 -7
- package/dist/src/components/layout/DevelopmentBanner.js +0 -29
- package/dist/src/components/layout/DevelopmentBanner.js.map +0 -1
- package/dist/src/components/layout/ErrorPage.d.ts +0 -2
- package/dist/src/components/layout/ErrorPage.js +0 -25
- package/dist/src/components/layout/ErrorPage.js.map +0 -1
- package/dist/src/components/layout/LayoutDialog.d.ts +0 -12
- package/dist/src/components/layout/LayoutDialog.js +0 -12
- package/dist/src/components/layout/LayoutDialog.js.map +0 -1
- package/dist/src/components/layout/LayoutSnackbar.d.ts +0 -8
- package/dist/src/components/layout/LayoutSnackbar.js +0 -25
- package/dist/src/components/layout/LayoutSnackbar.js.map +0 -1
- package/dist/src/components/layout/NavigationDrawer.d.ts +0 -11
- package/dist/src/components/layout/NavigationDrawer.js +0 -70
- package/dist/src/components/layout/NavigationDrawer.js.map +0 -1
- package/dist/src/components/layout/NotificationMenu.d.ts +0 -8
- package/dist/src/components/layout/NotificationMenu.js +0 -26
- package/dist/src/components/layout/NotificationMenu.js.map +0 -1
- package/dist/src/components/layout/TypographyWithIcon.d.ts +0 -7
- package/dist/src/components/layout/TypographyWithIcon.js +0 -22
- package/dist/src/components/layout/TypographyWithIcon.js.map +0 -1
- package/dist/src/components/layout/Unauthorized.d.ts +0 -2
- package/dist/src/components/layout/Unauthorized.js +0 -26
- package/dist/src/components/layout/Unauthorized.js.map +0 -1
- package/dist/src/contexts/LayoutContext.d.ts +0 -40
- package/dist/src/contexts/LayoutContext.js +0 -60
- package/dist/src/contexts/LayoutContext.js.map +0 -1
- package/dist/src/contexts/UserContext.d.ts +0 -24
- package/dist/src/contexts/UserContext.js +0 -55
- package/dist/src/contexts/UserContext.js.map +0 -1
- package/dist/src/hooks/FormHooks.d.ts +0 -46
- package/dist/src/hooks/FormHooks.js +0 -31
- package/dist/src/hooks/FormHooks.js.map +0 -1
- package/dist/src/hooks/UseSnackbar.d.ts +0 -10
- package/dist/src/hooks/UseSnackbar.js +0 -23
- package/dist/src/hooks/UseSnackbar.js.map +0 -1
- package/dist/src/hooks/UseUser.d.ts +0 -10
- package/dist/src/hooks/UseUser.js +0 -25
- package/dist/src/hooks/UseUser.js.map +0 -1
- package/dist/src/index.d.ts +0 -20
- package/dist/src/index.js +0 -15
- package/dist/src/index.js.map +0 -1
- package/dist/src/models/Error.d.ts +0 -6
- package/dist/src/models/Error.js +0 -2
- package/dist/src/models/Error.js.map +0 -1
- package/dist/src/models/KeycloakSettings.d.ts +0 -8
- package/dist/src/models/KeycloakSettings.js +0 -2
- package/dist/src/models/KeycloakSettings.js.map +0 -1
- package/dist/src/models/LayoutPaletteColorOptions.d.ts +0 -6
- package/dist/src/models/LayoutPaletteColorOptions.js +0 -2
- package/dist/src/models/LayoutPaletteColorOptions.js.map +0 -1
- package/dist/src/models/LayoutRoute.d.ts +0 -14
- package/dist/src/models/LayoutRoute.js +0 -2
- package/dist/src/models/LayoutRoute.js.map +0 -1
- package/dist/src/models/Notification.d.ts +0 -9
- package/dist/src/models/Notification.js +0 -2
- package/dist/src/models/Notification.js.map +0 -1
- package/dist/src/models/PeoplesoftDepartment.d.ts +0 -14
- package/dist/src/models/PeoplesoftDepartment.js +0 -2
- package/dist/src/models/PeoplesoftDepartment.js.map +0 -1
- package/dist/src/models/PeoplesoftEmployee.d.ts +0 -34
- package/dist/src/models/PeoplesoftEmployee.js +0 -2
- package/dist/src/models/PeoplesoftEmployee.js.map +0 -1
- package/dist/src/models/Snackbar.d.ts +0 -15
- package/dist/src/models/Snackbar.js +0 -2
- package/dist/src/models/Snackbar.js.map +0 -1
- package/dist/src/models/User.d.ts +0 -27
- package/dist/src/models/User.js +0 -11
- package/dist/src/models/User.js.map +0 -1
- package/dist/src/models/types/EmployeeCategoryGroup.d.ts +0 -1
- package/dist/src/models/types/EmployeeCategoryGroup.js +0 -2
- package/dist/src/models/types/EmployeeCategoryGroup.js.map +0 -1
- package/dist/src/models/types/EmployeeStatus.d.ts +0 -1
- package/dist/src/models/types/EmployeeStatus.js +0 -2
- package/dist/src/models/types/EmployeeStatus.js.map +0 -1
- package/dist/src/utils/Auth.d.ts +0 -12
- package/dist/src/utils/Auth.js +0 -49
- package/dist/src/utils/Auth.js.map +0 -1
- package/dist/src/utils/Fetches.d.ts +0 -5
- package/dist/src/utils/Fetches.js +0 -66
- package/dist/src/utils/Fetches.js.map +0 -1
- package/dist/src/utils/FormUtils.d.ts +0 -7
- package/dist/src/utils/FormUtils.js +0 -9
- package/dist/src/utils/FormUtils.js.map +0 -1
- package/dist/src/utils/Helpers.d.ts +0 -11
- package/dist/src/utils/Helpers.js +0 -26
- package/dist/src/utils/Helpers.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/components/Layout.tsx +0 -183
- package/src/components/dataGrid/ChipInputCell.tsx +0 -31
- package/src/components/dataGrid/EditableColumnHeader.tsx +0 -7
- package/src/components/dataGrid/GridToolbar.tsx +0 -63
- package/src/components/dataGrid/TableContainer.tsx +0 -39
- package/src/components/form/FormAutocomplete.tsx +0 -34
- package/src/components/form/FormCheckbox.tsx +0 -32
- package/src/components/form/FormDatePicker.tsx +0 -34
- package/src/components/form/FormDateTimePicker.tsx +0 -34
- package/src/components/form/FormNumberField.tsx +0 -33
- package/src/components/form/FormRadioGroup.tsx +0 -43
- package/src/components/form/FormSlider.tsx +0 -28
- package/src/components/form/FormSubmitButton.tsx +0 -29
- package/src/components/form/FormSwitch.tsx +0 -32
- package/src/components/form/FormTextField.tsx +0 -26
- package/src/components/layout/AccountMenu.tsx +0 -160
- package/src/components/layout/DevelopmentBanner.tsx +0 -54
- package/src/components/layout/ErrorPage.tsx +0 -34
- package/src/components/layout/LayoutDialog.tsx +0 -50
- package/src/components/layout/LayoutSnackbar.tsx +0 -44
- package/src/components/layout/NavigationDrawer.tsx +0 -131
- package/src/components/layout/NotificationMenu.tsx +0 -76
- package/src/components/layout/TypographyWithIcon.tsx +0 -35
- package/src/components/layout/Unauthorized.tsx +0 -37
- package/src/contexts/LayoutContext.tsx +0 -127
- package/src/contexts/UserContext.tsx +0 -88
- package/src/hooks/FormHooks.ts +0 -33
- package/src/hooks/UseSnackbar.tsx +0 -28
- package/src/hooks/UseUser.tsx +0 -29
- package/src/index.ts +0 -27
- package/src/models/Error.tsx +0 -6
- package/src/models/KeycloakSettings.ts +0 -8
- package/src/models/LayoutPaletteColorOptions.tsx +0 -7
- package/src/models/LayoutRoute.ts +0 -15
- package/src/models/Notification.ts +0 -10
- package/src/models/PeoplesoftDepartment.ts +0 -15
- package/src/models/PeoplesoftEmployee.ts +0 -35
- package/src/models/Snackbar.ts +0 -16
- package/src/models/User.ts +0 -13
- package/src/models/types/EmployeeCategoryGroup.ts +0 -1
- package/src/models/types/EmployeeStatus.ts +0 -1
- package/src/utils/Auth.ts +0 -58
- package/src/utils/Fetches.ts +0 -83
- package/src/utils/FormUtils.ts +0 -22
- package/src/utils/Helpers.ts +0 -27
- package/tsconfig.json +0 -29
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# approval
|
|
2
|
+
|
|
3
|
+
## Client
|
|
4
|
+
|
|
5
|
+
- Query:
|
|
6
|
+
`approvalsQueryOptions`
|
|
7
|
+
`approvalQueryOptions`
|
|
8
|
+
- Mutation:
|
|
9
|
+
`createApprovalMutationOptions`
|
|
10
|
+
`approveApprovalMutationOptions`
|
|
11
|
+
`resubmitApprovalMutationOptions`
|
|
12
|
+
`withdrawApprovalMutationOptions`
|
|
13
|
+
`cancelApprovalMutationOptions`
|
|
14
|
+
|
|
15
|
+
## Server
|
|
16
|
+
|
|
17
|
+
- Fetch:
|
|
18
|
+
`getApprovals`
|
|
19
|
+
`getApproval`
|
|
20
|
+
- Mutate:
|
|
21
|
+
`createApproval`
|
|
22
|
+
`approveApproval`
|
|
23
|
+
`resubmitApproval`
|
|
24
|
+
`withdrawApproval`
|
|
25
|
+
`cancelApproval`
|
|
26
|
+
|
|
27
|
+
## Schemas/Models
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
const ApprovalRequestType = z.enum(["Single", "Batch"]);
|
|
31
|
+
|
|
32
|
+
const ApprovalStatus = z.enum([
|
|
33
|
+
"WaitingForApproval",
|
|
34
|
+
"Approved",
|
|
35
|
+
"PartiallyApproved",
|
|
36
|
+
"Rejected",
|
|
37
|
+
"Withdrawn",
|
|
38
|
+
"Cancelled",
|
|
39
|
+
]);
|
|
40
|
+
|
|
41
|
+
const ApprovalStepResult = z.enum([
|
|
42
|
+
"NotAvailable",
|
|
43
|
+
"FutureApproval",
|
|
44
|
+
"WaitingForApproval",
|
|
45
|
+
"Approved",
|
|
46
|
+
"Rejected",
|
|
47
|
+
"Skipped",
|
|
48
|
+
"Withdrawn",
|
|
49
|
+
"Cancelled",
|
|
50
|
+
]);
|
|
51
|
+
|
|
52
|
+
const StepApprovalOrder = z.enum(["Serial", "Parallel", "OneOfThem"]);
|
|
53
|
+
|
|
54
|
+
const ApprovalEmployeeSchema = z.object({
|
|
55
|
+
employeeId: z.string().trim().min(1).max(20),
|
|
56
|
+
name: z.string().trim().min(1).max(50),
|
|
57
|
+
email: z.email().min(1).max(100),
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
const ApprovalCoRequestorSchema = z.object({
|
|
61
|
+
employeeId: z.string().trim().min(1).max(20),
|
|
62
|
+
name: z.string().trim().min(1).max(50),
|
|
63
|
+
email: z.email().min(1).max(100),
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
const ApprovalFlowStepSchema = z.object({
|
|
67
|
+
id: z.uuid(),
|
|
68
|
+
order: z.number(),
|
|
69
|
+
approverRole: z.string().trim().min(1).max(100).default("Approver").optional(),
|
|
70
|
+
approver: ApprovalEmployeeSchema,
|
|
71
|
+
actualApprover: ApprovalEmployeeSchema.optional(),
|
|
72
|
+
result: ApprovalStepResult.default("NotAvailable").optional(),
|
|
73
|
+
resultDate: z.date().optional(),
|
|
74
|
+
resultComment: z.string().trim().max(2000).optional(),
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const ApprovalFlowSchema = z.object({
|
|
78
|
+
id: z.uuid(),
|
|
79
|
+
approvalStage: z.number(),
|
|
80
|
+
batchSequence: z.number().optional(),
|
|
81
|
+
approvalSequence: z.number(),
|
|
82
|
+
stepApprovalOrder: StepApprovalOrder,
|
|
83
|
+
steps: z.array(ApprovalFlowStepSchema),
|
|
84
|
+
isActive: z.boolean().default(false).optional(),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
const ApprovalCoRequestorGroupSchema = z.object({
|
|
88
|
+
role: z.string().trim().min(1),
|
|
89
|
+
email: z.email().optional(),
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
const ApprovalCoRequestorEmployeeSchema = z.object({
|
|
93
|
+
employeeId: z.string().trim().min(1),
|
|
94
|
+
name: z.string().trim().min(1),
|
|
95
|
+
email: z.email().optional(),
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
const ApprovalCoRequestorPrincipalSchema = z.union([
|
|
99
|
+
ApprovalCoRequestorGroupSchema,
|
|
100
|
+
ApprovalCoRequestorEmployeeSchema,
|
|
101
|
+
]);
|
|
102
|
+
|
|
103
|
+
const ApprovalSchema = z.object({
|
|
104
|
+
id: z.uuid(),
|
|
105
|
+
number: z.string().trim().max(30).optional(),
|
|
106
|
+
applicationName: z.string().trim().min(1).max(50),
|
|
107
|
+
type: ApprovalRequestType.default("Single").optional(),
|
|
108
|
+
status: ApprovalStatus,
|
|
109
|
+
created: z.date(),
|
|
110
|
+
createdBy: z.custom<ApprovalEmployee>(),
|
|
111
|
+
updated: z.date().optional(),
|
|
112
|
+
updatedBy: z.custom<ApprovalEmployee>().optional(),
|
|
113
|
+
approvalFlows: z.array(ApprovalFlow).min(1),
|
|
114
|
+
currentApprovers: z.array(ApprovalEmployee),
|
|
115
|
+
coRequestors: z
|
|
116
|
+
.array(z.object({ id: z.uuid(), principal: ApprovalCoRequestorPrincipalSchema }))
|
|
117
|
+
.optional(),
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
const GetApprovalsSchema = z.object({
|
|
121
|
+
appName: z.string().min(1).max(255),
|
|
122
|
+
status: ApprovalStatus.optional(),
|
|
123
|
+
approverEmployeeId: z.string().min(1).max(20).optional(),
|
|
124
|
+
stepResult: ApprovalStepResult.optional(),
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
const GetApprovalSchema = z.object({
|
|
128
|
+
id: z.uuid(),
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
const CreateApprovalSchema = ApprovalSchema.pick({
|
|
132
|
+
id: true,
|
|
133
|
+
number: true,
|
|
134
|
+
applicationName: true,
|
|
135
|
+
type: true,
|
|
136
|
+
status: true,
|
|
137
|
+
approvalFlows: true,
|
|
138
|
+
}).extend({
|
|
139
|
+
emailBody: z.string().trim().min(1),
|
|
140
|
+
approvalFlows: z
|
|
141
|
+
.array(
|
|
142
|
+
ApprovalFlowSchema.pick({
|
|
143
|
+
approvalStage: true,
|
|
144
|
+
batchSequence: true,
|
|
145
|
+
stepApprovalOrder: true,
|
|
146
|
+
steps: true,
|
|
147
|
+
}).extend({
|
|
148
|
+
steps: z.array(ApprovalFlowStepSchema.pick({ approverRole: true, approver: true })),
|
|
149
|
+
}),
|
|
150
|
+
)
|
|
151
|
+
.min(1),
|
|
152
|
+
coRequestors: z.array(ApprovalCoRequestorPrincipalSchema).optional(),
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
const ApproveApprovalSchema = z.object({
|
|
156
|
+
id: z.uuid(),
|
|
157
|
+
result: ApprovalStepResult,
|
|
158
|
+
resultComment: z.string().trim().max(2000).optional(),
|
|
159
|
+
emailBody: z.string().trim().min(1),
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
const ResubmitApprovalSchema = ApprovalSchema.pick({
|
|
163
|
+
id: true,
|
|
164
|
+
approvalFlows: true,
|
|
165
|
+
}).extend({
|
|
166
|
+
approvalFlows: z
|
|
167
|
+
.array(
|
|
168
|
+
ApprovalFlowSchema.pick({
|
|
169
|
+
approvalStage: true,
|
|
170
|
+
batchSequence: true,
|
|
171
|
+
stepApprovalOrder: true,
|
|
172
|
+
steps: true,
|
|
173
|
+
}).extend({
|
|
174
|
+
steps: z.array(ApprovalFlowStepSchema.pick({ approverRole: true, approver: true })),
|
|
175
|
+
}),
|
|
176
|
+
)
|
|
177
|
+
.min(1),
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
const CancelApprovalSchema = z.object({
|
|
181
|
+
id: z.uuid(),
|
|
182
|
+
comment: z.string().trim().min(1).max(2000),
|
|
183
|
+
emailBody: z.string().trim().min(1),
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
const WithdrawApprovalSchema = z.object({
|
|
187
|
+
id: z.uuid(),
|
|
188
|
+
comment: z.string().trim().min(1).max(2000),
|
|
189
|
+
emailBody: z.string().trim().min(1),
|
|
190
|
+
});
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Examples
|
|
194
|
+
|
|
195
|
+
```ts
|
|
196
|
+
import { approvalQueryOptions } from "wcz-layout/data/client";
|
|
197
|
+
import { approveApproval } from "wcz-layout/data/server";
|
|
198
|
+
|
|
199
|
+
// client
|
|
200
|
+
const { data: approval } = useQuery(approvalQueryOptions({ id }));
|
|
201
|
+
|
|
202
|
+
// server
|
|
203
|
+
await approveApproval({ data: { id, result: "Approved", emailBody } });
|
|
204
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# email
|
|
2
|
+
|
|
3
|
+
## Server
|
|
4
|
+
|
|
5
|
+
- `sendEmail`
|
|
6
|
+
|
|
7
|
+
## Schemas/Models
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
const EmailSchema = z.object({
|
|
11
|
+
subject: z.string().trim().min(1).max(60),
|
|
12
|
+
body: z.string().trim().min(1),
|
|
13
|
+
to: z.array(z.email()).min(1),
|
|
14
|
+
bcc: z.array(z.email()).optional(),
|
|
15
|
+
cc: z.array(z.email()).optional(),
|
|
16
|
+
attachments: z.array(EmailAttachmentSchema).optional(),
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const EmailAttachmentSchema = z.object({
|
|
20
|
+
appName: z.string().trim().min(1).max(100),
|
|
21
|
+
subId: z.uuid(),
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Examples
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import { sendEmail } from "wcz-layout/data/server";
|
|
29
|
+
|
|
30
|
+
// server
|
|
31
|
+
await sendEmail({ data: { subject: "Hello", body: "<p>Hi</p>", to: ["user@example.com"] } });
|
|
32
|
+
```
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# file
|
|
2
|
+
|
|
3
|
+
## Client
|
|
4
|
+
|
|
5
|
+
- Query:
|
|
6
|
+
`fileMetasQueryOptions`
|
|
7
|
+
`fileThumbnailQueryOptions`
|
|
8
|
+
`fileQueryOptions`
|
|
9
|
+
- Mutation:
|
|
10
|
+
`downloadFileMutationOptions`
|
|
11
|
+
`openFileMutationOptions`
|
|
12
|
+
`updateFileMetaMutationOptions`
|
|
13
|
+
`deleteFileMutationOptions`
|
|
14
|
+
`batchDeleteFilesMutationOptions`
|
|
15
|
+
- Hooks:
|
|
16
|
+
`useUploadFile`
|
|
17
|
+
|
|
18
|
+
## Server
|
|
19
|
+
|
|
20
|
+
- Fetch:
|
|
21
|
+
`getFileMetas`
|
|
22
|
+
`getFileThumbnail`
|
|
23
|
+
`getFile`
|
|
24
|
+
`downloadFile`.
|
|
25
|
+
- Mutate:
|
|
26
|
+
`updateFileMeta`
|
|
27
|
+
`deleteFile`
|
|
28
|
+
`batchDeleteFiles`
|
|
29
|
+
`uploadFile`
|
|
30
|
+
|
|
31
|
+
## Schemas/Models
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
const FileMetaSchema = z.object({
|
|
35
|
+
id: z.uuid(),
|
|
36
|
+
subId: z.uuid(),
|
|
37
|
+
appName: z.string().trim().min(1).max(255),
|
|
38
|
+
fileName: z.string().trim().min(1).max(255),
|
|
39
|
+
fileExtension: z.string().trim().min(1).max(255),
|
|
40
|
+
fileSize: z.number().min(0),
|
|
41
|
+
mediaSubType: z.string().trim().min(1).max(255),
|
|
42
|
+
mediaType: z.string().trim().min(1).max(255),
|
|
43
|
+
mimeType: z.string().trim().min(1).max(255),
|
|
44
|
+
createdBy: z.string().trim().min(1).max(255),
|
|
45
|
+
createdDate: z.date(),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const FileActionsSchema = z.object({
|
|
49
|
+
download: z.boolean().optional(),
|
|
50
|
+
delete: z.boolean().optional(),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const GetFileMetasSchema = z.object({
|
|
54
|
+
appName: z.string().min(1).max(255),
|
|
55
|
+
subId: z.uuid(),
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const FileSchema = z.object({
|
|
59
|
+
appName: z.string().min(1).max(255),
|
|
60
|
+
id: z.uuid(),
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const UpdateFileMetaSchema = FileMetaSchema.extend({
|
|
64
|
+
fileName: z.string().min(1).max(255),
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const UploadFileMetaSchema = z.object({
|
|
68
|
+
appName: z.string().min(1).max(255),
|
|
69
|
+
subId: z.uuid(),
|
|
70
|
+
file: z.instanceof(File),
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Examples
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
import { fileMetasQueryOptions } from "wcz-layout/data/client";
|
|
78
|
+
import { uploadFile } from "wcz-layout/data/server";
|
|
79
|
+
|
|
80
|
+
// client
|
|
81
|
+
const { data: files = [] } = useQuery(fileMetasQueryOptions({ appName, subId }));
|
|
82
|
+
|
|
83
|
+
// server
|
|
84
|
+
await uploadFile({ data: { appName, subId, file } });
|
|
85
|
+
```
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# peoplesoft
|
|
2
|
+
|
|
3
|
+
## Client
|
|
4
|
+
|
|
5
|
+
- Employee:
|
|
6
|
+
`employeesSearchQueryOptions`
|
|
7
|
+
`employeesQueryOptions`
|
|
8
|
+
`activeEmployeesQueryOptions`
|
|
9
|
+
`employeeByIdQueryOptions`
|
|
10
|
+
`previousEmployeeIdsQueryOptions`
|
|
11
|
+
`employeeSupervisorQueryOptions`
|
|
12
|
+
`employeeSubordinatesQueryOptions`
|
|
13
|
+
`employeeManagerQueryOptions`
|
|
14
|
+
`employeeGeneralManagerQueryOptions`
|
|
15
|
+
`companyGeneralManagerQueryOptions`
|
|
16
|
+
- Department:
|
|
17
|
+
`departmentsQueryOptions`
|
|
18
|
+
`departmentByIdQueryOptions`
|
|
19
|
+
`departmentManagerQueryOptions`
|
|
20
|
+
`departmentEmployeesQueryOptions`
|
|
21
|
+
|
|
22
|
+
## Server
|
|
23
|
+
|
|
24
|
+
- Employee:
|
|
25
|
+
`searchEmployees`
|
|
26
|
+
`getEmployees`
|
|
27
|
+
`getActiveEmployees`
|
|
28
|
+
`getEmployeeByEmployeeId`
|
|
29
|
+
`getPreviousEmployeeIds`
|
|
30
|
+
`getEmployeeSupervisor`
|
|
31
|
+
`getEmployeeSubordinates`
|
|
32
|
+
`getEmployeeManager`
|
|
33
|
+
`getEmployeeGeneralManager`
|
|
34
|
+
`getCompanyGeneralManager`
|
|
35
|
+
- Department:
|
|
36
|
+
`getDepartments`
|
|
37
|
+
`getDepartmentById`
|
|
38
|
+
`getDepartmentManager`
|
|
39
|
+
`getDepartmentEmployees`
|
|
40
|
+
|
|
41
|
+
## Schemas/Models
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
const EmployeeSchema = z.object({
|
|
45
|
+
badgeId: z.string().trim(),
|
|
46
|
+
category: z.string().trim(),
|
|
47
|
+
categoryGroup: EmployeeCategoryGroup,
|
|
48
|
+
companyCode: z.string().trim(),
|
|
49
|
+
contactPhone: z.string().trim(),
|
|
50
|
+
departmentId: z.string().trim(),
|
|
51
|
+
departmentDescription: z.string().trim(),
|
|
52
|
+
emailString: z.string().trim(),
|
|
53
|
+
employeeId: z.string().trim(),
|
|
54
|
+
extensionNumber: z.string().trim(),
|
|
55
|
+
firstName: z.string().trim(),
|
|
56
|
+
gender: z.string().trim(),
|
|
57
|
+
hiredDate: z.date(),
|
|
58
|
+
lastName: z.string().trim(),
|
|
59
|
+
managerId: z.string().trim(),
|
|
60
|
+
middleName: z.string().trim(),
|
|
61
|
+
name: z.string().trim(),
|
|
62
|
+
nameTitleCase: z.string().trim(),
|
|
63
|
+
nfcSn: z.string().trim(),
|
|
64
|
+
plantId: z.string().trim(),
|
|
65
|
+
position: z.string().trim(),
|
|
66
|
+
previousEmployeeIds: z.string().trim().nullable(),
|
|
67
|
+
reHiredDate: z.date().nullable(),
|
|
68
|
+
recordNumber: z.number(),
|
|
69
|
+
status: EmployeeStatus,
|
|
70
|
+
supervisorId: z.string().trim(),
|
|
71
|
+
terminationDate: z.date().nullable(),
|
|
72
|
+
terminationFutureDate: z.date().nullable(),
|
|
73
|
+
type: z.string().trim(),
|
|
74
|
+
upperDepartmentId: z.string().trim(),
|
|
75
|
+
jobCode: z.string().trim(),
|
|
76
|
+
jobDescription: z.string().trim(),
|
|
77
|
+
terminationReason: z.string().trim().nullable(),
|
|
78
|
+
supervisorRecordNumber: z.number(),
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const DepartmentSchema = z.object({
|
|
82
|
+
departmentId: z.string().trim(),
|
|
83
|
+
description: z.string().trim(),
|
|
84
|
+
managerId: z.string().trim(),
|
|
85
|
+
managerRecordNumber: z.string().trim(),
|
|
86
|
+
treeLevel: z.number(),
|
|
87
|
+
upperDepartmentId: z.string().trim(),
|
|
88
|
+
companyCode: z.string().trim(),
|
|
89
|
+
location: z.string().trim(),
|
|
90
|
+
salLocation: z.string().trim(),
|
|
91
|
+
plantId: z.string().trim(),
|
|
92
|
+
manager: EmployeeSchema,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const EmployeeCategoryGroup = z.enum(["IDL", "FD", "FI"]);
|
|
96
|
+
const EmployeeStatus = z.enum(["Active", "Terminated", "Leave of Absence"]);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Examples
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
import { activeEmployeesQueryOptions } from "wcz-layout/data/client";
|
|
103
|
+
import { getEmployeeManager } from "wcz-layout/data/server";
|
|
104
|
+
|
|
105
|
+
// client
|
|
106
|
+
const { data: employees = [] } = useQuery(activeEmployeesQueryOptions());
|
|
107
|
+
|
|
108
|
+
// server
|
|
109
|
+
const manager = await getEmployeeManager({ data: { employeeId } });
|
|
110
|
+
```
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: start
|
|
3
|
+
description: Initialize a new project from the standard template
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Project Initialization Orchestrator
|
|
7
|
+
|
|
8
|
+
## Role
|
|
9
|
+
|
|
10
|
+
You are an AI assistant helping a developer bootstrap a new project from this template.
|
|
11
|
+
|
|
12
|
+
## Execution Rules
|
|
13
|
+
|
|
14
|
+
- Execute steps in order. Read **only** the current step file.
|
|
15
|
+
- Pause whenever a step requires user input or a terminal command to finish.
|
|
16
|
+
- Do not skip ahead or batch multiple steps.
|
|
17
|
+
- When a step has branches (yes/no), follow only the matching branch.
|
|
18
|
+
- To read a step, open the linked file in the **File** column directly.
|
|
19
|
+
|
|
20
|
+
## Opening Message
|
|
21
|
+
|
|
22
|
+
Begin every conversation with:
|
|
23
|
+
|
|
24
|
+
> To make initialization flexible, you can choose:
|
|
25
|
+
>
|
|
26
|
+
> - ✅ **Full initialization** (recommended for new projects)
|
|
27
|
+
> - ✅ **Partial / custom steps** (select specific steps below)
|
|
28
|
+
|
|
29
|
+
Then list all steps by name so the user can pick.
|
|
30
|
+
|
|
31
|
+
## Steps
|
|
32
|
+
|
|
33
|
+
| # | File | Summary |
|
|
34
|
+
| --- | ---------------------------------------------------------- | ------------------------------- |
|
|
35
|
+
| 1 | [01-git-setup.md](steps/01-git-setup.md) | Configure remote and branch |
|
|
36
|
+
| 2 | [02-project-name-setup.md](steps/02-project-name-setup.md) | Replace placeholder names |
|
|
37
|
+
| 3 | [03-apm-setup.md](steps/03-apm-setup.md) | Register the app internally |
|
|
38
|
+
| 4 | [04-database-setup.md](steps/04-database-setup.md) | Postgres via Docker or existing |
|
|
39
|
+
| 5 | [05-entra-setup.md](steps/05-entra-setup.md) | Azure AD app registration |
|
|
40
|
+
| 6 | [06-vault-setup.md](steps/06-vault-setup.md) | Vault secrets configuration |
|
|
41
|
+
| 7 | [07-generate-favicon.md](steps/07-generate-favicon.md) | Generate and replace favicon |
|
|
42
|
+
| 8 | [08-commit.md](steps/08-commit.md) | Commit and push to origin |
|
|
43
|
+
|
|
44
|
+
## Completion
|
|
45
|
+
|
|
46
|
+
After step 8 succeeds, the workflow ends — no further action needed.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Git Setup
|
|
2
|
+
|
|
3
|
+
## Actions
|
|
4
|
+
|
|
5
|
+
1. Run `git remote -v`.
|
|
6
|
+
- **No remote exists** → ask for the repository URL, then run `git remote add origin <url>`.
|
|
7
|
+
- **Remote exists** → continue.
|
|
8
|
+
2. Run `git branch --show-current`.
|
|
9
|
+
- **Not `master`** → run `git branch -M master`.
|
|
10
|
+
- **Already `master`** → continue.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Project Name Setup
|
|
2
|
+
|
|
3
|
+
## User Input
|
|
4
|
+
|
|
5
|
+
Ask: **"What is your project name?"**
|
|
6
|
+
|
|
7
|
+
## Actions
|
|
8
|
+
|
|
9
|
+
Once provided, search-and-replace across the **entire workspace**:
|
|
10
|
+
|
|
11
|
+
| Find | Replace with |
|
|
12
|
+
| -------------- | -------------------------------------- |
|
|
13
|
+
| `project-name` | kebab-case version (e.g. `user-input`) |
|
|
14
|
+
| `Project Name` | Title Case version (e.g. `User Input`) |
|