@atomsolution/sdk-merchant 1.8.6 → 1.8.7

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.
@@ -3,6 +3,7 @@ interface NewAccountCreate {
3
3
  username: string;
4
4
  userPassword: string;
5
5
  redirectFunction?: () => void;
6
+ apiUrl: string;
6
7
  }
7
- export declare function NewAccountCreate({ username, userPassword, logo, redirectFunction, }: NewAccountCreate): import("react/jsx-runtime").JSX.Element;
8
+ export declare function NewAccountCreate({ apiUrl, username, userPassword, logo, redirectFunction, }: NewAccountCreate): import("react/jsx-runtime").JSX.Element;
8
9
  export {};
@@ -2,6 +2,7 @@ interface ForgotPasswordPayload {
2
2
  new_password: string;
3
3
  email: string;
4
4
  current_password?: string;
5
+ apiUrl: string;
5
6
  }
6
7
  export declare const forgotPassword: (payload: ForgotPasswordPayload) => Promise<any>;
7
8
  export {};
@@ -21,10 +21,70 @@ var __async = (__this, __arguments, generator) => {
21
21
  };
22
22
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
23
23
  const jsxRuntime = require("./jsx-runtime-DV8UmLi4.cjs");
24
- const React = require("react");
25
- const useTranslation = require("./use-translation-m-_wCmHs.cjs");
26
24
  const index = require("./index-Ozgk-K52.cjs");
25
+ const useTranslation = require("./use-translation-m-_wCmHs.cjs");
26
+ const React = require("react");
27
27
  const axios = require("axios");
28
+ const regex = {
29
+ length: /^.{8,35}$/,
30
+ upper: /^(?=.*[A-Z]).*$/,
31
+ lower: /^(?=.*[a-z]).*$/,
32
+ number: /^(?=.*\d).+$/,
33
+ no_vietnamese: /^[\x21-\x7E]+$/
34
+ };
35
+ function usePasswordValidation(password) {
36
+ const requirements = React.useMemo(() => {
37
+ return Object.keys(regex).reduce((acc, key) => {
38
+ acc[key] = regex[key].test(password);
39
+ return acc;
40
+ }, {});
41
+ }, [password]);
42
+ const isValid = React.useMemo(
43
+ () => Object.values(requirements).every((req) => req),
44
+ [requirements]
45
+ );
46
+ const validate = React.useCallback(
47
+ (_password = password) => {
48
+ let isValid2 = true;
49
+ const errors = Object.keys(regex).filter((key) => {
50
+ if (!regex[key].test(_password)) {
51
+ isValid2 = false;
52
+ return true;
53
+ }
54
+ });
55
+ return { isValid: isValid2, errors };
56
+ },
57
+ [password]
58
+ );
59
+ return { requirements, isValid, validate };
60
+ }
61
+ const forgotPassword = (payload) => __async(exports, null, function* () {
62
+ var _a;
63
+ try {
64
+ const response = yield axios.put(
65
+ `${payload.apiUrl}/reset-password`,
66
+ payload,
67
+ {
68
+ headers: {
69
+ "Content-Type": "application/json",
70
+ // Authorization: `Bearer ${accessToken}`,
71
+ Origin: "http://localhost:3000",
72
+ Referer: "http://localhost:3000/"
73
+ }
74
+ }
75
+ );
76
+ return response.data;
77
+ } catch (error) {
78
+ throw ((_a = error.response) == null ? void 0 : _a.data) || error;
79
+ }
80
+ });
81
+ function FormHeader({ logoSrc, title, description }) {
82
+ return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(jsxRuntime.jsxRuntimeExports.Fragment, { children: [
83
+ /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("div", { className: "mb-1.5 justify-self-center", children: /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("img", { src: logoSrc, alt: "BVBank Logo", className: "h-10 w-auto" }) }),
84
+ /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("h1", { className: "text-base font-semibold text-gray-900 text-center mb-1.5", children: title }),
85
+ description && /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("div", { className: "p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]", children: description })
86
+ ] });
87
+ }
28
88
  const EyeIcon = ({ className }) => /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(
29
89
  "svg",
30
90
  {
@@ -177,13 +237,6 @@ function PasswordRequirements({
177
237
  ] })
178
238
  ] });
179
239
  }
