ywana-core8 0.1.26 → 0.1.28

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.
@@ -1,24 +1,10 @@
1
- import React from "react";
2
-
3
- // You can import global CSS files here.
1
+ import React from 'react';
4
2
  import "../src/css/html.css";
5
3
  import "../src/css/theme.css";
6
- import "material-design-icons-iconfont/dist/material-design-icons.css";
7
4
 
8
- // No-op wrapper.
9
- export const Wrapper: React.FC = ({ children }) => {
10
- return (
11
- <div
12
- style={{
13
- fontSize: "10px",
14
- width: "100vw",
15
- height: "100vh",
16
- padding: "0rem",
17
- display: "flex",
18
- flexDirection: "column",
19
- }}
20
- >
21
- {children}
22
- </div>
23
- );
24
- };
5
+
6
+ export const Wrapper: React.FC = ({ children }) => (
7
+ <>
8
+ {children}
9
+ </>
10
+ );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ywana-core8",
3
- "version": "0.1.26",
3
+ "version": "0.1.28",
4
4
  "description": "ywana-core8",
5
5
  "homepage": "https://ywana.github.io/workspace",
6
6
  "author": "Ernesto Roldan Garcia",
@@ -44,7 +44,6 @@ export const UploadForm = (props) => {
44
44
 
45
45
  function handleFiles(files) {
46
46
  const file = files[0]
47
- console.log("handleFiles", files, file)
48
47
  setFile(file)
49
48
  }
50
49
 
@@ -120,7 +119,7 @@ const UploadProgressBar = (props) => {
120
119
  const UploadTest = (props) => {
121
120
  return (
122
121
  <div>
123
- <UploadForm url={"http://localhost:3000/upload"} />
122
+ <UploadForm url={"http://192.168.12.241:5050/colorfarm/api/upload2"} />
124
123
  </div>
125
124
  )
126
125
  }
@@ -1,6 +1,10 @@
1
1
  export * from './login/LoginBox'
2
2
  export * from './login/ResetPasswordBox'
3
3
  export * from './login/login_commons'
4
+ export * from './login/actions'
5
+ export * from './login/dialogs'
6
+ export * from './login/dictionary'
7
+
4
8
  export * from './viewer/Viewer'
5
9
  export * from './kanban/Kanban'
6
10
  export * from './avatar/avatar'
@@ -108,7 +108,6 @@ export const ResetPasswordBox = ({ title, userRequired = true, oldPwdRequired =
108
108
  const password1Style = errors.password1 ? "error" : ""
109
109
  const password2Style = errors.password2 ? "error" : ""
110
110
 
111
- console.log("ResetPasswordBox", errors)
112
111
  return (
113
112
  <div className="reset-password-box">
114
113
  <header>
@@ -119,7 +118,7 @@ export const ResetPasswordBox = ({ title, userRequired = true, oldPwdRequired =
119
118
  {userRequired ? <TextField id="user" className={userStyle} outlined icon="person" label={userLabel} lapse={100} onChange={changeField} onEnter={ok} /> : null}
120
119
  {userRequired ? errors.user ? <div className="error-message"><Text>{errors.user}</Text></div> : null : null}
121
120
 
122
- {oldPwdRequired ? <TextField id="oldPassword" className={oldPasswordStyle} outlined icon="lock" type="password" label="Old Password" lapse={100} onChange={changeField} onEnter={ok} /> : null}
121
+ {oldPwdRequired ? <TextField id="oldPassword" className={oldPasswordStyle} outlined icon="lock" type="password" label="Current Password" lapse={100} onChange={changeField} onEnter={ok} /> : null}
123
122
  {oldPwdRequired ? errors.oldPassword ? <div className="error-message"><Text>{errors.oldPassword}</Text></div> : null : null}
124
123
 
125
124
  <TextField id="password1" className={password1Style} outlined icon="lock" type="password" label={passwordLabel} lapse={100} onChange={changeField} onEnter={ok} />
@@ -0,0 +1,127 @@
1
+ import React, { useContext, useMemo } from 'react'
2
+ import { Button, Icon, Text } from '../../html'
3
+ import { SiteContext, } from '../../site'
4
+ import { ChangeUserPasswordDialog } from './dialogs'
5
+
6
+ /**
7
+ * Forget User Password Action
8
+ */
9
+ export const ForgetUserPasswordAction = (props) => {
10
+
11
+ const site = useContext(SiteContext)
12
+ const { user, icon = true, onOK, onSuccess } = props
13
+
14
+ async function execute() {
15
+ try {
16
+ await onOK(user.email)
17
+ if (onSuccess) onSuccess()
18
+ site.notify({
19
+ title: <Text>Forgot Password</Text>,
20
+ body: <Text>Check your email to reset your password</Text>,
21
+ icon: "mail_lock"
22
+ })
23
+ } catch (error) {
24
+ site.notify({
25
+ title: "Error",
26
+ body: error.message,
27
+ type: "danger",
28
+ icon: "error"
29
+ })
30
+ }
31
+ }
32
+
33
+ const label = <Text>Forgot Password</Text>
34
+
35
+ return icon ? (
36
+ <Icon icon="mail_lock" clickable action={execute} size="small" tooltip={{ text: label, top: "-.5rem", left: "-14rem" }} />
37
+ ) : (
38
+ <Button label={label} action={execute} outlined className="" />
39
+ )
40
+ }
41
+
42
+ /**
43
+ * Unlock User Action
44
+ */
45
+ export const UnlockUserAction = (props) => {
46
+
47
+ const site = useContext(SiteContext)
48
+ const { user, icon = true, onOK, onSuccess } = props
49
+
50
+ async function execute() {
51
+ try {
52
+ await onOK(user)
53
+ if (onSuccess) onSuccess()
54
+ site.notify({
55
+ title: <Text>User Unlocked</Text>,
56
+ body: <Text>The user has been unlocked successfully</Text>,
57
+ icon: "key"
58
+ })
59
+ } catch (error) {
60
+ site.notify({
61
+ title: "Error",
62
+ body: error.message,
63
+ type: "danger",
64
+ icon: "error"
65
+ })
66
+ }
67
+ }
68
+
69
+ const label = <Text>Unlock User</Text>
70
+
71
+ return icon ? (
72
+ <Icon icon="key_off" clickable action={execute} size="small" />
73
+ ) : (
74
+ <Button label={label} action={execute} outlined className="" />
75
+ )
76
+ }
77
+
78
+ /**
79
+ * Change User Password Action
80
+ */
81
+ export const ChangeUserPasswordAction = (props) => {
82
+
83
+ const site = useContext(SiteContext)
84
+
85
+ const { user, icon = false, oldPwdRequired=true } = props
86
+
87
+ const errorMessages = useMemo(() => ({
88
+ "ERROR OLD PASSWORD": { title: "Error", description: <Text>Incorrect old password</Text> },
89
+ "PASSWORD ALREADY USED": { title: "Error", description: <Text>The new password provided has already been used</Text> },
90
+ }), [])
91
+
92
+ function execute() {
93
+
94
+ const onOK = async (form) => {
95
+ try {
96
+ await props.onOK(user, form.oldPassword, form.password1)
97
+ site.notify({
98
+ title: <Text>Change Password</Text>,
99
+ body: <Text>The password has been changed successfully</Text>,
100
+ icon: "key"
101
+ })
102
+ site.closeDialog()
103
+ } catch (error) {
104
+ const key = error.message.toUpperCase()
105
+ const message = errorMessages[key]?.description || error.message
106
+ site.notify({
107
+ title: "Error",
108
+ body: message,
109
+ type: "danger",
110
+ icon: "error"
111
+ })
112
+ site.openDialog(<ChangeUserPasswordDialog oldPwdRequired={oldPwdRequired} onOK={onOK} error={message} />)
113
+ }
114
+ }
115
+
116
+ site.openDialog(<ChangeUserPasswordDialog oldPwdRequired={oldPwdRequired} onOK={onOK} />)
117
+ }
118
+
119
+ const label = <Text>Change Password</Text>
120
+
121
+ return icon ? (
122
+ <Icon icon="key" clickable action={execute} size="small" />
123
+ ) : (
124
+ <Button label={label} action={execute} outlined className="" />
125
+ )
126
+ }
127
+
@@ -0,0 +1,18 @@
1
+ .change-password-dialog div.dialog-error-message {
2
+ display: flex;
3
+ align-items: center;
4
+ background-color: red;
5
+ color: white;
6
+ font-weight: 500;
7
+ padding: 0.1rem 0.5rem;
8
+ border-radius: .5rem;
9
+ margin: 0 .5rem;
10
+ }
11
+
12
+
13
+ .change-password-dialog>footer {
14
+ display: flex;
15
+ justify-content: space-between;
16
+ margin-top: 20px;
17
+ display: none !important;
18
+ }
@@ -0,0 +1,51 @@
1
+ import React, { useContext } from 'react'
2
+ import { Dialog, Icon } from '../../html'
3
+ import { SiteContext } from '../../site'
4
+ import { ResetPasswordBox } from './ResetPasswordBox'
5
+ import './dialogs.css'
6
+
7
+ /**
8
+ * Admin Change User Password Dialog
9
+ */
10
+ export const ChangeUserPasswordDialog = (props) => {
11
+
12
+ const site = useContext(SiteContext)
13
+ const { error } = props
14
+
15
+ const config = {
16
+ userRequired: props.userRequired || false,
17
+ oldPwdRequired: props.oldPwdRequired || false,
18
+ onOK: (form) => {
19
+ props.onOK ? props.onOK(form) : site.closeDialog()
20
+ },
21
+ onClose: () => {
22
+ site.closeDialog()
23
+ }
24
+ }
25
+
26
+ const Toolbar = () => {
27
+ return (
28
+ <div className='dialog-toolbar' >
29
+ <Icon icon="close" size="small" clickable action={site.closeDialog} />
30
+ </div >
31
+ )
32
+ }
33
+
34
+ const title = <div className="dialog-title"><Text>Change Password</Text>></div>
35
+ return (
36
+ <Dialog title={title} className="change-password-dialog" toolbar={<Toolbar />} >
37
+ { error && (<div className="dialog-error-message"><Icon icon="warning" />{error}</div>) }
38
+ <ResetPasswordBox {...config}>
39
+ <br/>
40
+ <div className="title"><Text>The new password must contain:</Text></div>
41
+ <ul>
42
+ <li><Text>At least 15 characters</Text></li>
43
+ <li><Text>At least one uppercase letter</Text></li>
44
+ <li><Text>At least one lowercase letter</Text></li>
45
+ <li><Text>At least one number</Text></li>
46
+ <li><Text>At least one special character</Text></li>
47
+ </ul>
48
+ </ResetPasswordBox>
49
+ </Dialog>
50
+ )
51
+ }
@@ -0,0 +1,172 @@
1
+ export const LOGIN_DICTIONARY = {
2
+
3
+ 'Forgot Password': {
4
+ en: 'Forgot Password',
5
+ es: 'Olvidé mi contraseña',
6
+ de: 'Passwort vergessen',
7
+ pt: 'Esqueceu a senha',
8
+ ca: 'He oblidat la contrasenya',
9
+ it: 'Password dimenticata',
10
+ fr: 'Mot de passe oublié'
11
+ },
12
+
13
+ 'Check your email to reset your password': {
14
+ en: 'Check your email to reset your password',
15
+ es: 'Revise su correo electrónico para restablecer su contraseña',
16
+ de: 'Überprüfen Sie Ihre E-Mails, um Ihr Passwort zurückzusetzen',
17
+ pt: 'Verifique seu e-mail para redefinir sua senha',
18
+ ca: 'Comproveu el correu electrònic per restablir la contrasenya',
19
+ it: 'Controlla la tua email per reimpostare la password',
20
+ fr: 'Vérifiez votre email pour réinitialiser votre mot de passe'
21
+ },
22
+
23
+ 'Unlock User': {
24
+ en: 'Unlock User',
25
+ es: 'Desbloquear usuario',
26
+ de: 'Benutzer entsperren',
27
+ pt: 'Desbloquear usuário',
28
+ ca: 'Desbloquejar usuari',
29
+ it: 'Sblocca utente',
30
+ fr: 'Débloquer l\'utilisateur'
31
+ },
32
+
33
+ 'The user has been unlocked successfully': {
34
+ en: 'The user has been unlocked successfully',
35
+ es: 'El usuario ha sido desbloqueado con éxito',
36
+ de: 'Der Benutzer wurde erfolgreich entsperrt',
37
+ pt: 'O usuário foi desbloqueado com sucesso',
38
+ ca: 'L\'usuari s\'ha desbloquejat correctament',
39
+ it: 'L\'utente è stato sbloccato con successo',
40
+ fr: 'L\'utilisateur a été débloqué avec succès'
41
+ },
42
+
43
+ 'User Unlocked': {
44
+ en: 'User Unlocked',
45
+ es: 'Usuario desbloqueado',
46
+ de: 'Benutzer entsperrt',
47
+ pt: 'Usuário desbloqueado',
48
+ ca: 'Usuari desbloquejat',
49
+ it: 'Utente sbloccato',
50
+ fr: 'Utilisateur débloqué'
51
+ },
52
+
53
+ 'The password has been changed successfully': {
54
+ en: 'The password has been changed successfully',
55
+ es: 'La contraseña se ha cambiado con éxito',
56
+ de: 'Das Passwort wurde erfolgreich geändert',
57
+ pt: 'A senha foi alterada com sucesso',
58
+ ca: 'La contrasenya s\'ha canviat correctament',
59
+ it: 'La password è stata cambiata con successo',
60
+ fr: 'Le mot de passe a été changé avec succès'
61
+ },
62
+
63
+ 'Password Changed': {
64
+ en: 'Password Changed',
65
+ es: 'Contraseña cambiada',
66
+ de: 'Passwort geändert',
67
+ pt: 'Senha alterada',
68
+ ca: 'Contrasenya canviada',
69
+ it: 'Password cambiata',
70
+ fr: 'Mot de passe changé'
71
+ },
72
+
73
+ 'The new password must contain:': {
74
+ en: 'The new password must contain:',
75
+ es: 'La nueva contraseña debe contener:',
76
+ de: 'Das neue Passwort muss enthalten:',
77
+ pt: 'A nova senha deve conter:',
78
+ ca: 'La nova contrasenya ha de contenir:',
79
+ it: 'La nuova password deve contenere:',
80
+ fr: 'Le nouveau mot de passe doit contenir:'
81
+ },
82
+
83
+ 'At least 15 characters': {
84
+ en: 'At least 15 characters',
85
+ es: 'Al menos 15 caracteres',
86
+ de: 'Mindestens 15 Zeichen',
87
+ pt: 'Pelo menos 15 caracteres',
88
+ ca: 'Almenys 15 caràcters',
89
+ it: 'Almeno 15 caratteri',
90
+ fr: 'Au moins 15 caractères'
91
+ },
92
+
93
+ 'At least one uppercase letter': {
94
+ en: 'At least one uppercase letter',
95
+ es: 'Al menos una letra mayúscula',
96
+ de: 'Mindestens ein Großbuchstabe',
97
+ pt: 'Pelo menos uma letra maiúscula',
98
+ ca: 'Almenys una lletra majúscula',
99
+ it: 'Almeno una lettera maiuscola',
100
+ fr: 'Au moins une lettre majuscule'
101
+ },
102
+
103
+ 'At least one lowercase letter': {
104
+ en: 'At least one lowercase letter',
105
+ es: 'Al menos una letra minúscula',
106
+ de: 'Mindestens ein Kleinbuchstabe',
107
+ pt: 'Pelo menos uma letra minúscula',
108
+ ca: 'Almenys una lletra minúscula',
109
+ it: 'Almeno una lettera minuscola',
110
+ fr: 'Au moins une lettre minuscule'
111
+ },
112
+
113
+ 'At least one number': {
114
+ en: 'At least one number',
115
+ es: 'Al menos un número',
116
+ de: 'Mindestens eine Zahl',
117
+ pt: 'Pelo menos um número',
118
+ ca: 'Almenys un número',
119
+ it: 'Almeno un numero',
120
+ fr: 'Au moins un numéro'
121
+ },
122
+
123
+ 'At least one special character': {
124
+ en: 'At least one special character',
125
+ es: 'Al menos un carácter especial',
126
+ de: 'Mindestens ein Sonderzeichen',
127
+ pt: 'Pelo menos um caractere especial',
128
+ ca: 'Almenys un caràcter especial',
129
+ it: 'Almeno un carattere speciale',
130
+ fr: 'Au moins un caractère spécial'
131
+ },
132
+
133
+ 'Passwords do not match.': {
134
+ en: 'Passwords do not match.',
135
+ es: 'Las contraseñas no coinciden.',
136
+ de: 'Passwörter stimmen nicht überein.',
137
+ pt: 'As senhas não coincidem.',
138
+ ca: 'Les contrasenyes no coincideixen.',
139
+ it: 'Le password non corrispondono.',
140
+ fr: 'Les mots de passe ne correspondent pas.'
141
+ },
142
+
143
+ 'Password is required': {
144
+ en: 'Password is required',
145
+ es: 'Se requiere contraseña',
146
+ de: 'Passwort ist erforderlich',
147
+ pt: 'Senha é necessária',
148
+ ca: 'Es requereix contrasenya',
149
+ it: 'La password è obbligatoria',
150
+ fr: 'Le mot de passe est requis'
151
+ },
152
+
153
+ 'Old password is required.': {
154
+ en: 'Old password is required.',
155
+ es: 'Se requiere contraseña antigua.',
156
+ de: 'Altes Passwort ist erforderlich.',
157
+ pt: 'Senha antiga é necessária.',
158
+ ca: 'Es requereix contrasenya antiga.',
159
+ it: 'La vecchia password è obbligatoria.',
160
+ fr: 'Ancien mot de passe requis.'
161
+ },
162
+
163
+ 'Passwords do not match.': {
164
+ en: 'Passwords do not match.',
165
+ es: 'Las contraseñas no coinciden.',
166
+ de: 'Passwörter stimmen nicht überein.',
167
+ pt: 'As senhas não coincidem.',
168
+ ca: 'Les contrasenyes no coincideixen.',
169
+ it: 'Le password non corrispondono.',
170
+ fr: 'Les mots de passe ne correspondent pas.'
171
+ }
172
+ }
@@ -16,8 +16,7 @@
16
16
  background-position-x: initial;
17
17
  background-position-y: initial;
18
18
  background-size: initial;
19
- background-repeat-x: initial;
20
- background-repeat-y: initial;
19
+ background-repeat: initial;
21
20
  background-attachment: initial;
22
21
  background-origin: initial;
23
22
  background-clip: initial;
@@ -1,7 +0,0 @@
1
- export const HelloWorld = (props) => {
2
- return (
3
- <div>
4
- <h1>Hello World</h1>
5
- </div>
6
- )
7
- }