goobs-frontend 0.7.63 → 0.7.65
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 +14 -14
- package/src/components/Button/hook/useHelperFooter.tsx +224 -0
- package/src/components/Button/index.tsx +186 -191
- package/src/components/ConfirmationCodeInput/index.tsx +7 -9
- package/src/components/Content/Structure/button/useButton.tsx +0 -2
- package/src/components/Nav/HorizontalVariant/index.tsx +13 -39
- package/src/components/StyledComponent/hooks/useInputHelperFooter.tsx +567 -0
- package/src/components/StyledComponent/hooks/usePhoneNumber.tsx +28 -12
- package/src/components/StyledComponent/hooks/useRequiredFieldsValidator.tsx +137 -0
- package/src/components/StyledComponent/index.tsx +28 -40
- package/src/components/TransferList/index.tsx +12 -4
- package/src/components/StyledComponent/helperfooter/useHelperFooter.tsx +0 -580
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "goobs-frontend",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.65",
|
|
4
4
|
"description": "A comprehensive React-based UI library built on Material-UI, offering a wide range of customizable components including grids, typography, buttons, cards, forms, navigation, pricing tables, steppers, tooltips, accordions, and more. Designed for building responsive and consistent user interfaces with advanced features like form validation, theming, and code syntax highlighting.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./src/index.ts",
|
|
@@ -22,32 +22,32 @@
|
|
|
22
22
|
"react-dom": "^17.0.0 || ^18.0.0"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@emotion/cache": "^11.
|
|
26
|
-
"@emotion/react": "^11.
|
|
27
|
-
"@emotion/styled": "^11.
|
|
28
|
-
"@mui/icons-material": "^5.16.
|
|
29
|
-
"@mui/material": "^5.16.
|
|
30
|
-
"@types/lodash": "^4.17.
|
|
31
|
-
"goobs-cache": "^1.4
|
|
25
|
+
"@emotion/cache": "^11.13.1",
|
|
26
|
+
"@emotion/react": "^11.13.0",
|
|
27
|
+
"@emotion/styled": "^11.13.0",
|
|
28
|
+
"@mui/icons-material": "^5.16.6",
|
|
29
|
+
"@mui/material": "^5.16.6",
|
|
30
|
+
"@types/lodash": "^4.17.7",
|
|
31
|
+
"goobs-cache": "^1.6.4",
|
|
32
32
|
"highlight.js": "^11.10.0",
|
|
33
33
|
"lodash": "^4.17.21",
|
|
34
34
|
"next": "14.2.5"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@next/eslint-plugin-next": "^14.2.5",
|
|
38
|
-
"@types/node": "^
|
|
38
|
+
"@types/node": "^22.1.0",
|
|
39
39
|
"@types/react": "18.3.3",
|
|
40
40
|
"@types/react-dom": "^18.3.0",
|
|
41
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
42
|
-
"@typescript-eslint/parser": "^
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^8.0.1",
|
|
42
|
+
"@typescript-eslint/parser": "^8.0.1",
|
|
43
43
|
"eslint": "^8.57.0",
|
|
44
44
|
"eslint-config-next": "^14.2.5",
|
|
45
45
|
"eslint-config-prettier": "^9.1.0",
|
|
46
|
-
"eslint-plugin-prettier": "^5.1
|
|
47
|
-
"prettier": "^3.3.
|
|
46
|
+
"eslint-plugin-prettier": "^5.2.1",
|
|
47
|
+
"prettier": "^3.3.3",
|
|
48
48
|
"react": "^18.3.1",
|
|
49
49
|
"react-dom": "^18.3.1",
|
|
50
|
-
"typescript": "^5.5.
|
|
50
|
+
"typescript": "^5.5.4"
|
|
51
51
|
},
|
|
52
52
|
"files": [
|
|
53
53
|
"src"
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { useCallback, useMemo } from 'react'
|
|
2
|
+
import { session } from 'goobs-cache'
|
|
3
|
+
|
|
4
|
+
export interface HelperFooterMessage {
|
|
5
|
+
status: 'error' | 'success' | 'emptyAndRequired'
|
|
6
|
+
statusMessage: string
|
|
7
|
+
spreadMessage: string
|
|
8
|
+
spreadMessagePriority: number
|
|
9
|
+
required: boolean
|
|
10
|
+
hasInput?: boolean
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const useHelperFooter = (initialFormname?: string) => {
|
|
14
|
+
console.log(
|
|
15
|
+
'useHelperFooter: Hook called with initialFormname:',
|
|
16
|
+
initialFormname
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
const helperFooterAtom = session.atom<Record<
|
|
20
|
+
string,
|
|
21
|
+
HelperFooterMessage
|
|
22
|
+
> | null>(null)
|
|
23
|
+
const currentErrorIndexAtom = session.atom<number>(0)
|
|
24
|
+
|
|
25
|
+
const fetchHelperFooters = useCallback(async (): Promise<Record<
|
|
26
|
+
string,
|
|
27
|
+
HelperFooterMessage
|
|
28
|
+
> | null> => {
|
|
29
|
+
console.log('useHelperFooter: fetchHelperFooters called')
|
|
30
|
+
if (!initialFormname) {
|
|
31
|
+
console.log('useHelperFooter: No formname provided, returning null')
|
|
32
|
+
return null
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const [helperFooters, setHelperFooters] = session.useAtom(helperFooterAtom)
|
|
36
|
+
|
|
37
|
+
if (helperFooters === null) {
|
|
38
|
+
const [helperFooterResult] = session.useAtom(
|
|
39
|
+
session.atom(`helperfooter:${initialFormname}`)
|
|
40
|
+
)
|
|
41
|
+
console.log('useHelperFooter: helperFooterResult:', helperFooterResult)
|
|
42
|
+
|
|
43
|
+
if (
|
|
44
|
+
helperFooterResult &&
|
|
45
|
+
typeof helperFooterResult === 'object' &&
|
|
46
|
+
helperFooterResult !== null
|
|
47
|
+
) {
|
|
48
|
+
const fetchedHelperFooters: Record<string, HelperFooterMessage> = {}
|
|
49
|
+
|
|
50
|
+
for (const [key, value] of Object.entries(helperFooterResult)) {
|
|
51
|
+
if (
|
|
52
|
+
typeof value === 'object' &&
|
|
53
|
+
value !== null &&
|
|
54
|
+
'status' in value &&
|
|
55
|
+
'statusMessage' in value &&
|
|
56
|
+
'spreadMessage' in value &&
|
|
57
|
+
'spreadMessagePriority' in value &&
|
|
58
|
+
'required' in value &&
|
|
59
|
+
'hasInput' in value
|
|
60
|
+
) {
|
|
61
|
+
fetchedHelperFooters[key] = {
|
|
62
|
+
status: value.status as 'error' | 'success' | 'emptyAndRequired',
|
|
63
|
+
statusMessage: String(value.statusMessage),
|
|
64
|
+
spreadMessage: String(value.spreadMessage),
|
|
65
|
+
spreadMessagePriority: Number(value.spreadMessagePriority),
|
|
66
|
+
required: Boolean(value.required),
|
|
67
|
+
hasInput: Boolean(value.hasInput),
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
console.log(
|
|
73
|
+
'useHelperFooter: Fetched helper footers:',
|
|
74
|
+
fetchedHelperFooters
|
|
75
|
+
)
|
|
76
|
+
setHelperFooters(fetchedHelperFooters)
|
|
77
|
+
return fetchedHelperFooters
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
console.log(
|
|
81
|
+
'useHelperFooter: Invalid helper footer result, returning null'
|
|
82
|
+
)
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return helperFooters
|
|
87
|
+
}, [initialFormname, helperFooterAtom])
|
|
88
|
+
|
|
89
|
+
const updateFormValidation = useCallback(async (): Promise<boolean> => {
|
|
90
|
+
console.log('useHelperFooter: updateFormValidation called')
|
|
91
|
+
const fetchedHelperFooters = await fetchHelperFooters()
|
|
92
|
+
|
|
93
|
+
if (fetchedHelperFooters) {
|
|
94
|
+
const errorFooters = Object.values(fetchedHelperFooters).filter(
|
|
95
|
+
footer =>
|
|
96
|
+
(footer.status === 'error' || footer.status === 'emptyAndRequired') &&
|
|
97
|
+
footer.required
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
console.log('useHelperFooter: Error footers:', errorFooters)
|
|
101
|
+
|
|
102
|
+
if (errorFooters.length === 0) {
|
|
103
|
+
const [, setCurrentErrorIndex] = session.useAtom(currentErrorIndexAtom)
|
|
104
|
+
setCurrentErrorIndex(0)
|
|
105
|
+
console.log('useHelperFooter: No errors found, returning true')
|
|
106
|
+
return true
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
errorFooters.sort(
|
|
110
|
+
(a, b) => a.spreadMessagePriority - b.spreadMessagePriority
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
const [currentErrorIndex, setCurrentErrorIndex] = session.useAtom(
|
|
114
|
+
currentErrorIndexAtom
|
|
115
|
+
)
|
|
116
|
+
if (currentErrorIndex >= errorFooters.length) {
|
|
117
|
+
setCurrentErrorIndex(0)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
console.log('useHelperFooter: Errors found, returning false')
|
|
121
|
+
return false
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
console.log('useHelperFooter: No helper footers, returning true')
|
|
125
|
+
return true
|
|
126
|
+
}, [fetchHelperFooters, currentErrorIndexAtom])
|
|
127
|
+
|
|
128
|
+
const checkFormStatus = useCallback(async () => {
|
|
129
|
+
console.log('useHelperFooter: checkFormStatus called')
|
|
130
|
+
const fetchedHelperFooters = await fetchHelperFooters()
|
|
131
|
+
const status = fetchedHelperFooters
|
|
132
|
+
? Object.values(fetchedHelperFooters).every(
|
|
133
|
+
value => !value.required || (value.required && value.hasInput)
|
|
134
|
+
)
|
|
135
|
+
: true
|
|
136
|
+
console.log('useHelperFooter: Form status:', status)
|
|
137
|
+
return status
|
|
138
|
+
}, [fetchHelperFooters])
|
|
139
|
+
|
|
140
|
+
const getEmptyRequiredFields = useCallback(async () => {
|
|
141
|
+
console.log('useHelperFooter: getEmptyRequiredFields called')
|
|
142
|
+
const fetchedHelperFooters = await fetchHelperFooters()
|
|
143
|
+
if (!fetchedHelperFooters) return []
|
|
144
|
+
const emptyFields = Object.entries(fetchedHelperFooters)
|
|
145
|
+
.filter(([, value]) => value.required && !value.hasInput)
|
|
146
|
+
.map(([key]) => key)
|
|
147
|
+
console.log('useHelperFooter: Empty required fields:', emptyFields)
|
|
148
|
+
return emptyFields
|
|
149
|
+
}, [fetchHelperFooters])
|
|
150
|
+
|
|
151
|
+
const getCurrentErrorMessage = useCallback(async () => {
|
|
152
|
+
console.log('useHelperFooter: getCurrentErrorMessage called')
|
|
153
|
+
const fetchedHelperFooters = await fetchHelperFooters()
|
|
154
|
+
if (!fetchedHelperFooters) return undefined
|
|
155
|
+
const errorFooters = Object.values(fetchedHelperFooters).filter(
|
|
156
|
+
footer =>
|
|
157
|
+
(footer.status === 'error' || footer.status === 'emptyAndRequired') &&
|
|
158
|
+
footer.required
|
|
159
|
+
)
|
|
160
|
+
if (errorFooters.length === 0) return undefined
|
|
161
|
+
const [currentErrorIndex] = session.useAtom(currentErrorIndexAtom)
|
|
162
|
+
const message = errorFooters[currentErrorIndex]?.spreadMessage
|
|
163
|
+
console.log('useHelperFooter: Current error message:', message)
|
|
164
|
+
return message
|
|
165
|
+
}, [fetchHelperFooters, currentErrorIndexAtom])
|
|
166
|
+
|
|
167
|
+
const isFormValid = useCallback(async () => {
|
|
168
|
+
const fetchedHelperFooters = await fetchHelperFooters()
|
|
169
|
+
if (!fetchedHelperFooters) return true
|
|
170
|
+
const valid = Object.values(fetchedHelperFooters).every(
|
|
171
|
+
footer =>
|
|
172
|
+
footer.status !== 'error' && footer.status !== 'emptyAndRequired'
|
|
173
|
+
)
|
|
174
|
+
console.log('useHelperFooter: isFormValid:', valid)
|
|
175
|
+
return valid
|
|
176
|
+
}, [fetchHelperFooters])
|
|
177
|
+
|
|
178
|
+
const nextError = useCallback(async () => {
|
|
179
|
+
console.log('useHelperFooter: nextError called')
|
|
180
|
+
const fetchedHelperFooters = await fetchHelperFooters()
|
|
181
|
+
if (!fetchedHelperFooters) return
|
|
182
|
+
const errorFooters = Object.values(fetchedHelperFooters).filter(
|
|
183
|
+
footer =>
|
|
184
|
+
(footer.status === 'error' || footer.status === 'emptyAndRequired') &&
|
|
185
|
+
footer.required
|
|
186
|
+
)
|
|
187
|
+
if (errorFooters.length > 0) {
|
|
188
|
+
const [currentErrorIndex, setCurrentErrorIndex] = session.useAtom(
|
|
189
|
+
currentErrorIndexAtom
|
|
190
|
+
)
|
|
191
|
+
setCurrentErrorIndex((currentErrorIndex + 1) % errorFooters.length)
|
|
192
|
+
console.log(
|
|
193
|
+
'useHelperFooter: New error index:',
|
|
194
|
+
(currentErrorIndex + 1) % errorFooters.length
|
|
195
|
+
)
|
|
196
|
+
}
|
|
197
|
+
}, [fetchHelperFooters, currentErrorIndexAtom])
|
|
198
|
+
|
|
199
|
+
const result = useMemo(
|
|
200
|
+
() => ({
|
|
201
|
+
errorMessage: getCurrentErrorMessage,
|
|
202
|
+
isFormValid,
|
|
203
|
+
updateFormValidation,
|
|
204
|
+
fetchHelperFooters,
|
|
205
|
+
nextError,
|
|
206
|
+
checkFormStatus,
|
|
207
|
+
getEmptyRequiredFields,
|
|
208
|
+
}),
|
|
209
|
+
[
|
|
210
|
+
getCurrentErrorMessage,
|
|
211
|
+
isFormValid,
|
|
212
|
+
updateFormValidation,
|
|
213
|
+
fetchHelperFooters,
|
|
214
|
+
nextError,
|
|
215
|
+
checkFormStatus,
|
|
216
|
+
getEmptyRequiredFields,
|
|
217
|
+
]
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
console.log('useHelperFooter: Returning result:', result)
|
|
221
|
+
return result
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export default useHelperFooter
|