180
- function FormHeader({ logoSrc, title, description }) {
181
- return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(jsxRuntime.jsxRuntimeExports.Fragment, { children: [
182
- /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("div", { className: "mb-1.5 justify-self-center", children: /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("img", { src: logoSrc, alt: "BVBank Logo", className: "h-10 w-auto" }) }),
183
- /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("h1", { className: "text-base font-semibold text-gray-900 text-center mb-1.5", children: title }),
184
- description && /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("div", { className: "p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]", children: description })
185
- ] });
186
- }
187
240
  function SubmitButton({
188
241
  onClick,
189
242
  disabled = false,
@@ -206,57 +259,8 @@ function SubmitButton({
206
259
  }
207
260
  );
208
261
  }
209
- const regex = {
210
- length: /^.{8,35}$/,
211
- upper: /^(?=.*[A-Z]).*$/,
212
- lower: /^(?=.*[a-z]).*$/,
213
- number: /^(?=.*\d).+$/,
214
- no_vietnamese: /^[\x21-\x7E]+$/
215
- };
216
- function usePasswordValidation(password) {
217
- const requirements = React.useMemo(() => {
218
- return Object.keys(regex).reduce((acc, key) => {
219
- acc[key] = regex[key].test(password);
220
- return acc;
221
- }, {});
222
- }, [password]);
223
- const isValid = React.useMemo(
224
- () => Object.values(requirements).every((req) => req),
225
- [requirements]
226
- );
227
- const validate = React.useCallback(
228
- (_password = password) => {
229
- let isValid2 = true;
230
- const errors = Object.keys(regex).filter((key) => {
231
- if (!regex[key].test(_password)) {
232
- isValid2 = false;
233
- return true;
234
- }
235
- });
236
- return { isValid: isValid2, errors };
237
- },
238
- [password]
239
- );
240
- return { requirements, isValid, validate };
241
- }
242
- const API_URL = "https://bvbank-stag.atomsolution.vn/v1/portal/user";
243
- const forgotPassword = (payload) => __async(exports, null, function* () {
244
- var _a;
245
- try {
246
- const response = yield axios.put(`${API_URL}/reset-password`, payload, {
247
- headers: {
248
- "Content-Type": "application/json",
249
- // Authorization: `Bearer ${accessToken}`,
250
- Origin: "http://localhost:3000",
251
- Referer: "http://localhost:3000/"
252
- }
253
- });
254
- return response.data;
255
- } catch (error) {
256
- throw ((_a = error.response) == null ? void 0 : _a.data) || error;
257
- }
258
- });
259
262
  function NewAccountCreate({
263
+ apiUrl,
260
264
  username,
261
265
  userPassword,
262
266
  logo,
@@ -274,6 +278,7 @@ function NewAccountCreate({
274
278
  setIsSubmitting(true);
275
279
  try {
276
280
  yield forgotPassword({
281
+ apiUrl,
277
282
  email,
278
283
  new_password: password,
279
284
  current_password: userPassword || void 0
@@ -1 +1 @@
1
- {"version":3,"file":"digistore.cjs","sources":["../src/digistore/NewAccountCreate/Icon.tsx","../src/digistore/NewAccountCreate/InputField.tsx","../src/digistore/NewAccountCreate/RequirementItem.tsx","../src/digistore/NewAccountCreate/PasswordRequirements.tsx","../src/digistore/NewAccountCreate/FormHeader.tsx","../src/digistore/NewAccountCreate/SubmitButton.tsx","../src/digistore/hooks/usePasswordValidation.ts","../src/digistore/services/createDigistoreAccountService.ts","../src/digistore/NewAccountCreate/index.tsx"],"sourcesContent":["interface IconProps {\n className: string;\n}\nexport const EyeIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\n />\n </svg>\n);\n\n// Eye Slash Icon Component\nexport const EyeSlashIcon = ({ className }: IconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17.94 17.94A10.94 10.94 0 0112 20c-5 0-9.27-3.11-11-8a11.66 11.66 0 012.39-4.27\" />\n <path d=\"M3 3l18 18\" />\n <path d=\"M9.53 9.53A3 3 0 0114.47 14.47\" />\n <path d=\"M21 12a11.66 11.66 0 00-3.06-4.94M12 5a10.94 10.94 0 016.06 1.94\" />\n </svg>\n);\n","// types.ts - Type definitions\nexport interface PasswordRequirements {\n length: boolean;\n special: boolean;\n upper: boolean;\n lower: boolean;\n number: boolean;\n}\n\n// InputField.tsx - Component tái sử dụng cho input\nimport { useState } from \"react\";\nimport { EyeIcon, EyeSlashIcon } from \"./Icon\";\n\ninterface InputFieldProps {\n label: string;\n type?: string;\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder: string;\n required?: boolean;\n showPasswordToggle?: boolean;\n className?: string;\n disabled?: boolean;\n error?: string\n}\n\nexport function InputField({\n label,\n type = \"text\",\n value,\n onChange,\n placeholder,\n required = false,\n showPasswordToggle = false,\n className = \"\",\n disabled = false,\n error = ''\n}: InputFieldProps) {\n const [showPassword, setShowPassword] = useState(false);\n\n const inputType = showPasswordToggle\n ? showPassword\n ? \"text\"\n : \"password\"\n : type;\n\n return (\n <div className={className}>\n <label className=\"block text-[0.685rem] font-semibold text-gray-700 mb-1\">\n {label} {required && <span className=\"text-red-500\">*</span>}\n </label>\n <div className=\"relative\">\n <input\n type={inputType}\n value={value}\n onChange={onChange}\n className=\"w-full px-4 py-2 pr-12 border-2 border-gray-200 rounded-lg text-xs\n focus:outline-none focus:border-blue-500 focus:bg-white focus:ring-3\n focus:ring-blue-100 transition-all disabled:bg-gray-200\"\n placeholder={placeholder}\n disabled={disabled}\n />\n {showPasswordToggle && (\n <button\n type=\"button\"\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600 p-1\"\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? (\n <EyeSlashIcon className=\"w-5 h-5\" />\n ) : (\n <EyeIcon className=\"w-5 h-5\" />\n )}\n </button>\n )}\n </div>\n\n <div className={`grid duration-200 ${error ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'}`}>\n <div className=\"overflow-hidden\">\n <p className=\"text-red-500 text-xs font-normal mt-2\">{error}</p>\n </div>\n </div>\n </div>\n );\n}\n","interface RequirementItemProps {\n met: boolean;\n text: string;\n}\n\nconst RequirementItem = ({ met, text }: RequirementItemProps) => (\n <li className=\"flex items-center gap-2 text-[0.65rem] leading-none text-gray-700\">\n <span className=\"mt-0.5 w-4 h-4 flex items-center justify-center\">\n {met ? (\n // Check SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"w-4 h-4 text-green-600\"\n >\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n ) : (\n // Dot SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 8 8\"\n className=\"w-2 h-2 text-gray-400 fill-current\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"4\" />\n </svg>\n )}\n </span>\n <span className={met ? \"text-gray-800 leading-none\" : \"leading-none\"}>\n {text}\n </span>\n </li>\n);\n\nexport default RequirementItem;\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport RequirementItem from \"./RequirementItem\";\nimport { PasswordRequirements as PasswordRequirementsType } from \"./types\";\n\ninterface PasswordRequirementsProps {\n requirements: PasswordRequirementsType;\n}\n\nexport function PasswordRequirements({\n requirements,\n}: PasswordRequirementsProps) {\n const { translate } = useTranslation('digistore-id')\n\n return (\n <div className=\"bg-gray-50 rounded-lg px-4 py-2 mt-2\">\n <div className=\"text-xs font-semibold mb-2\">{translate(\"pwd_requirement_title\")}</div>\n <ul className=\"space-y-0.5\">\n <RequirementItem met={requirements.length} text={translate(\"pwd_requirement_length\")} />\n <RequirementItem\n met={requirements.upper}\n text={translate(\"pwd_requirement_uppercase\")}\n />\n <RequirementItem\n met={requirements.lower}\n text={translate(\"pwd_requirement_lowercase\")}\n />\n <RequirementItem met={requirements.number} text={translate(\"pwd_requirement_number\")} />\n <RequirementItem met={requirements.no_vietnamese} text={translate(\"pwd_requirement_no_vietnamese\")} />\n </ul>\n </div>\n );\n}\n","import { ReactNode } from \"react\";\n\ninterface FormHeaderProps {\n logoSrc: string;\n title: string;\n description?: ReactNode;\n}\n\nexport function FormHeader({ logoSrc, title, description }: FormHeaderProps) {\n return (\n <>\n <div className=\"mb-1.5 justify-self-center\">\n <img src={logoSrc} alt=\"BVBank Logo\" className=\"h-10 w-auto\" />\n </div>\n <h1 className=\"text-base font-semibold text-gray-900 text-center mb-1.5\">\n {title}\n </h1>\n {description && (\n <div className=\"p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]\">\n {description}\n </div>\n )}\n </>\n );\n}\n","import { ReactNode } from \"react\";\n\ninterface SubmitButtonProps {\n onClick: () => void;\n disabled?: boolean;\n isLoading?: boolean;\n children: ReactNode;\n loadingText?: string;\n className?: string;\n}\n\nexport function SubmitButton({\n onClick,\n disabled = false,\n isLoading = false,\n children,\n loadingText = \"Đang xử lý...\",\n className = \"\",\n}: SubmitButtonProps) {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={`w-full bg-[#1F2B7B] text-white border-none \n py-2.5 rounded-lg text-xs font-semibold cursor-pointer \n hover:from-blue-700 hover:to-blue-800 hover:shadow-lg hover:-translate-y-0.5 \n active:translate-y-0 transition-all mt-6 disabled:opacity-75 \n disabled:cursor-not-allowed disabled:transform-none ${className}`}\n >\n {isLoading ? loadingText : children}\n </button>\n );\n}\n","import { useCallback, useMemo } from \"react\";\nimport { PasswordRequirements } from \"../NewAccountCreate/types\";\n\nconst regex = {\n length: /^.{8,35}$/,\n upper: /^(?=.*[A-Z]).*$/,\n lower: /^(?=.*[a-z]).*$/,\n number: /^(?=.*\\d).+$/,\n no_vietnamese: /^[\\x21-\\x7E]+$/,\n};\n\ntype TRegexKey = keyof typeof regex;\n\nexport function usePasswordValidation(password: string) {\n const requirements = useMemo(() => {\n return Object.keys(regex).reduce((acc, key) => {\n acc[key as TRegexKey] = regex[key as TRegexKey].test(password);\n return acc;\n }, {} as PasswordRequirements);\n }, [password]);\n\n const isValid = useMemo(\n () => Object.values(requirements).every((req) => req),\n [requirements]\n );\n\n const validate = useCallback(\n (_password: string = password) => {\n let isValid = true;\n const errors = Object.keys(regex).filter((key) => {\n if (!regex[key as keyof typeof regex].test(_password)) {\n isValid = false;\n return true;\n }\n });\n\n return { isValid, errors };\n },\n [password]\n );\n\n return { requirements, isValid, validate };\n}\n","import axios from \"axios\";\n\nconst API_URL = \"https://bvbank-stag.atomsolution.vn/v1/portal/user\";\n\ninterface ForgotPasswordPayload {\n new_password: string;\n email: string;\n current_password?: string //props có password thì là current password, email = username, new_password là cho người dùng nhập\n}\n\nexport const forgotPassword = async (\n payload: ForgotPasswordPayload,\n // accessToken: string\n) => {\n try {\n const response = await axios.put(`${API_URL}/reset-password`, payload, {\n headers: {\n \"Content-Type\": \"application/json\",\n // Authorization: `Bearer ${accessToken}`,\n Origin: \"http://localhost:3000\",\n Referer: \"http://localhost:3000/\",\n },\n });\n return response.data;\n } catch (error: any) {\n throw error.response?.data || error;\n }\n};\n","import { useState } from 'react';\nimport { InputField } from './InputField';\nimport { PasswordRequirements } from './PasswordRequirements';\nimport { FormHeader } from './FormHeader';\nimport { SubmitButton } from './SubmitButton';\nimport { useTranslation } from '@/hooks/use-translation';\nimport { CustomToast } from '@/components/common/custom-toast';\nimport { usePasswordValidation } from '../hooks/usePasswordValidation';\nimport { forgotPassword } from '../services/createDigistoreAccountService';\n\ninterface NewAccountCreate {\n logo: string;\n username: string;\n userPassword: string;\n redirectFunction?: () => void;\n}\n\nexport function NewAccountCreate({\n username,\n userPassword,\n logo,\n redirectFunction,\n}: NewAccountCreate) {\n const { translate } = useTranslation('digistore-id');\n const [email, setEmail] = useState(username);\n const [password, setPassword] = useState(userPassword || '');\n const [confirmPassword, setConfirmPassword] = useState(userPassword || '');\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [passwordError, setPasswordError] = useState('');\n const [confirmPasswordError, setConfirmPasswordError] = useState('');\n\n const { requirements, validate } = usePasswordValidation(password);\n\n const handleSubmit = async () => {\n setIsSubmitting(true);\n try {\n await forgotPassword({\n email,\n new_password: password,\n current_password: userPassword || undefined,\n });\n CustomToast.success(\n translate('success_toast_title'),\n translate('success_toast_des'),\n );\n // alert('Tài khoản đã được tạo thành công!');\n redirectFunction?.();\n } catch (error: any) {\n console.error(error);\n CustomToast.error(\n translate('error_toast_title'),\n translate('error_toast_des'),\n );\n // alert('Tạo tài khoản thất bại!');\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const headerDescription = (\n <>\n <div className=\"text-xs text-primary leading-relaxed mb-0.5\">\n {translate('note_login_success_with')}{' '}\n <span className=\"text-[#335CFF] font-semibold\">{email}</span>\n <br />\n {translate('note_desc')}\n </div>\n\n <div className=\"text-xs text-primary leading-relaxed\">\n {translate('note_from_date')}{' '}\n <span className=\"font-semibold text-[#335CFF]\">01/08/2025</span>,{' '}\n {translate('note_use_digis_acc_to_access')}\n </div>\n </>\n );\n\n return (\n <div className=\"bg-white rounded-2xl shadow-2xl max-w-[550px] w-full px-8 pb-3.5 pt-3 relative\">\n <FormHeader\n logoSrc={logo}\n title={translate('title')}\n description={headerDescription}\n />\n\n <div className=\"mt-2 space-y-3\">\n <InputField\n label={translate('form_email_label')}\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={translate('form_email_placeholder')}\n required\n disabled\n />\n\n <InputField\n label={translate('form_pwd_label')}\n value={password}\n onChange={(e) => {\n const newPassword = e.target.value;\n setPassword(newPassword);\n\n if (!newPassword) {\n setPasswordError(translate('form_pwd_err_required'));\n } else if (!validate(newPassword).isValid) {\n setPasswordError(translate('form_pwd_err_invalid'));\n } else {\n setPasswordError('');\n }\n\n if (confirmPassword && confirmPassword !== newPassword) {\n setConfirmPasswordError(\n translate('form_confirm_pwd_err_no_match'),\n );\n } else {\n setConfirmPasswordError('');\n }\n }}\n placeholder={translate('form_pwd_placeholder')}\n required\n showPasswordToggle\n error={passwordError}\n />\n\n <InputField\n label={translate('form_confirm_pwd_label')}\n value={confirmPassword}\n onChange={(e) => {\n const newConfirm = e.target.value;\n setConfirmPassword(newConfirm);\n\n if (!newConfirm) {\n setConfirmPasswordError(\n translate('form_confirm_pwd_err_required'),\n );\n } else if (newConfirm !== password) {\n setConfirmPasswordError(\n translate('form_confirm_pwd_err_no_match'),\n );\n } else {\n setConfirmPasswordError('');\n }\n }}\n placeholder={translate('form_confirm_pwd_placeholder')}\n required\n showPasswordToggle\n error={confirmPasswordError}\n />\n\n <PasswordRequirements requirements={requirements} />\n\n <SubmitButton\n onClick={handleSubmit}\n disabled={\n isSubmitting ||\n !password ||\n !confirmPassword ||\n !!passwordError ||\n !!confirmPasswordError\n }\n isLoading={isSubmitting}\n >\n {translate('form_submit_btn')}\n </SubmitButton>\n </div>\n </div>\n );\n}\n"],"names":["jsxs","jsx","useState","useTranslation","Fragment","useMemo","useCallback","isValid","CustomToast"],"mappings":"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"}
1
+ {"version":3,"file":"digistore.cjs","sources":["../src/digistore/hooks/usePasswordValidation.ts","../src/digistore/services/createDigistoreAccountService.ts","../src/digistore/NewAccountCreate/FormHeader.tsx","../src/digistore/NewAccountCreate/Icon.tsx","../src/digistore/NewAccountCreate/InputField.tsx","../src/digistore/NewAccountCreate/RequirementItem.tsx","../src/digistore/NewAccountCreate/PasswordRequirements.tsx","../src/digistore/NewAccountCreate/SubmitButton.tsx","../src/digistore/NewAccountCreate/index.tsx"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport { PasswordRequirements } from \"../NewAccountCreate/types\";\n\nconst regex = {\n length: /^.{8,35}$/,\n upper: /^(?=.*[A-Z]).*$/,\n lower: /^(?=.*[a-z]).*$/,\n number: /^(?=.*\\d).+$/,\n no_vietnamese: /^[\\x21-\\x7E]+$/,\n};\n\ntype TRegexKey = keyof typeof regex;\n\nexport function usePasswordValidation(password: string) {\n const requirements = useMemo(() => {\n return Object.keys(regex).reduce((acc, key) => {\n acc[key as TRegexKey] = regex[key as TRegexKey].test(password);\n return acc;\n }, {} as PasswordRequirements);\n }, [password]);\n\n const isValid = useMemo(\n () => Object.values(requirements).every((req) => req),\n [requirements]\n );\n\n const validate = useCallback(\n (_password: string = password) => {\n let isValid = true;\n const errors = Object.keys(regex).filter((key) => {\n if (!regex[key as keyof typeof regex].test(_password)) {\n isValid = false;\n return true;\n }\n });\n\n return { isValid, errors };\n },\n [password]\n );\n\n return { requirements, isValid, validate };\n}\n","import axios from \"axios\";\n\ninterface ForgotPasswordPayload {\n new_password: string;\n email: string;\n current_password?: string; //props có password thì là current password, email = username, new_password là cho người dùng nhập\n apiUrl: string;\n}\n\nexport const forgotPassword = async (\n payload: ForgotPasswordPayload,\n // accessToken: string\n) => {\n try {\n const response = await axios.put(\n `${payload.apiUrl}/reset-password`,\n payload,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n // Authorization: `Bearer ${accessToken}`,\n Origin: \"http://localhost:3000\",\n Referer: \"http://localhost:3000/\",\n },\n },\n );\n return response.data;\n } catch (error: any) {\n throw error.response?.data || error;\n }\n};\n","import { ReactNode } from \"react\";\n\ninterface FormHeaderProps {\n logoSrc: string;\n title: string;\n description?: ReactNode;\n}\n\nexport function FormHeader({ logoSrc, title, description }: FormHeaderProps) {\n return (\n <>\n <div className=\"mb-1.5 justify-self-center\">\n <img src={logoSrc} alt=\"BVBank Logo\" className=\"h-10 w-auto\" />\n </div>\n <h1 className=\"text-base font-semibold text-gray-900 text-center mb-1.5\">\n {title}\n </h1>\n {description && (\n <div className=\"p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]\">\n {description}\n </div>\n )}\n </>\n );\n}\n","interface IconProps {\n className: string;\n}\nexport const EyeIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\n />\n </svg>\n);\n\n// Eye Slash Icon Component\nexport const EyeSlashIcon = ({ className }: IconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17.94 17.94A10.94 10.94 0 0112 20c-5 0-9.27-3.11-11-8a11.66 11.66 0 012.39-4.27\" />\n <path d=\"M3 3l18 18\" />\n <path d=\"M9.53 9.53A3 3 0 0114.47 14.47\" />\n <path d=\"M21 12a11.66 11.66 0 00-3.06-4.94M12 5a10.94 10.94 0 016.06 1.94\" />\n </svg>\n);\n","// types.ts - Type definitions\nexport interface PasswordRequirements {\n length: boolean;\n special: boolean;\n upper: boolean;\n lower: boolean;\n number: boolean;\n}\n\n// InputField.tsx - Component tái sử dụng cho input\nimport { useState } from \"react\";\nimport { EyeIcon, EyeSlashIcon } from \"./Icon\";\n\ninterface InputFieldProps {\n label: string;\n type?: string;\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder: string;\n required?: boolean;\n showPasswordToggle?: boolean;\n className?: string;\n disabled?: boolean;\n error?: string\n}\n\nexport function InputField({\n label,\n type = \"text\",\n value,\n onChange,\n placeholder,\n required = false,\n showPasswordToggle = false,\n className = \"\",\n disabled = false,\n error = ''\n}: InputFieldProps) {\n const [showPassword, setShowPassword] = useState(false);\n\n const inputType = showPasswordToggle\n ? showPassword\n ? \"text\"\n : \"password\"\n : type;\n\n return (\n <div className={className}>\n <label className=\"block text-[0.685rem] font-semibold text-gray-700 mb-1\">\n {label} {required && <span className=\"text-red-500\">*</span>}\n </label>\n <div className=\"relative\">\n <input\n type={inputType}\n value={value}\n onChange={onChange}\n className=\"w-full px-4 py-2 pr-12 border-2 border-gray-200 rounded-lg text-xs\n focus:outline-none focus:border-blue-500 focus:bg-white focus:ring-3\n focus:ring-blue-100 transition-all disabled:bg-gray-200\"\n placeholder={placeholder}\n disabled={disabled}\n />\n {showPasswordToggle && (\n <button\n type=\"button\"\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600 p-1\"\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? (\n <EyeSlashIcon className=\"w-5 h-5\" />\n ) : (\n <EyeIcon className=\"w-5 h-5\" />\n )}\n </button>\n )}\n </div>\n\n <div className={`grid duration-200 ${error ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'}`}>\n <div className=\"overflow-hidden\">\n <p className=\"text-red-500 text-xs font-normal mt-2\">{error}</p>\n </div>\n </div>\n </div>\n );\n}\n","interface RequirementItemProps {\n met: boolean;\n text: string;\n}\n\nconst RequirementItem = ({ met, text }: RequirementItemProps) => (\n <li className=\"flex items-center gap-2 text-[0.65rem] leading-none text-gray-700\">\n <span className=\"mt-0.5 w-4 h-4 flex items-center justify-center\">\n {met ? (\n // Check SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"w-4 h-4 text-green-600\"\n >\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n ) : (\n // Dot SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 8 8\"\n className=\"w-2 h-2 text-gray-400 fill-current\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"4\" />\n </svg>\n )}\n </span>\n <span className={met ? \"text-gray-800 leading-none\" : \"leading-none\"}>\n {text}\n </span>\n </li>\n);\n\nexport default RequirementItem;\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport RequirementItem from \"./RequirementItem\";\nimport { PasswordRequirements as PasswordRequirementsType } from \"./types\";\n\ninterface PasswordRequirementsProps {\n requirements: PasswordRequirementsType;\n}\n\nexport function PasswordRequirements({\n requirements,\n}: PasswordRequirementsProps) {\n const { translate } = useTranslation('digistore-id')\n\n return (\n <div className=\"bg-gray-50 rounded-lg px-4 py-2 mt-2\">\n <div className=\"text-xs font-semibold mb-2\">{translate(\"pwd_requirement_title\")}</div>\n <ul className=\"space-y-0.5\">\n <RequirementItem met={requirements.length} text={translate(\"pwd_requirement_length\")} />\n <RequirementItem\n met={requirements.upper}\n text={translate(\"pwd_requirement_uppercase\")}\n />\n <RequirementItem\n met={requirements.lower}\n text={translate(\"pwd_requirement_lowercase\")}\n />\n <RequirementItem met={requirements.number} text={translate(\"pwd_requirement_number\")} />\n <RequirementItem met={requirements.no_vietnamese} text={translate(\"pwd_requirement_no_vietnamese\")} />\n </ul>\n </div>\n );\n}\n","import { ReactNode } from \"react\";\n\ninterface SubmitButtonProps {\n onClick: () => void;\n disabled?: boolean;\n isLoading?: boolean;\n children: ReactNode;\n loadingText?: string;\n className?: string;\n}\n\nexport function SubmitButton({\n onClick,\n disabled = false,\n isLoading = false,\n children,\n loadingText = \"Đang xử lý...\",\n className = \"\",\n}: SubmitButtonProps) {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={`w-full bg-[#1F2B7B] text-white border-none \n py-2.5 rounded-lg text-xs font-semibold cursor-pointer \n hover:from-blue-700 hover:to-blue-800 hover:shadow-lg hover:-translate-y-0.5 \n active:translate-y-0 transition-all mt-6 disabled:opacity-75 \n disabled:cursor-not-allowed disabled:transform-none ${className}`}\n >\n {isLoading ? loadingText : children}\n </button>\n );\n}\n","import { CustomToast } from \"@/components/common/custom-toast\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { useState } from \"react\";\nimport { usePasswordValidation } from \"../hooks/usePasswordValidation\";\nimport { forgotPassword } from \"../services/createDigistoreAccountService\";\nimport { FormHeader } from \"./FormHeader\";\nimport { InputField } from \"./InputField\";\nimport { PasswordRequirements } from \"./PasswordRequirements\";\nimport { SubmitButton } from \"./SubmitButton\";\n\ninterface NewAccountCreate {\n logo: string;\n username: string;\n userPassword: string;\n redirectFunction?: () => void;\n apiUrl: string;\n}\n\nexport function NewAccountCreate({\n apiUrl,\n username,\n userPassword,\n logo,\n redirectFunction,\n}: NewAccountCreate) {\n const { translate } = useTranslation(\"digistore-id\");\n const [email, setEmail] = useState(username);\n const [password, setPassword] = useState(userPassword || \"\");\n const [confirmPassword, setConfirmPassword] = useState(userPassword || \"\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [passwordError, setPasswordError] = useState(\"\");\n const [confirmPasswordError, setConfirmPasswordError] = useState(\"\");\n\n const { requirements, validate } = usePasswordValidation(password);\n\n const handleSubmit = async () => {\n setIsSubmitting(true);\n try {\n await forgotPassword({\n apiUrl,\n email,\n new_password: password,\n current_password: userPassword || undefined,\n });\n CustomToast.success(\n translate(\"success_toast_title\"),\n translate(\"success_toast_des\"),\n );\n // alert('Tài khoản đã được tạo thành công!');\n redirectFunction?.();\n } catch (error: any) {\n console.error(error);\n CustomToast.error(\n translate(\"error_toast_title\"),\n translate(\"error_toast_des\"),\n );\n // alert('Tạo tài khoản thất bại!');\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const headerDescription = (\n <>\n <div className=\"text-xs text-primary leading-relaxed mb-0.5\">\n {translate(\"note_login_success_with\")}{\" \"}\n <span className=\"text-[#335CFF] font-semibold\">{email}</span>\n <br />\n {translate(\"note_desc\")}\n </div>\n\n <div className=\"text-xs text-primary leading-relaxed\">\n {translate(\"note_from_date\")}{\" \"}\n <span className=\"font-semibold text-[#335CFF]\">01/08/2025</span>,{\" \"}\n {translate(\"note_use_digis_acc_to_access\")}\n </div>\n </>\n );\n\n return (\n <div className=\"bg-white rounded-2xl shadow-2xl max-w-[550px] w-full px-8 pb-3.5 pt-3 relative\">\n <FormHeader\n logoSrc={logo}\n title={translate(\"title\")}\n description={headerDescription}\n />\n\n <div className=\"mt-2 space-y-3\">\n <InputField\n label={translate(\"form_email_label\")}\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={translate(\"form_email_placeholder\")}\n required\n disabled\n />\n\n <InputField\n label={translate(\"form_pwd_label\")}\n value={password}\n onChange={(e) => {\n const newPassword = e.target.value;\n setPassword(newPassword);\n\n if (!newPassword) {\n setPasswordError(translate(\"form_pwd_err_required\"));\n } else if (!validate(newPassword).isValid) {\n setPasswordError(translate(\"form_pwd_err_invalid\"));\n } else {\n setPasswordError(\"\");\n }\n\n if (confirmPassword && confirmPassword !== newPassword) {\n setConfirmPasswordError(\n translate(\"form_confirm_pwd_err_no_match\"),\n );\n } else {\n setConfirmPasswordError(\"\");\n }\n }}\n placeholder={translate(\"form_pwd_placeholder\")}\n required\n showPasswordToggle\n error={passwordError}\n />\n\n <InputField\n label={translate(\"form_confirm_pwd_label\")}\n value={confirmPassword}\n onChange={(e) => {\n const newConfirm = e.target.value;\n setConfirmPassword(newConfirm);\n\n if (!newConfirm) {\n setConfirmPasswordError(\n translate(\"form_confirm_pwd_err_required\"),\n );\n } else if (newConfirm !== password) {\n setConfirmPasswordError(\n translate(\"form_confirm_pwd_err_no_match\"),\n );\n } else {\n setConfirmPasswordError(\"\");\n }\n }}\n placeholder={translate(\"form_confirm_pwd_placeholder\")}\n required\n showPasswordToggle\n error={confirmPasswordError}\n />\n\n <PasswordRequirements requirements={requirements} />\n\n <SubmitButton\n onClick={handleSubmit}\n disabled={\n isSubmitting ||\n !password ||\n !confirmPassword ||\n !!passwordError ||\n !!confirmPasswordError\n }\n isLoading={isSubmitting}\n >\n {translate(\"form_submit_btn\")}\n </SubmitButton>\n </div>\n </div>\n );\n}\n"],"names":["useMemo","useCallback","isValid","jsxs","Fragment","jsx","useState","useTranslation","CustomToast"],"mappings":"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"}
@@ -19,10 +19,70 @@ var __async = (__this, __arguments, generator) => {
19
19
  });
20
20
  };
21
21
  import { j as jsxRuntimeExports } from "./jsx-runtime-ClP9nxnW.js";
22
- import { useState, useMemo, useCallback } from "react";
23
- import { u as useTranslation } from "./use-translation-CPJMFAae.js";
24
22
  import { C as CustomToast } from "./index-ChOpfqCh.js";
23
+ import { u as useTranslation } from "./use-translation-CPJMFAae.js";
24
+ import { useMemo, useCallback, useState } from "react";
25
25
  import axios from "axios";
26
+ const regex = {
27
+ length: /^.{8,35}$/,
28
+ upper: /^(?=.*[A-Z]).*$/,
29
+ lower: /^(?=.*[a-z]).*$/,
30
+ number: /^(?=.*\d).+$/,
31
+ no_vietnamese: /^[\x21-\x7E]+$/
32
+ };
33
+ function usePasswordValidation(password) {
34
+ const requirements = useMemo(() => {
35
+ return Object.keys(regex).reduce((acc, key) => {
36
+ acc[key] = regex[key].test(password);
37
+ return acc;
38
+ }, {});
39
+ }, [password]);
40
+ const isValid = useMemo(
41
+ () => Object.values(requirements).every((req) => req),
42
+ [requirements]
43
+ );
44
+ const validate = useCallback(
45
+ (_password = password) => {
46
+ let isValid2 = true;
47
+ const errors = Object.keys(regex).filter((key) => {
48
+ if (!regex[key].test(_password)) {
49
+ isValid2 = false;
50
+ return true;
51
+ }
52
+ });
53
+ return { isValid: isValid2, errors };
54
+ },
55
+ [password]
56
+ );
57
+ return { requirements, isValid, validate };
58
+ }
59
+ const forgotPassword = (payload) => __async(void 0, null, function* () {
60
+ var _a;
61
+ try {
62
+ const response = yield axios.put(
63
+ `${payload.apiUrl}/reset-password`,
64
+ payload,
65
+ {
66
+ headers: {
67
+ "Content-Type": "application/json",
68
+ // Authorization: `Bearer ${accessToken}`,
69
+ Origin: "http://localhost:3000",
70
+ Referer: "http://localhost:3000/"
71
+ }
72
+ }
73
+ );
74
+ return response.data;
75
+ } catch (error) {
76
+ throw ((_a = error.response) == null ? void 0 : _a.data) || error;
77
+ }
78
+ });
79
+ function FormHeader({ logoSrc, title, description }) {
80
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
81
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-1.5 justify-self-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: logoSrc, alt: "BVBank Logo", className: "h-10 w-auto" }) }),
82
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-base font-semibold text-gray-900 text-center mb-1.5", children: title }),
83
+ description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]", children: description })
84
+ ] });
85
+ }
26
86
  const EyeIcon = ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
