@campxdev/shared 1.10.70 → 1.10.71
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/package.json +1 -1
- package/src/components/Form/Form.tsx +76 -50
- package/src/components/Form/RenderForm.tsx +63 -21
- package/src/components/HookForm/InlineTextField.tsx +74 -0
- package/src/components/HookForm/index.ts +9 -7
- package/src/components/ListItemButton.tsx +6 -1
- package/src/components/Selectors/CourseSelector.tsx +11 -3
- package/src/components/Selectors/FeeTypeSelector.tsx +2 -2
- package/src/components/Selectors/FormSelectors/FormCourseSelector.tsx +2 -0
- package/src/components/Selectors/FormSelectors/FormFeeTypeSelector.tsx +2 -0
- package/src/components/Selectors/FormSelectors/FormProgramSelector.tsx +2 -0
- package/src/components/Selectors/FormSelectors/FormQuotaSelector.tsx +2 -0
- package/src/components/Selectors/FormSelectors/FormSemesterSelector.tsx +2 -0
- package/src/components/Selectors/FormSelectors/MultiSelect/MultiProgramSelector.tsx +5 -3
- package/src/components/Selectors/FormSelectors/MultiSelect/MultiQuotaSelector.tsx +10 -4
- package/src/components/Selectors/ProgramSelector.tsx +5 -3
- package/src/components/Selectors/QuotaSelector.tsx +10 -4
- package/src/components/Selectors/SemesterSelector.tsx +4 -2
- package/src/shared-state/PermissionsStore.ts +67 -60
package/package.json
CHANGED
|
@@ -1,80 +1,101 @@
|
|
|
1
1
|
import { yupResolver } from '@hookform/resolvers/yup'
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
Alert,
|
|
4
|
+
Box,
|
|
5
|
+
Button,
|
|
6
|
+
ButtonProps,
|
|
7
|
+
CircularProgress,
|
|
8
|
+
Typography,
|
|
9
|
+
} from '@mui/material'
|
|
10
|
+
|
|
4
11
|
import { ReactNode, useState } from 'react'
|
|
5
12
|
import { useForm } from 'react-hook-form'
|
|
6
13
|
import { useMutation, useQueryClient } from 'react-query'
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import RenderForm, {
|
|
14
|
+
import { toast } from 'react-toastify'
|
|
15
|
+
import axios, { axiosErrorToast } from '../../config/axios'
|
|
16
|
+
import RenderForm, { RenderFormProps, generateYupSchema } from './RenderForm'
|
|
17
|
+
|
|
18
|
+
const makePostRequest = async ({
|
|
19
|
+
endpoint,
|
|
20
|
+
postBody,
|
|
21
|
+
}: {
|
|
22
|
+
endpoint: string
|
|
23
|
+
postBody: any
|
|
24
|
+
}) => {
|
|
25
|
+
const method = postBody?.id ? 'PUT' : 'POST'
|
|
26
|
+
const url = postBody?.id ? `${endpoint}/${postBody?.id}` : endpoint
|
|
27
|
+
return await axios({
|
|
28
|
+
url,
|
|
29
|
+
method,
|
|
30
|
+
data: postBody,
|
|
31
|
+
})
|
|
32
|
+
}
|
|
10
33
|
|
|
11
34
|
interface FormProps extends Omit<RenderFormProps, 'control'> {
|
|
12
35
|
buttonProps?: ButtonProps
|
|
13
36
|
submitBtn?: { label?: ReactNode }
|
|
14
|
-
cancelBtn?: { label?: ReactNode
|
|
37
|
+
cancelBtn?: { label?: ReactNode }
|
|
38
|
+
onSubmit?: (formData) => any
|
|
39
|
+
onCancel?: () => void
|
|
40
|
+
endPoint?: string
|
|
15
41
|
defaultValues?: any
|
|
16
42
|
refetchKey?: string
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
postFunction: (body: any) => Promise<AxiosResponse>
|
|
20
|
-
onPostSuccess?: (response: any) => void
|
|
21
|
-
onPostError?: (error: any) => void
|
|
22
|
-
onFormError?: (error: any) => void
|
|
43
|
+
onSuccess?: () => void
|
|
44
|
+
successToastMessage?: string
|
|
23
45
|
}
|
|
24
46
|
|
|
25
47
|
export default function Form({
|
|
26
48
|
submitBtn = { label: 'Submit' },
|
|
27
|
-
cancelBtn = { label: 'Cancel'
|
|
49
|
+
cancelBtn = { label: 'Cancel' },
|
|
28
50
|
buttonProps,
|
|
51
|
+
onSubmit = () => {},
|
|
52
|
+
endPoint,
|
|
29
53
|
defaultValues,
|
|
30
54
|
cols,
|
|
31
55
|
fields,
|
|
32
56
|
dropdowns,
|
|
33
57
|
refetchKey,
|
|
58
|
+
onSuccess = () => {},
|
|
34
59
|
onCancel,
|
|
35
|
-
|
|
36
|
-
postFunction,
|
|
37
|
-
onPostSuccess,
|
|
38
|
-
onPostError,
|
|
39
|
-
gap,
|
|
40
|
-
onFormError,
|
|
60
|
+
successToastMessage,
|
|
41
61
|
}: FormProps) {
|
|
42
62
|
const queryClient = useQueryClient()
|
|
43
63
|
const [error, setError] = useState<any>(null)
|
|
44
64
|
const { control, watch, handleSubmit } = useForm({
|
|
45
|
-
defaultValues
|
|
46
|
-
resolver: yupResolver(
|
|
47
|
-
generateYupSchema({
|
|
48
|
-
fieldGroups: fields as any,
|
|
49
|
-
}),
|
|
50
|
-
),
|
|
65
|
+
defaultValues,
|
|
66
|
+
resolver: yupResolver(generateYupSchema({ fieldGroups: [fields] })),
|
|
51
67
|
})
|
|
52
68
|
|
|
53
|
-
const { mutate, isLoading
|
|
69
|
+
const { data, mutate, isLoading } = useMutation(makePostRequest, {
|
|
54
70
|
onSuccess(data) {
|
|
55
71
|
queryClient.invalidateQueries(refetchKey)
|
|
56
|
-
|
|
72
|
+
toast.success(successToastMessage ?? 'Created Successfully')
|
|
73
|
+
onSuccess && onSuccess()
|
|
57
74
|
},
|
|
58
75
|
onError(error: any) {
|
|
59
|
-
|
|
76
|
+
setError(error?.response?.data?.message)
|
|
77
|
+
axiosErrorToast(error)
|
|
60
78
|
},
|
|
61
79
|
})
|
|
62
80
|
|
|
63
81
|
const onError = (error) => {
|
|
64
82
|
const errorArray = Object.values(error)?.map((item: any) => item?.message)
|
|
65
83
|
setError(errorArray)
|
|
66
|
-
onFormError && onFormError(error)
|
|
67
84
|
}
|
|
68
85
|
|
|
69
86
|
return (
|
|
70
87
|
<form
|
|
71
88
|
onSubmit={handleSubmit((originalFormData) => {
|
|
72
|
-
|
|
89
|
+
const modifiedFormData = onSubmit(originalFormData) ?? originalFormData
|
|
90
|
+
|
|
91
|
+
mutate({
|
|
92
|
+
endpoint: endPoint,
|
|
93
|
+
postBody: modifiedFormData,
|
|
94
|
+
})
|
|
73
95
|
}, onError)}
|
|
74
96
|
>
|
|
75
97
|
<RenderForm
|
|
76
98
|
cols={cols}
|
|
77
|
-
gap={gap}
|
|
78
99
|
fields={fields}
|
|
79
100
|
control={control}
|
|
80
101
|
dropdowns={dropdowns}
|
|
@@ -85,36 +106,41 @@ export default function Form({
|
|
|
85
106
|
sx={{
|
|
86
107
|
display: 'flex',
|
|
87
108
|
gap: '20px',
|
|
88
|
-
marginTop:
|
|
89
|
-
justifyContent: 'center',
|
|
109
|
+
marginTop: '3rem',
|
|
90
110
|
}}
|
|
91
111
|
>
|
|
92
|
-
<
|
|
93
|
-
|
|
94
|
-
disabled={posting}
|
|
112
|
+
<Button
|
|
113
|
+
fullWidth
|
|
95
114
|
type="submit"
|
|
115
|
+
disabled={isLoading}
|
|
116
|
+
endIcon={
|
|
117
|
+
isLoading && <CircularProgress sx={{ color: 'white' }} size={20} />
|
|
118
|
+
}
|
|
96
119
|
{...buttonProps}
|
|
97
120
|
>
|
|
98
121
|
{submitBtn?.label}
|
|
99
|
-
</
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
)}
|
|
122
|
+
</Button>
|
|
123
|
+
<Button
|
|
124
|
+
fullWidth
|
|
125
|
+
variant="outlined"
|
|
126
|
+
onClick={() => {
|
|
127
|
+
onCancel ? onCancel() : null
|
|
128
|
+
}}
|
|
129
|
+
disabled={isLoading}
|
|
130
|
+
{...buttonProps}
|
|
131
|
+
>
|
|
132
|
+
{cancelBtn?.label}
|
|
133
|
+
</Button>
|
|
112
134
|
</Box>
|
|
113
135
|
</form>
|
|
114
136
|
)
|
|
115
137
|
}
|
|
116
138
|
|
|
117
|
-
const FormErrorDisplay = ({
|
|
139
|
+
export const FormErrorDisplay = ({
|
|
140
|
+
message,
|
|
141
|
+
}: {
|
|
142
|
+
message: string | string[]
|
|
143
|
+
}) => {
|
|
118
144
|
if (!message) return null
|
|
119
145
|
|
|
120
146
|
if (typeof message === 'string')
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { Box, Typography } from '@mui/material'
|
|
1
|
+
import { Box, CircularProgress, Typography, alpha, styled } from '@mui/material'
|
|
2
2
|
import { ReactNode } from 'react'
|
|
3
|
+
import { Control, useController } from 'react-hook-form'
|
|
3
4
|
import * as yup from 'yup'
|
|
4
|
-
import { Control } from 'react-hook-form'
|
|
5
5
|
import {
|
|
6
6
|
FormDatePicker,
|
|
7
|
+
FormMultiSelect,
|
|
7
8
|
FormRadioGroup,
|
|
9
|
+
FormSingleCheckbox,
|
|
8
10
|
FormSingleSelect,
|
|
9
11
|
FormTextField,
|
|
10
12
|
} from '../HookForm'
|
|
@@ -38,6 +40,9 @@ type FormTypes =
|
|
|
38
40
|
| 'FormSingleSelect'
|
|
39
41
|
| 'FormRadioGroup'
|
|
40
42
|
| 'FormDatePicker'
|
|
43
|
+
| 'FormMultiSelect'
|
|
44
|
+
| 'Loader'
|
|
45
|
+
| 'FormSingleCheckbox'
|
|
41
46
|
|
|
42
47
|
export interface Field {
|
|
43
48
|
render: FormTypes
|
|
@@ -46,12 +51,17 @@ export interface Field {
|
|
|
46
51
|
required?: boolean
|
|
47
52
|
elementProps?: any
|
|
48
53
|
disabled?: boolean
|
|
49
|
-
|
|
54
|
+
validation?: any
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface Option {
|
|
58
|
+
label: string | ReactNode
|
|
59
|
+
value: any
|
|
50
60
|
}
|
|
51
61
|
|
|
52
62
|
export interface RenderFormProps {
|
|
53
63
|
fields: Field[]
|
|
54
|
-
dropdowns?: { [x: string]:
|
|
64
|
+
dropdowns?: { [x: string]: Option[] }
|
|
55
65
|
control: Control<any, any>
|
|
56
66
|
cols: number
|
|
57
67
|
data?: any
|
|
@@ -66,7 +76,7 @@ const RenderForm = ({
|
|
|
66
76
|
cols,
|
|
67
77
|
data = null,
|
|
68
78
|
fieldArrayOptions,
|
|
69
|
-
gap = '1rem',
|
|
79
|
+
gap = '20px 1rem',
|
|
70
80
|
}: RenderFormProps) => {
|
|
71
81
|
return (
|
|
72
82
|
<>
|
|
@@ -106,6 +116,7 @@ const renderFormField = ({
|
|
|
106
116
|
? `${fieldArrayOptions?.name}.${fieldArrayOptions?.index}.${field?.name}`
|
|
107
117
|
: field?.name
|
|
108
118
|
|
|
119
|
+
const { field: fieldData } = useController({ name: field.name, control })
|
|
109
120
|
switch (field.render) {
|
|
110
121
|
case 'FormTextField':
|
|
111
122
|
return (
|
|
@@ -134,7 +145,6 @@ const renderFormField = ({
|
|
|
134
145
|
case 'FormDatePicker':
|
|
135
146
|
return (
|
|
136
147
|
<FormDatePicker
|
|
137
|
-
size="medium"
|
|
138
148
|
control={control}
|
|
139
149
|
name={name}
|
|
140
150
|
label={field?.label}
|
|
@@ -156,34 +166,66 @@ const renderFormField = ({
|
|
|
156
166
|
{...elementProps}
|
|
157
167
|
/>
|
|
158
168
|
)
|
|
169
|
+
case 'FormMultiSelect':
|
|
170
|
+
return (
|
|
171
|
+
<FormMultiSelect
|
|
172
|
+
control={control}
|
|
173
|
+
label={field?.label}
|
|
174
|
+
required={field?.required}
|
|
175
|
+
disabled={field?.disabled}
|
|
176
|
+
name={name}
|
|
177
|
+
options={dropdown}
|
|
178
|
+
{...elementProps}
|
|
179
|
+
/>
|
|
180
|
+
)
|
|
181
|
+
|
|
159
182
|
case 'Display':
|
|
160
|
-
return
|
|
183
|
+
return (
|
|
184
|
+
<Display
|
|
185
|
+
label={field?.label}
|
|
186
|
+
value={fieldData.value}
|
|
187
|
+
disabled={field?.disabled}
|
|
188
|
+
/>
|
|
189
|
+
)
|
|
161
190
|
|
|
162
|
-
case '
|
|
163
|
-
return <
|
|
191
|
+
case 'Loader':
|
|
192
|
+
return <CircularProgress />
|
|
193
|
+
|
|
194
|
+
case 'FormSingleCheckbox':
|
|
195
|
+
return (
|
|
196
|
+
<FormSingleCheckbox
|
|
197
|
+
control={control}
|
|
198
|
+
label={field?.label}
|
|
199
|
+
required={field?.required}
|
|
200
|
+
disabled={field?.disabled}
|
|
201
|
+
name={name}
|
|
202
|
+
checked={fieldData.value ?? false}
|
|
203
|
+
{...elementProps}
|
|
204
|
+
/>
|
|
205
|
+
)
|
|
164
206
|
|
|
165
207
|
default:
|
|
166
208
|
return <>{field?.label}</>
|
|
167
209
|
}
|
|
168
210
|
}
|
|
169
211
|
|
|
170
|
-
const
|
|
212
|
+
const Display = ({ label, value, disabled }) => {
|
|
171
213
|
return (
|
|
172
214
|
<Box>
|
|
173
215
|
<Typography variant="subtitle2">{label}</Typography>
|
|
174
|
-
<
|
|
216
|
+
<StyledTypography variant="body1" marginTop={'5px'} disabled={disabled}>
|
|
175
217
|
{value ?? '-'}
|
|
176
|
-
</
|
|
218
|
+
</StyledTypography>
|
|
177
219
|
</Box>
|
|
178
220
|
)
|
|
179
221
|
}
|
|
180
222
|
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
223
|
+
const StyledTypography = styled(Typography, {
|
|
224
|
+
shouldForwardProp(propName) {
|
|
225
|
+
return propName !== 'disabled'
|
|
226
|
+
},
|
|
227
|
+
})<{ disabled: boolean }>(({ theme, disabled }) => ({
|
|
228
|
+
color: disabled
|
|
229
|
+
? alpha(theme.palette.secondary.main, 0.4)
|
|
230
|
+
: theme.palette.secondary.main,
|
|
231
|
+
}))
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Box, styled, TextField, Typography } from '@mui/material'
|
|
2
|
+
import { Controller } from 'react-hook-form'
|
|
3
|
+
|
|
4
|
+
const StyledInlineTextField = styled(TextField)(({ theme }) => ({
|
|
5
|
+
maxHeight: '35px',
|
|
6
|
+
'& legend': {
|
|
7
|
+
display: 'none',
|
|
8
|
+
},
|
|
9
|
+
|
|
10
|
+
'& fieldset': {
|
|
11
|
+
top: 0,
|
|
12
|
+
},
|
|
13
|
+
}))
|
|
14
|
+
|
|
15
|
+
const StyledInlineFlex = styled(Box)(({ theme }) => ({
|
|
16
|
+
width: '100%',
|
|
17
|
+
flexWrap: 'wrap',
|
|
18
|
+
display: 'flex',
|
|
19
|
+
gap: '10px',
|
|
20
|
+
alignItems: 'baseline',
|
|
21
|
+
'& .MuiTypography-root': {
|
|
22
|
+
flexShrink: 0,
|
|
23
|
+
},
|
|
24
|
+
'& .MuiTextField-root': {
|
|
25
|
+
maxWidth: '100px',
|
|
26
|
+
},
|
|
27
|
+
}))
|
|
28
|
+
|
|
29
|
+
export const FormInlineTextField = ({ control, label }) => {
|
|
30
|
+
const regex = /\{([^}]+)\}/
|
|
31
|
+
const splitArr = label.split(regex)
|
|
32
|
+
|
|
33
|
+
function getParsedArr(arr) {
|
|
34
|
+
for (let i = 1; i < arr.length; i += 2) {
|
|
35
|
+
const split = arr[i].split(':')
|
|
36
|
+
arr[i] = (
|
|
37
|
+
<Controller
|
|
38
|
+
name={split[0]}
|
|
39
|
+
control={control}
|
|
40
|
+
render={({ field: { onChange, value }, fieldState: { error } }) => (
|
|
41
|
+
<StyledInlineTextField
|
|
42
|
+
size="small"
|
|
43
|
+
key={i}
|
|
44
|
+
placeholder={split[1] ?? ''}
|
|
45
|
+
value={value}
|
|
46
|
+
onChange={onChange}
|
|
47
|
+
error={error ? true : false}
|
|
48
|
+
helperText={error ? error.message : null}
|
|
49
|
+
/>
|
|
50
|
+
)}
|
|
51
|
+
/>
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
return arr
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
<StyledInlineFlex>
|
|
59
|
+
{getParsedArr(splitArr)?.map((item, index) => {
|
|
60
|
+
if (typeof item === 'string' && item.length) {
|
|
61
|
+
return (
|
|
62
|
+
<Typography variant="body1" key={index}>
|
|
63
|
+
{item}
|
|
64
|
+
</Typography>
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return item
|
|
69
|
+
})}
|
|
70
|
+
</StyledInlineFlex>
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export default FormInlineTextField
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
import
|
|
1
|
+
import AutoCompleteSearch from './AutoCompleteSearch'
|
|
2
2
|
import FormDatePicker from './DatePicker'
|
|
3
|
+
import FormDateTimePicker from './DateTimePicker'
|
|
4
|
+
import FormInlineTextField from './InLineTextField'
|
|
3
5
|
import MultiCheckbox from './MultiCheckbox'
|
|
4
6
|
import MultiSelect from './MultiSelect'
|
|
5
7
|
import RadioGroup from './RadioGroup'
|
|
6
8
|
import SingleCheckbox from './SingleCheckbox'
|
|
7
|
-
import
|
|
9
|
+
import SingleSelect from './SingleSelect'
|
|
8
10
|
import FormTextField from './TextField'
|
|
9
11
|
import TimePicker from './TimePicker'
|
|
10
|
-
import FormDateTimePicker from './DateTimePicker'
|
|
11
12
|
|
|
12
13
|
export {
|
|
13
|
-
|
|
14
|
+
AutoCompleteSearch as FormAutoCompleteSearch,
|
|
14
15
|
FormDatePicker,
|
|
15
|
-
|
|
16
|
+
FormDateTimePicker,
|
|
17
|
+
FormInlineTextField,
|
|
16
18
|
MultiCheckbox as FormMultiCheckbox,
|
|
17
19
|
MultiSelect as FormMultiSelect,
|
|
18
20
|
RadioGroup as FormRadioGroup,
|
|
19
21
|
SingleCheckbox as FormSingleCheckbox,
|
|
20
|
-
|
|
22
|
+
SingleSelect as FormSingleSelect,
|
|
23
|
+
FormTextField,
|
|
21
24
|
TimePicker as FormTimePicker,
|
|
22
|
-
FormDateTimePicker,
|
|
23
25
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ChevronRight } from '@mui/icons-material'
|
|
2
2
|
import {
|
|
3
|
+
Box,
|
|
3
4
|
ListItemButtonProps,
|
|
4
5
|
ListItemIcon,
|
|
5
6
|
ListItemText,
|
|
@@ -24,7 +25,11 @@ export const ListItemButton = ({
|
|
|
24
25
|
}: Props) => {
|
|
25
26
|
return (
|
|
26
27
|
<StyledListItemButton isActive={isActive} onClick={onClick}>
|
|
27
|
-
{Icon ?
|
|
28
|
+
{Icon ? (
|
|
29
|
+
<ListItemIcon>{<Icon />}</ListItemIcon>
|
|
30
|
+
) : (
|
|
31
|
+
<Box minWidth={16}></Box>
|
|
32
|
+
)}
|
|
28
33
|
<ListItemText primary={label} />
|
|
29
34
|
</StyledListItemButton>
|
|
30
35
|
)
|
|
@@ -11,17 +11,25 @@ type CourseSelectorProps = {
|
|
|
11
11
|
allowAll?: boolean
|
|
12
12
|
error?: boolean
|
|
13
13
|
helperText?: string
|
|
14
|
+
api?: string
|
|
14
15
|
} & SelectProps
|
|
15
16
|
export default function CourseSelector(props: CourseSelectorProps) {
|
|
16
|
-
const {
|
|
17
|
+
const {
|
|
18
|
+
name,
|
|
19
|
+
required = false,
|
|
20
|
+
label,
|
|
21
|
+
onChange,
|
|
22
|
+
allowAll = true,
|
|
23
|
+
api = '/square/courses',
|
|
24
|
+
} = props
|
|
17
25
|
const [options, setOptions] = useState([])
|
|
18
26
|
|
|
19
27
|
const handleOpen = () => {
|
|
20
28
|
if (options.length === 0) {
|
|
21
29
|
axios
|
|
22
|
-
.get(
|
|
30
|
+
.get(api)
|
|
23
31
|
.then((response) => {
|
|
24
|
-
setOptions(response.data
|
|
32
|
+
setOptions(response.data)
|
|
25
33
|
})
|
|
26
34
|
.catch((error) => {
|
|
27
35
|
console.error('Error fetching data from the API:', error)
|
|
@@ -19,7 +19,7 @@ export default function FeeTypeSelector(props: FeeTypeSelectorProps) {
|
|
|
19
19
|
const handleOpen = () => {
|
|
20
20
|
if (options.length === 0) {
|
|
21
21
|
axios
|
|
22
|
-
.get('/
|
|
22
|
+
.get('/paymentx/fee-types')
|
|
23
23
|
.then((response) => {
|
|
24
24
|
setOptions(response.data)
|
|
25
25
|
})
|
|
@@ -40,7 +40,7 @@ export default function FeeTypeSelector(props: FeeTypeSelectorProps) {
|
|
|
40
40
|
...(allowAll ? [{ value: 'all', label: 'All' }] : []),
|
|
41
41
|
...options.map((item) => ({
|
|
42
42
|
label: `${item.name} `,
|
|
43
|
-
value: `${item.
|
|
43
|
+
value: `${item.id}`,
|
|
44
44
|
})),
|
|
45
45
|
]
|
|
46
46
|
: allowAll
|
|
@@ -10,6 +10,7 @@ type FormCourseSelectorProps = {
|
|
|
10
10
|
multiple?: boolean
|
|
11
11
|
allowAll?: boolean
|
|
12
12
|
onChange?: (value: any) => void
|
|
13
|
+
api?: string
|
|
13
14
|
} & SelectProps
|
|
14
15
|
export default function FormCourseSelector(props: FormCourseSelectorProps) {
|
|
15
16
|
const {
|
|
@@ -21,6 +22,7 @@ export default function FormCourseSelector(props: FormCourseSelectorProps) {
|
|
|
21
22
|
multiple = false,
|
|
22
23
|
onChange,
|
|
23
24
|
value,
|
|
25
|
+
api,
|
|
24
26
|
} = props
|
|
25
27
|
|
|
26
28
|
return (
|
|
@@ -10,6 +10,7 @@ type FormFeeTypeSelectorProps = {
|
|
|
10
10
|
multiple?: boolean
|
|
11
11
|
allowAll?: boolean
|
|
12
12
|
onChange?: (value: any) => void
|
|
13
|
+
api?: string
|
|
13
14
|
} & SelectProps
|
|
14
15
|
export default function FormFeeTypeSelector(props: FormFeeTypeSelectorProps) {
|
|
15
16
|
const {
|
|
@@ -21,6 +22,7 @@ export default function FormFeeTypeSelector(props: FormFeeTypeSelectorProps) {
|
|
|
21
22
|
multiple = false,
|
|
22
23
|
onChange,
|
|
23
24
|
value,
|
|
25
|
+
api,
|
|
24
26
|
} = props
|
|
25
27
|
|
|
26
28
|
return (
|
|
@@ -11,6 +11,7 @@ type ProgramSelectorProps = {
|
|
|
11
11
|
allowAll?: boolean
|
|
12
12
|
filters?: { courseId: number }
|
|
13
13
|
onChange?: (value: any) => void
|
|
14
|
+
api?: string
|
|
14
15
|
} & SelectProps
|
|
15
16
|
export default function FormProgramSelector(props: ProgramSelectorProps) {
|
|
16
17
|
const {
|
|
@@ -23,6 +24,7 @@ export default function FormProgramSelector(props: ProgramSelectorProps) {
|
|
|
23
24
|
onChange,
|
|
24
25
|
value,
|
|
25
26
|
filters,
|
|
27
|
+
api
|
|
26
28
|
} = props
|
|
27
29
|
|
|
28
30
|
return (
|
|
@@ -11,6 +11,7 @@ type FormQuotaSelectorProps = {
|
|
|
11
11
|
allowAll?: boolean
|
|
12
12
|
onChange?: (value: any) => void
|
|
13
13
|
filters?: { courseId: number }
|
|
14
|
+
api?: string
|
|
14
15
|
} & SelectProps
|
|
15
16
|
export default function FormQuotaSelector(props: FormQuotaSelectorProps) {
|
|
16
17
|
const {
|
|
@@ -23,6 +24,7 @@ export default function FormQuotaSelector(props: FormQuotaSelectorProps) {
|
|
|
23
24
|
onChange,
|
|
24
25
|
value,
|
|
25
26
|
filters,
|
|
27
|
+
api,
|
|
26
28
|
} = props
|
|
27
29
|
|
|
28
30
|
return (
|
|
@@ -11,6 +11,7 @@ type SemesterSelectorProps = {
|
|
|
11
11
|
allowAll?: boolean
|
|
12
12
|
filters?: { courseId: number }
|
|
13
13
|
onChange?: (value: any) => void
|
|
14
|
+
api?: string
|
|
14
15
|
} & SelectProps
|
|
15
16
|
export default function FormSemseterSelector(props: SemesterSelectorProps) {
|
|
16
17
|
const {
|
|
@@ -23,6 +24,7 @@ export default function FormSemseterSelector(props: SemesterSelectorProps) {
|
|
|
23
24
|
onChange,
|
|
24
25
|
value,
|
|
25
26
|
filters,
|
|
27
|
+
api,
|
|
26
28
|
} = props
|
|
27
29
|
|
|
28
30
|
return (
|
|
@@ -14,6 +14,7 @@ type MultiProgramSelectorProps = {
|
|
|
14
14
|
allowAll?: boolean
|
|
15
15
|
error?: boolean
|
|
16
16
|
helperText?: string
|
|
17
|
+
api?: string
|
|
17
18
|
} & SelectProps
|
|
18
19
|
const MultiProgramSelector = (props: MultiProgramSelectorProps) => {
|
|
19
20
|
const {
|
|
@@ -26,6 +27,7 @@ const MultiProgramSelector = (props: MultiProgramSelectorProps) => {
|
|
|
26
27
|
filters,
|
|
27
28
|
value,
|
|
28
29
|
allowAll = true,
|
|
30
|
+
api = '/square/branches',
|
|
29
31
|
} = props
|
|
30
32
|
const [options, setOptions] = useState([])
|
|
31
33
|
const [prevCourseId, setPrevCourseId] = useState(null)
|
|
@@ -34,7 +36,7 @@ const MultiProgramSelector = (props: MultiProgramSelectorProps) => {
|
|
|
34
36
|
if (filters.courseId && filters.courseId !== prevCourseId) {
|
|
35
37
|
setOptions([])
|
|
36
38
|
axios
|
|
37
|
-
.get(
|
|
39
|
+
.get(api, {
|
|
38
40
|
params: filters,
|
|
39
41
|
})
|
|
40
42
|
.then((response) => {
|
|
@@ -47,7 +49,7 @@ const MultiProgramSelector = (props: MultiProgramSelectorProps) => {
|
|
|
47
49
|
}
|
|
48
50
|
} else if (options.length === 0) {
|
|
49
51
|
axios
|
|
50
|
-
.get(
|
|
52
|
+
.get(api)
|
|
51
53
|
.then((response) => {
|
|
52
54
|
setOptions(response.data)
|
|
53
55
|
})
|
|
@@ -68,7 +70,7 @@ const MultiProgramSelector = (props: MultiProgramSelectorProps) => {
|
|
|
68
70
|
...(allowAll ? [{ value: 'all', label: 'All' }] : []),
|
|
69
71
|
...options.map((item) => ({
|
|
70
72
|
label: `${item.branchName}`,
|
|
71
|
-
value: `${item.
|
|
73
|
+
value: `${item.id}`,
|
|
72
74
|
})),
|
|
73
75
|
]
|
|
74
76
|
: allowAll
|
|
@@ -14,6 +14,7 @@ type MultiQuotaSelectorProps = {
|
|
|
14
14
|
allowAll?: boolean
|
|
15
15
|
error?: boolean
|
|
16
16
|
helperText?: string
|
|
17
|
+
api?: string
|
|
17
18
|
} & SelectProps
|
|
18
19
|
export default function MultiQuotaSelector(props: MultiQuotaSelectorProps) {
|
|
19
20
|
const {
|
|
@@ -26,6 +27,7 @@ export default function MultiQuotaSelector(props: MultiQuotaSelectorProps) {
|
|
|
26
27
|
filters,
|
|
27
28
|
value,
|
|
28
29
|
allowAll = true,
|
|
30
|
+
api = '/square/quotas',
|
|
29
31
|
} = props
|
|
30
32
|
const [options, setOptions] = useState([])
|
|
31
33
|
const [prevCourseId, setPrevCourseId] = useState(null)
|
|
@@ -34,11 +36,13 @@ export default function MultiQuotaSelector(props: MultiQuotaSelectorProps) {
|
|
|
34
36
|
if (filters.courseId && filters.courseId !== prevCourseId) {
|
|
35
37
|
setOptions([])
|
|
36
38
|
axios
|
|
37
|
-
.get(
|
|
39
|
+
.get(api, {
|
|
38
40
|
params: filters,
|
|
39
41
|
})
|
|
40
42
|
.then((response) => {
|
|
41
|
-
setOptions(
|
|
43
|
+
setOptions(
|
|
44
|
+
api == '/square/quotas' ? response.data : response.data.quotas,
|
|
45
|
+
)
|
|
42
46
|
setPrevCourseId(filters.courseId)
|
|
43
47
|
})
|
|
44
48
|
.catch((error) => {
|
|
@@ -47,9 +51,11 @@ export default function MultiQuotaSelector(props: MultiQuotaSelectorProps) {
|
|
|
47
51
|
}
|
|
48
52
|
} else if (options.length === 0) {
|
|
49
53
|
axios
|
|
50
|
-
.get(
|
|
54
|
+
.get(api)
|
|
51
55
|
.then((response) => {
|
|
52
|
-
setOptions(
|
|
56
|
+
setOptions(
|
|
57
|
+
api == '/square/quotas' ? response.data : response.data.quota,
|
|
58
|
+
)
|
|
53
59
|
})
|
|
54
60
|
.catch((error) => {
|
|
55
61
|
console.error('Error fetching data from the API:', error)
|
|
@@ -12,6 +12,7 @@ type ProgramSelectorProps = {
|
|
|
12
12
|
allowAll?: boolean
|
|
13
13
|
error?: boolean
|
|
14
14
|
helperText?: string
|
|
15
|
+
api?: string
|
|
15
16
|
} & SelectProps
|
|
16
17
|
const ProgramSelector = (props: ProgramSelectorProps) => {
|
|
17
18
|
const {
|
|
@@ -21,6 +22,7 @@ const ProgramSelector = (props: ProgramSelectorProps) => {
|
|
|
21
22
|
multiple = false,
|
|
22
23
|
filters,
|
|
23
24
|
allowAll = true,
|
|
25
|
+
api = '/square/branches',
|
|
24
26
|
} = props
|
|
25
27
|
const [options, setOptions] = useState([])
|
|
26
28
|
const [prevCourseId, setPrevCourseId] = useState(null)
|
|
@@ -29,7 +31,7 @@ const ProgramSelector = (props: ProgramSelectorProps) => {
|
|
|
29
31
|
if (filters.courseId && filters.courseId !== prevCourseId) {
|
|
30
32
|
setOptions([])
|
|
31
33
|
axios
|
|
32
|
-
.get(
|
|
34
|
+
.get(api, {
|
|
33
35
|
params: filters,
|
|
34
36
|
})
|
|
35
37
|
.then((response) => {
|
|
@@ -42,7 +44,7 @@ const ProgramSelector = (props: ProgramSelectorProps) => {
|
|
|
42
44
|
}
|
|
43
45
|
} else if (options.length === 0) {
|
|
44
46
|
axios
|
|
45
|
-
.get(
|
|
47
|
+
.get(api)
|
|
46
48
|
.then((response) => {
|
|
47
49
|
setOptions(response.data)
|
|
48
50
|
})
|
|
@@ -63,7 +65,7 @@ const ProgramSelector = (props: ProgramSelectorProps) => {
|
|
|
63
65
|
...(allowAll ? [{ value: 'all', label: 'All' }] : []),
|
|
64
66
|
...options.map((item) => ({
|
|
65
67
|
label: `${item.branchName}`,
|
|
66
|
-
value: `${item.
|
|
68
|
+
value: `${item.id}`,
|
|
67
69
|
})),
|
|
68
70
|
]
|
|
69
71
|
: allowAll
|
|
@@ -12,6 +12,7 @@ type QuotaSelectorProps = {
|
|
|
12
12
|
allowAll?: boolean
|
|
13
13
|
error?: boolean
|
|
14
14
|
helperText?: string
|
|
15
|
+
api?: string
|
|
15
16
|
} & SelectProps
|
|
16
17
|
export default function QuotaSelector(props: QuotaSelectorProps) {
|
|
17
18
|
const {
|
|
@@ -21,6 +22,7 @@ export default function QuotaSelector(props: QuotaSelectorProps) {
|
|
|
21
22
|
multiple = false,
|
|
22
23
|
filters,
|
|
23
24
|
allowAll = true,
|
|
25
|
+
api = '/square/quotas',
|
|
24
26
|
} = props
|
|
25
27
|
const [options, setOptions] = useState([])
|
|
26
28
|
const [prevCourseId, setPrevCourseId] = useState(null)
|
|
@@ -29,11 +31,13 @@ export default function QuotaSelector(props: QuotaSelectorProps) {
|
|
|
29
31
|
if (filters.courseId && filters.courseId !== prevCourseId) {
|
|
30
32
|
setOptions([])
|
|
31
33
|
axios
|
|
32
|
-
.get(
|
|
34
|
+
.get(api, {
|
|
33
35
|
params: filters,
|
|
34
36
|
})
|
|
35
37
|
.then((response) => {
|
|
36
|
-
setOptions(
|
|
38
|
+
setOptions(
|
|
39
|
+
api == '/square/quotas' ? response.data : response.data.quotas,
|
|
40
|
+
)
|
|
37
41
|
setPrevCourseId(filters.courseId)
|
|
38
42
|
})
|
|
39
43
|
.catch((error) => {
|
|
@@ -42,9 +46,11 @@ export default function QuotaSelector(props: QuotaSelectorProps) {
|
|
|
42
46
|
}
|
|
43
47
|
} else if (options.length === 0) {
|
|
44
48
|
axios
|
|
45
|
-
.get(
|
|
49
|
+
.get(api)
|
|
46
50
|
.then((response) => {
|
|
47
|
-
setOptions(
|
|
51
|
+
setOptions(
|
|
52
|
+
api == '/square/quotas' ? response.data : response.data.quota,
|
|
53
|
+
)
|
|
48
54
|
})
|
|
49
55
|
.catch((error) => {
|
|
50
56
|
console.error('Error fetching data from the API:', error)
|
|
@@ -12,6 +12,7 @@ type SemesterSelectorProps = {
|
|
|
12
12
|
allowAll?: boolean
|
|
13
13
|
error?: boolean
|
|
14
14
|
helperText?: string
|
|
15
|
+
api?: string
|
|
15
16
|
} & SelectProps
|
|
16
17
|
const SemesterSelector = (props: SemesterSelectorProps) => {
|
|
17
18
|
const {
|
|
@@ -21,6 +22,7 @@ const SemesterSelector = (props: SemesterSelectorProps) => {
|
|
|
21
22
|
multiple = false,
|
|
22
23
|
filters,
|
|
23
24
|
allowAll = true,
|
|
25
|
+
api = '/square/semesters',
|
|
24
26
|
} = props
|
|
25
27
|
const [options, setOptions] = useState([])
|
|
26
28
|
const [prevCourseId, setPrevCourseId] = useState(null)
|
|
@@ -29,7 +31,7 @@ const SemesterSelector = (props: SemesterSelectorProps) => {
|
|
|
29
31
|
if (filters.courseId && filters.courseId !== prevCourseId) {
|
|
30
32
|
setOptions([])
|
|
31
33
|
axios
|
|
32
|
-
.get(
|
|
34
|
+
.get(api, {
|
|
33
35
|
params: filters,
|
|
34
36
|
})
|
|
35
37
|
.then((response) => {
|
|
@@ -42,7 +44,7 @@ const SemesterSelector = (props: SemesterSelectorProps) => {
|
|
|
42
44
|
}
|
|
43
45
|
} else if (options.length === 0) {
|
|
44
46
|
axios
|
|
45
|
-
.get(
|
|
47
|
+
.get(api)
|
|
46
48
|
.then((response) => {
|
|
47
49
|
setOptions(response.data)
|
|
48
50
|
})
|
|
@@ -385,6 +385,12 @@ export enum EnrollPermissions {
|
|
|
385
385
|
CAN_LEAD_SOURCES_ADD = 'can_lead_sources_add',
|
|
386
386
|
CAN_LEAD_SOURCES_EDIT = 'can_lead_sources_edit',
|
|
387
387
|
CAN_LEAD_SOURCES_DELETE = 'can_lead_sources_delete',
|
|
388
|
+
|
|
389
|
+
// Student Certificate
|
|
390
|
+
CAN_STUDENT_CERTIFICATES_VIEW = 'can_student_certificates_view',
|
|
391
|
+
CAN_STUDENT_CERTIFICATES_EDIT = 'can_student_certificates_edit',
|
|
392
|
+
CAN_STUDENT_CERTIFICATES_DELETE = 'can_student_certificates_delete',
|
|
393
|
+
CAN_STUDENT_CERTIFICATES_ADD = 'can_student_certificates_add',
|
|
388
394
|
}
|
|
389
395
|
|
|
390
396
|
export enum ExamsPermissions {
|
|
@@ -526,6 +532,7 @@ export enum ExamsPermissions {
|
|
|
526
532
|
CAN_EXAM_TIME_SLOTS_EDIT = 'can_exam_time_slots_edit',
|
|
527
533
|
CAN_EXAM_TIME_SLOTS_DELETE = 'can_exam_time_slots_delete',
|
|
528
534
|
}
|
|
535
|
+
|
|
529
536
|
export enum Permission {
|
|
530
537
|
// General
|
|
531
538
|
CAN_INDIVIDUAL_PAGES_VIEW = 'can_individual_pages_view',
|
|
@@ -1175,82 +1182,82 @@ export enum Permission {
|
|
|
1175
1182
|
CAN_ADMIN_VIEW = 'can_admin_view',
|
|
1176
1183
|
|
|
1177
1184
|
//HRMS
|
|
1178
|
-
|
|
1179
1185
|
//Profiles
|
|
1180
1186
|
CAN_MANAGE_HRMS_PROFILE_PERMISSIONS_VIEW = 'can_manage_hrms_profile_permissions_view',
|
|
1181
1187
|
CAN_MANAGE_HRMS_PROFILE_PERMISSIONS_ADD = 'can_manage_hrms_profile_permissions_add',
|
|
1182
1188
|
CAN_MANAGE_HRMS_PROFILE_PERMISSIONS_EDIT = 'can_manage_hrms_profile_permissions_edit',
|
|
1183
1189
|
CAN_MANAGE_HRMS_PROFILE_PERMISSIONS_DELETE = 'can_manage_hrms_profile_permissions_delete',
|
|
1184
1190
|
|
|
1185
|
-
//
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1191
|
+
//Infomation
|
|
1192
|
+
CAN_VIEW_INFORMATION = 'can_view_information',
|
|
1193
|
+
CAN_EDIT_INFORMATION = 'can_edit_information',
|
|
1194
|
+
CAN_EDIT_SPECIAL_INFORMATION = 'can_edit_special_information',
|
|
1195
|
+
|
|
1196
|
+
//Leave Tracker
|
|
1197
|
+
CAN_VIEW_LEAVE_TRACKER = 'can_view_leave_tracker',
|
|
1198
|
+
CAN_APPLY_LEAVE = 'can_apply_leave',
|
|
1190
1199
|
|
|
1191
1200
|
//Employees
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1201
|
+
CAN_VIEW_EMPLOYEES = 'can_view_employees',
|
|
1202
|
+
CAN_EDIT_EMPLOYEES = 'can_edit_employees',
|
|
1203
|
+
CAN_CREATE_EMPLOYEES = 'can_create_employees',
|
|
1204
|
+
CAN_IMPORT_EMPLOYEES = 'can_import_employees',
|
|
1196
1205
|
|
|
1197
|
-
//
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1206
|
+
//PunchLogs
|
|
1207
|
+
CAN_VIEW_PUNCH_LOGS = 'can_view_punch_logs',
|
|
1208
|
+
|
|
1209
|
+
//Time Sheet
|
|
1210
|
+
CAN_VIEW_TIME_SHEET = 'can_view_time_sheet',
|
|
1211
|
+
CAN_EDIT_TIME_SHEET = 'can_edit_time_sheet',
|
|
1212
|
+
CAN_IMPORT_TIME_SHEET = 'can_import_time_sheet',
|
|
1213
|
+
CAN_EXPORT_TIME_SHEET = 'can_export_time_sheet',
|
|
1214
|
+
CAN_GENERATE_TIME_SHEET = 'can_generate_time_sheet',
|
|
1215
|
+
|
|
1216
|
+
//Loss Of Pay
|
|
1217
|
+
CAN_VIEW_LOSS_OF_PAY = 'can_view_loss_of_pay',
|
|
1218
|
+
|
|
1219
|
+
//Leave Usages
|
|
1220
|
+
CAN_VIEW_LEAVES_USAGES = 'can_view_leaves_usages',
|
|
1221
|
+
CAN_EDIT_LEAVES_USAGES = 'can_edit_leaves_usages',
|
|
1222
|
+
CAN_IMPORT_LEAVES_USAGES = 'can_import_leaves_usages',
|
|
1223
|
+
CAN_EXPORT_LEAVES_USAGES = 'can_export_leaves_usages',
|
|
1224
|
+
|
|
1225
|
+
//Leave Requests
|
|
1226
|
+
CAN_VIEW_LEAVES_REQUESTS = 'can_view_leaves_requests',
|
|
1227
|
+
CAN_VIEW_PAST_LEAVES_REQUESTS = 'can_view_past_leaves_requests',
|
|
1228
|
+
CAN_CREATE_LEAVES_REQUESTS = 'can_create_leaves_requests',
|
|
1229
|
+
CAN_APPROVE_LEAVE_REQUESTS = 'can_approve_leave_requests',
|
|
1230
|
+
CAN_REJECT_LEAVE_REQUESTS = 'can_reject_leave_requests',
|
|
1231
|
+
CAN_CANCEL_LEAVE_REQUESTS = 'can_cancel_leave_requests',
|
|
1201
1232
|
|
|
1202
1233
|
//Departments
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1234
|
+
CAN_VIEW_DEPARTMENTS = 'can_view_departments',
|
|
1235
|
+
CAN_ADD_DEPARTMENTS = 'can_add_departments',
|
|
1236
|
+
CAN_IMPORT_DEPARTMENTS = 'can_import_departments',
|
|
1237
|
+
CAN_EXPORT_DEPARTMENTS = 'can_export_departments',
|
|
1238
|
+
CAN_EDIT_DEPARTMENTS = 'can_edit_departments',
|
|
1206
1239
|
|
|
1207
1240
|
//Designations
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
CAN_MANAGE_LOCATIONS_VIEW = 'can_manage_locations_view',
|
|
1214
|
-
CAN_MANAGE_LOCATIONS_ADD = 'can_manage_locations_add',
|
|
1215
|
-
CAN_MANAGE_LOCATIONS_EDIT = 'can_manage_locations_edit',
|
|
1241
|
+
CAN_VIEW_DESIGNATIONS = 'can_view_designations',
|
|
1242
|
+
CAN_ADD_DESIGNATIONS = 'can_add_designations',
|
|
1243
|
+
CAN_IMPORT_DESIGNATIONS = 'can_import_designations',
|
|
1244
|
+
CAN_EXPORT_DESIGNATIONS = 'can_export_designations',
|
|
1245
|
+
CAN_EDIT_DESIGNATIONS = 'can_edit_designations',
|
|
1216
1246
|
|
|
1217
1247
|
//Leave Types
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
//Leave Balances
|
|
1223
|
-
CAN_MANAGE_LEAVE_BALANCES_VIEW = 'can_manage_leave_balances_view',
|
|
1224
|
-
CAN_MANAGE_LEAVE_BALANCES_IMPORT = 'can_manage_leave_balances_import',
|
|
1225
|
-
CAN_MANAGE_LEAVE_BALANCES_EDIT = 'can_manage_leave_balances_edit',
|
|
1248
|
+
CAN_VIEW_LEAVE_TYPES = 'can_view_leave_types',
|
|
1249
|
+
CAN_ADD_LEAVE_TYPES = 'can_add_leave_types',
|
|
1250
|
+
CAN_EDIT_LEAVE_TYPES = 'can_edit_leave_types',
|
|
1226
1251
|
|
|
1227
|
-
//
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
//Overtime
|
|
1238
|
-
CAN_MANAGE_OVERTIME_VIEW = 'can_manage_overtime_view',
|
|
1239
|
-
CAN_MANAGE_OVERTIME_ADD = 'can_manage_overtime_add',
|
|
1240
|
-
CAN_MANAGE_OVERTIME_EDIT = 'can_manage_overtime_edit',
|
|
1241
|
-
|
|
1242
|
-
//MyKiosk
|
|
1243
|
-
CAN_MANAGE_MY_KIOSK_VIEW = 'can_manage_my_kiosk_view',
|
|
1244
|
-
CAN_MANAGE_MY_KIOSK_EDIT = 'can_manage_my_kiosk_edit',
|
|
1245
|
-
|
|
1246
|
-
//LeaveTracker
|
|
1247
|
-
CAN_MANAGE_LEAVE_TRACKER_VIEW = 'can_manage_leave_tracker_view',
|
|
1248
|
-
CAN_MANAGE_LEAVE_TRACKER_EDIT = 'can_manage_leave_tracker_edit',
|
|
1249
|
-
|
|
1250
|
-
//LeaveRequests
|
|
1251
|
-
CAN_MANAGE_LEAVE_REQUESTS_VIEW = 'can_manage_leave_requests_view',
|
|
1252
|
-
CAN_MANAGE_LEAVE_REQUESTS_CREATE = 'can_manage_leave_requests_create',
|
|
1253
|
-
CAN_MANAGE_LEAVE_REQUESTS_EDIT = 'can_manage_leave_requests_edit',
|
|
1252
|
+
//Groups
|
|
1253
|
+
CAN_VIEW_GROUPS = 'can_view_groups',
|
|
1254
|
+
CAN_ADD_GROUPS = 'can_add_groups',
|
|
1255
|
+
CAN_EDIT_GROUPS_TIME_CONFIG = 'can_edit_groups_time_config',
|
|
1256
|
+
CAN_EDIT_GROUPS_LEAVE_CONFIG = 'can_edit_groups_leave_config',
|
|
1257
|
+
|
|
1258
|
+
//Database Configurations
|
|
1259
|
+
CAN_VIEW_DATABASE_CONFIG = 'can_view_database_config',
|
|
1260
|
+
CAN_EDIT_DATABASE_CONFIG = 'can_edit_database_config',
|
|
1254
1261
|
}
|
|
1255
1262
|
|
|
1256
1263
|
export interface IPermissions {
|