27
87
  "svg",
28
88
  {
@@ -175,13 +235,6 @@ function PasswordRequirements({
175
235
  ] })
176
236
  ] });
177
237
  }
178
- function FormHeader({ logoSrc, title, description }) {
179
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
180
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-1.5 justify-self-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: logoSrc, alt: "BVBank Logo", className: "h-10 w-auto" }) }),
181
- /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-base font-semibold text-gray-900 text-center mb-1.5", children: title }),
182
- description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]", children: description })
183
- ] });
184
- }
185
238
  function SubmitButton({
186
239
  onClick,
187
240
  disabled = false,
@@ -204,57 +257,8 @@ function SubmitButton({
204
257
  }
205
258
  );
206
259
  }
207
- const regex = {
208
- length: /^.{8,35}$/,
209
- upper: /^(?=.*[A-Z]).*$/,
210
- lower: /^(?=.*[a-z]).*$/,
211
- number: /^(?=.*\d).+$/,
212
- no_vietnamese: /^[\x21-\x7E]+$/
213
- };
214
- function usePasswordValidation(password) {
215
- const requirements = useMemo(() => {
216
- return Object.keys(regex).reduce((acc, key) => {
217
- acc[key] = regex[key].test(password);
218
- return acc;
219
- }, {});
220
- }, [password]);
221
- const isValid = useMemo(
222
- () => Object.values(requirements).every((req) => req),
223
- [requirements]
224
- );
225
- const validate = useCallback(
226
- (_password = password) => {
227
- let isValid2 = true;
228
- const errors = Object.keys(regex).filter((key) => {
229
- if (!regex[key].test(_password)) {
230
- isValid2 = false;
231
- return true;
232
- }
233
- });
234
- return { isValid: isValid2, errors };
235
- },
236
- [password]
237
- );
238
- return { requirements, isValid, validate };
239
- }
240
- const API_URL = "https://bvbank-stag.atomsolution.vn/v1/portal/user";
241
- const forgotPassword = (payload) => __async(void 0, null, function* () {
242
- var _a;
243
- try {
244
- const response = yield axios.put(`${API_URL}/reset-password`, payload, {
245
- headers: {
246
- "Content-Type": "application/json",
247
- // Authorization: `Bearer ${accessToken}`,
248
- Origin: "http://localhost:3000",
249
- Referer: "http://localhost:3000/"
250
- }
251
- });
252
- return response.data;
253
- } catch (error) {
254
- throw ((_a = error.response) == null ? void 0 : _a.data) || error;
255
- }
256
- });
257
260
  function NewAccountCreate({
261
+ apiUrl,
258
262
  username,
259
263
  userPassword,
260
264
  logo,
@@ -272,6 +276,7 @@ function NewAccountCreate({
272
276
  setIsSubmitting(true);
273
277
  try {
274
278
  yield forgotPassword({
279
+ apiUrl,
275
280
  email,
276
281
  new_password: password,
277
282
  current_password: userPassword || void 0
@@ -1 +1 @@
1
- {"version":3,"file":"digistore.esm.js","sources":["../src/digistore/NewAccountCreate/Icon.tsx","../src/digistore/NewAccountCreate/InputField.tsx","../src/digistore/NewAccountCreate/RequirementItem.tsx","../src/digistore/NewAccountCreate/PasswordRequirements.tsx","../src/digistore/NewAccountCreate/FormHeader.tsx","../src/digistore/NewAccountCreate/SubmitButton.tsx","../src/digistore/hooks/usePasswordValidation.ts","../src/digistore/services/createDigistoreAccountService.ts","../src/digistore/NewAccountCreate/index.tsx"],"sourcesContent":["interface IconProps {\n className: string;\n}\nexport const EyeIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\n />\n </svg>\n);\n\n// Eye Slash Icon Component\nexport const EyeSlashIcon = ({ className }: IconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17.94 17.94A10.94 10.94 0 0112 20c-5 0-9.27-3.11-11-8a11.66 11.66 0 012.39-4.27\" />\n <path d=\"M3 3l18 18\" />\n <path d=\"M9.53 9.53A3 3 0 0114.47 14.47\" />\n <path d=\"M21 12a11.66 11.66 0 00-3.06-4.94M12 5a10.94 10.94 0 016.06 1.94\" />\n </svg>\n);\n","// types.ts - Type definitions\nexport interface PasswordRequirements {\n length: boolean;\n special: boolean;\n upper: boolean;\n lower: boolean;\n number: boolean;\n}\n\n// InputField.tsx - Component tái sử dụng cho input\nimport { useState } from \"react\";\nimport { EyeIcon, EyeSlashIcon } from \"./Icon\";\n\ninterface InputFieldProps {\n label: string;\n type?: string;\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder: string;\n required?: boolean;\n showPasswordToggle?: boolean;\n className?: string;\n disabled?: boolean;\n error?: string\n}\n\nexport function InputField({\n label,\n type = \"text\",\n value,\n onChange,\n placeholder,\n required = false,\n showPasswordToggle = false,\n className = \"\",\n disabled = false,\n error = ''\n}: InputFieldProps) {\n const [showPassword, setShowPassword] = useState(false);\n\n const inputType = showPasswordToggle\n ? showPassword\n ? \"text\"\n : \"password\"\n : type;\n\n return (\n <div className={className}>\n <label className=\"block text-[0.685rem] font-semibold text-gray-700 mb-1\">\n {label} {required && <span className=\"text-red-500\">*</span>}\n </label>\n <div className=\"relative\">\n <input\n type={inputType}\n value={value}\n onChange={onChange}\n className=\"w-full px-4 py-2 pr-12 border-2 border-gray-200 rounded-lg text-xs\n focus:outline-none focus:border-blue-500 focus:bg-white focus:ring-3\n focus:ring-blue-100 transition-all disabled:bg-gray-200\"\n placeholder={placeholder}\n disabled={disabled}\n />\n {showPasswordToggle && (\n <button\n type=\"button\"\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600 p-1\"\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? (\n <EyeSlashIcon className=\"w-5 h-5\" />\n ) : (\n <EyeIcon className=\"w-5 h-5\" />\n )}\n </button>\n )}\n </div>\n\n <div className={`grid duration-200 ${error ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'}`}>\n <div className=\"overflow-hidden\">\n <p className=\"text-red-500 text-xs font-normal mt-2\">{error}</p>\n </div>\n </div>\n </div>\n );\n}\n","interface RequirementItemProps {\n met: boolean;\n text: string;\n}\n\nconst RequirementItem = ({ met, text }: RequirementItemProps) => (\n <li className=\"flex items-center gap-2 text-[0.65rem] leading-none text-gray-700\">\n <span className=\"mt-0.5 w-4 h-4 flex items-center justify-center\">\n {met ? (\n // Check SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"w-4 h-4 text-green-600\"\n >\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n ) : (\n // Dot SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 8 8\"\n className=\"w-2 h-2 text-gray-400 fill-current\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"4\" />\n </svg>\n )}\n </span>\n <span className={met ? \"text-gray-800 leading-none\" : \"leading-none\"}>\n {text}\n </span>\n </li>\n);\n\nexport default RequirementItem;\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport RequirementItem from \"./RequirementItem\";\nimport { PasswordRequirements as PasswordRequirementsType } from \"./types\";\n\ninterface PasswordRequirementsProps {\n requirements: PasswordRequirementsType;\n}\n\nexport function PasswordRequirements({\n requirements,\n}: PasswordRequirementsProps) {\n const { translate } = useTranslation('digistore-id')\n\n return (\n <div className=\"bg-gray-50 rounded-lg px-4 py-2 mt-2\">\n <div className=\"text-xs font-semibold mb-2\">{translate(\"pwd_requirement_title\")}</div>\n <ul className=\"space-y-0.5\">\n <RequirementItem met={requirements.length} text={translate(\"pwd_requirement_length\")} />\n <RequirementItem\n met={requirements.upper}\n text={translate(\"pwd_requirement_uppercase\")}\n />\n <RequirementItem\n met={requirements.lower}\n text={translate(\"pwd_requirement_lowercase\")}\n />\n <RequirementItem met={requirements.number} text={translate(\"pwd_requirement_number\")} />\n <RequirementItem met={requirements.no_vietnamese} text={translate(\"pwd_requirement_no_vietnamese\")} />\n </ul>\n </div>\n );\n}\n","import { ReactNode } from \"react\";\n\ninterface FormHeaderProps {\n logoSrc: string;\n title: string;\n description?: ReactNode;\n}\n\nexport function FormHeader({ logoSrc, title, description }: FormHeaderProps) {\n return (\n <>\n <div className=\"mb-1.5 justify-self-center\">\n <img src={logoSrc} alt=\"BVBank Logo\" className=\"h-10 w-auto\" />\n </div>\n <h1 className=\"text-base font-semibold text-gray-900 text-center mb-1.5\">\n {title}\n </h1>\n {description && (\n <div className=\"p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]\">\n {description}\n </div>\n )}\n </>\n );\n}\n","import { ReactNode } from \"react\";\n\ninterface SubmitButtonProps {\n onClick: () => void;\n disabled?: boolean;\n isLoading?: boolean;\n children: ReactNode;\n loadingText?: string;\n className?: string;\n}\n\nexport function SubmitButton({\n onClick,\n disabled = false,\n isLoading = false,\n children,\n loadingText = \"Đang xử lý...\",\n className = \"\",\n}: SubmitButtonProps) {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={`w-full bg-[#1F2B7B] text-white border-none \n py-2.5 rounded-lg text-xs font-semibold cursor-pointer \n hover:from-blue-700 hover:to-blue-800 hover:shadow-lg hover:-translate-y-0.5 \n active:translate-y-0 transition-all mt-6 disabled:opacity-75 \n disabled:cursor-not-allowed disabled:transform-none ${className}`}\n >\n {isLoading ? loadingText : children}\n </button>\n );\n}\n","import { useCallback, useMemo } from \"react\";\nimport { PasswordRequirements } from \"../NewAccountCreate/types\";\n\nconst regex = {\n length: /^.{8,35}$/,\n upper: /^(?=.*[A-Z]).*$/,\n lower: /^(?=.*[a-z]).*$/,\n number: /^(?=.*\\d).+$/,\n no_vietnamese: /^[\\x21-\\x7E]+$/,\n};\n\ntype TRegexKey = keyof typeof regex;\n\nexport function usePasswordValidation(password: string) {\n const requirements = useMemo(() => {\n return Object.keys(regex).reduce((acc, key) => {\n acc[key as TRegexKey] = regex[key as TRegexKey].test(password);\n return acc;\n }, {} as PasswordRequirements);\n }, [password]);\n\n const isValid = useMemo(\n () => Object.values(requirements).every((req) => req),\n [requirements]\n );\n\n const validate = useCallback(\n (_password: string = password) => {\n let isValid = true;\n const errors = Object.keys(regex).filter((key) => {\n if (!regex[key as keyof typeof regex].test(_password)) {\n isValid = false;\n return true;\n }\n });\n\n return { isValid, errors };\n },\n [password]\n );\n\n return { requirements, isValid, validate };\n}\n","import axios from \"axios\";\n\nconst API_URL = \"https://bvbank-stag.atomsolution.vn/v1/portal/user\";\n\ninterface ForgotPasswordPayload {\n new_password: string;\n email: string;\n current_password?: string //props có password thì là current password, email = username, new_password là cho người dùng nhập\n}\n\nexport const forgotPassword = async (\n payload: ForgotPasswordPayload,\n // accessToken: string\n) => {\n try {\n const response = await axios.put(`${API_URL}/reset-password`, payload, {\n headers: {\n \"Content-Type\": \"application/json\",\n // Authorization: `Bearer ${accessToken}`,\n Origin: \"http://localhost:3000\",\n Referer: \"http://localhost:3000/\",\n },\n });\n return response.data;\n } catch (error: any) {\n throw error.response?.data || error;\n }\n};\n","import { useState } from 'react';\nimport { InputField } from './InputField';\nimport { PasswordRequirements } from './PasswordRequirements';\nimport { FormHeader } from './FormHeader';\nimport { SubmitButton } from './SubmitButton';\nimport { useTranslation } from '@/hooks/use-translation';\nimport { CustomToast } from '@/components/common/custom-toast';\nimport { usePasswordValidation } from '../hooks/usePasswordValidation';\nimport { forgotPassword } from '../services/createDigistoreAccountService';\n\ninterface NewAccountCreate {\n logo: string;\n username: string;\n userPassword: string;\n redirectFunction?: () => void;\n}\n\nexport function NewAccountCreate({\n username,\n userPassword,\n logo,\n redirectFunction,\n}: NewAccountCreate) {\n const { translate } = useTranslation('digistore-id');\n const [email, setEmail] = useState(username);\n const [password, setPassword] = useState(userPassword || '');\n const [confirmPassword, setConfirmPassword] = useState(userPassword || '');\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [passwordError, setPasswordError] = useState('');\n const [confirmPasswordError, setConfirmPasswordError] = useState('');\n\n const { requirements, validate } = usePasswordValidation(password);\n\n const handleSubmit = async () => {\n setIsSubmitting(true);\n try {\n await forgotPassword({\n email,\n new_password: password,\n current_password: userPassword || undefined,\n });\n CustomToast.success(\n translate('success_toast_title'),\n translate('success_toast_des'),\n );\n // alert('Tài khoản đã được tạo thành công!');\n redirectFunction?.();\n } catch (error: any) {\n console.error(error);\n CustomToast.error(\n translate('error_toast_title'),\n translate('error_toast_des'),\n );\n // alert('Tạo tài khoản thất bại!');\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const headerDescription = (\n <>\n <div className=\"text-xs text-primary leading-relaxed mb-0.5\">\n {translate('note_login_success_with')}{' '}\n <span className=\"text-[#335CFF] font-semibold\">{email}</span>\n <br />\n {translate('note_desc')}\n </div>\n\n <div className=\"text-xs text-primary leading-relaxed\">\n {translate('note_from_date')}{' '}\n <span className=\"font-semibold text-[#335CFF]\">01/08/2025</span>,{' '}\n {translate('note_use_digis_acc_to_access')}\n </div>\n </>\n );\n\n return (\n <div className=\"bg-white rounded-2xl shadow-2xl max-w-[550px] w-full px-8 pb-3.5 pt-3 relative\">\n <FormHeader\n logoSrc={logo}\n title={translate('title')}\n description={headerDescription}\n />\n\n <div className=\"mt-2 space-y-3\">\n <InputField\n label={translate('form_email_label')}\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={translate('form_email_placeholder')}\n required\n disabled\n />\n\n <InputField\n label={translate('form_pwd_label')}\n value={password}\n onChange={(e) => {\n const newPassword = e.target.value;\n setPassword(newPassword);\n\n if (!newPassword) {\n setPasswordError(translate('form_pwd_err_required'));\n } else if (!validate(newPassword).isValid) {\n setPasswordError(translate('form_pwd_err_invalid'));\n } else {\n setPasswordError('');\n }\n\n if (confirmPassword && confirmPassword !== newPassword) {\n setConfirmPasswordError(\n translate('form_confirm_pwd_err_no_match'),\n );\n } else {\n setConfirmPasswordError('');\n }\n }}\n placeholder={translate('form_pwd_placeholder')}\n required\n showPasswordToggle\n error={passwordError}\n />\n\n <InputField\n label={translate('form_confirm_pwd_label')}\n value={confirmPassword}\n onChange={(e) => {\n const newConfirm = e.target.value;\n setConfirmPassword(newConfirm);\n\n if (!newConfirm) {\n setConfirmPasswordError(\n translate('form_confirm_pwd_err_required'),\n );\n } else if (newConfirm !== password) {\n setConfirmPasswordError(\n translate('form_confirm_pwd_err_no_match'),\n );\n } else {\n setConfirmPasswordError('');\n }\n }}\n placeholder={translate('form_confirm_pwd_placeholder')}\n required\n showPasswordToggle\n error={confirmPasswordError}\n />\n\n <PasswordRequirements requirements={requirements} />\n\n <SubmitButton\n onClick={handleSubmit}\n disabled={\n isSubmitting ||\n !password ||\n !confirmPassword ||\n !!passwordError ||\n !!confirmPasswordError\n }\n isLoading={isSubmitting}\n >\n {translate('form_submit_btn')}\n </SubmitButton>\n </div>\n </div>\n );\n}\n"],"names":["jsxs","jsx","Fragment","isValid"],"mappings":"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"}
1
+ {"version":3,"file":"digistore.esm.js","sources":["../src/digistore/hooks/usePasswordValidation.ts","../src/digistore/services/createDigistoreAccountService.ts","../src/digistore/NewAccountCreate/FormHeader.tsx","../src/digistore/NewAccountCreate/Icon.tsx","../src/digistore/NewAccountCreate/InputField.tsx","../src/digistore/NewAccountCreate/RequirementItem.tsx","../src/digistore/NewAccountCreate/PasswordRequirements.tsx","../src/digistore/NewAccountCreate/SubmitButton.tsx","../src/digistore/NewAccountCreate/index.tsx"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport { PasswordRequirements } from \"../NewAccountCreate/types\";\n\nconst regex = {\n length: /^.{8,35}$/,\n upper: /^(?=.*[A-Z]).*$/,\n lower: /^(?=.*[a-z]).*$/,\n number: /^(?=.*\\d).+$/,\n no_vietnamese: /^[\\x21-\\x7E]+$/,\n};\n\ntype TRegexKey = keyof typeof regex;\n\nexport function usePasswordValidation(password: string) {\n const requirements = useMemo(() => {\n return Object.keys(regex).reduce((acc, key) => {\n acc[key as TRegexKey] = regex[key as TRegexKey].test(password);\n return acc;\n }, {} as PasswordRequirements);\n }, [password]);\n\n const isValid = useMemo(\n () => Object.values(requirements).every((req) => req),\n [requirements]\n );\n\n const validate = useCallback(\n (_password: string = password) => {\n let isValid = true;\n const errors = Object.keys(regex).filter((key) => {\n if (!regex[key as keyof typeof regex].test(_password)) {\n isValid = false;\n return true;\n }\n });\n\n return { isValid, errors };\n },\n [password]\n );\n\n return { requirements, isValid, validate };\n}\n","import axios from \"axios\";\n\ninterface ForgotPasswordPayload {\n new_password: string;\n email: string;\n current_password?: string; //props có password thì là current password, email = username, new_password là cho người dùng nhập\n apiUrl: string;\n}\n\nexport const forgotPassword = async (\n payload: ForgotPasswordPayload,\n // accessToken: string\n) => {\n try {\n const response = await axios.put(\n `${payload.apiUrl}/reset-password`,\n payload,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n // Authorization: `Bearer ${accessToken}`,\n Origin: \"http://localhost:3000\",\n Referer: \"http://localhost:3000/\",\n },\n },\n );\n return response.data;\n } catch (error: any) {\n throw error.response?.data || error;\n }\n};\n","import { ReactNode } from \"react\";\n\ninterface FormHeaderProps {\n logoSrc: string;\n title: string;\n description?: ReactNode;\n}\n\nexport function FormHeader({ logoSrc, title, description }: FormHeaderProps) {\n return (\n <>\n <div className=\"mb-1.5 justify-self-center\">\n <img src={logoSrc} alt=\"BVBank Logo\" className=\"h-10 w-auto\" />\n </div>\n <h1 className=\"text-base font-semibold text-gray-900 text-center mb-1.5\">\n {title}\n </h1>\n {description && (\n <div className=\"p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]\">\n {description}\n </div>\n )}\n </>\n );\n}\n","interface IconProps {\n className: string;\n}\nexport const EyeIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\n />\n </svg>\n);\n\n// Eye Slash Icon Component\nexport const EyeSlashIcon = ({ className }: IconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17.94 17.94A10.94 10.94 0 0112 20c-5 0-9.27-3.11-11-8a11.66 11.66 0 012.39-4.27\" />\n <path d=\"M3 3l18 18\" />\n <path d=\"M9.53 9.53A3 3 0 0114.47 14.47\" />\n <path d=\"M21 12a11.66 11.66 0 00-3.06-4.94M12 5a10.94 10.94 0 016.06 1.94\" />\n </svg>\n);\n","// types.ts - Type definitions\nexport interface PasswordRequirements {\n length: boolean;\n special: boolean;\n upper: boolean;\n lower: boolean;\n number: boolean;\n}\n\n// InputField.tsx - Component tái sử dụng cho input\nimport { useState } from \"react\";\nimport { EyeIcon, EyeSlashIcon } from \"./Icon\";\n\ninterface InputFieldProps {\n label: string;\n type?: string;\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder: string;\n required?: boolean;\n showPasswordToggle?: boolean;\n className?: string;\n disabled?: boolean;\n error?: string\n}\n\nexport function InputField({\n label,\n type = \"text\",\n value,\n onChange,\n placeholder,\n required = false,\n showPasswordToggle = false,\n className = \"\",\n disabled = false,\n error = ''\n}: InputFieldProps) {\n const [showPassword, setShowPassword] = useState(false);\n\n const inputType = showPasswordToggle\n ? showPassword\n ? \"text\"\n : \"password\"\n : type;\n\n return (\n <div className={className}>\n <label className=\"block text-[0.685rem] font-semibold text-gray-700 mb-1\">\n {label} {required && <span className=\"text-red-500\">*</span>}\n </label>\n <div className=\"relative\">\n <input\n type={inputType}\n value={value}\n onChange={onChange}\n className=\"w-full px-4 py-2 pr-12 border-2 border-gray-200 rounded-lg text-xs\n focus:outline-none focus:border-blue-500 focus:bg-white focus:ring-3\n focus:ring-blue-100 transition-all disabled:bg-gray-200\"\n placeholder={placeholder}\n disabled={disabled}\n />\n {showPasswordToggle && (\n <button\n type=\"button\"\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600 p-1\"\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? (\n <EyeSlashIcon className=\"w-5 h-5\" />\n ) : (\n <EyeIcon className=\"w-5 h-5\" />\n )}\n </button>\n )}\n </div>\n\n <div className={`grid duration-200 ${error ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'}`}>\n <div className=\"overflow-hidden\">\n <p className=\"text-red-500 text-xs font-normal mt-2\">{error}</p>\n </div>\n </div>\n </div>\n );\n}\n","interface RequirementItemProps {\n met: boolean;\n text: string;\n}\n\nconst RequirementItem = ({ met, text }: RequirementItemProps) => (\n <li className=\"flex items-center gap-2 text-[0.65rem] leading-none text-gray-700\">\n <span className=\"mt-0.5 w-4 h-4 flex items-center justify-center\">\n {met ? (\n // Check SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"w-4 h-4 text-green-600\"\n >\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n ) : (\n // Dot SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 8 8\"\n className=\"w-2 h-2 text-gray-400 fill-current\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"4\" />\n </svg>\n )}\n </span>\n <span className={met ? \"text-gray-800 leading-none\" : \"leading-none\"}>\n {text}\n </span>\n </li>\n);\n\nexport default RequirementItem;\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport RequirementItem from \"./RequirementItem\";\nimport { PasswordRequirements as PasswordRequirementsType } from \"./types\";\n\ninterface PasswordRequirementsProps {\n requirements: PasswordRequirementsType;\n}\n\nexport function PasswordRequirements({\n requirements,\n}: PasswordRequirementsProps) {\n const { translate } = useTranslation('digistore-id')\n\n return (\n <div className=\"bg-gray-50 rounded-lg px-4 py-2 mt-2\">\n <div className=\"text-xs font-semibold mb-2\">{translate(\"pwd_requirement_title\")}</div>\n <ul className=\"space-y-0.5\">\n <RequirementItem met={requirements.length} text={translate(\"pwd_requirement_length\")} />\n <RequirementItem\n met={requirements.upper}\n text={translate(\"pwd_requirement_uppercase\")}\n />\n <RequirementItem\n met={requirements.lower}\n text={translate(\"pwd_requirement_lowercase\")}\n />\n <RequirementItem met={requirements.number} text={translate(\"pwd_requirement_number\")} />\n <RequirementItem met={requirements.no_vietnamese} text={translate(\"pwd_requirement_no_vietnamese\")} />\n </ul>\n </div>\n );\n}\n","import { ReactNode } from \"react\";\n\ninterface SubmitButtonProps {\n onClick: () => void;\n disabled?: boolean;\n isLoading?: boolean;\n children: ReactNode;\n loadingText?: string;\n className?: string;\n}\n\nexport function SubmitButton({\n onClick,\n disabled = false,\n isLoading = false,\n children,\n loadingText = \"Đang xử lý...\",\n className = \"\",\n}: SubmitButtonProps) {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={`w-full bg-[#1F2B7B] text-white border-none \n py-2.5 rounded-lg text-xs font-semibold cursor-pointer \n hover:from-blue-700 hover:to-blue-800 hover:shadow-lg hover:-translate-y-0.5 \n active:translate-y-0 transition-all mt-6 disabled:opacity-75 \n disabled:cursor-not-allowed disabled:transform-none ${className}`}\n >\n {isLoading ? loadingText : children}\n </button>\n );\n}\n","import { CustomToast } from \"@/components/common/custom-toast\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { useState } from \"react\";\nimport { usePasswordValidation } from \"../hooks/usePasswordValidation\";\nimport { forgotPassword } from \"../services/createDigistoreAccountService\";\nimport { FormHeader } from \"./FormHeader\";\nimport { InputField } from \"./InputField\";\nimport { PasswordRequirements } from \"./PasswordRequirements\";\nimport { SubmitButton } from \"./SubmitButton\";\n\ninterface NewAccountCreate {\n logo: string;\n username: string;\n userPassword: string;\n redirectFunction?: () => void;\n apiUrl: string;\n}\n\nexport function NewAccountCreate({\n apiUrl,\n username,\n userPassword,\n logo,\n redirectFunction,\n}: NewAccountCreate) {\n const { translate } = useTranslation(\"digistore-id\");\n const [email, setEmail] = useState(username);\n const [password, setPassword] = useState(userPassword || \"\");\n const [confirmPassword, setConfirmPassword] = useState(userPassword || \"\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [passwordError, setPasswordError] = useState(\"\");\n const [confirmPasswordError, setConfirmPasswordError] = useState(\"\");\n\n const { requirements, validate } = usePasswordValidation(password);\n\n const handleSubmit = async () => {\n setIsSubmitting(true);\n try {\n await forgotPassword({\n apiUrl,\n email,\n new_password: password,\n current_password: userPassword || undefined,\n });\n CustomToast.success(\n translate(\"success_toast_title\"),\n translate(\"success_toast_des\"),\n );\n // alert('Tài khoản đã được tạo thành công!');\n redirectFunction?.();\n } catch (error: any) {\n console.error(error);\n CustomToast.error(\n translate(\"error_toast_title\"),\n translate(\"error_toast_des\"),\n );\n // alert('Tạo tài khoản thất bại!');\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const headerDescription = (\n <>\n <div className=\"text-xs text-primary leading-relaxed mb-0.5\">\n {translate(\"note_login_success_with\")}{\" \"}\n <span className=\"text-[#335CFF] font-semibold\">{email}</span>\n <br />\n {translate(\"note_desc\")}\n </div>\n\n <div className=\"text-xs text-primary leading-relaxed\">\n {translate(\"note_from_date\")}{\" \"}\n <span className=\"font-semibold text-[#335CFF]\">01/08/2025</span>,{\" \"}\n {translate(\"note_use_digis_acc_to_access\")}\n </div>\n </>\n );\n\n return (\n <div className=\"bg-white rounded-2xl shadow-2xl max-w-[550px] w-full px-8 pb-3.5 pt-3 relative\">\n <FormHeader\n logoSrc={logo}\n title={translate(\"title\")}\n description={headerDescription}\n />\n\n <div className=\"mt-2 space-y-3\">\n <InputField\n label={translate(\"form_email_label\")}\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={translate(\"form_email_placeholder\")}\n required\n disabled\n />\n\n <InputField\n label={translate(\"form_pwd_label\")}\n value={password}\n onChange={(e) => {\n const newPassword = e.target.value;\n setPassword(newPassword);\n\n if (!newPassword) {\n setPasswordError(translate(\"form_pwd_err_required\"));\n } else if (!validate(newPassword).isValid) {\n setPasswordError(translate(\"form_pwd_err_invalid\"));\n } else {\n setPasswordError(\"\");\n }\n\n if (confirmPassword && confirmPassword !== newPassword) {\n setConfirmPasswordError(\n translate(\"form_confirm_pwd_err_no_match\"),\n );\n } else {\n setConfirmPasswordError(\"\");\n }\n }}\n placeholder={translate(\"form_pwd_placeholder\")}\n required\n showPasswordToggle\n error={passwordError}\n />\n\n <InputField\n label={translate(\"form_confirm_pwd_label\")}\n value={confirmPassword}\n onChange={(e) => {\n const newConfirm = e.target.value;\n setConfirmPassword(newConfirm);\n\n if (!newConfirm) {\n setConfirmPasswordError(\n translate(\"form_confirm_pwd_err_required\"),\n );\n } else if (newConfirm !== password) {\n setConfirmPasswordError(\n translate(\"form_confirm_pwd_err_no_match\"),\n );\n } else {\n setConfirmPasswordError(\"\");\n }\n }}\n placeholder={translate(\"form_confirm_pwd_placeholder\")}\n required\n showPasswordToggle\n error={confirmPasswordError}\n />\n\n <PasswordRequirements requirements={requirements} />\n\n <SubmitButton\n onClick={handleSubmit}\n disabled={\n isSubmitting ||\n !password ||\n !confirmPassword ||\n !!passwordError ||\n !!confirmPasswordError\n }\n isLoading={isSubmitting}\n >\n {translate(\"form_submit_btn\")}\n </SubmitButton>\n </div>\n </div>\n );\n}\n"],"names":["isValid","jsxs","Fragment","jsx"],"mappings":"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"}
package/dist/digistore.js CHANGED
@@ -19,10 +19,70 @@ var __async = (__this, __arguments, generator) => {
19
19
  });
20
20
  };
21
21
  import { j as jsxRuntimeExports } from "./jsx-runtime-ClP9nxnW.js";
22
- import { useState, useMemo, useCallback } from "react";
23
- import { u as useTranslation } from "./use-translation-CPJMFAae.js";
24
22
  import { C as CustomToast } from "./index-ChOpfqCh.js";
23
+ import { u as useTranslation } from "./use-translation-CPJMFAae.js";
24
+ import { useMemo, useCallback, useState } from "react";
25
25
  import axios from "axios";
26
+ const regex = {
27
+ length: /^.{8,35}$/,
28
+ upper: /^(?=.*[A-Z]).*$/,
29
+ lower: /^(?=.*[a-z]).*$/,
30
+ number: /^(?=.*\d).+$/,
31
+ no_vietnamese: /^[\x21-\x7E]+$/
32
+ };
33
+ function usePasswordValidation(password) {
34
+ const requirements = useMemo(() => {
35
+ return Object.keys(regex).reduce((acc, key) => {
36
+ acc[key] = regex[key].test(password);
37
+ return acc;
38
+ }, {});
39
+ }, [password]);
40
+ const isValid = useMemo(
41
+ () => Object.values(requirements).every((req) => req),
42
+ [requirements]
43
+ );
44
+ const validate = useCallback(
45
+ (_password = password) => {
46
+ let isValid2 = true;
47
+ const errors = Object.keys(regex).filter((key) => {
48
+ if (!regex[key].test(_password)) {
49
+ isValid2 = false;
50
+ return true;
51
+ }
52
+ });
53
+ return { isValid: isValid2, errors };
54
+ },
55
+ [password]
56
+ );
57
+ return { requirements, isValid, validate };
58
+ }
59
+ const forgotPassword = (payload) => __async(void 0, null, function* () {
60
+ var _a;
61
+ try {
62
+ const response = yield axios.put(
63
+ `${payload.apiUrl}/reset-password`,
64
+ payload,
65
+ {
66
+ headers: {
67
+ "Content-Type": "application/json",
68
+ // Authorization: `Bearer ${accessToken}`,
69
+ Origin: "http://localhost:3000",
70
+ Referer: "http://localhost:3000/"
71
+ }
72
+ }
73
+ );
74
+ return response.data;
75
+ } catch (error) {
76
+ throw ((_a = error.response) == null ? void 0 : _a.data) || error;
77
+ }
78
+ });
79
+ function FormHeader({ logoSrc, title, description }) {
80
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
81
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-1.5 justify-self-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: logoSrc, alt: "BVBank Logo", className: "h-10 w-auto" }) }),
82
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-base font-semibold text-gray-900 text-center mb-1.5", children: title }),
83
+ description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]", children: description })
84
+ ] });
85
+ }
26
86
  const EyeIcon = ({ className }) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
27
87
  "svg",
28
88
  {
@@ -175,13 +235,6 @@ function PasswordRequirements({
175
235
  ] })
176
236
  ] });
177
237
  }
178
- function FormHeader({ logoSrc, title, description }) {
179
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
180
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-1.5 justify-self-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: logoSrc, alt: "BVBank Logo", className: "h-10 w-auto" }) }),
181
- /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-base font-semibold text-gray-900 text-center mb-1.5", children: title }),
182
- description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]", children: description })
183
- ] });
184
- }
185
238
  function SubmitButton({
186
239
  onClick,
187
240
  disabled = false,
@@ -204,57 +257,8 @@ function SubmitButton({
204
257
  }
205
258
  );
206
259
  }
207
- const regex = {
208
- length: /^.{8,35}$/,
209
- upper: /^(?=.*[A-Z]).*$/,
210
- lower: /^(?=.*[a-z]).*$/,
211
- number: /^(?=.*\d).+$/,
212
- no_vietnamese: /^[\x21-\x7E]+$/
213
- };
214
- function usePasswordValidation(password) {
215
- const requirements = useMemo(() => {
216
- return Object.keys(regex).reduce((acc, key) => {
217
- acc[key] = regex[key].test(password);
218
- return acc;
219
- }, {});
220
- }, [password]);
221
- const isValid = useMemo(
222
- () => Object.values(requirements).every((req) => req),
223
- [requirements]
224
- );
225
- const validate = useCallback(
226
- (_password = password) => {
227
- let isValid2 = true;
228
- const errors = Object.keys(regex).filter((key) => {
229
- if (!regex[key].test(_password)) {
230
- isValid2 = false;
231
- return true;
232
- }
233
- });
234
- return { isValid: isValid2, errors };
235
- },
236
- [password]
237
- );
238
- return { requirements, isValid, validate };
239
- }
240
- const API_URL = "https://bvbank-stag.atomsolution.vn/v1/portal/user";
241
- const forgotPassword = (payload) => __async(void 0, null, function* () {
242
- var _a;
243
- try {
244
- const response = yield axios.put(`${API_URL}/reset-password`, payload, {
245
- headers: {
246
- "Content-Type": "application/json",
247
- // Authorization: `Bearer ${accessToken}`,
248
- Origin: "http://localhost:3000",
249
- Referer: "http://localhost:3000/"
250
- }
251
- });
252
- return response.data;
253
- } catch (error) {
254
- throw ((_a = error.response) == null ? void 0 : _a.data) || error;
255
- }
256
- });
257
260
  function NewAccountCreate({
261
+ apiUrl,
258
262
  username,
259
263
  userPassword,
260
264
  logo,
@@ -272,6 +276,7 @@ function NewAccountCreate({
272
276
  setIsSubmitting(true);
273
277
  try {
274
278
  yield forgotPassword({
279
+ apiUrl,
275
280
  email,
276
281
  new_password: password,
277
282
  current_password: userPassword || void 0
@@ -1 +1 @@
1
- {"version":3,"file":"digistore.js","sources":["../src/digistore/NewAccountCreate/Icon.tsx","../src/digistore/NewAccountCreate/InputField.tsx","../src/digistore/NewAccountCreate/RequirementItem.tsx","../src/digistore/NewAccountCreate/PasswordRequirements.tsx","../src/digistore/NewAccountCreate/FormHeader.tsx","../src/digistore/NewAccountCreate/SubmitButton.tsx","../src/digistore/hooks/usePasswordValidation.ts","../src/digistore/services/createDigistoreAccountService.ts","../src/digistore/NewAccountCreate/index.tsx"],"sourcesContent":["interface IconProps {\n className: string;\n}\nexport const EyeIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\n />\n </svg>\n);\n\n// Eye Slash Icon Component\nexport const EyeSlashIcon = ({ className }: IconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17.94 17.94A10.94 10.94 0 0112 20c-5 0-9.27-3.11-11-8a11.66 11.66 0 012.39-4.27\" />\n <path d=\"M3 3l18 18\" />\n <path d=\"M9.53 9.53A3 3 0 0114.47 14.47\" />\n <path d=\"M21 12a11.66 11.66 0 00-3.06-4.94M12 5a10.94 10.94 0 016.06 1.94\" />\n </svg>\n);\n","// types.ts - Type definitions\nexport interface PasswordRequirements {\n length: boolean;\n special: boolean;\n upper: boolean;\n lower: boolean;\n number: boolean;\n}\n\n// InputField.tsx - Component tái sử dụng cho input\nimport { useState } from \"react\";\nimport { EyeIcon, EyeSlashIcon } from \"./Icon\";\n\ninterface InputFieldProps {\n label: string;\n type?: string;\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder: string;\n required?: boolean;\n showPasswordToggle?: boolean;\n className?: string;\n disabled?: boolean;\n error?: string\n}\n\nexport function InputField({\n label,\n type = \"text\",\n value,\n onChange,\n placeholder,\n required = false,\n showPasswordToggle = false,\n className = \"\",\n disabled = false,\n error = ''\n}: InputFieldProps) {\n const [showPassword, setShowPassword] = useState(false);\n\n const inputType = showPasswordToggle\n ? showPassword\n ? \"text\"\n : \"password\"\n : type;\n\n return (\n <div className={className}>\n <label className=\"block text-[0.685rem] font-semibold text-gray-700 mb-1\">\n {label} {required && <span className=\"text-red-500\">*</span>}\n </label>\n <div className=\"relative\">\n <input\n type={inputType}\n value={value}\n onChange={onChange}\n className=\"w-full px-4 py-2 pr-12 border-2 border-gray-200 rounded-lg text-xs\n focus:outline-none focus:border-blue-500 focus:bg-white focus:ring-3\n focus:ring-blue-100 transition-all disabled:bg-gray-200\"\n placeholder={placeholder}\n disabled={disabled}\n />\n {showPasswordToggle && (\n <button\n type=\"button\"\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600 p-1\"\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? (\n <EyeSlashIcon className=\"w-5 h-5\" />\n ) : (\n <EyeIcon className=\"w-5 h-5\" />\n )}\n </button>\n )}\n </div>\n\n <div className={`grid duration-200 ${error ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'}`}>\n <div className=\"overflow-hidden\">\n <p className=\"text-red-500 text-xs font-normal mt-2\">{error}</p>\n </div>\n </div>\n </div>\n );\n}\n","interface RequirementItemProps {\n met: boolean;\n text: string;\n}\n\nconst RequirementItem = ({ met, text }: RequirementItemProps) => (\n <li className=\"flex items-center gap-2 text-[0.65rem] leading-none text-gray-700\">\n <span className=\"mt-0.5 w-4 h-4 flex items-center justify-center\">\n {met ? (\n // Check SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"w-4 h-4 text-green-600\"\n >\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n ) : (\n // Dot SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 8 8\"\n className=\"w-2 h-2 text-gray-400 fill-current\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"4\" />\n </svg>\n )}\n </span>\n <span className={met ? \"text-gray-800 leading-none\" : \"leading-none\"}>\n {text}\n </span>\n </li>\n);\n\nexport default RequirementItem;\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport RequirementItem from \"./RequirementItem\";\nimport { PasswordRequirements as PasswordRequirementsType } from \"./types\";\n\ninterface PasswordRequirementsProps {\n requirements: PasswordRequirementsType;\n}\n\nexport function PasswordRequirements({\n requirements,\n}: PasswordRequirementsProps) {\n const { translate } = useTranslation('digistore-id')\n\n return (\n <div className=\"bg-gray-50 rounded-lg px-4 py-2 mt-2\">\n <div className=\"text-xs font-semibold mb-2\">{translate(\"pwd_requirement_title\")}</div>\n <ul className=\"space-y-0.5\">\n <RequirementItem met={requirements.length} text={translate(\"pwd_requirement_length\")} />\n <RequirementItem\n met={requirements.upper}\n text={translate(\"pwd_requirement_uppercase\")}\n />\n <RequirementItem\n met={requirements.lower}\n text={translate(\"pwd_requirement_lowercase\")}\n />\n <RequirementItem met={requirements.number} text={translate(\"pwd_requirement_number\")} />\n <RequirementItem met={requirements.no_vietnamese} text={translate(\"pwd_requirement_no_vietnamese\")} />\n </ul>\n </div>\n );\n}\n","import { ReactNode } from \"react\";\n\ninterface FormHeaderProps {\n logoSrc: string;\n title: string;\n description?: ReactNode;\n}\n\nexport function FormHeader({ logoSrc, title, description }: FormHeaderProps) {\n return (\n <>\n <div className=\"mb-1.5 justify-self-center\">\n <img src={logoSrc} alt=\"BVBank Logo\" className=\"h-10 w-auto\" />\n </div>\n <h1 className=\"text-base font-semibold text-gray-900 text-center mb-1.5\">\n {title}\n </h1>\n {description && (\n <div className=\"p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]\">\n {description}\n </div>\n )}\n </>\n );\n}\n","import { ReactNode } from \"react\";\n\ninterface SubmitButtonProps {\n onClick: () => void;\n disabled?: boolean;\n isLoading?: boolean;\n children: ReactNode;\n loadingText?: string;\n className?: string;\n}\n\nexport function SubmitButton({\n onClick,\n disabled = false,\n isLoading = false,\n children,\n loadingText = \"Đang xử lý...\",\n className = \"\",\n}: SubmitButtonProps) {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={`w-full bg-[#1F2B7B] text-white border-none \n py-2.5 rounded-lg text-xs font-semibold cursor-pointer \n hover:from-blue-700 hover:to-blue-800 hover:shadow-lg hover:-translate-y-0.5 \n active:translate-y-0 transition-all mt-6 disabled:opacity-75 \n disabled:cursor-not-allowed disabled:transform-none ${className}`}\n >\n {isLoading ? loadingText : children}\n </button>\n );\n}\n","import { useCallback, useMemo } from \"react\";\nimport { PasswordRequirements } from \"../NewAccountCreate/types\";\n\nconst regex = {\n length: /^.{8,35}$/,\n upper: /^(?=.*[A-Z]).*$/,\n lower: /^(?=.*[a-z]).*$/,\n number: /^(?=.*\\d).+$/,\n no_vietnamese: /^[\\x21-\\x7E]+$/,\n};\n\ntype TRegexKey = keyof typeof regex;\n\nexport function usePasswordValidation(password: string) {\n const requirements = useMemo(() => {\n return Object.keys(regex).reduce((acc, key) => {\n acc[key as TRegexKey] = regex[key as TRegexKey].test(password);\n return acc;\n }, {} as PasswordRequirements);\n }, [password]);\n\n const isValid = useMemo(\n () => Object.values(requirements).every((req) => req),\n [requirements]\n );\n\n const validate = useCallback(\n (_password: string = password) => {\n let isValid = true;\n const errors = Object.keys(regex).filter((key) => {\n if (!regex[key as keyof typeof regex].test(_password)) {\n isValid = false;\n return true;\n }\n });\n\n return { isValid, errors };\n },\n [password]\n );\n\n return { requirements, isValid, validate };\n}\n","import axios from \"axios\";\n\nconst API_URL = \"https://bvbank-stag.atomsolution.vn/v1/portal/user\";\n\ninterface ForgotPasswordPayload {\n new_password: string;\n email: string;\n current_password?: string //props có password thì là current password, email = username, new_password là cho người dùng nhập\n}\n\nexport const forgotPassword = async (\n payload: ForgotPasswordPayload,\n // accessToken: string\n) => {\n try {\n const response = await axios.put(`${API_URL}/reset-password`, payload, {\n headers: {\n \"Content-Type\": \"application/json\",\n // Authorization: `Bearer ${accessToken}`,\n Origin: \"http://localhost:3000\",\n Referer: \"http://localhost:3000/\",\n },\n });\n return response.data;\n } catch (error: any) {\n throw error.response?.data || error;\n }\n};\n","import { useState } from 'react';\nimport { InputField } from './InputField';\nimport { PasswordRequirements } from './PasswordRequirements';\nimport { FormHeader } from './FormHeader';\nimport { SubmitButton } from './SubmitButton';\nimport { useTranslation } from '@/hooks/use-translation';\nimport { CustomToast } from '@/components/common/custom-toast';\nimport { usePasswordValidation } from '../hooks/usePasswordValidation';\nimport { forgotPassword } from '../services/createDigistoreAccountService';\n\ninterface NewAccountCreate {\n logo: string;\n username: string;\n userPassword: string;\n redirectFunction?: () => void;\n}\n\nexport function NewAccountCreate({\n username,\n userPassword,\n logo,\n redirectFunction,\n}: NewAccountCreate) {\n const { translate } = useTranslation('digistore-id');\n const [email, setEmail] = useState(username);\n const [password, setPassword] = useState(userPassword || '');\n const [confirmPassword, setConfirmPassword] = useState(userPassword || '');\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [passwordError, setPasswordError] = useState('');\n const [confirmPasswordError, setConfirmPasswordError] = useState('');\n\n const { requirements, validate } = usePasswordValidation(password);\n\n const handleSubmit = async () => {\n setIsSubmitting(true);\n try {\n await forgotPassword({\n email,\n new_password: password,\n current_password: userPassword || undefined,\n });\n CustomToast.success(\n translate('success_toast_title'),\n translate('success_toast_des'),\n );\n // alert('Tài khoản đã được tạo thành công!');\n redirectFunction?.();\n } catch (error: any) {\n console.error(error);\n CustomToast.error(\n translate('error_toast_title'),\n translate('error_toast_des'),\n );\n // alert('Tạo tài khoản thất bại!');\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const headerDescription = (\n <>\n <div className=\"text-xs text-primary leading-relaxed mb-0.5\">\n {translate('note_login_success_with')}{' '}\n <span className=\"text-[#335CFF] font-semibold\">{email}</span>\n <br />\n {translate('note_desc')}\n </div>\n\n <div className=\"text-xs text-primary leading-relaxed\">\n {translate('note_from_date')}{' '}\n <span className=\"font-semibold text-[#335CFF]\">01/08/2025</span>,{' '}\n {translate('note_use_digis_acc_to_access')}\n </div>\n </>\n );\n\n return (\n <div className=\"bg-white rounded-2xl shadow-2xl max-w-[550px] w-full px-8 pb-3.5 pt-3 relative\">\n <FormHeader\n logoSrc={logo}\n title={translate('title')}\n description={headerDescription}\n />\n\n <div className=\"mt-2 space-y-3\">\n <InputField\n label={translate('form_email_label')}\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={translate('form_email_placeholder')}\n required\n disabled\n />\n\n <InputField\n label={translate('form_pwd_label')}\n value={password}\n onChange={(e) => {\n const newPassword = e.target.value;\n setPassword(newPassword);\n\n if (!newPassword) {\n setPasswordError(translate('form_pwd_err_required'));\n } else if (!validate(newPassword).isValid) {\n setPasswordError(translate('form_pwd_err_invalid'));\n } else {\n setPasswordError('');\n }\n\n if (confirmPassword && confirmPassword !== newPassword) {\n setConfirmPasswordError(\n translate('form_confirm_pwd_err_no_match'),\n );\n } else {\n setConfirmPasswordError('');\n }\n }}\n placeholder={translate('form_pwd_placeholder')}\n required\n showPasswordToggle\n error={passwordError}\n />\n\n <InputField\n label={translate('form_confirm_pwd_label')}\n value={confirmPassword}\n onChange={(e) => {\n const newConfirm = e.target.value;\n setConfirmPassword(newConfirm);\n\n if (!newConfirm) {\n setConfirmPasswordError(\n translate('form_confirm_pwd_err_required'),\n );\n } else if (newConfirm !== password) {\n setConfirmPasswordError(\n translate('form_confirm_pwd_err_no_match'),\n );\n } else {\n setConfirmPasswordError('');\n }\n }}\n placeholder={translate('form_confirm_pwd_placeholder')}\n required\n showPasswordToggle\n error={confirmPasswordError}\n />\n\n <PasswordRequirements requirements={requirements} />\n\n <SubmitButton\n onClick={handleSubmit}\n disabled={\n isSubmitting ||\n !password ||\n !confirmPassword ||\n !!passwordError ||\n !!confirmPasswordError\n }\n isLoading={isSubmitting}\n >\n {translate('form_submit_btn')}\n </SubmitButton>\n </div>\n </div>\n );\n}\n"],"names":["jsxs","jsx","Fragment","isValid"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAGO,MAAM,UAAU,CAAC,EAAE,UAAA,MACxBA,kCAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC;AAAA,IACA,MAAK;AAAA,IACL,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IAEN,UAAA;AAAA,MAAAC,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MAEJA,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AACF;AAIK,MAAM,eAAe,CAAC,EAAE,UAAA,MAC7BD,kCAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN;AAAA,IACA,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,QAAO;AAAA,IACP,aAAY;AAAA,IACZ,eAAc;AAAA,IACd,gBAAe;AAAA,IAEf,UAAA;AAAA,MAAAC,kCAAAA,IAAC,QAAA,EAAK,GAAE,mFAAA,CAAmF;AAAA,MAC3FA,kCAAAA,IAAC,QAAA,EAAK,GAAE,aAAA,CAAa;AAAA,MACrBA,kCAAAA,IAAC,QAAA,EAAK,GAAE,iCAAA,CAAiC;AAAA,MACzCA,kCAAAA,IAAC,QAAA,EAAK,GAAE,mEAAA,CAAmE;AAAA,IAAA;AAAA,EAAA;AAC7E;AChBK,SAAS,WAAW;AAAA,EACzB;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AACV,GAAoB;AAClB,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AAEtD,QAAM,YAAY,qBACd,eACE,SACA,aACF;AAEJ,SACED,uCAAC,SAAI,WACH,UAAA;AAAA,IAAAA,kCAAAA,KAAC,SAAA,EAAM,WAAU,0DACd,UAAA;AAAA,MAAA;AAAA,MAAM;AAAA,MAAE,YAAYC,kCAAAA,IAAC,QAAA,EAAK,WAAU,gBAAe,UAAA,IAAA,CAAC;AAAA,IAAA,GACvD;AAAA,IACAD,kCAAAA,KAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAAC,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,WAAU;AAAA,UAGV;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,MAED,sBACCA,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS,MAAM,gBAAgB,CAAC,YAAY;AAAA,UAE3C,UAAA,qDACE,cAAA,EAAa,WAAU,WAAU,IAElCA,kCAAAA,IAAC,SAAA,EAAQ,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAEjC,GAEJ;AAAA,0CAEC,OAAA,EAAI,WAAW,qBAAqB,QAAQ,oBAAoB,iBAAiB,IAChF,UAAAA,kCAAAA,IAAC,OAAA,EAAI,WAAU,mBACb,UAAAA,kCAAAA,IAAC,KAAA,EAAE,WAAU,yCAAyC,UAAA,MAAA,CAAM,GAC9D,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AC/EA,MAAM,kBAAkB,CAAC,EAAE,KAAK,WAC9BD,uCAAC,MAAA,EAAG,WAAU,qEACZ,UAAA;AAAA,EAAAC,kCAAAA,IAAC,QAAA,EAAK,WAAU,mDACb,UAAA;AAAA;AAAA,IAECA,kCAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,QAAO;AAAA,QACP,aAAY;AAAA,QACZ,eAAc;AAAA,QACd,gBAAe;AAAA,QACf,WAAU;AAAA,QAEV,UAAAA,kCAAAA,IAAC,QAAA,EAAK,GAAE,kBAAA,CAAkB;AAAA,MAAA;AAAA,IAAA;AAAA;AAAA;AAAA,IAI5BA,kCAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,WAAU;AAAA,QAEV,gDAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,IAAA,CAAI;AAAA,MAAA;AAAA,IAAA;AAAA,KAGlC;AAAA,wCACC,QAAA,EAAK,WAAW,MAAM,+BAA+B,gBACnD,UAAA,KAAA,CACH;AAAA,GACF;AC5BK,SAAS,qBAAqB;AAAA,EACnC;AACF,GAA8B;AAC5B,QAAM,EAAE,UAAA,IAAc,eAAe,cAAc;AAEnD,SACED,kCAAAA,KAAC,OAAA,EAAI,WAAU,wCACb,UAAA;AAAA,IAAAC,sCAAC,OAAA,EAAI,WAAU,8BAA8B,UAAA,UAAU,uBAAuB,GAAE;AAAA,IAChFD,kCAAAA,KAAC,MAAA,EAAG,WAAU,eACZ,UAAA;AAAA,MAAAC,sCAAC,mBAAgB,KAAK,aAAa,QAAQ,MAAM,UAAU,wBAAwB,GAAG;AAAA,MACtFA,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK,aAAa;AAAA,UAClB,MAAM,UAAU,2BAA2B;AAAA,QAAA;AAAA,MAAA;AAAA,MAE7CA,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK,aAAa;AAAA,UAClB,MAAM,UAAU,2BAA2B;AAAA,QAAA;AAAA,MAAA;AAAA,MAE7CA,sCAAC,mBAAgB,KAAK,aAAa,QAAQ,MAAM,UAAU,wBAAwB,GAAG;AAAA,MACtFA,sCAAC,mBAAgB,KAAK,aAAa,eAAe,MAAM,UAAU,+BAA+B,EAAA,CAAG;AAAA,IAAA,EAAA,CACtG;AAAA,EAAA,GACF;AAEJ;ACvBO,SAAS,WAAW,EAAE,SAAS,OAAO,eAAgC;AAC3E,SACED,kCAAAA,KAAAE,4BAAA,EACE,UAAA;AAAA,IAAAD,kCAAAA,IAAC,OAAA,EAAI,WAAU,8BACb,UAAAA,kCAAAA,IAAC,OAAA,EAAI,KAAK,SAAS,KAAI,eAAc,WAAU,cAAA,CAAc,GAC/D;AAAA,IACAA,kCAAAA,IAAC,MAAA,EAAG,WAAU,4DACX,UAAA,OACH;AAAA,IACC,eACCA,kCAAAA,IAAC,OAAA,EAAI,WAAU,6DACZ,UAAA,YAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;ACbO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,EACd,YAAY;AACd,GAAsB;AACpB,SACEA,kCAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW;AAAA;AAAA;AAAA;AAAA,yEAIwD,SAAS;AAAA,MAE3E,sBAAY,cAAc;AAAA,IAAA;AAAA,EAAA;AAGjC;AC7BA,MAAM,QAAQ;AAAA,EACZ,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,eAAe;AACjB;AAIO,SAAS,sBAAsB,UAAkB;AACtD,QAAM,eAAe,QAAQ,MAAM;AACjC,WAAO,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,KAAK,QAAQ;AAC7C,UAAI,GAAgB,IAAI,MAAM,GAAgB,EAAE,KAAK,QAAQ;AAC7D,aAAO;AAAA,IACT,GAAG,CAAA,CAA0B;AAAA,EAC/B,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,UAAU;AAAA,IACd,MAAM,OAAO,OAAO,YAAY,EAAE,MAAM,CAAC,QAAQ,GAAG;AAAA,IACpD,CAAC,YAAY;AAAA,EAAA;AAGf,QAAM,WAAW;AAAA,IACf,CAAC,YAAoB,aAAa;AAChC,UAAIE,WAAU;AACd,YAAM,SAAS,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ;AAChD,YAAI,CAAC,MAAM,GAAyB,EAAE,KAAK,SAAS,GAAG;AACrDA,qBAAU;AACV,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAED,aAAO,EAAE,SAAAA,UAAS,OAAA;AAAA,IACpB;AAAA,IACA,CAAC,QAAQ;AAAA,EAAA;AAGX,SAAO,EAAE,cAAc,SAAS,SAAA;AAClC;ACxCA,MAAM,UAAU;AAQT,MAAM,iBAAiB,CAC5B,YAEG;;AACH,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,IAAI,GAAG,OAAO,mBAAmB,SAAS;AAAA,MACrE,SAAS;AAAA,QACP,gBAAgB;AAAA;AAAA,QAEhB,QAAQ;AAAA,QACR,SAAS;AAAA,MAAA;AAAA,IACX,CACD;AACD,WAAO,SAAS;AAAA,EAClB,SAAS,OAAY;AACnB,YAAM,WAAM,aAAN,mBAAgB,SAAQ;AAAA,EAChC;AACF;ACVO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,EAAE,UAAA,IAAc,eAAe,cAAc;AACnD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,QAAQ;AAC3C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,gBAAgB,EAAE;AAC3D,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,gBAAgB,EAAE;AACzE,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,EAAE;AACrD,QAAM,CAAC,sBAAsB,uBAAuB,IAAI,SAAS,EAAE;AAEnE,QAAM,EAAE,cAAc,aAAa,sBAAsB,QAAQ;AAEjE,QAAM,eAAe,MAAY;AAC/B,oBAAgB,IAAI;AACpB,QAAI;AACF,YAAM,eAAe;AAAA,QACnB;AAAA,QACA,cAAc;AAAA,QACd,kBAAkB,gBAAgB;AAAA,MAAA,CACnC;AACD,kBAAY;AAAA,QACV,UAAU,qBAAqB;AAAA,QAC/B,UAAU,mBAAmB;AAAA,MAAA;AAG/B;AAAA,IACF,SAAS,OAAY;AACnB,cAAQ,MAAM,KAAK;AACnB,kBAAY;AAAA,QACV,UAAU,mBAAmB;AAAA,QAC7B,UAAU,iBAAiB;AAAA,MAAA;AAAA,IAG/B,UAAA;AACE,sBAAgB,KAAK;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,oBACJH,kCAAAA,KAAAE,kBAAAA,UAAA,EACE,UAAA;AAAA,IAAAF,kCAAAA,KAAC,OAAA,EAAI,WAAU,+CACZ,UAAA;AAAA,MAAA,UAAU,yBAAyB;AAAA,MAAG;AAAA,MACvCC,kCAAAA,IAAC,QAAA,EAAK,WAAU,gCAAgC,UAAA,OAAM;AAAA,4CACrD,MAAA,EAAG;AAAA,MACH,UAAU,WAAW;AAAA,IAAA,GACxB;AAAA,IAEAD,kCAAAA,KAAC,OAAA,EAAI,WAAU,wCACZ,UAAA;AAAA,MAAA,UAAU,gBAAgB;AAAA,MAAG;AAAA,MAC9BC,kCAAAA,IAAC,QAAA,EAAK,WAAU,gCAA+B,UAAA,cAAU;AAAA,MAAO;AAAA,MAAE;AAAA,MACjE,UAAU,8BAA8B;AAAA,IAAA,EAAA,CAC3C;AAAA,EAAA,GACF;AAGF,SACED,kCAAAA,KAAC,OAAA,EAAI,WAAU,kFACb,UAAA;AAAA,IAAAC,kCAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,OAAO,UAAU,OAAO;AAAA,QACxB,aAAa;AAAA,MAAA;AAAA,IAAA;AAAA,IAGfD,kCAAAA,KAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,MAAAC,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,UAAU,kBAAkB;AAAA,UACnC,MAAK;AAAA,UACL,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,UACxC,aAAa,UAAU,wBAAwB;AAAA,UAC/C,UAAQ;AAAA,UACR,UAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,MAGVA,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,UAAU,gBAAgB;AAAA,UACjC,OAAO;AAAA,UACP,UAAU,CAAC,MAAM;AACf,kBAAM,cAAc,EAAE,OAAO;AAC7B,wBAAY,WAAW;AAEvB,gBAAI,CAAC,aAAa;AAChB,+BAAiB,UAAU,uBAAuB,CAAC;AAAA,YACrD,WAAW,CAAC,SAAS,WAAW,EAAE,SAAS;AACzC,+BAAiB,UAAU,sBAAsB,CAAC;AAAA,YACpD,OAAO;AACL,+BAAiB,EAAE;AAAA,YACrB;AAEA,gBAAI,mBAAmB,oBAAoB,aAAa;AACtD;AAAA,gBACE,UAAU,+BAA+B;AAAA,cAAA;AAAA,YAE7C,OAAO;AACL,sCAAwB,EAAE;AAAA,YAC5B;AAAA,UACF;AAAA,UACA,aAAa,UAAU,sBAAsB;AAAA,UAC7C,UAAQ;AAAA,UACR,oBAAkB;AAAA,UAClB,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,MAGTA,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,UAAU,wBAAwB;AAAA,UACzC,OAAO;AAAA,UACP,UAAU,CAAC,MAAM;AACf,kBAAM,aAAa,EAAE,OAAO;AAC5B,+BAAmB,UAAU;AAE7B,gBAAI,CAAC,YAAY;AACf;AAAA,gBACE,UAAU,+BAA+B;AAAA,cAAA;AAAA,YAE7C,WAAW,eAAe,UAAU;AAClC;AAAA,gBACE,UAAU,+BAA+B;AAAA,cAAA;AAAA,YAE7C,OAAO;AACL,sCAAwB,EAAE;AAAA,YAC5B;AAAA,UACF;AAAA,UACA,aAAa,UAAU,8BAA8B;AAAA,UACrD,UAAQ;AAAA,UACR,oBAAkB;AAAA,UAClB,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,MAGTA,sCAAC,wBAAqB,cAA4B;AAAA,MAElDA,kCAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,UACE,gBACA,CAAC,YACD,CAAC,mBACD,CAAC,CAAC,iBACF,CAAC,CAAC;AAAA,UAEJ,WAAW;AAAA,UAEV,oBAAU,iBAAiB;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9B,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"digistore.js","sources":["../src/digistore/hooks/usePasswordValidation.ts","../src/digistore/services/createDigistoreAccountService.ts","../src/digistore/NewAccountCreate/FormHeader.tsx","../src/digistore/NewAccountCreate/Icon.tsx","../src/digistore/NewAccountCreate/InputField.tsx","../src/digistore/NewAccountCreate/RequirementItem.tsx","../src/digistore/NewAccountCreate/PasswordRequirements.tsx","../src/digistore/NewAccountCreate/SubmitButton.tsx","../src/digistore/NewAccountCreate/index.tsx"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport { PasswordRequirements } from \"../NewAccountCreate/types\";\n\nconst regex = {\n length: /^.{8,35}$/,\n upper: /^(?=.*[A-Z]).*$/,\n lower: /^(?=.*[a-z]).*$/,\n number: /^(?=.*\\d).+$/,\n no_vietnamese: /^[\\x21-\\x7E]+$/,\n};\n\ntype TRegexKey = keyof typeof regex;\n\nexport function usePasswordValidation(password: string) {\n const requirements = useMemo(() => {\n return Object.keys(regex).reduce((acc, key) => {\n acc[key as TRegexKey] = regex[key as TRegexKey].test(password);\n return acc;\n }, {} as PasswordRequirements);\n }, [password]);\n\n const isValid = useMemo(\n () => Object.values(requirements).every((req) => req),\n [requirements]\n );\n\n const validate = useCallback(\n (_password: string = password) => {\n let isValid = true;\n const errors = Object.keys(regex).filter((key) => {\n if (!regex[key as keyof typeof regex].test(_password)) {\n isValid = false;\n return true;\n }\n });\n\n return { isValid, errors };\n },\n [password]\n );\n\n return { requirements, isValid, validate };\n}\n","import axios from \"axios\";\n\ninterface ForgotPasswordPayload {\n new_password: string;\n email: string;\n current_password?: string; //props có password thì là current password, email = username, new_password là cho người dùng nhập\n apiUrl: string;\n}\n\nexport const forgotPassword = async (\n payload: ForgotPasswordPayload,\n // accessToken: string\n) => {\n try {\n const response = await axios.put(\n `${payload.apiUrl}/reset-password`,\n payload,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n // Authorization: `Bearer ${accessToken}`,\n Origin: \"http://localhost:3000\",\n Referer: \"http://localhost:3000/\",\n },\n },\n );\n return response.data;\n } catch (error: any) {\n throw error.response?.data || error;\n }\n};\n","import { ReactNode } from \"react\";\n\ninterface FormHeaderProps {\n logoSrc: string;\n title: string;\n description?: ReactNode;\n}\n\nexport function FormHeader({ logoSrc, title, description }: FormHeaderProps) {\n return (\n <>\n <div className=\"mb-1.5 justify-self-center\">\n <img src={logoSrc} alt=\"BVBank Logo\" className=\"h-10 w-auto\" />\n </div>\n <h1 className=\"text-base font-semibold text-gray-900 text-center mb-1.5\">\n {title}\n </h1>\n {description && (\n <div className=\"p-2 md:px-3 md:py-2 rounded-xl bg-[#EBF1FF] text-[0.6rem]\">\n {description}\n </div>\n )}\n </>\n );\n}\n","interface IconProps {\n className: string;\n}\nexport const EyeIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\n />\n </svg>\n);\n\n// Eye Slash Icon Component\nexport const EyeSlashIcon = ({ className }: IconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17.94 17.94A10.94 10.94 0 0112 20c-5 0-9.27-3.11-11-8a11.66 11.66 0 012.39-4.27\" />\n <path d=\"M3 3l18 18\" />\n <path d=\"M9.53 9.53A3 3 0 0114.47 14.47\" />\n <path d=\"M21 12a11.66 11.66 0 00-3.06-4.94M12 5a10.94 10.94 0 016.06 1.94\" />\n </svg>\n);\n","// types.ts - Type definitions\nexport interface PasswordRequirements {\n length: boolean;\n special: boolean;\n upper: boolean;\n lower: boolean;\n number: boolean;\n}\n\n// InputField.tsx - Component tái sử dụng cho input\nimport { useState } from \"react\";\nimport { EyeIcon, EyeSlashIcon } from \"./Icon\";\n\ninterface InputFieldProps {\n label: string;\n type?: string;\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder: string;\n required?: boolean;\n showPasswordToggle?: boolean;\n className?: string;\n disabled?: boolean;\n error?: string\n}\n\nexport function InputField({\n label,\n type = \"text\",\n value,\n onChange,\n placeholder,\n required = false,\n showPasswordToggle = false,\n className = \"\",\n disabled = false,\n error = ''\n}: InputFieldProps) {\n const [showPassword, setShowPassword] = useState(false);\n\n const inputType = showPasswordToggle\n ? showPassword\n ? \"text\"\n : \"password\"\n : type;\n\n return (\n <div className={className}>\n <label className=\"block text-[0.685rem] font-semibold text-gray-700 mb-1\">\n {label} {required && <span className=\"text-red-500\">*</span>}\n </label>\n <div className=\"relative\">\n <input\n type={inputType}\n value={value}\n onChange={onChange}\n className=\"w-full px-4 py-2 pr-12 border-2 border-gray-200 rounded-lg text-xs\n focus:outline-none focus:border-blue-500 focus:bg-white focus:ring-3\n focus:ring-blue-100 transition-all disabled:bg-gray-200\"\n placeholder={placeholder}\n disabled={disabled}\n />\n {showPasswordToggle && (\n <button\n type=\"button\"\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600 p-1\"\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? (\n <EyeSlashIcon className=\"w-5 h-5\" />\n ) : (\n <EyeIcon className=\"w-5 h-5\" />\n )}\n </button>\n )}\n </div>\n\n <div className={`grid duration-200 ${error ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'}`}>\n <div className=\"overflow-hidden\">\n <p className=\"text-red-500 text-xs font-normal mt-2\">{error}</p>\n </div>\n </div>\n </div>\n );\n}\n","interface RequirementItemProps {\n met: boolean;\n text: string;\n}\n\nconst RequirementItem = ({ met, text }: RequirementItemProps) => (\n <li className=\"flex items-center gap-2 text-[0.65rem] leading-none text-gray-700\">\n <span className=\"mt-0.5 w-4 h-4 flex items-center justify-center\">\n {met ? (\n // Check SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"w-4 h-4 text-green-600\"\n >\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n ) : (\n // Dot SVG\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 8 8\"\n className=\"w-2 h-2 text-gray-400 fill-current\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"4\" />\n </svg>\n )}\n </span>\n <span className={met ? \"text-gray-800 leading-none\" : \"leading-none\"}>\n {text}\n </span>\n </li>\n);\n\nexport default RequirementItem;\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport RequirementItem from \"./RequirementItem\";\nimport { PasswordRequirements as PasswordRequirementsType } from \"./types\";\n\ninterface PasswordRequirementsProps {\n requirements: PasswordRequirementsType;\n}\n\nexport function PasswordRequirements({\n requirements,\n}: PasswordRequirementsProps) {\n const { translate } = useTranslation('digistore-id')\n\n return (\n <div className=\"bg-gray-50 rounded-lg px-4 py-2 mt-2\">\n <div className=\"text-xs font-semibold mb-2\">{translate(\"pwd_requirement_title\")}</div>\n <ul className=\"space-y-0.5\">\n <RequirementItem met={requirements.length} text={translate(\"pwd_requirement_length\")} />\n <RequirementItem\n met={requirements.upper}\n text={translate(\"pwd_requirement_uppercase\")}\n />\n <RequirementItem\n met={requirements.lower}\n text={translate(\"pwd_requirement_lowercase\")}\n />\n <RequirementItem met={requirements.number} text={translate(\"pwd_requirement_number\")} />\n <RequirementItem met={requirements.no_vietnamese} text={translate(\"pwd_requirement_no_vietnamese\")} />\n </ul>\n </div>\n );\n}\n","import { ReactNode } from \"react\";\n\ninterface SubmitButtonProps {\n onClick: () => void;\n disabled?: boolean;\n isLoading?: boolean;\n children: ReactNode;\n loadingText?: string;\n className?: string;\n}\n\nexport function SubmitButton({\n onClick,\n disabled = false,\n isLoading = false,\n children,\n loadingText = \"Đang xử lý...\",\n className = \"\",\n}: SubmitButtonProps) {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={`w-full bg-[#1F2B7B] text-white border-none \n py-2.5 rounded-lg text-xs font-semibold cursor-pointer \n hover:from-blue-700 hover:to-blue-800 hover:shadow-lg hover:-translate-y-0.5 \n active:translate-y-0 transition-all mt-6 disabled:opacity-75 \n disabled:cursor-not-allowed disabled:transform-none ${className}`}\n >\n {isLoading ? loadingText : children}\n </button>\n );\n}\n","import { CustomToast } from \"@/components/common/custom-toast\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { useState } from \"react\";\nimport { usePasswordValidation } from \"../hooks/usePasswordValidation\";\nimport { forgotPassword } from \"../services/createDigistoreAccountService\";\nimport { FormHeader } from \"./FormHeader\";\nimport { InputField } from \"./InputField\";\nimport { PasswordRequirements } from \"./PasswordRequirements\";\nimport { SubmitButton } from \"./SubmitButton\";\n\ninterface NewAccountCreate {\n logo: string;\n username: string;\n userPassword: string;\n redirectFunction?: () => void;\n apiUrl: string;\n}\n\nexport function NewAccountCreate({\n apiUrl,\n username,\n userPassword,\n logo,\n redirectFunction,\n}: NewAccountCreate) {\n const { translate } = useTranslation(\"digistore-id\");\n const [email, setEmail] = useState(username);\n const [password, setPassword] = useState(userPassword || \"\");\n const [confirmPassword, setConfirmPassword] = useState(userPassword || \"\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [passwordError, setPasswordError] = useState(\"\");\n const [confirmPasswordError, setConfirmPasswordError] = useState(\"\");\n\n const { requirements, validate } = usePasswordValidation(password);\n\n const handleSubmit = async () => {\n setIsSubmitting(true);\n try {\n await forgotPassword({\n apiUrl,\n email,\n new_password: password,\n current_password: userPassword || undefined,\n });\n CustomToast.success(\n translate(\"success_toast_title\"),\n translate(\"success_toast_des\"),\n );\n // alert('Tài khoản đã được tạo thành công!');\n redirectFunction?.();\n } catch (error: any) {\n console.error(error);\n CustomToast.error(\n translate(\"error_toast_title\"),\n translate(\"error_toast_des\"),\n );\n // alert('Tạo tài khoản thất bại!');\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const headerDescription = (\n <>\n <div className=\"text-xs text-primary leading-relaxed mb-0.5\">\n {translate(\"note_login_success_with\")}{\" \"}\n <span className=\"text-[#335CFF] font-semibold\">{email}</span>\n <br />\n {translate(\"note_desc\")}\n </div>\n\n <div className=\"text-xs text-primary leading-relaxed\">\n {translate(\"note_from_date\")}{\" \"}\n <span className=\"font-semibold text-[#335CFF]\">01/08/2025</span>,{\" \"}\n {translate(\"note_use_digis_acc_to_access\")}\n </div>\n </>\n );\n\n return (\n <div className=\"bg-white rounded-2xl shadow-2xl max-w-[550px] w-full px-8 pb-3.5 pt-3 relative\">\n <FormHeader\n logoSrc={logo}\n title={translate(\"title\")}\n description={headerDescription}\n />\n\n <div className=\"mt-2 space-y-3\">\n <InputField\n label={translate(\"form_email_label\")}\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={translate(\"form_email_placeholder\")}\n required\n disabled\n />\n\n <InputField\n label={translate(\"form_pwd_label\")}\n value={password}\n onChange={(e) => {\n const newPassword = e.target.value;\n setPassword(newPassword);\n\n if (!newPassword) {\n setPasswordError(translate(\"form_pwd_err_required\"));\n } else if (!validate(newPassword).isValid) {\n setPasswordError(translate(\"form_pwd_err_invalid\"));\n } else {\n setPasswordError(\"\");\n }\n\n if (confirmPassword && confirmPassword !== newPassword) {\n setConfirmPasswordError(\n translate(\"form_confirm_pwd_err_no_match\"),\n );\n } else {\n setConfirmPasswordError(\"\");\n }\n }}\n placeholder={translate(\"form_pwd_placeholder\")}\n required\n showPasswordToggle\n error={passwordError}\n />\n\n <InputField\n label={translate(\"form_confirm_pwd_label\")}\n value={confirmPassword}\n onChange={(e) => {\n const newConfirm = e.target.value;\n setConfirmPassword(newConfirm);\n\n if (!newConfirm) {\n setConfirmPasswordError(\n translate(\"form_confirm_pwd_err_required\"),\n );\n } else if (newConfirm !== password) {\n setConfirmPasswordError(\n translate(\"form_confirm_pwd_err_no_match\"),\n );\n } else {\n setConfirmPasswordError(\"\");\n }\n }}\n placeholder={translate(\"form_confirm_pwd_placeholder\")}\n required\n showPasswordToggle\n error={confirmPasswordError}\n />\n\n <PasswordRequirements requirements={requirements} />\n\n <SubmitButton\n onClick={handleSubmit}\n disabled={\n isSubmitting ||\n !password ||\n !confirmPassword ||\n !!passwordError ||\n !!confirmPasswordError\n }\n isLoading={isSubmitting}\n >\n {translate(\"form_submit_btn\")}\n </SubmitButton>\n </div>\n </div>\n );\n}\n"],"names":["isValid","jsxs","Fragment","jsx"],"mappings":"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"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.8.6",
6
+ "version": "1.8.7",
7
7
  "type": "module",
8
8
  "main": "dist/index.cjs",
9
9
  "module": "dist/index.esm.js",