@atomsolution/sdk-merchant 1.7.0 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"merchant-profile.cjs","sources":["../node_modules/regenerator-runtime/runtime.js","../node_modules/tesseract.js/src/utils/getId.js","../node_modules/tesseract.js/src/createJob.js","../node_modules/tesseract.js/src/utils/log.js","../node_modules/tesseract.js/src/createScheduler.js","../node_modules/tesseract.js/src/utils/getEnvironment.js","../node_modules/tesseract.js/src/utils/resolvePaths.js","../node_modules/tesseract.js/src/constants/OEM.js","../node_modules/tesseract.js/src/constants/defaultOptions.js","../node_modules/tesseract.js/src/worker/browser/defaultOptions.js","../node_modules/tesseract.js/src/worker/browser/spawnWorker.js","../node_modules/tesseract.js/src/worker/browser/terminateWorker.js","../node_modules/tesseract.js/src/worker/browser/onMessage.js","../node_modules/tesseract.js/src/worker/browser/send.js","../node_modules/tesseract.js/src/worker/browser/loadImage.js","../node_modules/tesseract.js/src/worker/browser/index.js","../node_modules/tesseract.js/src/createWorker.js","../node_modules/tesseract.js/src/Tesseract.js","../node_modules/tesseract.js/src/constants/languages.js","../node_modules/tesseract.js/src/constants/PSM.js","../node_modules/tesseract.js/src/index.js","../node_modules/ocr-upload-reader/dist/data-type.js","../node_modules/ocr-upload-reader/dist/extract-data/license.js","../node_modules/ocr-upload-reader/dist/index.js","../src/configs/portalAxiosClient.ts","../src/merchant-profile/services/addressService.ts","../src/merchant-profile/hooks/use-address.ts","../src/merchant-profile/MerchantRegistrationForm/AddressFields.tsx","../src/assets/download.svg","../src/assets/file.svg","../src/merchant-profile/MerchantRegistrationForm/FileUpload.tsx","../src/merchant-profile/services/MCCList.ts","../src/merchant-profile/hooks/useMCCList.ts","../src/merchant-profile/MerchantRegistrationForm/IndustrySelect.tsx","../src/components/ui/input.tsx","../src/merchant-profile/MerchantRegistrationForm/UserTypeForm.tsx","../src/assets/success.svg","../src/merchant-profile/MerchantRegistrationForm/Header.tsx","../src/utils/mapLicenseData.ts","../src/components/ui/confirmModal.tsx","../src/components/ui/error-modal.tsx","../src/components/ui/success-modal.tsx","../src/utils/form.ts","../src/merchant-profile/services/merchantFormService.ts","../src/merchant-profile/hooks/use-create-merchant.ts","../src/merchant-profile/MerchantRegistrationForm/MerchantRegistrationForm.tsx","../src/merchant-profile/MerchantTable/merchantTableAction.tsx","../src/merchant-profile/MerchantTable/merchantTableHeader.tsx","../src/components/common/datePicker.tsx","../src/utils/merchantTableData.ts","../src/merchant-profile/MerchantTable/merchantTableFilter.tsx","../src/merchant-profile/services/merchantService.ts","../src/merchant-profile/hooks/use-merchant-table.ts","../src/merchant-profile/MerchantTable/index.tsx","../src/merchant-profile/MerchantView/AddressFields.tsx","../src/merchant-profile/MerchantView/FileUpload.tsx","../src/merchant-profile/MerchantView/UserTypeForm.tsx","../src/merchant-profile/MerchantView/Header.tsx","../src/merchant-profile/hooks/useMerchantDetail.ts","../src/merchant-profile/MerchantView/index.tsx","../src/merchant-profile/MerchantEdit/AddressFields.tsx","../src/merchant-profile/MerchantEdit/FileUpload.tsx","../src/merchant-profile/MerchantEdit/UserTypeForm.tsx","../src/merchant-profile/MerchantEdit/Header.tsx","../src/merchant-profile/services/editFormService.ts","../src/merchant-profile/hooks/use-edit-merchant.ts","../src/merchant-profile/MerchantEdit/index.tsx"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next mehtod, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","'use strict';\n\nmodule.exports = (prefix, cnt) => (\n `${prefix}-${cnt}-${Math.random().toString(16).slice(3, 8)}`\n);\n","'use strict';\n\nconst getId = require('./utils/getId');\n\nlet jobCounter = 0;\n\nmodule.exports = ({\n id: _id,\n action,\n payload = {},\n}) => {\n let id = _id;\n if (typeof id === 'undefined') {\n id = getId('Job', jobCounter);\n jobCounter += 1;\n }\n\n return {\n id,\n action,\n payload,\n };\n};\n","'use strict';\n\nlet logging = false;\n\nexports.logging = logging;\n\nexports.setLogging = (_logging) => {\n logging = _logging;\n};\n\nexports.log = (...args) => (logging ? console.log.apply(this, args) : null);\n","'use strict';\n\nconst createJob = require('./createJob');\nconst { log } = require('./utils/log');\nconst getId = require('./utils/getId');\n\nlet schedulerCounter = 0;\n\nmodule.exports = () => {\n const id = getId('Scheduler', schedulerCounter);\n const workers = {};\n const runningWorkers = {};\n let jobQueue = [];\n\n schedulerCounter += 1;\n\n const getQueueLen = () => jobQueue.length;\n const getNumWorkers = () => Object.keys(workers).length;\n\n const dequeue = () => {\n if (jobQueue.length !== 0) {\n const wIds = Object.keys(workers);\n for (let i = 0; i < wIds.length; i += 1) {\n if (typeof runningWorkers[wIds[i]] === 'undefined') {\n jobQueue[0](workers[wIds[i]]);\n break;\n }\n }\n }\n };\n\n const queue = (action, payload) => (\n new Promise((resolve, reject) => {\n const job = createJob({ action, payload });\n jobQueue.push(async (w) => {\n jobQueue.shift();\n runningWorkers[w.id] = job;\n try {\n resolve(await w[action].apply(this, [...payload, job.id]));\n } catch (err) {\n reject(err);\n } finally {\n delete runningWorkers[w.id];\n dequeue();\n }\n });\n log(`[${id}]: Add ${job.id} to JobQueue`);\n log(`[${id}]: JobQueue length=${jobQueue.length}`);\n dequeue();\n })\n );\n\n const addWorker = (w) => {\n workers[w.id] = w;\n log(`[${id}]: Add ${w.id}`);\n log(`[${id}]: Number of workers=${getNumWorkers()}`);\n dequeue();\n return w.id;\n };\n\n const addJob = async (action, ...payload) => {\n if (getNumWorkers() === 0) {\n throw Error(`[${id}]: You need to have at least one worker before adding jobs`);\n }\n return queue(action, payload);\n };\n\n const terminate = async () => {\n Object.keys(workers).forEach(async (wid) => {\n await workers[wid].terminate();\n });\n jobQueue = [];\n };\n\n return {\n addWorker,\n addJob,\n terminate,\n getQueueLen,\n getNumWorkers,\n };\n};\n","'use strict';\n\nmodule.exports = (key) => {\n const env = {};\n\n if (typeof WorkerGlobalScope !== 'undefined') {\n env.type = 'webworker';\n } else if (typeof document === 'object') {\n env.type = 'browser';\n } else if (typeof process === 'object' && typeof require === 'function') {\n env.type = 'node';\n }\n\n if (typeof key === 'undefined') {\n return env;\n }\n\n return env[key];\n};\n","'use strict';\n\nconst isBrowser = require('./getEnvironment')('type') === 'browser';\n\nconst resolveURL = isBrowser ? s => (new URL(s, window.location.href)).href : s => s; // eslint-disable-line\n\nmodule.exports = (options) => {\n const opts = { ...options };\n ['corePath', 'workerPath', 'langPath'].forEach((key) => {\n if (options[key]) {\n opts[key] = resolveURL(opts[key]);\n }\n });\n return opts;\n};\n","'use strict';\n\n/*\n * OEM = OCR Engine Mode, and there are 4 possible modes.\n *\n * By default tesseract.js uses LSTM_ONLY mode.\n *\n */\nmodule.exports = {\n TESSERACT_ONLY: 0,\n LSTM_ONLY: 1,\n TESSERACT_LSTM_COMBINED: 2,\n DEFAULT: 3,\n};\n","'use strict';\n\nmodule.exports = {\n /*\n * Use BlobURL for worker script by default\n * TODO: remove this option\n *\n */\n workerBlobURL: true,\n logger: () => {},\n};\n","'use strict';\n\nconst version = require('../../../package.json').version;\nconst defaultOptions = require('../../constants/defaultOptions');\n\n/*\n * Default options for browser worker\n */\nmodule.exports = {\n ...defaultOptions,\n workerPath: `https://cdn.jsdelivr.net/npm/tesseract.js@v${version}/dist/worker.min.js`,\n};\n","'use strict';\n\n/**\n * spawnWorker\n *\n * @name spawnWorker\n * @function create a new Worker in browser\n * @access public\n */\nmodule.exports = ({ workerPath, workerBlobURL }) => {\n let worker;\n if (Blob && URL && workerBlobURL) {\n const blob = new Blob([`importScripts(\"${workerPath}\");`], {\n type: 'application/javascript',\n });\n worker = new Worker(URL.createObjectURL(blob));\n } else {\n worker = new Worker(workerPath);\n }\n\n return worker;\n};\n","'use strict';\n\n/**\n * terminateWorker\n *\n * @name terminateWorker\n * @function terminate worker\n * @access public\n */\nmodule.exports = (worker) => {\n worker.terminate();\n};\n","'use strict';\n\nmodule.exports = (worker, handler) => {\n worker.onmessage = ({ data }) => { // eslint-disable-line\n handler(data);\n };\n};\n","'use strict';\n\n/**\n * send\n *\n * @name send\n * @function send packet to worker and create a job\n * @access public\n */\nmodule.exports = async (worker, packet) => {\n worker.postMessage(packet);\n};\n","'use strict';\n\n/**\n * readFromBlobOrFile\n *\n * @name readFromBlobOrFile\n * @function\n * @access private\n */\nconst readFromBlobOrFile = (blob) => (\n new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n fileReader.onload = () => {\n resolve(fileReader.result);\n };\n fileReader.onerror = ({ target: { error: { code } } }) => {\n reject(Error(`File could not be read! Code=${code}`));\n };\n fileReader.readAsArrayBuffer(blob);\n })\n);\n\n/**\n * loadImage\n *\n * @name loadImage\n * @function load image from different source\n * @access private\n */\nconst loadImage = async (image) => {\n let data = image;\n if (typeof image === 'undefined') {\n return 'undefined';\n }\n\n if (typeof image === 'string') {\n // Base64 Image\n if (/data:image\\/([a-zA-Z]*);base64,([^\"]*)/.test(image)) {\n data = atob(image.split(',')[1])\n .split('')\n .map((c) => c.charCodeAt(0));\n } else {\n const resp = await fetch(image);\n data = await resp.arrayBuffer();\n }\n } else if (typeof HTMLElement !== 'undefined' && image instanceof HTMLElement) {\n if (image.tagName === 'IMG') {\n data = await loadImage(image.src);\n }\n if (image.tagName === 'VIDEO') {\n data = await loadImage(image.poster);\n }\n if (image.tagName === 'CANVAS') {\n await new Promise((resolve) => {\n image.toBlob(async (blob) => {\n data = await readFromBlobOrFile(blob);\n resolve();\n });\n });\n }\n } else if (typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas) {\n const blob = await image.convertToBlob();\n data = await readFromBlobOrFile(blob);\n } else if (image instanceof File || image instanceof Blob) {\n data = await readFromBlobOrFile(image);\n }\n\n return new Uint8Array(data);\n};\n\nmodule.exports = loadImage;\n","'use strict';\n\n/**\n *\n * Tesseract Worker adapter for browser\n *\n * @fileoverview Tesseract Worker adapter for browser\n * @author Kevin Kwok <antimatter15@gmail.com>\n * @author Guillermo Webster <gui@mit.edu>\n * @author Jerome Wu <jeromewus@gmail.com>\n */\nconst defaultOptions = require('./defaultOptions');\nconst spawnWorker = require('./spawnWorker');\nconst terminateWorker = require('./terminateWorker');\nconst onMessage = require('./onMessage');\nconst send = require('./send');\nconst loadImage = require('./loadImage');\n\nmodule.exports = {\n defaultOptions,\n spawnWorker,\n terminateWorker,\n onMessage,\n send,\n loadImage,\n};\n","'use strict';\n\nconst resolvePaths = require('./utils/resolvePaths');\nconst createJob = require('./createJob');\nconst { log } = require('./utils/log');\nconst getId = require('./utils/getId');\nconst OEM = require('./constants/OEM');\nconst {\n defaultOptions,\n spawnWorker,\n terminateWorker,\n onMessage,\n loadImage,\n send,\n} = require('./worker/node');\n\nlet workerCounter = 0;\n\nmodule.exports = async (langs = 'eng', oem = OEM.LSTM_ONLY, _options = {}, config = {}) => {\n const id = getId('Worker', workerCounter);\n const {\n logger,\n errorHandler,\n ...options\n } = resolvePaths({\n ...defaultOptions,\n ..._options,\n });\n const promises = {};\n\n // Current langs, oem, and config file.\n // Used if the user ever re-initializes the worker using `worker.reinitialize`.\n const currentLangs = typeof langs === 'string' ? langs.split('+') : langs;\n let currentOem = oem;\n let currentConfig = config;\n const lstmOnlyCore = [OEM.DEFAULT, OEM.LSTM_ONLY].includes(oem) && !options.legacyCore;\n\n let workerResReject;\n let workerResResolve;\n const workerRes = new Promise((resolve, reject) => {\n workerResResolve = resolve;\n workerResReject = reject;\n });\n const workerError = (event) => { workerResReject(event.message); };\n\n let worker = spawnWorker(options);\n worker.onerror = workerError;\n\n workerCounter += 1;\n\n const startJob = ({ id: jobId, action, payload }) => (\n new Promise((resolve, reject) => {\n log(`[${id}]: Start ${jobId}, action=${action}`);\n // Using both `action` and `jobId` in case user provides non-unique `jobId`.\n const promiseId = `${action}-${jobId}`;\n promises[promiseId] = { resolve, reject };\n send(worker, {\n workerId: id,\n jobId,\n action,\n payload,\n });\n })\n );\n\n const load = () => (\n console.warn('`load` is depreciated and should be removed from code (workers now come pre-loaded)')\n );\n\n const loadInternal = (jobId) => (\n startJob(createJob({\n id: jobId, action: 'load', payload: { options: { lstmOnly: lstmOnlyCore, corePath: options.corePath, logging: options.logging } },\n }))\n );\n\n const writeText = (path, text, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method: 'writeFile', args: [path, text] },\n }))\n );\n\n const readText = (path, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method: 'readFile', args: [path, { encoding: 'utf8' }] },\n }))\n );\n\n const removeFile = (path, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method: 'unlink', args: [path] },\n }))\n );\n\n const FS = (method, args, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method, args },\n }))\n );\n\n const loadLanguageInternal = (_langs, jobId) => startJob(createJob({\n id: jobId,\n action: 'loadLanguage',\n payload: {\n langs: _langs,\n options: {\n langPath: options.langPath,\n dataPath: options.dataPath,\n cachePath: options.cachePath,\n cacheMethod: options.cacheMethod,\n gzip: options.gzip,\n lstmOnly: [OEM.DEFAULT, OEM.LSTM_ONLY].includes(currentOem)\n && !options.legacyLang,\n },\n },\n }));\n\n const initializeInternal = (_langs, _oem, _config, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'initialize',\n payload: { langs: _langs, oem: _oem, config: _config },\n }))\n );\n\n const reinitialize = (langs = 'eng', oem, config, jobId) => { // eslint-disable-line\n\n if (lstmOnlyCore && [OEM.TESSERACT_ONLY, OEM.TESSERACT_LSTM_COMBINED].includes(oem)) throw Error('Legacy model requested but code missing.');\n\n const _oem = oem || currentOem;\n currentOem = _oem;\n\n const _config = config || currentConfig;\n currentConfig = _config;\n\n // Only load langs that are not already loaded.\n // This logic fails if the user downloaded the LSTM-only English data for a language\n // and then uses `worker.reinitialize` to switch to the Legacy engine.\n // However, the correct data will still be downloaded after initialization fails\n // and this can be avoided entirely if the user loads the correct data ahead of time.\n const langsArr = typeof langs === 'string' ? langs.split('+') : langs;\n const _langs = langsArr.filter((x) => !currentLangs.includes(x));\n currentLangs.push(..._langs);\n\n if (_langs.length > 0) {\n return loadLanguageInternal(_langs, jobId)\n .then(() => initializeInternal(langs, _oem, _config, jobId));\n }\n\n return initializeInternal(langs, _oem, _config, jobId);\n };\n\n const setParameters = (params = {}, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'setParameters',\n payload: { params },\n }))\n );\n\n const recognize = async (image, opts = {}, output = {\n text: true,\n }, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'recognize',\n payload: { image: await loadImage(image), options: opts, output },\n }))\n );\n\n const detect = async (image, jobId) => {\n if (lstmOnlyCore) throw Error('`worker.detect` requires Legacy model, which was not loaded.');\n\n return startJob(createJob({\n id: jobId,\n action: 'detect',\n payload: { image: await loadImage(image) },\n }));\n };\n\n const terminate = async () => {\n if (worker !== null) {\n /*\n await startJob(createJob({\n id: jobId,\n action: 'terminate',\n }));\n */\n terminateWorker(worker);\n worker = null;\n }\n return Promise.resolve();\n };\n\n onMessage(worker, ({\n workerId, jobId, status, action, data,\n }) => {\n const promiseId = `${action}-${jobId}`;\n if (status === 'resolve') {\n log(`[${workerId}]: Complete ${jobId}`);\n promises[promiseId].resolve({ jobId, data });\n delete promises[promiseId];\n } else if (status === 'reject') {\n promises[promiseId].reject(data);\n delete promises[promiseId];\n if (action === 'load') workerResReject(data);\n if (errorHandler) {\n errorHandler(data);\n } else {\n throw Error(data);\n }\n } else if (status === 'progress') {\n logger({ ...data, userJobId: jobId });\n }\n });\n\n const resolveObj = {\n id,\n worker,\n load,\n writeText,\n readText,\n removeFile,\n FS,\n reinitialize,\n setParameters,\n recognize,\n detect,\n terminate,\n };\n\n loadInternal()\n .then(() => loadLanguageInternal(langs))\n .then(() => initializeInternal(langs, oem, config))\n .then(() => workerResResolve(resolveObj))\n .catch(() => {});\n\n return workerRes;\n};\n","'use strict';\n\nconst createWorker = require('./createWorker');\n\nconst recognize = async (image, langs, options) => {\n const worker = await createWorker(langs, 1, options);\n return worker.recognize(image)\n .finally(async () => {\n await worker.terminate();\n });\n};\n\nconst detect = async (image, options) => {\n const worker = await createWorker('osd', 0, options);\n return worker.detect(image)\n .finally(async () => {\n await worker.terminate();\n });\n};\n\nmodule.exports = {\n recognize,\n detect,\n};\n","'use strict';\n\n/*\n * languages with existing tesseract traineddata\n * https://tesseract-ocr.github.io/tessdoc/Data-Files#data-files-for-version-400-november-29-2016\n */\n\n/**\n * @typedef {object} Languages\n * @property {string} AFR Afrikaans\n * @property {string} AMH Amharic\n * @property {string} ARA Arabic\n * @property {string} ASM Assamese\n * @property {string} AZE Azerbaijani\n * @property {string} AZE_CYRL Azerbaijani - Cyrillic\n * @property {string} BEL Belarusian\n * @property {string} BEN Bengali\n * @property {string} BOD Tibetan\n * @property {string} BOS Bosnian\n * @property {string} BUL Bulgarian\n * @property {string} CAT Catalan; Valencian\n * @property {string} CEB Cebuano\n * @property {string} CES Czech\n * @property {string} CHI_SIM Chinese - Simplified\n * @property {string} CHI_TRA Chinese - Traditional\n * @property {string} CHR Cherokee\n * @property {string} CYM Welsh\n * @property {string} DAN Danish\n * @property {string} DEU German\n * @property {string} DZO Dzongkha\n * @property {string} ELL Greek, Modern (1453-)\n * @property {string} ENG English\n * @property {string} ENM English, Middle (1100-1500)\n * @property {string} EPO Esperanto\n * @property {string} EST Estonian\n * @property {string} EUS Basque\n * @property {string} FAS Persian\n * @property {string} FIN Finnish\n * @property {string} FRA French\n * @property {string} FRK German Fraktur\n * @property {string} FRM French, Middle (ca. 1400-1600)\n * @property {string} GLE Irish\n * @property {string} GLG Galician\n * @property {string} GRC Greek, Ancient (-1453)\n * @property {string} GUJ Gujarati\n * @property {string} HAT Haitian; Haitian Creole\n * @property {string} HEB Hebrew\n * @property {string} HIN Hindi\n * @property {string} HRV Croatian\n * @property {string} HUN Hungarian\n * @property {string} IKU Inuktitut\n * @property {string} IND Indonesian\n * @property {string} ISL Icelandic\n * @property {string} ITA Italian\n * @property {string} ITA_OLD Italian - Old\n * @property {string} JAV Javanese\n * @property {string} JPN Japanese\n * @property {string} KAN Kannada\n * @property {string} KAT Georgian\n * @property {string} KAT_OLD Georgian - Old\n * @property {string} KAZ Kazakh\n * @property {string} KHM Central Khmer\n * @property {string} KIR Kirghiz; Kyrgyz\n * @property {string} KOR Korean\n * @property {string} KUR Kurdish\n * @property {string} LAO Lao\n * @property {string} LAT Latin\n * @property {string} LAV Latvian\n * @property {string} LIT Lithuanian\n * @property {string} MAL Malayalam\n * @property {string} MAR Marathi\n * @property {string} MKD Macedonian\n * @property {string} MLT Maltese\n * @property {string} MSA Malay\n * @property {string} MYA Burmese\n * @property {string} NEP Nepali\n * @property {string} NLD Dutch; Flemish\n * @property {string} NOR Norwegian\n * @property {string} ORI Oriya\n * @property {string} PAN Panjabi; Punjabi\n * @property {string} POL Polish\n * @property {string} POR Portuguese\n * @property {string} PUS Pushto; Pashto\n * @property {string} RON Romanian; Moldavian; Moldovan\n * @property {string} RUS Russian\n * @property {string} SAN Sanskrit\n * @property {string} SIN Sinhala; Sinhalese\n * @property {string} SLK Slovak\n * @property {string} SLV Slovenian\n * @property {string} SPA Spanish; Castilian\n * @property {string} SPA_OLD Spanish; Castilian - Old\n * @property {string} SQI Albanian\n * @property {string} SRP Serbian\n * @property {string} SRP_LATN Serbian - Latin\n * @property {string} SWA Swahili\n * @property {string} SWE Swedish\n * @property {string} SYR Syriac\n * @property {string} TAM Tamil\n * @property {string} TEL Telugu\n * @property {string} TGK Tajik\n * @property {string} TGL Tagalog\n * @property {string} THA Thai\n * @property {string} TIR Tigrinya\n * @property {string} TUR Turkish\n * @property {string} UIG Uighur; Uyghur\n * @property {string} UKR Ukrainian\n * @property {string} URD Urdu\n * @property {string} UZB Uzbek\n * @property {string} UZB_CYRL Uzbek - Cyrillic\n * @property {string} VIE Vietnamese\n * @property {string} YID Yiddish\n */\n\n/**\n * @type {Languages}\n */\nmodule.exports = {\n AFR: 'afr',\n AMH: 'amh',\n ARA: 'ara',\n ASM: 'asm',\n AZE: 'aze',\n AZE_CYRL: 'aze_cyrl',\n BEL: 'bel',\n BEN: 'ben',\n BOD: 'bod',\n BOS: 'bos',\n BUL: 'bul',\n CAT: 'cat',\n CEB: 'ceb',\n CES: 'ces',\n CHI_SIM: 'chi_sim',\n CHI_TRA: 'chi_tra',\n CHR: 'chr',\n CYM: 'cym',\n DAN: 'dan',\n DEU: 'deu',\n DZO: 'dzo',\n ELL: 'ell',\n ENG: 'eng',\n ENM: 'enm',\n EPO: 'epo',\n EST: 'est',\n EUS: 'eus',\n FAS: 'fas',\n FIN: 'fin',\n FRA: 'fra',\n FRK: 'frk',\n FRM: 'frm',\n GLE: 'gle',\n GLG: 'glg',\n GRC: 'grc',\n GUJ: 'guj',\n HAT: 'hat',\n HEB: 'heb',\n HIN: 'hin',\n HRV: 'hrv',\n HUN: 'hun',\n IKU: 'iku',\n IND: 'ind',\n ISL: 'isl',\n ITA: 'ita',\n ITA_OLD: 'ita_old',\n JAV: 'jav',\n JPN: 'jpn',\n KAN: 'kan',\n KAT: 'kat',\n KAT_OLD: 'kat_old',\n KAZ: 'kaz',\n KHM: 'khm',\n KIR: 'kir',\n KOR: 'kor',\n KUR: 'kur',\n LAO: 'lao',\n LAT: 'lat',\n LAV: 'lav',\n LIT: 'lit',\n MAL: 'mal',\n MAR: 'mar',\n MKD: 'mkd',\n MLT: 'mlt',\n MSA: 'msa',\n MYA: 'mya',\n NEP: 'nep',\n NLD: 'nld',\n NOR: 'nor',\n ORI: 'ori',\n PAN: 'pan',\n POL: 'pol',\n POR: 'por',\n PUS: 'pus',\n RON: 'ron',\n RUS: 'rus',\n SAN: 'san',\n SIN: 'sin',\n SLK: 'slk',\n SLV: 'slv',\n SPA: 'spa',\n SPA_OLD: 'spa_old',\n SQI: 'sqi',\n SRP: 'srp',\n SRP_LATN: 'srp_latn',\n SWA: 'swa',\n SWE: 'swe',\n SYR: 'syr',\n TAM: 'tam',\n TEL: 'tel',\n TGK: 'tgk',\n TGL: 'tgl',\n THA: 'tha',\n TIR: 'tir',\n TUR: 'tur',\n UIG: 'uig',\n UKR: 'ukr',\n URD: 'urd',\n UZB: 'uzb',\n UZB_CYRL: 'uzb_cyrl',\n VIE: 'vie',\n YID: 'yid',\n};\n","'use strict';\n\n/*\n * PSM = Page Segmentation Mode\n */\nmodule.exports = {\n OSD_ONLY: '0',\n AUTO_OSD: '1',\n AUTO_ONLY: '2',\n AUTO: '3',\n SINGLE_COLUMN: '4',\n SINGLE_BLOCK_VERT_TEXT: '5',\n SINGLE_BLOCK: '6',\n SINGLE_LINE: '7',\n SINGLE_WORD: '8',\n CIRCLE_WORD: '9',\n SINGLE_CHAR: '10',\n SPARSE_TEXT: '11',\n SPARSE_TEXT_OSD: '12',\n RAW_LINE: '13',\n};\n","'use strict';\n\n/**\n *\n * Entry point for tesseract.js, should be the entry when bundling.\n *\n * @fileoverview entry point for tesseract.js\n * @author Kevin Kwok <antimatter15@gmail.com>\n * @author Guillermo Webster <gui@mit.edu>\n * @author Jerome Wu <jeromewus@gmail.com>\n */\nrequire('regenerator-runtime/runtime');\nconst createScheduler = require('./createScheduler');\nconst createWorker = require('./createWorker');\nconst Tesseract = require('./Tesseract');\nconst languages = require('./constants/languages');\nconst OEM = require('./constants/OEM');\nconst PSM = require('./constants/PSM');\nconst { setLogging } = require('./utils/log');\n\nmodule.exports = {\n languages,\n OEM,\n PSM,\n createScheduler,\n createWorker,\n setLogging,\n ...Tesseract,\n};\n","export var LANGUAGE;\n(function (LANGUAGE) {\n LANGUAGE[\"EN\"] = \"eng\";\n LANGUAGE[\"VI\"] = \"vie\";\n})(LANGUAGE || (LANGUAGE = {}));\n","export function extractCompanyName(text) {\n const lines = text.split('\\n').map(l => l.trim()).filter(Boolean);\n const joinedText = lines.join('\\n');\n const regexVietnameseName = /Tên\\s+công\\s+ty\\s+viết\\s+bằng\\s+tiếng\\s+Việt[::\\-]?\\s*(CÔNG\\s+TY\\s+[^\\n]+?)(?=\\s*(Tên\\s+công\\s+ty\\s+viết|Tên\\s+địa|Tên\\s+giao\\s+dịch|Địa\\s+chỉ|Mã\\s+số|$))/i;\n const match1 = joinedText.match(regexVietnameseName);\n if (match1)\n return cleanCompanyName(match1[1]);\n for (let i = 0; i < lines.length; i++) {\n if (/^1\\.\\s*Tên\\s+địa\\s+điểm\\s+kinh\\s+doanh[::]?$/i.test(lines[i])) {\n const next1 = lines[i + 1] ?? '';\n const next2 = lines[i + 2] ?? '';\n const combined = `${next1} ${next2}`;\n const match2 = combined.match(/(CÔNG\\s+TY\\s+[A-ZÀ-Ỹ\\s,\\.–\\-]+)/i);\n if (match2)\n return cleanCompanyName(match2[1]);\n }\n }\n for (const line of lines) {\n if (/^CÔNG\\s+TY\\s+[A-ZÀ-Ỹ\\s,\\.–\\-]+$/i.test(line)) {\n return cleanCompanyName(line);\n }\n }\n const fallback = joinedText.match(/(CÔNG\\s+TY\\s+[A-ZÀ-Ỹ\\s,\\.–\\-]{10,})/i);\n if (fallback)\n return cleanCompanyName(fallback[1]);\n return null;\n}\nexport function extractRepresentativeName(text) {\n const regex = /Họ\\s*và\\s*tên[::]?\\s*([A-ZÀ-Ỹa-zà-ỹ\\s]+)(?=\\s*Giới|Sinh|Dân|Quốc|$)/i;\n const match = text.match(regex);\n if (match) {\n return match[1].replace(/\\s+/g, ' ').trim();\n }\n const lines = text.split('\\n').map(l => l.trim());\n const startIndex = lines.findIndex(l => /thông\\s+tin\\s+về\\s+người\\s+đứng\\s+đầu/i.test(l));\n if (startIndex >= 0) {\n for (let i = startIndex; i < startIndex + 5; i++) {\n const line = lines[i] || '';\n const matchLine = line.match(/Họ\\s*và\\s*tên[::]?\\s*([A-ZÀ-Ỹa-zà-ỹ\\s]+)/i);\n if (matchLine) {\n return matchLine[1].replace(/\\s+/g, ' ').trim();\n }\n }\n }\n return null;\n}\nexport function extractRepresentativeAddress(text) {\n const lines = text.split('\\n').map(l => l.trim());\n let currentAddress = \"\";\n let fallbackAddress = \"\";\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (/Chỗ\\s*ở\\s*hiện\\s*tại[::]?\\s*/i.test(line)) {\n const value = line.split(/[::]/)[1]?.trim() ?? '';\n const nextLine = lines[i + 1]?.trim() ?? '';\n if (value && !isLikelyField(nextLine)) {\n currentAddress = `${value} ${nextLine}`.trim();\n }\n else {\n currentAddress = value.trim();\n }\n }\n if (/Nơi\\s*đăng\\s*ký\\s*hộ\\s*khẩu.*trú[::]?\\s*/i.test(line)) {\n const value = line.split(/[::]/)[1]?.trim() ?? '';\n const nextLine = lines[i + 1]?.trim() ?? '';\n if (value && !isLikelyField(nextLine)) {\n fallbackAddress = `${value} ${nextLine}`.trim();\n }\n else {\n fallbackAddress = value.trim();\n }\n }\n }\n return (cleanLine(currentAddress) ??\n cleanLine(fallbackAddress) ??\n null);\n}\nexport function extractRepresentativeGender(text) {\n const regex = /Giới\\s*tính[::]?\\s*(Nam|Nữ)/i;\n const match = text.match(regex);\n if (match) {\n return match[1].trim().toLowerCase() === 'nam' ? 'Nam' : 'Nữ';\n }\n const lines = text.split('\\n');\n for (const line of lines) {\n const matchInline = line.match(/Giới\\s*tính[::]?\\s*(Nam|Nữ)/i);\n if (matchInline) {\n return matchInline[1].trim().toLowerCase() === 'nam' ? 'Nam' : 'Nữ';\n }\n }\n return null;\n}\nexport function extractRepresentativeDob(text) {\n const regex = /(Sinh\\s*ngày|Ngày\\s*sinh)[^0-9]*(\\d{1,2}\\/\\d{1,2}\\/\\d{4})/i;\n const match = text.match(regex);\n if (match) {\n const date = match[2].trim();\n const corrected = date.replace(/\\/79(\\d{2})/, '/19$1');\n return corrected;\n }\n return null;\n}\nexport function extractRepresentativeNationality(text) {\n const regex = /Quốc\\s*tịch[::]?\\s*([^\\n]+)/i;\n const match = text.match(regex);\n if (match) {\n let result = match[1].trim();\n result = result.split(/(Loại|Giấy|Họ\\s*và\\s*tên|Sinh\\s*ngày|Dân\\s*tộc|CMND|Chứng\\s*minh)/i)[0];\n return result.trim().replace(/\\s+/g, ' ');\n }\n return null;\n}\nexport function extractRepresentativeIdCard(text) {\n const regex = /Số\\s*giấy\\s*chứng\\s*(?:thực)?\\s*c[aá]?\\s*nh[aâ]n[::]?\\s*([A-Za-z0-9\\/]+)/i;\n const match = text.match(regex);\n if (match) {\n const raw = match[1].trim();\n const onlyDigits = raw.replace(/\\D/g, '');\n return onlyDigits || null;\n }\n return null;\n}\nfunction cleanCompanyName(name) {\n return name\n .replace(/[^A-Za-zÀ-ỹ0-9\\s,\\.–\\-]/g, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\nexport function extractTaxCode(text) {\n const regex = /Mã\\s*số\\s*(?:doanh\\s*nghiệp|thuế)[^\\d]{0,10}(\\d{8,15})/i;\n const match = text.match(regex);\n return match ? match[1].trim() : null;\n}\nexport function extractAddress(text) {\n const regex = /^(\\d+\\.\\s*)?địa\\s*chỉ[::]?\\s*(.*)/i;\n const lines = text.split('\\n').map(l => l.trim());\n const addressLines = [];\n let found = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!found && /^(\\d+\\.\\s*)?địa\\s*chỉ/i.test(line)) {\n found = true;\n const match = line.match(regex);\n if (match && match[2])\n addressLines.push(cleanLine(match[2]));\n continue;\n }\n if (found) {\n if (!line || /^[0-9]+\\.\\s|\\b(Điện thoại|Email|Fax|Họ\\s+và\\s+tên|Sinh ngày|Chỗ ở hiện tại|Tên doanh nghiệp|Mã số doanh nghiệp)/i.test(line)) {\n break;\n }\n addressLines.push(cleanLine(line));\n }\n }\n if (addressLines.length === 0)\n return null;\n const result = addressLines.join(', ').replace(/\\s{2,}/g, ' ').trim();\n return result;\n}\nexport function extractEmail(text) {\n const regex = /email[::]?\\s*([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})/i;\n if (!regex.test(text.toLocaleLowerCase()))\n return null;\n const match = text.toLowerCase().match(regex);\n return match ? match[1].trim() : null;\n}\nexport function extractPhoneNumber(text) {\n const phoneRegex = /(?:Điện\\s*thoại|Phone)[^\\d]{0,10}((?:\\d[\\s\\-]?){8,13})/i;\n const match = text.match(phoneRegex);\n return match ? match[1].replace(/[\\s\\-]/g, '') : null;\n}\nfunction isLikelyField(line) {\n return /^(Sinh ngày|Giới tính|Dân tộc|Loại giấy|Số giấy|Ngày cấp|Nơi cấp|Email|Website|Fax|Điện thoại)/i.test(line) ||\n /\\d{1,2}\\/\\d{1,2}\\/\\d{4}/.test(line);\n}\nfunction cleanLine(line) {\n return line.replace(/\\s+/g, ' ').replace(/[^\\wÀ-ỹ\\s,\\.\\/-]/g, '').trim();\n}\n","import Tesseract from 'tesseract.js';\nimport { LANGUAGE } from './data-type.js';\nimport { extractCompanyName, extractAddress, extractTaxCode, extractRepresentativeName, extractRepresentativeAddress, extractRepresentativeGender, extractRepresentativeDob, extractRepresentativeNationality, extractRepresentativeIdCard } from './extract-data/license.js';\nimport { toCitizenId, toDateOfBirth, toFullName, toPlaceOfOrigin, toPlaceOfResidence, toSex } from './extract-data/identity-card.js';\nimport { getProvincesDictionary, getVietnameseDictionary, getVietnameseProvinces, toNationality } from './utils/dictionary.js';\nimport { extractBusinessTaxCode, extractDateOfIssueTaxCode, extractDateOfRegistration, extractNumOfIdentityCard, extractNumOfRegistration, extractTaxDepartment, extractTaxPayer } from './extract-data/certificate-registration.js';\nimport { loadImageFromBlob } from './utils/image.js';\nimport { identityCardZones } from './zones.js';\nexport { LANGUAGE };\nexport async function readImage(file, lang = LANGUAGE.VI) {\n const url = URL.createObjectURL(file);\n return await Tesseract.recognize(url, lang);\n}\nexport async function readImageByZone(file, lang = LANGUAGE.VI, zone) {\n const worker = await Tesseract.createWorker(lang, 1);\n const img = await loadImageFromBlob(file);\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const CANVAS_WIDTH = 1280;\n const CANVAS_HEIGHT = 800;\n canvas.width = CANVAS_WIDTH;\n canvas.height = CANVAS_HEIGHT;\n const imageRatio = img.width / img.height;\n const canvasRatio = CANVAS_WIDTH / CANVAS_HEIGHT;\n let drawWidth = CANVAS_WIDTH;\n let drawHeight = CANVAS_HEIGHT;\n let offsetX = 0;\n let offsetY = 0;\n if (imageRatio > canvasRatio) {\n drawWidth = CANVAS_WIDTH;\n drawHeight = CANVAS_WIDTH / imageRatio;\n offsetY = (CANVAS_HEIGHT - drawHeight) / 2;\n }\n else {\n drawHeight = CANVAS_HEIGHT;\n drawWidth = CANVAS_HEIGHT * imageRatio;\n offsetX = (CANVAS_WIDTH - drawWidth) / 2;\n }\n ctx.drawImage(img, offsetX, offsetY, drawWidth, drawHeight);\n const fields = {};\n for (const key in zone) {\n for (const zn of zone[key]) {\n const { x, y, width, height } = zn;\n const cropX = x;\n const cropY = y;\n const cropW = width;\n const cropH = height;\n const cropCanvas = document.createElement('canvas');\n cropCanvas.width = cropW;\n cropCanvas.height = cropH;\n const cropCtx = cropCanvas.getContext('2d');\n cropCtx.drawImage(canvas, cropX, cropY, cropW, cropH, 0, 0, cropW, cropH);\n const croppedBlob = await new Promise((resolve) => cropCanvas.toBlob((b) => resolve(b), 'image/jpeg'));\n const { data } = await worker.recognize(croppedBlob);\n const currentField = fields[key] ?? '';\n fields[key] = currentField + \", \" + data.text.trim();\n }\n }\n await worker.terminate();\n return fields;\n}\nexport async function readLicense(file, lang = LANGUAGE.VI) {\n const text = await readImage(file, lang);\n return parseToLicenseJson(text.data.text);\n}\nexport async function readIdentityCard(file, lang = LANGUAGE.VI) {\n const fields = await readImageByZone(file, lang, identityCardZones);\n return await parseToIdentityCardJson(fields);\n}\nexport async function readCertificateOfRegistration(file, lang = LANGUAGE.VI) {\n const text = await readImage(file, lang);\n return parseToCertificateOfRegistrationJson(text.data.text);\n}\nfunction parseToCertificateOfRegistrationJson(text) {\n const result = {};\n result['tax_code'] ?? (result['tax_code'] = extractBusinessTaxCode(text));\n result['tax_payer'] ?? (result['tax_payer'] = extractTaxPayer(text));\n result['num_of_registration'] ?? (result['num_of_registration'] = extractNumOfRegistration(text));\n result['date_of_registration'] ?? (result['date_of_registration'] = extractDateOfRegistration(text));\n result['num_of_establishment'] ?? (result['num_of_establishment'] = null);\n result['date_of_establishment'] ?? (result['date_of_establishment'] = null);\n result['date_of_issue_tax_code'] ?? (result['date_of_issue_tax_code'] = extractDateOfIssueTaxCode(text));\n result['tax_department'] ?? (result['tax_department'] = extractTaxDepartment(text));\n result['num_of_identity_card'] ?? (result['num_of_identity_card'] = extractNumOfIdentityCard(text));\n return result;\n}\nfunction parseToLicenseJson(text) {\n const result = {};\n const organization = {};\n const contactPerson = {};\n const legalRepresentative = {};\n organization['name'] ?? (organization['name'] = extractCompanyName(text));\n organization['tax_code'] ?? (organization['tax_code'] = extractTaxCode(text));\n organization['address'] ?? (organization['address'] = extractAddress(text));\n organization['tax_authority'] ?? (organization['tax_authority'] = null);\n contactPerson['name'] ?? (contactPerson['name'] = null);\n contactPerson['address'] ?? (contactPerson['address'] = null);\n contactPerson['email'] ?? (contactPerson['email'] = null);\n contactPerson['phone_number'] ?? (contactPerson['phone_number'] = null);\n legalRepresentative['name'] ?? (legalRepresentative['name'] = extractRepresentativeName(text));\n legalRepresentative['dob'] ?? (legalRepresentative['dob'] = extractRepresentativeDob(text));\n legalRepresentative['gender'] ?? (legalRepresentative['gender'] = extractRepresentativeGender(text));\n legalRepresentative['phone'] ?? (legalRepresentative['phone'] = null);\n legalRepresentative['id_card'] ?? (legalRepresentative['id_card'] = extractRepresentativeIdCard(text));\n legalRepresentative['passport_number'] ?? (legalRepresentative['passport_number'] = null);\n legalRepresentative['nationality'] ?? (legalRepresentative['nationality'] = extractRepresentativeNationality(text));\n legalRepresentative['permanent_address'] ?? (legalRepresentative['permanent_address'] = extractRepresentativeAddress(text));\n result['organization'] ?? (result['organization'] = organization);\n result['contactPerson'] ?? (result['contactPerson'] = contactPerson);\n result['legalRepresentative'] ?? (result['legalRepresentative'] = legalRepresentative);\n return result;\n}\nasync function parseToIdentityCardJson(fields) {\n const result = {};\n const dictionary = await getVietnameseDictionary();\n const provinces = await getVietnameseProvinces();\n result['citizen_id'] ?? (result['citizen_id'] = toCitizenId(fields['citizen_id']));\n result['full_name'] ?? (result['full_name'] = toFullName(fields['full_name'], dictionary));\n result['dob'] ?? (result['dob'] = toDateOfBirth(fields['dob']));\n result['sex'] ?? (result['sex'] = toSex(fields['sex']));\n result['nationality'] ?? (result['nationality'] = toNationality(fields['nationality']));\n result['place_of_origin'] ?? (result['place_of_origin'] = toPlaceOfOrigin(fields['place_of_origin'], Array.from(getProvincesDictionary(provinces))));\n result['place_of_residence'] ?? (result['place_of_residence'] = toPlaceOfResidence(fields['place_of_residence'], Array.from(getProvincesDictionary(provinces))));\n return result;\n}\n","import usePortalApiConfig from '@/shared/store/use-portal-api-config.store';\nimport axios from 'axios';\n\nconst portalAxiosClient = axios.create({\n timeout: 10000,\n});\n\nportalAxiosClient.interceptors.request.use((config) => {\n const baseURL = import.meta.env.VITE_API_BASE_URL as string;\n const accessToken = usePortalApiConfig.getState().accessToken;\n\n config.baseURL = baseURL;\n\n if (!config.headers.Authorization) {\n if (accessToken) {\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n return config;\n});\n\nexport default portalAxiosClient;\n","import portalAxiosClient from \"@/configs/portalAxiosClient\";\n\ninterface LocationOption {\n id?: string;\n code?: string;\n name: string;\n}\n\nexport const getCountries = async (): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get(\"/address/country\");\n return data.data;\n};\n\nexport const getCities = async (\n countryCode: string\n): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get(\"/address/city\", {\n params: {\n country_code: countryCode,\n page_size: -1,\n },\n });\n return data.data;\n};\n\nexport const getDistricts = async (\n cityId: string\n): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get(\"/address/district\", {\n params: { city_id: cityId, page_size: -1 },\n });\n return data.data;\n};\n\nexport const getWards = async (\n districtId: string\n): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get(\"/address/ward\", {\n params: { district_id: districtId, page_size: -1 },\n });\n return data.data;\n};\n\nexport const getNewCities = async (): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get('/address/new-city', {\n params: { page_size: -1 },\n });\n return data.data;\n};\n\nexport const getNewWards = async (\n cityId: string,\n): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get('/address/new-ward', {\n params: { city_id: cityId, page_size: -1 },\n });\n return data.data;\n};","import { useEffect, useState, useCallback } from 'react';\n\nimport type { Country, City, District, Ward } from '../types/addressType';\nimport {\n getCities,\n getCountries,\n getDistricts,\n getWards,\n getNewCities,\n getNewWards,\n} from '../services/addressService';\n\ninterface AddressState {\n countries: Country[];\n cities: City[];\n districts: District[];\n wards: Ward[];\n newCities: City[];\n newWards: Ward[];\n}\n\nexport const useAddress = (\n countryCode: string,\n cityCode: string,\n districtCode: string,\n): AddressState => {\n const [countries, setCountries] = useState<Country[]>([]);\n const [cities, setCities] = useState<City[]>([]);\n const [districts, setDistricts] = useState<District[]>([]);\n const [wards, setWards] = useState<Ward[]>([]);\n const [newCities, setNewCities] = useState<City[]>([]);\n const [newWards, setNewWards] = useState<Ward[]>([]);\n\n const resetCities = useCallback(() => setCities([]), []);\n const resetDistricts = useCallback(() => setDistricts([]), []);\n const resetWards = useCallback(() => setWards([]), []);\n const resetNewWards = useCallback(() => setNewWards([]), []);\n\n // Fetch countries once\n useEffect(() => {\n let active = true;\n\n const fetchCountries = async () => {\n try {\n const data = await getCountries();\n if (active) setCountries(data);\n } catch (error) {\n console.error('Failed to fetch countries:', error);\n if (active) setCountries([]);\n }\n };\n\n if (countries.length === 0) {\n fetchCountries();\n }\n\n return () => {\n active = false;\n };\n }, []);\n\n // Fetch newCities once (independent of country/city selection)\n useEffect(() => {\n let active = true;\n\n const fetchNewCities = async () => {\n try {\n const data = await getNewCities();\n if (active) setNewCities(data);\n } catch (error) {\n console.error('Failed to fetch new cities:', error);\n if (active) setNewCities([]);\n }\n };\n\n fetchNewCities();\n\n return () => {\n active = false;\n };\n }, []);\n\n // Fetch cities based on countryCode\n useEffect(() => {\n let active = true;\n\n const fetchCities = async () => {\n if (!countryCode || countryCode.trim() === '') {\n resetCities();\n resetDistricts();\n resetWards();\n return;\n }\n\n try {\n const data = await getCities(countryCode);\n if (active) {\n setCities(data);\n resetDistricts();\n resetWards();\n }\n } catch (error) {\n console.error('Failed to fetch cities:', error);\n if (active) {\n setCities([]);\n resetDistricts();\n resetWards();\n }\n }\n };\n\n fetchCities();\n return () => {\n active = false;\n };\n }, [countryCode, resetCities, resetDistricts, resetWards]);\n\n // Fetch districts based on cityCode\n useEffect(() => {\n let active = true;\n\n const fetchDistricts = async () => {\n if (!cityCode || cityCode.trim() === '') {\n resetDistricts();\n resetWards();\n return;\n }\n\n try {\n const data = await getDistricts(cityCode);\n if (active) {\n setDistricts(data);\n resetWards();\n }\n } catch (error) {\n console.error('Failed to fetch districts:', error);\n if (active) {\n setDistricts([]);\n resetWards();\n }\n }\n };\n\n fetchDistricts();\n return () => {\n active = false;\n };\n }, [cityCode, resetDistricts, resetWards]);\n\n useEffect(() => {\n let active = true;\n\n const fetchWards = async () => {\n if (!districtCode || districtCode.trim() === '') {\n resetWards();\n return;\n }\n\n try {\n const data = await getWards(districtCode);\n if (active) setWards(data);\n } catch (error) {\n console.error('Failed to fetch wards:', error);\n if (active) setWards([]);\n }\n };\n\n fetchWards();\n return () => {\n active = false;\n };\n }, [districtCode, resetWards]);\n\n useEffect(() => {\n let active = true;\n\n const fetchNewWards = async () => {\n if (!cityCode || cityCode.trim() === '') {\n resetNewWards();\n return;\n }\n\n try {\n const data = await getNewWards(cityCode);\n if (active) setNewWards(data);\n } catch (error) {\n console.error('Failed to fetch new wards:', error);\n if (active) setNewWards([]);\n }\n };\n\n fetchNewWards();\n return () => {\n active = false;\n };\n }, [cityCode, resetNewWards]);\n\n return {\n countries,\n cities,\n districts,\n wards,\n newCities,\n newWards,\n };\n};\n","import { useTranslation } from '@/hooks/use-translation';\nimport React from 'react';\nimport { useAddress } from '../hooks/use-address';\n\ninterface MerchantFormData {\n country: string;\n city: string;\n district: string;\n ward: string;\n address: string;\n}\n\ninterface AddressFieldsProps {\n formData: MerchantFormData;\n onInputChange: (field: keyof MerchantFormData, value: string) => void;\n errors?: Partial<Record<keyof MerchantFormData, string>>;\n lang?: 'vi' | 'en';\n}\n\nexport const AddressFields: React.FC<AddressFieldsProps> = ({\n formData,\n onInputChange,\n errors,\n lang = 'vi',\n}) => {\n const { translate } = useTranslation('form', lang);\n const { countries, newCities, newWards } = useAddress(\n formData.country,\n formData.city,\n formData.district,\n );\n\n const selects = [\n {\n label: 'country',\n name: 'country',\n value: formData.country,\n options: countries.map((item) => ({\n value: item.id ?? '',\n label: item.name,\n })),\n },\n {\n label: 'city',\n name: 'city',\n value: formData.city,\n options: newCities.map((item) => ({\n value: item.id ?? '',\n label: item.name,\n })),\n },\n {\n label: 'ward',\n name: 'ward',\n value: formData.ward,\n options: newWards.map((item) => ({\n value: item.id ?? '',\n label: item.name,\n })),\n },\n ];\n\n return (\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold font-inter leading-[18px] tracking-normal text-[#2C2C2C]\">\n {translate('address')}\n </h3>\n <div className=\"flex flex-col gap-2\">\n {selects.map((select) => (\n <div key={select.name} className=\"relative w-full\">\n <select\n value={select.value}\n onChange={(e) =>\n onInputChange(\n select.name as keyof MerchantFormData,\n e.target.value,\n )\n }\n className={`appearance-none w-full px-4 py-3 border ${\n errors?.[select.name as keyof MerchantFormData]\n ? 'border-red-500'\n : 'border-[#E4E7EC]'\n } rounded-[8px] focus:outline-none focus:ring-2 focus:ring-blue-500 text-[#6B7280] font-inter text-sm font-normal leading-[18px] tracking-normal hover:ring-2 hover:ring-blue-900`}\n >\n <option value=\"\">{translate(select.label)}</option>\n {(select.options || []).map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <div className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2\">\n <svg\n className=\"w-4 h-4 text-gray-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </div>\n {errors?.[select.name as keyof MerchantFormData] && (\n <p className=\"text-red-500 text-xs mt-1\">\n {errors[select.name as keyof MerchantFormData]}\n </p>\n )}\n </div>\n ))}\n </div>\n\n <input\n type=\"text\"\n value={formData.address}\n onChange={(e) => onInputChange('address', e.target.value)}\n placeholder={translate('street')}\n className={`w-full px-3 py-3 border hover:ring-2 hover:ring-blue-900 ${\n errors?.address ? 'border-red-500' : 'border-[#E4E7EC]'\n } rounded-md text-[#6B7280] font-inter text-sm font-normal leading-[18px] tracking-normal`}\n />\n {errors?.address && (\n <p className=\"text-red-500 text-xs mt-1\">{errors.address}</p>\n )}\n </div>\n );\n};\n","export default \"data:image/svg+xml,%3csvg%20width='27'%20height='26'%20viewBox='0%200%2027%2026'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M13.4526%209.28544L13.4526%2022.3027'%20stroke='%236B7280'%20stroke-width='0.810811'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M16.6055%2012.4497L13.453%209.2843L10.3006%2012.4497'%20stroke='%236B7280'%20stroke-width='0.810811'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M18.4618%2017.186H19.4704C21.6704%2017.186%2023.4531%2015.4033%2023.4531%2013.2023V7.92225C23.4531%205.72766%2021.6747%203.94928%2019.4802%203.94928L7.43691%203.94928C5.23691%203.94928%203.45312%205.73306%203.45312%207.93306V13.2141C3.45312%2015.4077%205.23258%2017.186%207.4261%2017.186H8.44447'%20stroke='%236B7280'%20stroke-width='0.810811'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='33'%20height='32'%20viewBox='0%200%2033%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_7893_9513)'%3e%3cg%20filter='url(%23filter0_di_7893_9513)'%3e%3cpath%20d='M24.8205%2032H8.82051C6.16954%2032%204.02051%2029.851%204.02051%2027.2V4.8C4.02051%202.14903%206.16954%200%208.8205%200H17.2323C18.5053%200%2019.7262%200.505712%2020.6264%201.40589L28.2146%208.99411C29.1148%209.89429%2029.6205%2011.1152%2029.6205%2012.3882V27.2C29.6205%2029.851%2027.4715%2032%2024.8205%2032Z'%20fill='white'/%3e%3cpath%20d='M8.82031%200.599609H17.2324C18.3463%200.599646%2019.4145%201.04248%2020.2021%201.83008L27.79%209.41797C28.5777%2010.2056%2029.0205%2011.2748%2029.0205%2012.3887V27.2002C29.0204%2029.5197%2027.1398%2031.4004%2024.8203%2031.4004H8.82031C6.50087%2031.4003%204.62022%2029.5196%204.62012%2027.2002V4.7998C4.62022%202.48036%206.50087%200.599713%208.82031%200.599609Z'%20stroke='%23E5E5E5'%20stroke-width='1.2'/%3e%3c/g%3e%3cpath%20d='M19.2207%200.800049V7.20005C19.2207%208.96736%2020.6534%2010.4%2022.4207%2010.4H28.8207'%20stroke='%23E5E5E5'%20stroke-width='1.2'/%3e%3cg%20filter='url(%23filter1_i_7893_9513)'%3e%3cmask%20id='path-4-inside-1_7893_9513'%20fill='white'%3e%3cpath%20d='M0.820312%2017.2C0.820312%2015.4327%202.253%2014%204.02031%2014H18.4203C20.1876%2014%2021.6203%2015.4327%2021.6203%2017.2V24C21.6203%2025.7673%2020.1876%2027.2%2018.4203%2027.2H4.02031C2.253%2027.2%200.820312%2025.7673%200.820312%2024V17.2Z'/%3e%3c/mask%3e%3cpath%20d='M0.820312%2017.2C0.820312%2015.4327%202.253%2014%204.02031%2014H18.4203C20.1876%2014%2021.6203%2015.4327%2021.6203%2017.2V24C21.6203%2025.7673%2020.1876%2027.2%2018.4203%2027.2H4.02031C2.253%2027.2%200.820312%2025.7673%200.820312%2024V17.2Z'%20fill='%23FB3748'/%3e%3cpath%20d='M0.0203125%2017.2C0.0203125%2014.9909%201.81117%2013.2%204.02031%2013.2H18.4203C20.6295%2013.2%2022.4203%2014.9909%2022.4203%2017.2L20.8203%2017.2C20.8203%2015.8745%2019.7458%2014.8%2018.4203%2014.8H4.02031C2.69483%2014.8%201.62031%2015.8745%201.62031%2017.2L0.0203125%2017.2ZM21.6203%2027.2H0.820312H21.6203ZM4.02031%2027.2C1.81117%2027.2%200.0203125%2025.4091%200.0203125%2023.2V17.2C0.0203125%2014.9909%201.81117%2013.2%204.02031%2013.2L4.02031%2014.8C2.69483%2014.8%201.62031%2015.8745%201.62031%2017.2V24C1.62031%2025.7673%202.69483%2027.2%204.02031%2027.2H4.02031ZM18.4203%2013.2C20.6295%2013.2%2022.4203%2014.9909%2022.4203%2017.2V23.2C22.4203%2025.4091%2020.6295%2027.2%2018.4203%2027.2H18.4203C19.7458%2027.2%2020.8203%2025.7673%2020.8203%2024V17.2C20.8203%2015.8745%2019.7458%2014.8%2018.4203%2014.8L18.4203%2013.2Z'%20fill='black'%20fill-opacity='0.08'%20mask='url(%23path-4-inside-1_7893_9513)'/%3e%3cpath%20d='M3.79457%2023.6001V17.7819H5.97639C6.42335%2017.7819%206.79835%2017.8652%207.10139%2018.0319C7.40631%2018.1986%207.63642%2018.4277%207.79173%2018.7194C7.94892%2019.0092%208.02752%2019.3387%208.02752%2019.7081C8.02752%2020.0812%207.94892%2020.4126%207.79173%2020.7024C7.63453%2020.9921%207.40252%2021.2204%207.0957%2021.387C6.78888%2021.5518%206.41104%2021.6342%205.96218%2021.6342H4.51616V20.7677H5.82014C6.0815%2020.7677%206.29551%2020.7223%206.46218%2020.6313C6.62885%2020.5404%206.75195%2020.4154%206.8315%2020.2563C6.91294%2020.0973%206.95366%2019.9145%206.95366%2019.7081C6.95366%2019.5016%206.91294%2019.3198%206.8315%2019.1626C6.75195%2019.0054%206.6279%2018.8832%206.45934%2018.7961C6.29267%2018.7071%206.07771%2018.6626%205.81445%2018.6626H4.84854V23.6001H3.79457ZM11.0746%2023.6001H9.103V17.7819H11.1144C11.692%2017.7819%2012.1882%2017.8984%2012.603%2018.1313C13.0197%2018.3624%2013.3397%2018.6948%2013.5632%2019.1285C13.7867%2019.5622%2013.8985%2020.0812%2013.8985%2020.6853C13.8985%2021.2914%2013.7858%2021.8122%2013.5604%2022.2478C13.3369%2022.6834%2013.014%2023.0177%2012.5916%2023.2507C12.1712%2023.4836%2011.6655%2023.6001%2011.0746%2023.6001ZM10.157%2022.6882H11.0235C11.4288%2022.6882%2011.7668%2022.6143%2012.0377%2022.4666C12.3085%2022.317%2012.5121%2022.0944%2012.6485%2021.799C12.7848%2021.5016%2012.853%2021.1304%2012.853%2020.6853C12.853%2020.2402%2012.7848%2019.8709%2012.6485%2019.5774C12.5121%2019.2819%2012.3104%2019.0613%2012.0433%2018.9154C11.7782%2018.7677%2011.4486%2018.6938%2011.0547%2018.6938H10.157V22.6882ZM15.0599%2023.6001V17.7819H18.7872V18.6654H16.1139V20.245H18.5315V21.1285H16.1139V23.6001H15.0599Z'%20fill='white'/%3e%3c/g%3e%3c/g%3e%3cdefs%3e%3cfilter%20id='filter0_di_7893_9513'%20x='2.42051'%20y='-3.2'%20width='28.7996'%20height='37.6'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeColorMatrix%20in='SourceAlpha'%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20127%200'%20result='hardAlpha'/%3e%3cfeOffset%20dy='0.8'/%3e%3cfeGaussianBlur%20stdDeviation='0.8'/%3e%3cfeComposite%20in2='hardAlpha'%20operator='out'/%3e%3cfeColorMatrix%20type='matrix'%20values='0%200%200%200%200.894118%200%200%200%200%200.898039%200%200%200%200%200.905882%200%200%200%200.24%200'/%3e%3cfeBlend%20mode='normal'%20in2='BackgroundImageFix'%20result='effect1_dropShadow_7893_9513'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='effect1_dropShadow_7893_9513'%20result='shape'/%3e%3cfeColorMatrix%20in='SourceAlpha'%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20127%200'%20result='hardAlpha'/%3e%3cfeOffset%20dy='-3.2'/%3e%3cfeGaussianBlur%20stdDeviation='1.6'/%3e%3cfeComposite%20in2='hardAlpha'%20operator='arithmetic'%20k2='-1'%20k3='1'/%3e%3cfeColorMatrix%20type='matrix'%20values='0%200%200%200%200.813571%200%200%200%200%200.82%200%200%200%200%200.826429%200%200%200%200.32%200'/%3e%3cfeBlend%20mode='normal'%20in2='shape'%20result='effect2_innerShadow_7893_9513'/%3e%3c/filter%3e%3cfilter%20id='filter1_i_7893_9513'%20x='0.820312'%20y='14'%20width='20.7998'%20height='16.4'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeColorMatrix%20in='SourceAlpha'%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20127%200'%20result='hardAlpha'/%3e%3cfeOffset%20dy='3.2'/%3e%3cfeGaussianBlur%20stdDeviation='1.6'/%3e%3cfeComposite%20in2='hardAlpha'%20operator='arithmetic'%20k2='-1'%20k3='1'/%3e%3cfeColorMatrix%20type='matrix'%20values='0%200%200%200%201%200%200%200%200%201%200%200%200%200%201%200%200%200%200.08%200'/%3e%3cfeBlend%20mode='normal'%20in2='shape'%20result='effect1_innerShadow_7893_9513'/%3e%3c/filter%3e%3cclipPath%20id='clip0_7893_9513'%3e%3crect%20width='32'%20height='32'%20fill='white'%20transform='translate(0.820312)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","import React, { useRef } from \"react\";\nimport { readLicense, type ILicenseData } from \"ocr-upload-reader\";\nimport DownloadIcon from \"../../assets/download.svg\";\nimport FileIcon from \"../../assets/file.svg\";\nimport { useTranslation } from \"@/hooks/use-translation\";\n\ninterface FileUploadProps {\n label: string;\n file: File | null;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: () => void;\n lang?: \"vi\" | \"en\";\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n label,\n file,\n onChange,\n onParsedData,\n onRemoveFile,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const inputId = label.replace(/\\s+/g, \"-\").toLowerCase();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n onChange(event);\n const selectedFile = event.target.files?.[0];\n if (selectedFile && onParsedData) {\n try {\n const result = await readLicense(selectedFile);\n console.log(\"📄 OCR Result:\", result);\n onParsedData(result);\n } catch (err) {\n console.error(\"❌ OCR Error:\", (err as Error).message);\n }\n }\n };\n\n const handleRemoveFile = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n\n if (onRemoveFile) {\n onRemoveFile();\n } else {\n const fakeEvent = {\n target: {\n files: null,\n value: \"\",\n },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(fakeEvent);\n }\n };\n\n const triggerInput = () => fileInputRef.current?.click();\n\n return (\n <div className=\"space-y-2 relative\">\n <label\n htmlFor={inputId}\n className=\"font-inter text-sm font-semibold text-[#2C2C2C] mb-1\"\n >\n {translate(label)} <span className=\"text-red-500\">*</span>\n </label>\n\n {file ? (\n <div className=\"relative flex items-center border border-gray-300 rounded-lg px-4 py-3 w-full max-w-[400px] mt-2 bg-gray-50\">\n <img\n src={FileIcon}\n alt={translate(\"uploaded_file\")}\n className=\"w-10 h-10\"\n />\n <div className=\"ml-4 text-left overflow-hidden\">\n <div className=\"text-sm font-medium text-gray-900 truncate\">\n {file.name}\n </div>\n <div className=\"text-xs text-gray-500\">\n {(file.size / 1024).toFixed(0)} KB\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={handleRemoveFile}\n className=\"absolute top-1 right-1 p-1 rounded hover:bg-red-100 transition-colors duration-200\"\n aria-label={translate(\"remove_file\")}\n title={translate(\"remove_file\")}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-4 h-4 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ) : (\n <div className=\"border-2 border-dashed border-gray-300 rounded-lg p-4 text-center hover:border-blue-400 transition-colors min-h-[140px] flex flex-col items-center justify-center space-y-2 mt-2\">\n <input\n id={inputId}\n type=\"file\"\n accept=\".pdf,.jpg,.jpeg,.png\"\n ref={fileInputRef}\n onChange={handleFileChange}\n className=\"hidden\"\n />\n\n <img\n src={DownloadIcon}\n alt={translate(\"upload_icon\")}\n className=\"w-6 h-6\"\n />\n\n <p className=\"text-sm font-medium text-gray-600\">\n {translate(\"upload_file\")}\n </p>\n <p className=\"text-xs text-gray-400\">\n {translate(\"file_format_info\")}\n </p>\n <button\n type=\"button\"\n onClick={triggerInput}\n className=\"mt-1 px-4 py-1 bg-[#1E2A7B] text-white rounded text-sm hover:bg-[#1a2470] hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n >\n {translate(\"upload_button\")}\n </button>\n </div>\n )}\n </div>\n );\n};\n","import portalAxiosClient from \"@/configs/portalAxiosClient\";\nimport { MCCOption } from \"../types/MCCList\";\n\nexport const getMCCList = async (): Promise<MCCOption[]> => {\n const { data } = await portalAxiosClient.get(\"/metadata/mcc\");\n return data.data;\n};\n","import { useState, useEffect, useRef } from \"react\";\nimport { MCCOption } from \"../types/MCCList\";\nimport { getMCCList } from \"../services/MCCList\";\n\nlet globalMCCCache: MCCOption[] | null = null;\nlet globalMCCPromise: Promise<MCCOption[]> | null = null;\n\nexport const useMCCList = () => {\n const [industries, setIndustries] = useState<MCCOption[]>([]);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const hasFetched = useRef(false);\n\n useEffect(() => {\n if (globalMCCCache) {\n setIndustries(globalMCCCache);\n setLoading(false);\n return;\n }\n\n if (globalMCCPromise) {\n globalMCCPromise\n .then((data) => {\n setIndustries(data);\n setLoading(false);\n })\n .catch((err) => {\n setError(\"Failed to load industries.\");\n setLoading(false);\n });\n return;\n }\n\n if (hasFetched.current) {\n return;\n }\n\n const fetchIndustries = async () => {\n try {\n globalMCCPromise = getMCCList();\n const mccList = await globalMCCPromise;\n\n globalMCCCache = mccList;\n\n setIndustries(mccList);\n } catch (err) {\n setError(\"Failed to load industries.\");\n console.error(\"Error fetching MCC list:\", err);\n } finally {\n setLoading(false);\n globalMCCPromise = null;\n }\n };\n\n hasFetched.current = true;\n fetchIndustries();\n }, []);\n\n return { industries, loading, error };\n};\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport React, { memo } from \"react\";\nimport { useMCCList } from \"../hooks/useMCCList\";\n\ninterface IndustrySelectProps {\n value: string;\n onChange: (value: string) => void;\n lang?: \"vi\" | \"en\";\n}\n\nconst IndustrySelect: React.FC<IndustrySelectProps> = memo(({\n value,\n onChange,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const { industries, loading, error } = useMCCList();\n\n const isDisabled = loading || Boolean(error);\n\n return (\n <div>\n <div>\n <label className=\"block text-sm font-semibold text-[#2C2C2C] mb-2\">\n {translate(\"industry\")}\n <span className=\"text-red-500 ml-1\">*</span>\n </label>\n \n <div className=\"relative\">\n <select\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className={`\n appearance-none w-full px-4 py-3 pr-10 border rounded-[8px] \n focus:outline-none focus:ring-2 focus:ring-blue-500 \n text-[#6B7280] font-inter text-sm font-normal leading-[18px] \n tracking-normal hover:ring-2 hover:ring-blue-900\n ${isDisabled ? 'bg-gray-100 cursor-not-allowed' : 'bg-white'}\n `}\n disabled={isDisabled}\n >\n <option value=\"\">\n {translate(\"select_industry\")}\n </option>\n {industries.map((industry) => (\n <option key={industry.code} value={industry.code}>\n {industry.name}\n </option>\n ))}\n </select>\n\n \n\n <div className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2\">\n <svg\n className=\"w-4 h-4 text-gray-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </div>\n </div>\n </div>\n \n {loading && (\n <div className=\"text-sm text-blue-500 mt-2\">\n {translate(\"loading_industries\")}\n </div>\n )}\n \n {error && (\n <div className=\"text-sm text-red-500 mt-2\">\n {error}\n </div>\n )}\n </div>\n );\n});\n\nIndustrySelect.displayName = 'IndustrySelect';\n\nexport default IndustrySelect;","import React from \"react\";\n\ninterface InputProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n type?: string;\n className?: string;\n isAutofilled?: boolean;\n labelClassname?: string;\n required?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n title?: string;\n style?: React.CSSProperties; \n}\n\nexport const Input: React.FC<InputProps> = ({\n label,\n value,\n onChange,\n placeholder,\n type = \"text\",\n className = \"\",\n isAutofilled = false,\n labelClassname = \"\",\n required = true,\n readOnly,\n disabled,\n title,\n style,\n}) => (\n <div className=\"space-y-1 min-w-[90px]\">\n <label\n className={`font-inter ${\n labelClassname ? labelClassname : \"font-semibold text-sm\"\n } leading-[18px] tracking-normal text-[#2C2C2C] mb-1`}\n >\n {label} {required ? <span className=\"text-red-500\">*</span> : \"\"}\n </label>\n\n <input\n type={type}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n readOnly={readOnly}\n disabled={disabled}\n title={title} // Thêm title prop\n style={style} // Thêm style prop\n className={`w-full h-[44px] px-3 py-[6px] border ${\n isAutofilled ? \"bg-gray-100\" : \"border-[#E4E7EC]\"\n } rounded-[8px] font-inter text-sm font-normal leading-[18px] tracking-normal text-[#2C2C2C]\n focus:outline-none ${\n readOnly\n ? \"cursor-not-allowed bg-gray-100\"\n : \"focus:ring-2 focus:ring-[#1E2A7B] hover:ring-2 hover:ring-blue-900\"\n }\n mt-2\n ${className}`}\n />\n\n {isAutofilled && (\n <p className=\"text-xs text-blue-500 italic mt-1 hover:ring-2 hover:ring-blue-900\">\n Đã tự động điền từ giấy tờ, bạn có thể chỉnh sửa nếu cần.\n </p>\n )}\n </div>\n);","import React from 'react';\nimport { AddressFields } from './AddressFields';\nimport { FileUpload } from './FileUpload';\nimport type { ILicenseData } from 'ocr-upload-reader';\nimport IndustrySelect from \"./IndustrySelect\";\nimport { useTranslation } from '@/hooks/use-translation';\nimport { Input } from '@/components/ui/input';\nimport { FormData } from '../types/formData';\n\ninterface UserTypeFormProps {\n formData: FormData;\n onInputChange: (field: keyof FormData, value: string) => void;\n businessLicenseFile: File | null;\n taxDocumentFile: File | null;\n onFileUpload: (\n type: \"businessLicense\" | \"taxDocument\",\n event: React.ChangeEvent<HTMLInputElement>\n ) => void;\n autofilledFields?: string[];\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: (type: \"businessLicense\" | \"taxDocument\") => void;\n errors?: Partial<Record<keyof FormData, string>>;\n fileErrors?: {\n businessLicense?: string;\n taxDocument?: string;\n };\n lang?: \"vi\" | \"en\";\n}\n\nexport const UserTypeForm: React.FC<UserTypeFormProps> = ({\n formData,\n onInputChange,\n businessLicenseFile,\n taxDocumentFile,\n onFileUpload,\n autofilledFields = [],\n onParsedData,\n onRemoveFile,\n errors,\n fileErrors,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n\n const isAutofilled = (field: keyof FormData) =>\n autofilledFields.includes(field);\n\n const renderInput = (\n label: string,\n field: keyof FormData,\n options: { isAuto?: boolean } = {}\n ) => {\n if (field === \"businessLicense\" || field === \"taxLicense\") return null;\n\n const value = formData[field];\n if (typeof value !== \"string\") return null; // Ensure type safety\n\n return (\n <div>\n <Input\n label={translate(label)}\n value={value}\n onChange={(v) => onInputChange(field, v)}\n />\n {errors?.[field] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[field]}</p>\n )}\n </div>\n );\n };\n\n\n const renderFileUpload = (\n label: string,\n type: \"businessLicense\" | \"taxDocument\",\n file: File | null\n ) => (\n <div>\n <FileUpload\n label={translate(label)}\n file={file}\n onChange={(e) => onFileUpload(type, e)}\n onParsedData={onParsedData}\n onRemoveFile={() => onRemoveFile?.(type)}\n lang={lang}\n />\n {type === \"businessLicense\" && fileErrors?.businessLicense && (\n <p className=\"text-red-500 text-xs mt-1\">\n {fileErrors.businessLicense}\n </p>\n )}\n {type === \"taxDocument\" && fileErrors?.taxDocument && (\n <p className=\"text-red-500 text-xs mt-1\">{fileErrors.taxDocument}</p>\n )}\n </div>\n );\n\n const renderIndividualForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"full_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n </div>\n <div className=\"space-y-4\">\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n {renderInput(\"referral_code\", \"referralCode\")}\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n lang={lang}\n />\n </div>\n </div>\n );\n\n const renderBusinessForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"household_business_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n lang={lang}\n />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\"referral_code\", \"referralCode\")}\n {formData.userType !== \"individual\" && renderFileUpload(\"business_license\", \"businessLicense\", businessLicenseFile)}\n {formData.userType !== \"individual\" && renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n\n const renderEnterpriseForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"enterprise_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n {renderInput(\"representative\", \"representative\", { isAuto: true })}\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n lang={lang}\n />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\n \"business_registration_number\",\n \"business_registration_number\",\n { isAuto: true }\n )}\n {renderInput(\"referral_code\", \"referralCode\")}\n {renderFileUpload(\n \"business_license\",\n \"businessLicense\",\n businessLicenseFile\n )}\n {renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n switch (formData.userType) {\n case \"individual\":\n return renderIndividualForm();\n case \"business\":\n return renderBusinessForm();\n case \"enterprise\":\n return renderEnterpriseForm();\n default:\n return null;\n }\n};\n","export default \"data:image/svg+xml,%3csvg%20width='120'%20height='120'%20viewBox='0%200%20120%20120'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3crect%20width='120'%20height='120'%20fill='url(%23pattern0_7876_126934)'/%3e%3cdefs%3e%3cpattern%20id='pattern0_7876_126934'%20patternContentUnits='objectBoundingBox'%20width='1'%20height='1'%3e%3cuse%20xlink:href='%23image0_7876_126934'%20transform='scale(0.002)'/%3e%3c/pattern%3e%3cimage%20id='image0_7876_126934'%20width='500'%20height='500'%20preserveAspectRatio='none'%20xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAAAXNSR0IArs4c6QAAIABJREFUeF7svQuUJFd55/mPiMzIrHdVd0stqdWi9aAlhIxADfiJHojdGR5eBHY3Y7zHXo4fGssrmPWcZdcgzfQZw3q99uJHj/GgsWfBHmPc2rU9M17t2IvUQsCsEciikZBR00KNultSP6vrmZmREXH33IiMrKiqzMqIyIjIePzj6Jwsdd64j993I/753fvdexXwIgESIAESIAESyD0BJfctYANIgARIgARIgARAQWcnIAESIAESIIECEKCgF8CIbAIJkAAJkAAJUNDZB0iABEiABEigAAQo6AUwIptAAiRAAiRAAhR09gESIAESIAESKAABCnoBjMgmkAAJkAAJkAAFnX2ABEiABEiABApAgIJeACOyCSRAAiRAAiRAQWcfIAESIAESIIECEKCgF8CIbAIJkAAJkAAJUNDZB0iABEiABEigAAQo6AUwIptAAiRAAiRAAhR09gESIAESIAESKAABCnoBjMgmkAAJkAAJkAAFnX2ABEiABEiABApAgIJeACOyCSRAAiRAAiRAQWcfIAESIAESIIECEKCgF8CIbAIJkAAJkAAJUNDZB0iABEiABEigAAQo6AUwIptAAiRAAiRAAhR09gESIAESIAESKAABCnoBjMgmkAAJkAAJkAAFnX2ABEiABEiABApAgIJeACOyCSRAAiRAAiRAQWcfIAESIAESIIECEKCgF8CIbAIJkAAJkAAJUNDZB0iABEiABEigAAQo6AUwIptAAiRAAiRAAhR09gESIAESIAESKAABCnoBjMgmJEFAiAOHPonD9z/AZyQJvMyTBEggdgJ8WcWOlBkWgsD+w+LA7cdw+Im9bnMePsBnpRCGZSNIoLgE+JIqrm3ZssgEhDj0hQ/iswtTuG5uHsqZWx1hdwSeHntkqryRBEggWQIU9GT5MvfcERDitx99Gz59epdT8+nGTLcF1xvXuB47vfXcWZUVJoEyEKCgl8HKbGNgAgcOfUK8oL+ExbEFtK0x6NUWapoCfXHSyaMr6hyGD8yUCUmABNIhQEFPhzNLyQUBIfYfPoBvNlUo1QoUvQoIASEE0GrDaNew3dDXDcPTW8+FYVlJEigFAQp6KczMRgYh4PfO9bEJtFUbiveE2AKK1UbVxiZvnXPrQegy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'/%3e%3c/defs%3e%3c/svg%3e\"","import { useTranslation } from \"@/hooks/use-translation\";\nimport React from \"react\";\n\ninterface MerchantHeaderProps {\n title?: string;\n subtitle?: string;\n statusLabel?: string;\n statusType?: \"draft\" | \"pending\" | \"approved\" | \"rejected\";\n lang?: \"vi\" | \"en\";\n}\n\nconst statusStyleMap = {\n draft: \"text-gray-800 bg-gray-200 border border-gray-400\",\n pending: \"text-yellow-600 bg-yellow-50 border border-yellow-400\",\n approved: \"text-green-600 bg-green-50 border border-green-400\",\n rejected: \"text-red-600 bg-red-50 border border-red-400\",\n};\n\nexport default function MerchantHeader({\n title = \"add_new_profile\",\n subtitle,\n statusLabel,\n statusType,\n lang = \"vi\",\n}: MerchantHeaderProps) {\n const { translate } = useTranslation(\"form\", lang);\n const statusClass = statusType ? statusStyleMap[statusType] : \"\";\n\n return (\n <div className=\"flex justify-between items-start py-4\">\n <div>\n <p className=\"uppercase text-sm font-medium text-[#1E2A7B]\">\n {translate(\"merchant_profile\")}\n </p>\n <div className=\"flex items-center mt-1 space-x-2 justify-center\">\n <h1 className=\"text-2xl font-bold text-[#2C2C2C]\">\n {translate(title)}\n </h1>\n {subtitle && (\n <span className=\"text-sm text-[#475467]\">\n | {translate(subtitle)}\n </span>\n )}\n </div>\n </div>\n\n {statusLabel && (\n <span\n className={`rounded-full px-6 py-2 text-sm font-bold ${statusClass}`}\n >\n {translate(statusLabel)}\n </span>\n )}\n </div>\n );\n}\n","import type { ILicenseData } from 'ocr-upload-reader';\n\nexport const mapLicenseData = (data: ILicenseData) => {\n return {\n organization: {\n name: data.organization?.name || '',\n address: data.organization?.address || '',\n taxCode: data.organization?.tax_code || '',\n taxAuthority: data.organization?.tax_authority || '',\n },\n contactPerson: {\n name: data.contactPerson?.name || '',\n address: data.contactPerson?.address || '',\n email: data.contactPerson?.email || '',\n phone: data.contactPerson?.phone_number || '',\n },\n legalRepresentative: {\n name: data.legalRepresentative?.name || '',\n dob: data.legalRepresentative?.dob || '',\n gender: data.legalRepresentative?.gender || '',\n phone: data.legalRepresentative?.phone || '',\n idCard: data.legalRepresentative?.id_card || '',\n passportNumber: data.legalRepresentative?.passport_number || '',\n nationality: data.legalRepresentative?.nationality || '',\n permanentAddress: data.legalRepresentative?.permanent_address || '',\n },\n };\n};\n","import { useEffect, useRef } from 'react';\nimport { useTranslation } from '../../hooks/use-translation';\n\ninterface ConfirmModalProps {\n open: boolean;\n title: string;\n description: string;\n onConfirm: () => void;\n onCancel: () => void;\n lang?: 'vi' | 'en';\n}\n\nexport const ConfirmModal = ({\n open,\n title,\n description,\n onConfirm,\n onCancel,\n lang = 'vi',\n}: ConfirmModalProps) => {\n const modalRef = useRef<HTMLDivElement>(null);\n const { translate } = useTranslation('form', lang);\n\n useEffect(() => {\n if (!open) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onCancel();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [open, onCancel]);\n\n if (!open) {\n return null;\n }\n\n return (\n <div className='fixed inset-0 bg-black/30 backdrop-blur-sm z-40 flex items-center justify-center'>\n <div\n ref={modalRef}\n role='dialog'\n aria-modal='true'\n aria-labelledby='modal-title'\n aria-describedby='modal-description'\n className='w-full max-w-md bg-white rounded-xl p-6 shadow-xl z-50 space-y-4'\n >\n <h2 id='modal-title' className='text-lg font-semibold text-gray-800'>\n {title}\n </h2>\n <p id='modal-description' className='text-sm text-gray-600'>\n {description}\n </p>\n <div className='flex justify-end gap-2 mt-4'>\n <button\n onClick={onCancel}\n className='px-4 py-2 rounded-md bg-gray-200 text-gray-700 hover:bg-gray-300 hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl'\n >\n {translate('no')}\n </button>\n <button\n onClick={onConfirm}\n className='px-4 py-2 rounded-md bg-[#1E2A7B] text-white hover:bg-[#293a70] hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl'\n >\n {translate('yes')}\n </button>\n </div>\n </div>\n </div>\n );\n};\n","import { useTranslation } from \"../../hooks/use-translation\";\nimport React from \"react\";\n\ninterface ErrorModalProps {\n message: string;\n onClose: () => void;\n lang?: \"vi\" | \"en\";\n}\n\nconst ErrorModal: React.FC<ErrorModalProps> = ({\n message,\n onClose,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n return (\n <div className=\"fixed inset-0 bg-black bg-opacity-40 backdrop-blur-sm flex justify-center items-center z-50 p-4\">\n <div className=\"bg-white rounded-2xl shadow-2xl max-w-md w-full transform \">\n {/* Header với icon */}\n <div className=\"flex items-center justify-center pt-8 pb-4\">\n <div className=\"w-16 h-16 bg-red-100 rounded-full flex items-center justify-center\">\n <svg\n className=\"w-8 h-8 text-red-600\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\"\n />\n </svg>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"px-8 pb-6\">\n <h2 className=\"text-2xl font-bold text-gray-900 text-center mb-4\">\n {translate(\"error_occur\")}\n </h2>\n <p className=\"text-gray-600 text-center leading-relaxed\">{message}</p>\n </div>\n\n {/* Actions */}\n <div className=\"px-8 pb-8\">\n <button\n onClick={onClose}\n className=\"w-full py-3 px-6 bg-[#1F2B7B] text-white font-semibold rounded transform hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n >\n {translate(\"close\")}\n </button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ErrorModal;\n","import { useTranslation } from \"../../hooks/use-translation\";\nimport React from \"react\";\n\ninterface SuccessModalToastProps {\n onClose: () => void;\n imageSrc: string;\n lang?: \"vi\" | \"en\";\n}\n\nconst SuccessModalToast: React.FC<SuccessModalToastProps> = ({\n onClose,\n imageSrc,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n return (\n <div className=\"fixed inset-0 bg-black bg-opacity-30 flex items-center justify-center z-50\">\n <div className=\"bg-white rounded-2xl w-[400px] p-6 text-center relative shadow-lg\">\n <button\n className=\"absolute top-4 right-4 text-gray-500 hover:text-gray-700\"\n onClick={onClose}\n aria-label=\"Đóng\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n\n <img\n src={imageSrc}\n alt=\"success\"\n className=\"mx-auto w-[120px] h-[120px] mb-4\"\n />\n\n <h2 className=\"text-xl font-semibold text-[#0A203D] mb-1\">\n {translate(\"success_announcement\")}\n </h2>\n <p className=\"text-sm text-[#0A203D] mb-6\">{translate(\"success_form\")}</p>\n\n <button\n onClick={onClose}\n className=\"bg-[#1F2B7B] text-white text-sm rounded w-[342px] h-[44px] px-8 py-3 hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n >\n {translate(\"done\")}\n </button>\n </div>\n </div>\n );\n};\n\nexport default SuccessModalToast;\n","export function toFormData(obj: Record<string, any>): FormData {\n const formData = new FormData();\n\n Object.keys(obj).forEach((key) => {\n const value = obj[key];\n\n if (value instanceof File) {\n formData.append(key, value);\n }\n\n else if (Array.isArray(value)) {\n value.forEach((v, i) => {\n formData.append(`${key}[${i}]`, v);\n });\n }\n\n else if (value !== undefined && value !== null) {\n formData.append(key, value.toString());\n }\n });\n\n return formData;\n}\n","import portalAxiosClient from \"@/configs/portalAxiosClient\";\nimport { toFormData } from \"@/utils/form\";\nimport { CreateMerchantPayload } from \"../types/formData\";\n\nexport async function createMerchant(\n data: CreateMerchantPayload,\n accessToken?: string\n): Promise<{ success: boolean; message: string }> {\n try {\n const formData = toFormData(data);\n console.log(\"Form Data raw: \", data);\n console.log(\"Form Data: \", formData);\n\n const customHeaders: Record<string, string> = {\n \"Content-Type\": \"multipart/form-data\",\n };\n\n if (accessToken) {\n customHeaders[\"Authorization\"] = `Bearer ${accessToken}`;\n }\n\n const res = await portalAxiosClient.post(\n \"/master-merchant/merchant\",\n formData,\n {\n headers: customHeaders,\n }\n );\n\n console.log(\"API Response:\", res.data);\n\n return res.data.data;\n } catch (error: any) {\n console.error(\"Service error:\", error);\n\n throw error;\n }\n}\n","import { useState, useCallback } from \"react\";\nimport type { CreateMerchantPayload } from \"../types/formData\";\nimport { createMerchant } from \"../services/merchantFormService\";\n\ninterface ApiError {\n message: string;\n code?: string;\n details?: any;\n field_errors?: Record<string, string[]>;\n}\n\ninterface UseCreateMerchantResult {\n submit: (\n payload: CreateMerchantPayload,\n accessToken?: string\n ) => Promise<{ success: boolean; message: string }>;\n loading: boolean;\n error: string | null;\n errorDetails: ApiError | null;\n success: boolean;\n reset: () => void;\n}\n\nexport function useCreateMerchant(): UseCreateMerchantResult {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [errorDetails, setErrorDetails] = useState<ApiError | null>(null);\n const [success, setSuccess] = useState(false);\n\n const submit = useCallback(\n async (\n payload: CreateMerchantPayload,\n accessToken?: string\n ): Promise<{ success: boolean; message: string }> => {\n setLoading(true);\n setError(null);\n setErrorDetails(null);\n setSuccess(false);\n\n const filteredPayload = Object.fromEntries(\n Object.entries(payload).filter(([_, value]) => value != null)\n );\n\n try {\n const res = await createMerchant(\n filteredPayload as CreateMerchantPayload,\n accessToken\n );\n if (!res?.success) {\n throw new Error(res?.message || \"Gửi dữ liệu thất bại\");\n }\n setSuccess(true);\n return res;\n } catch (err: any) {\n console.error(\"Lỗi đầy đủ:\", err);\n\n let errorMessage = \"Đã xảy ra lỗi không xác định\";\n let details: ApiError | null = null;\n\n if (err?.response) {\n console.error(\"Phản hồi lỗi:\", err.response);\n console.error(\"Dữ liệu phản hồi lỗi:\", err.response.data);\n console.error(\"Trạng thái phản hồi lỗi:\", err.response.status);\n console.error(\"Headers phản hồi lỗi:\", err.response.headers);\n\n const responseData = err.response.data;\n\n details = {\n message: responseData?.message || responseData?.error || \"Lỗi API\",\n code: responseData?.code || responseData?.error_code,\n details: responseData?.details,\n field_errors: responseData?.field_errors || responseData?.errors,\n };\n\n errorMessage =\n responseData?.message ||\n responseData?.error ||\n responseData?.detail ||\n `HTTP ${err.response.status}: ${err.response.statusText}`;\n\n if (responseData?.field_errors || responseData?.errors) {\n const fieldErrors =\n responseData.field_errors || responseData.errors;\n const fieldErrorMessages = Object.entries(fieldErrors)\n .map(\n ([field, errors]) =>\n `${field}: ${\n Array.isArray(errors) ? errors.join(\", \") : errors\n }`\n )\n .join(\"; \");\n\n if (fieldErrorMessages) {\n errorMessage = `Lỗi xác thực dữ liệu: ${fieldErrorMessages}`;\n }\n }\n } else if (err?.request) {\n console.error(\"Lỗi mạng:\", err.request);\n errorMessage =\n \"Lỗi kết nối mạng. Vui lòng kiểm tra kết nối internet.\";\n details = {\n message: \"Lỗi mạng\",\n code: \"NETWORK_ERROR\",\n };\n } else {\n console.error(\"Lỗi khác:\", err);\n errorMessage = err?.message || \"Đã xảy ra lỗi không xác định\";\n details = {\n message: err?.message || \"Lỗi không xác định\",\n code: \"UNKNOWN_ERROR\",\n };\n }\n\n setError(errorMessage);\n setErrorDetails(details);\n throw new Error(errorMessage);\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const reset = () => {\n setError(null);\n setErrorDetails(null);\n setSuccess(false);\n setLoading(false);\n };\n\n return {\n submit,\n loading,\n error,\n errorDetails,\n success,\n reset,\n };\n}\n","import React, { useEffect, useState } from 'react';\nimport { readLicense } from 'ocr-upload-reader';\nimport { UserTypeForm } from './UserTypeForm';\nimport DefaultSuccessIcon from '../../assets/success.svg';\nimport MerchantHeader from './Header';\nimport { useTranslation } from '@/hooks/use-translation';\nimport { mapLicenseData } from '@/utils/mapLicenseData';\nimport { ConfirmModal } from '@/components/ui/confirmModal';\nimport Button from '@/components/ui/button';\nimport ErrorModal from '@/components/ui/error-modal';\nimport SuccessModalToast from '@/components/ui/success-modal';\nimport { FormData } from '../types/formData';\nimport { useCreateMerchant } from '../hooks/use-create-merchant';\nimport usePortalApiConfig from '@/shared/store/use-portal-api-config.store';\n\ninterface SubmitPayload {\n entity_type: 'PERSON' | 'BUSINESS_HOUSEHOLD' | 'ENTERPRISE';\n tax_code: string;\n full_name: string;\n brand_name?: string;\n phone_number: string;\n business_registration_number?: string;\n email: string;\n referral_code?: string;\n industry: string;\n representative_name: string;\n country: string;\n city: string;\n district: string;\n ward: string;\n street_address: string;\n business_license: File | null;\n tax_license: File | null;\n merchant_id?: string;\n}\n\ninterface MerchantRegistrationFormProps {\n accessToken?: string;\n onClose?: () => void;\n onSubmit?: (data: SubmitPayload) => Promise<void>;\n onSuccess?: (data?: SubmitPayload) => void;\n onError?: (err: Error) => void;\n defaultValues?: Partial<FormData>;\n successIconSrc?: string;\n className?: string;\n merchantId?: string;\n isHeader?: boolean;\n lang?: 'vi' | 'en';\n}\n\nconst defaultFormData: FormData = {\n userType: 'business',\n phoneNumberSecond: '',\n businessName: '',\n email: '',\n branchName: '',\n taxLicense: null,\n businessLicense: null,\n taxCode: '',\n industry: '',\n representative: '',\n country: '',\n city: '',\n district: '',\n ward: '',\n address: '',\n referralCode: '',\n business_registration_number: '',\n};\n\nconst ConfirmSource = {\n Business: 'business',\n Tax: 'tax',\n} as const;\n\ntype ConfirmSource = (typeof ConfirmSource)[keyof typeof ConfirmSource];\n\nconst DOCUMENT_CONFIGS = {\n [ConfirmSource.Business]: {\n successMsg: 'business_license_success_msg',\n errorMsg: 'business_license_error_msg',\n emptyDataMsg: 'business_license_empty_data_msg',\n modalTitle: 'business_license_overwrite_modal_title',\n },\n [ConfirmSource.Tax]: {\n successMsg: 'tax_document_success_msg',\n errorMsg: 'tax_document_error_msg',\n emptyDataMsg: 'tax_document_empty_data_msg',\n modalTitle: 'tax_document_overwrite_modal_title',\n },\n};\n\nexport const MerchantRegistrationForm: React.FC<\n MerchantRegistrationFormProps\n> = ({\n accessToken,\n onClose,\n onSubmit,\n onSuccess,\n onError,\n defaultValues = {},\n successIconSrc,\n className = '',\n merchantId,\n isHeader = true,\n lang = 'vi',\n}) => {\n const { translate } = useTranslation('form', lang);\n const [formData, setFormData] = useState<FormData>({\n ...defaultFormData,\n ...defaultValues,\n });\n const [autofilledFields, setAutofilledFields] = useState<string[]>([]);\n const [businessLicenseFile, setBusinessLicenseFile] = useState<File | null>(\n null,\n );\n const [taxDocumentFile, setTaxDocumentFile] = useState<File | null>(null);\n const [touchedFields, setTouchedFields] = useState<string[]>([]);\n const [showConfirm, setShowConfirm] = useState(false);\n const [confirmSource, setConfirmSource] = useState<ConfirmSource | null>(\n null,\n );\n const [pendingOverwriteFields, setPendingOverwriteFields] = useState<\n Partial<FormData>\n >({});\n const [errors, setErrors] = useState<Partial<Record<keyof FormData, string>>>(\n {},\n );\n const [fileErrors, setFileErrors] = useState<{\n businessLicense?: string;\n taxDocument?: string;\n }>({});\n const [showSuccessModal, setShowSuccessModal] = useState(false);\n const [showErrorModal, setShowErrorModal] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const { submit: createMerchant } = useCreateMerchant();\n\n // Sync accessToken vào store mỗi khi prop thay đổi\n useEffect(() => {\n if (accessToken) {\n usePortalApiConfig.setState({ accessToken });\n }\n }, [accessToken]);\n\n const generateRandomData = (): Partial<FormData> => {\n const characters =\n 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n const referralCode = Array.from({ length: 8 })\n .map(() =>\n characters.charAt(Math.floor(Math.random() * characters.length)),\n )\n .join('');\n return { referralCode };\n };\n\n useEffect(() => {\n const randomData = generateRandomData();\n setFormData((prev) => ({ ...prev, ...randomData }));\n setAutofilledFields(Object.keys(randomData));\n }, []);\n\n const handleInputChange = (field: keyof FormData, value: string) => {\n setFormData((prev) => {\n const next = { ...prev, [field]: value || '' };\n if (field === 'country') {\n next.city = '';\n next.district = '';\n next.ward = '';\n } else if (field === 'city') {\n next.district = '';\n next.ward = '';\n } else if (field === 'district') {\n next.ward = '';\n }\n return next;\n });\n\n setErrors((prev) => {\n const copy = { ...prev };\n delete copy[field];\n return copy;\n });\n\n if (!touchedFields.includes(field)) {\n setTouchedFields((prev) => [...prev, field]);\n }\n\n if (autofilledFields.includes(field)) {\n setAutofilledFields((prev) => prev.filter((f) => f !== field));\n }\n };\n\n const validateField = (\n field: keyof FormData,\n value: string,\n ): string | null => {\n const trimmed = value.trim();\n if (!trimmed) return translate('required_field_error');\n if (field === 'email' && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(trimmed)) {\n return translate('invalid_email_error');\n }\n if (field === 'phoneNumberSecond' && !/^[0-9]{9,11}$/.test(trimmed)) {\n return translate('invalid_phone_number_error');\n }\n return null;\n };\n\n const validateForm = (): boolean => {\n const newErrors: Partial<Record<keyof FormData, string>> = {};\n const fileErrs: typeof fileErrors = {};\n\n const requiredFields: (keyof FormData)[] = [\n 'taxCode',\n 'businessName',\n 'phoneNumberSecond',\n 'email',\n 'industry',\n 'country',\n 'city',\n 'district',\n 'ward',\n 'address',\n ];\n\n if (\n formData.userType === 'business' ||\n formData.userType === 'enterprise'\n ) {\n requiredFields.push('branchName');\n }\n if (formData.userType === 'enterprise') {\n requiredFields.push('representative');\n }\n\n requiredFields.forEach((field) => {\n const error = validateField(field, formData[field] || '');\n if (error) newErrors[field] = error;\n });\n\n if (formData.userType !== 'individual') {\n if (!businessLicenseFile) {\n fileErrs.businessLicense = translate('business_license_required_error');\n }\n if (!taxDocumentFile) {\n fileErrs.taxDocument = translate('tax_document_required_error');\n }\n }\n\n setErrors(newErrors);\n setFileErrors(fileErrs);\n\n return (\n Object.keys(newErrors).length === 0 && Object.keys(fileErrs).length === 0\n );\n };\n\n const getFilledFields = (data: Partial<FormData>) =>\n Object.entries(data)\n .filter(([_, v]) => !!v)\n .map(([k]) => k);\n\n const handleOverwriteConfirm = () => {\n setFormData((prev) => ({ ...prev, ...pendingOverwriteFields }));\n setAutofilledFields(getFilledFields(pendingOverwriteFields));\n console.log(translate(DOCUMENT_CONFIGS[confirmSource!].successMsg));\n setShowConfirm(false);\n setPendingOverwriteFields({});\n };\n\n const processOCR = async (file: File, source: ConfirmSource) => {\n try {\n const rawData = await readLicense(file);\n const parsed = mapLicenseData(rawData);\n const extractedFields: Partial<FormData> = {\n businessName: parsed.organization.name,\n taxCode: parsed.organization.taxCode,\n address: parsed.organization.address,\n email: parsed.contactPerson.email,\n phoneNumberSecond: parsed.contactPerson.phone,\n representative: parsed.legalRepresentative.name,\n };\n const filled = getFilledFields(extractedFields);\n if (filled.length === 0)\n return alert(DOCUMENT_CONFIGS[source].emptyDataMsg);\n\n const hasExistingData = filled.some((key) => {\n const formValue = formData[key as keyof FormData];\n const extractedValue = extractedFields[key as keyof FormData];\n return formValue && formValue !== extractedValue;\n });\n\n if (hasExistingData) {\n setConfirmSource(source);\n setPendingOverwriteFields(extractedFields);\n setShowConfirm(true);\n } else {\n setFormData((prev) => ({ ...prev, ...extractedFields }));\n setAutofilledFields(filled);\n console.log(translate(DOCUMENT_CONFIGS[source].successMsg));\n }\n } catch (err) {\n console.error('OCR error:', err);\n alert(translate(DOCUMENT_CONFIGS[source].errorMsg));\n }\n };\n\n const handleFileUpload = async (\n type: 'businessLicense' | 'taxDocument',\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const file = event.target.files?.[0] || undefined;\n if (!file) {\n setFileErrors((prev) => ({ ...prev, [type]: undefined }));\n return;\n }\n\n type === 'businessLicense'\n ? setBusinessLicenseFile(file)\n : setTaxDocumentFile(file);\n\n const source =\n type === 'businessLicense' ? ConfirmSource.Business : ConfirmSource.Tax;\n await processOCR(file, source);\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n const isValid = validateForm();\n if (!isValid) {\n setErrorMessage(translate('form_validation_error'));\n setShowErrorModal(true);\n return;\n }\n\n if (\n formData.userType === 'enterprise' &&\n !formData.business_registration_number\n ) {\n setErrorMessage(translate('business_registration_number_required'));\n setShowErrorModal(true);\n return;\n }\n\n const requiresFiles = ['business', 'enterprise'].includes(\n formData.userType,\n );\n if (requiresFiles && (!businessLicenseFile || !taxDocumentFile)) {\n setErrorMessage(translate('file_upload_required_error'));\n setShowErrorModal(true);\n return;\n }\n\n const payload: SubmitPayload = {\n entity_type:\n formData.userType === 'individual'\n ? 'PERSON'\n : formData.userType === 'business'\n ? 'BUSINESS_HOUSEHOLD'\n : 'ENTERPRISE',\n tax_code: formData.taxCode,\n full_name: formData.businessName,\n brand_name:\n formData.userType !== 'individual' ? formData.branchName : undefined,\n phone_number: formData.phoneNumberSecond,\n business_registration_number:\n formData.userType === 'enterprise'\n ? formData.business_registration_number\n : undefined,\n email: formData.email,\n referral_code: formData.referralCode,\n industry: formData.industry,\n representative_name: formData.representative,\n country: formData.country,\n city: formData.city,\n district: formData.district,\n ward: formData.ward,\n street_address: formData.address,\n business_license:\n formData.userType === 'individual' ? null : businessLicenseFile,\n tax_license: formData.userType === 'individual' ? null : taxDocumentFile,\n ...(merchantId && { merchant_id: merchantId }),\n };\n\n try {\n const res = await createMerchant(payload, accessToken);\n if (res.success) {\n setShowSuccessModal(true);\n onSuccess?.(payload);\n }\n } catch (err) {\n console.error('Submit error details:', { error: err });\n setErrorMessage(translate('submit_error'));\n setShowErrorModal(true);\n onError?.(err as Error);\n }\n };\n\n return (\n <div>\n <div>\n {isHeader ? (\n <MerchantHeader\n title=\"profile_detail\"\n subtitle=\"profile_list\"\n statusLabel=\"draft\"\n statusType=\"draft\"\n lang={lang}\n />\n ) : null}\n </div>\n <div\n className={`bg-white mx-auto px-8 py-6 rounded-xl overflow-y-auto ${className}`}\n >\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium Hawkins-medium text-[#2C2C2C]\">\n {translate('object')} <span className=\"text-red-500\">*</span>\n </label>\n <div className=\"grid grid-cols-3 gap-4\">\n {[\n { value: 'individual', label: translate('individual') },\n { value: 'business', label: translate('household') },\n { value: 'enterprise', label: translate('business') },\n ].map((option) => (\n <label\n key={option.value}\n className={`flex items-center space-x-2 p-3 border rounded-[12px] cursor-pointer hover:ring-2 hover:ring-blue-900 ${\n formData.userType === option.value\n ? 'border-[#1E2A7B]'\n : 'border-[#E3E3E3]'\n }`}\n >\n <input\n type=\"radio\"\n name=\"userType\"\n value={option.value}\n checked={formData.userType === option.value}\n onChange={(e) =>\n handleInputChange(\n 'userType',\n e.target.value as FormData['userType'],\n )\n }\n className=\"w-4 h-4 text-blue-600\"\n />\n <span className=\"text-sm text-[#2C2C2C]\">{option.label}</span>\n </label>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"text-sm font-medium mb-2\">\n {translate('merchant_info')}\n </h3>\n <div className=\"min-h-[80px] p-4 border border-gray-300 rounded-md text-sm text-[#2C2C2C]\">\n {translate('merchant_info_description')}\n </div>\n </div>\n\n <UserTypeForm\n formData={formData}\n onInputChange={handleInputChange}\n businessLicenseFile={businessLicenseFile}\n taxDocumentFile={taxDocumentFile}\n onFileUpload={handleFileUpload}\n autofilledFields={autofilledFields}\n onRemoveFile={(type) => {\n if (type === 'businessLicense') {\n setBusinessLicenseFile(null);\n setFileErrors((prev) => ({\n ...prev,\n businessLicense: undefined,\n }));\n } else {\n setTaxDocumentFile(null);\n setFileErrors((prev) => ({ ...prev, taxDocument: undefined }));\n }\n }}\n errors={errors}\n fileErrors={fileErrors}\n lang={lang}\n />\n\n <div className=\"flex justify-end\">\n <Button\n type=\"submit\"\n className=\"text-[#00BAEE] hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n >\n {translate('submit_profile')}\n </Button>\n </div>\n </form>\n\n <ConfirmModal\n open={showConfirm}\n lang={lang}\n title={\n confirmSource\n ? translate(DOCUMENT_CONFIGS[confirmSource].modalTitle)\n : translate('overwrite_data')\n }\n description={translate('overwrite_data_description')}\n onConfirm={handleOverwriteConfirm}\n onCancel={() => setShowConfirm(false)}\n />\n\n {showSuccessModal && (\n <SuccessModalToast\n lang={lang}\n onClose={() => {\n setShowSuccessModal(false);\n onClose?.();\n }}\n imageSrc={successIconSrc || DefaultSuccessIcon}\n />\n )}\n\n {showErrorModal && (\n <ErrorModal\n onClose={() => {\n setShowErrorModal(false);\n onClose?.();\n }}\n message={errorMessage}\n lang={lang}\n />\n )}\n </div>\n </div>\n );\n};\n","import { Applicant } from \"../types/merchantTableData\";\n\ninterface MerchantTableActionsProps {\n applicant: Applicant;\n onView: (merchantId: string) => void;\n onEdit: (merchantId: string) => void;\n}\n\nexport default function MerchantTableActions({\n applicant,\n onView,\n onEdit,\n}: MerchantTableActionsProps) {\n return (\n <div className=\"flex gap-1\">\n <button\n onClick={() => onView(applicant.merchant_id)}\n className=\"group p-2 rounded hover:bg-[#1E2A7B] transition-colors\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-5 h-5 stroke-[#475467] group-hover:stroke-white fill-none transition-colors\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M2.458 12C3.732 7.943 7.523 5 12 5s8.268 2.943\n 9.542 7c-1.274 4.057-5.065 7-9.542 7S3.732\n 16.057 2.458 12z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n </button>\n\n {/* Edit Button */}\n <button\n onClick={() => onEdit(applicant.merchant_id)}\n className=\"group p-2 rounded hover:bg-[#1E2A7B]\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-5 h-5 fill-[#475467] group-hover:fill-white transition-colors\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M3 17.25V21h3.75l11.06-11.06-3.75-3.75L3 17.25zM21.41 6.34a1.25 1.25 0 0 0 0-1.77l-2.34-2.34a1.25\n 1.25 0 0 0-1.77 0l-1.83 1.83 4.11 4.11 1.83-1.83z\"\n />\n </svg>\n </button>\n </div>\n );\n}\n","import { useTranslation } from \"@/hooks/use-translation\";\n\ninterface MerchantHeaderProps {\n onAddNew: () => void;\n lang?: \"vi\" | \"en\";\n}\n\nexport default function MerchantHeader({\n onAddNew,\n lang = \"vi\",\n}: MerchantHeaderProps) {\n const { translate } = useTranslation(\"table\", lang);\n\n return (\n <div className=\"flex w-full max-w-full flex-row items-center justify-between gap-2 md:gap-4 overflow-x-auto\">\n <div className=\"flex flex-col\">\n <h1 className=\"uppercase text-sm font-medium text-[#1E2A7B] truncate max-w-full\">\n {translate(\"merchantProfile\")}\n </h1>\n <h1 className=\"text-2xl font-bold text-[#2C2C2C] truncate max-w-full\">\n {translate(\"profileList\")}\n </h1>\n </div>\n <button\n onClick={onAddNew}\n className=\"rounded-lg p-3 border border-[#00BAEE] text-[#00BAEE] md:ml-0 ml-0 w-auto truncate max-w-full\"\n >\n + {translate(\"addNew\")}\n </button>\n </div>\n );\n}\n","import { useTranslation } from \"../../hooks/use-translation\";\nimport React, { useRef } from \"react\";\n\ninterface DateRangePickerProps {\n startDate: Date | null;\n endDate: Date | null;\n onChange: (dates: [Date | null, Date | null]) => void;\n label?: string;\n lang?: \"vi\" | \"en\";\n}\n\nconst CalendarIcon = () => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-gray-400\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n);\n\nconst formatDate = (date: Date | null) => {\n return date\n ? date.toLocaleDateString(\"vi-VN\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n })\n : \"\";\n};\n\nconst DateRangePicker: React.FC<DateRangePickerProps> = ({\n startDate,\n endDate,\n onChange,\n label,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"table\", lang);\n const startRef = useRef<HTMLInputElement>(null);\n const endRef = useRef<HTMLInputElement>(null);\n\n const handleClear = () => {\n onChange([null, null]);\n };\n\n const handleStartChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newStart = e.target.value ? new Date(e.target.value) : null;\n let newEnd = endDate;\n\n if (newEnd && newStart && newEnd < newStart) {\n newEnd = newStart;\n }\n\n onChange([newStart, newEnd]);\n\n setTimeout(() => {\n endRef.current?.showPicker();\n }, 100);\n };\n\n const handleEndChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newEnd = e.target.value ? new Date(e.target.value) : null;\n let newStart = startDate;\n\n if (newStart && newEnd && newEnd < newStart) {\n newStart = newEnd;\n }\n\n onChange([newStart, newEnd]);\n };\n\n return (\n <div className=\"w-full relative min-w-[90px] \">\n {label && (\n <label className=\"block font-semibold mb-1.5 text-gray-700\">\n {label}\n </label>\n )}\n\n <div\n onClick={() => {\n if (!startDate) {\n startRef.current?.showPicker();\n } else {\n endRef.current?.showPicker();\n }\n }}\n className=\"transition-all duration-200 ease-out active:scale-[0.98] hover:shadow-md flex items-center justify-between px-4 py-2 border border-gray-300 rounded-lg w-full shadow-sm bg-white hover:border-blue-500 focus:outline-none cursor-pointer\"\n >\n <span className=\"text-gray-700 text-sm truncate transition-opacity duration-300 ease-in-out\">\n {startDate || endDate\n ? `${formatDate(startDate)} - ${formatDate(endDate)}`\n : translate(\"select_date_range\")}\n </span>\n\n <div className=\"flex items-center gap-1 ml-2 transition-opacity duration-300 ease-in-out\">\n {(startDate || endDate) && (\n <button\n className=\"text-gray-400 hover:text-red-500 text-lg font-bold transition-transform duration-200 hover:scale-110\"\n onClick={(e) => {\n e.stopPropagation();\n handleClear();\n }}\n >\n ✕\n </button>\n )}\n <CalendarIcon />\n </div>\n </div>\n\n {/* Hidden date inputs */}\n <input\n type=\"date\"\n ref={startRef}\n className=\"absolute top-0 left-2 w-full h-full opacity-0 pointer-events-none z-10\"\n onChange={handleStartChange}\n />\n <input\n type=\"date\"\n ref={endRef}\n className=\"absolute top-0 left-2 w-full h-full opacity-0 pointer-events-none z-10\"\n onChange={handleEndChange}\n />\n </div>\n );\n};\n\nexport default DateRangePicker;\n","import type { Option } from \"../components/common/dropdownMenu\";\n\nexport const APPLICANT_TYPE_OPTIONS: Option[] = [\n { name: \"BUSINESS\", id: \"BUSINESS\" },\n { name: \"PERSONAL\", id: \"PERSONAL\" },\n { name: \"HOUSEHOLD\", id: \"HOUSEHOLD\" },\n];\n\nexport const STATUS_OPTIONS: Option[] = [\n { name: \"DONE\", id: \"DONE\" },\n { name: \"PENDING APPROVAL\", id: \"PENDING APPROVAL\" },\n { name: \"REJECTED\", id: \"REJECTED\" },\n { name: \"DRAFT\", id: \"NULL\" },\n];\n","\nimport DropdownMenu, { Option } from \"@/components/common/dropdownMenu\";\nimport DateRangePicker from \"@/components/common/datePicker\";\nimport { Input } from \"@/components/ui/input\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { APPLICANT_TYPE_OPTIONS, STATUS_OPTIONS } from \"@/utils/merchantTableData\";\n\ninterface MerchantFiltersProps {\n selectedApplicantType: string | number;\n selectedStatus: string | number;\n dateRange: [Date | null, Date | null];\n searchString: string;\n onApplicantTypeChange: (option: Option) => void;\n onStatusChange: (option: Option) => void;\n onDateRangeChange: (range: [Date | null, Date | null]) => void;\n onSearchChange: (value: string) => void;\n onApplyFilters: () => void;\n onResetFilters: () => void;\n lang?: \"vi\" | \"en\";\n}\n\nconst ReloadIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\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=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"></path>\n <path d=\"M21 3v5h-5\"></path>\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"></path>\n <path d=\"M3 21v-5h5\"></path>\n </svg>\n);\n\nconst SearchIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n);\n\nexport default function MerchantFilters({\n selectedApplicantType,\n selectedStatus,\n dateRange,\n searchString,\n onApplicantTypeChange,\n onStatusChange,\n onDateRangeChange,\n onSearchChange,\n onApplyFilters,\n onResetFilters,\n lang = \"en\",\n}: MerchantFiltersProps) {\n const { translate } = useTranslation(\"table\", lang);\n const [startDate, endDate] = dateRange;\n\n return (\n <div className=\"w-full mt-6 p-4 bg-white rounded-xl shadow-lg sm:p-2\">\n <div className=\"hidden lg:min-w-[980px] lg:pb-1 lg:flex flex-row gap-5 items-end w-full min-w-0 overflow-x-auto\">\n <div className=\"w-full max-w-xs\">\n <DateRangePicker\n startDate={startDate}\n endDate={endDate}\n onChange={onDateRangeChange}\n label={translate(\"submitDate\")}\n lang={lang}\n />\n </div>\n <div className=\"w-full max-w-xs\">\n <DropdownMenu\n label={translate(\"object\")}\n options={APPLICANT_TYPE_OPTIONS.map(option => ({\n ...option,\n name: translate(option.name)\n }))}\n value={selectedApplicantType}\n onChange={onApplicantTypeChange}\n placeholder={translate(\"all\")}\n containerClassName=\"w-full min-w-[120px]\"\n triggerClassName=\"whitespace-nowrap truncate\"\n />\n </div>\n <div className=\"w-full max-w-xs\">\n <DropdownMenu\n label={translate(\"status\")}\n options={STATUS_OPTIONS.map(option => ({\n ...option,\n name: translate(option.name)\n }))}\n value={selectedStatus}\n onChange={onStatusChange}\n placeholder={translate(\"all\")}\n containerClassName=\"w-full min-w-[120px]\"\n triggerClassName=\"whitespace-nowrap truncate\"\n />\n </div>\n <div className=\"w-full max-w-xs\">\n <Input\n label={translate(\"search\")}\n placeholder={translate(\"searchPlaceholder\")}\n onChange={onSearchChange}\n value={searchString}\n labelClassname=\"font-bold\"\n required={false}\n />\n </div>\n <button\n onClick={onResetFilters}\n className=\"rounded-lg border px-4 py-2 border-[#00BAEE] text-[#00BAEE] flex items-center justify-center gap-2 hover:bg-[#00BAEE] hover:text-white transition-colors duration-200 min-w-[110px] w-auto\"\n >\n <ReloadIcon />\n {translate(\"reset\")}\n </button>\n <button\n onClick={onApplyFilters}\n className=\"rounded-lg px-4 py-2 text-white bg-[#1E2A7B] flex items-center justify-center gap-2 hover:bg-[#1E2A7B]/90 transition-colors duration-200 min-w-[120px] w-auto\"\n >\n <SearchIcon />\n {translate(\"apply\")}\n </button>\n </div>\n {/* md only: grid 2 cols, buttons in last row */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 lg:hidden\">\n <div className=\"w-full\">\n <DateRangePicker\n startDate={startDate}\n endDate={endDate}\n onChange={onDateRangeChange}\n label={translate(\"submitDate\")}\n lang={lang}\n />\n </div>\n <DropdownMenu\n label={translate(\"object\")}\n options={APPLICANT_TYPE_OPTIONS.map(option => ({\n ...option,\n name: translate(option.name)\n }))}\n value={selectedApplicantType}\n onChange={onApplicantTypeChange}\n placeholder={translate(\"all\")}\n containerClassName=\"w-full min-w-[120px]\"\n triggerClassName=\"whitespace-nowrap truncate\"\n />\n <DropdownMenu\n label={translate(\"status\")}\n options={STATUS_OPTIONS.map(option => ({\n ...option,\n name: translate(option.name)\n }))}\n value={selectedStatus}\n onChange={onStatusChange}\n placeholder={translate(\"all\")}\n containerClassName=\"w-full min-w-[120px]\"\n triggerClassName=\"whitespace-nowrap truncate\"\n />\n <div className=\"w-full\">\n <Input\n label={translate(\"search\")}\n placeholder={translate(\"searchPlaceholder\")}\n onChange={onSearchChange}\n value={searchString}\n labelClassname=\"font-bold\"\n required={false}\n />\n </div>\n <button\n onClick={onResetFilters}\n className=\"rounded-lg border px-4 py-2 border-[#00BAEE] text-[#00BAEE] flex items-center justify-center gap-2 hover:bg-[#00BAEE] hover:text-white transition-colors duration-200 min-w-[110px] w-full\"\n >\n <ReloadIcon />\n {translate(\"reset\")}\n </button>\n <button\n onClick={onApplyFilters}\n className=\"rounded-lg px-4 py-2 text-white bg-[#1E2A7B] flex items-center justify-center gap-2 hover:bg-[#1E2A7B]/90 transition-colors duration-200 min-w-[120px] w-full\"\n >\n <SearchIcon />\n {translate(\"apply\")}\n </button>\n </div>\n </div>\n );\n}\n","import portalAxiosClient from \"@/configs/portalAxiosClient\";\nimport { ApiResponse, MerchantDetail } from \"../types/merchantDetail\";\n\nexport const getMerchantList = async (\n authToken: string,\n accountType?: string,\n status?: string,\n page?: number,\n pageSize?: number\n) => {\n try {\n console.log(\"auth tk\", typeof authToken);\n const params: any = {};\n\n if (accountType) params.account_type = accountType;\n if (status) params.status = status;\n if (typeof page === \"number\") params.page = page;\n if (typeof pageSize === \"number\") params.page_size = pageSize;\n\n const res = await portalAxiosClient.get(\"/master-merchant/merchant\", {\n headers: {\n Authorization: `Bearer ${authToken}`,\n },\n params,\n });\n\n return res;\n } catch (error) {\n console.error(error);\n }\n};\n\nexport const getMerchantDetail = async (\n authToken: string,\n merchantDetailId: string\n): Promise<MerchantDetail> => {\n const res = await portalAxiosClient.get<ApiResponse<MerchantDetail>>(\n \"/master-merchant/merchant\",\n {\n headers: {\n Authorization: `Bearer ${authToken}`,\n },\n params: {\n merchant_id: merchantDetailId,\n },\n }\n );\n\n return res.data.data;\n};\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { Applicant } from \"../types/merchantTableData\";\nimport { getMerchantList } from \"../services/merchantService\";\n\nexport function useMerchantData(authToken: string) {\n const [data, setData] = useState<Applicant[]>([]);\n const [totalItems, setTotalItems] = useState<number>(0);\n const [page, setPage] = useState<number>(1);\n const [pageSize, setPageSize] = useState<number>(10);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [filters, setFilters] = useState<{\n accountType: string;\n status: string;\n searchString: string;\n dateRange: [Date | null, Date | null];\n }>({\n accountType: \"\",\n status: \"\",\n searchString: \"\",\n dateRange: [null, null],\n });\n\n const fetchData = useCallback(async () => {\n if (!authToken) return;\n setLoading(true);\n try {\n const res = await getMerchantList(\n authToken,\n filters.accountType,\n filters.status,\n page,\n pageSize\n );\n\n const newData = (res?.data?.data.data || []).map(\n (item: Applicant, index: number) => ({\n ...item,\n index: (page - 1) * pageSize + index + 1, // calculate index of items\n })\n );\n\n setData(newData);\n setTotalItems(res?.data?.data.total || 0);\n setError(null);\n } catch (err: any) {\n setError(err.message || \"Đã xảy ra lỗi khi lấy dữ liệu\");\n setData([]);\n setTotalItems(0);\n } finally {\n setLoading(false);\n }\n }, [authToken, page, pageSize, filters]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n const applyFilters = useCallback(\n (\n accountType: string | number,\n status: string | number,\n dateRange: [Date | null, Date | null],\n searchString: string\n ) => {\n setFilters({\n accountType: String(accountType),\n status: String(status),\n dateRange,\n searchString,\n });\n setPage(1);\n },\n []\n );\n\n const resetFilters = useCallback(() => {\n setFilters({\n accountType: \"\",\n status: \"\",\n searchString: \"\",\n dateRange: [null, null],\n });\n setPage(1); // Reset to first page\n }, []);\n\n const handlePageChange = (newPage: number) => {\n if (newPage > 0 && newPage <= Math.ceil(totalItems / pageSize)) {\n setPage(newPage);\n }\n };\n\n const handlePageSizeChange = (newPageSize: number) => {\n setPageSize(newPageSize);\n setPage(1); // Reset to first page when page size changes\n };\n\n return {\n data, // Paginated data\n totalItems, // Total number of items for pagination\n page,\n pageSize,\n applyFilters,\n resetFilters,\n handlePageChange,\n handlePageSizeChange,\n loading,\n error,\n };\n}\n","import React, { useState, useEffect } from 'react';\nimport MerchantTableActions from './merchantTableAction';\nimport MerchantHeader from './merchantTableHeader';\nimport MerchantFilters from './merchantTableFilter';\nimport { useTranslation } from '@/hooks/use-translation';\nimport { useMediaQuery } from '@/hooks/use-media-query';\nimport TableSkeleton from '@/components/common/dataTable/tableSkeleton';\nimport ReusableTable, { TableHeader } from '@/components/common/dataTable/dataTable';\nimport DropdownMenuAbsolute from '@/components/common/dropdownMenuAbsolute';\nimport { Option } from '@/components/common/dropdownMenu';\nimport { Applicant } from '../types/merchantTableData';\nimport { useMerchantData } from '../hooks/use-merchant-table';\n\ninterface MerchantTableProps {\n authToken: string;\n isHeader?: boolean;\n createRoute: string;\n onAddNew?: () => void;\n onViewMerchant: (merchantId: string) => void;\n onEditMerchant: (merchantId: string) => void;\n lang?: 'vi' | 'en' | undefined;\n}\n\nexport function MerchantTable({\n authToken,\n isHeader = true,\n createRoute,\n onAddNew,\n onViewMerchant,\n onEditMerchant,\n lang = 'vi',\n}: MerchantTableProps) {\n const { translate } = useTranslation('table', lang);\n const [selectedApplicantType, setSelectedApplicantType] =\n useState<string>('');\n const [selectedStatus, setSelectedStatus] = useState<string>('');\n const [dateRange, setDateRange] = useState<[Date | null, Date | null]>([\n null,\n null,\n ]);\n const [searchString, setSearchString] = useState('');\n\n const {\n applyFilters,\n error,\n data,\n loading,\n resetFilters,\n totalItems,\n page,\n pageSize,\n handlePageChange,\n handlePageSizeChange,\n } = useMerchantData(authToken);\n\n const isMobile = useMediaQuery('(max-width: 768px)');\n\n const handleApplyFilters = () => {\n applyFilters(\n selectedApplicantType,\n selectedStatus,\n dateRange,\n searchString\n );\n };\n\n const handleResetFilters = () => {\n setSelectedApplicantType('');\n setSelectedStatus('');\n setDateRange([null, null]);\n setSearchString('');\n resetFilters();\n };\n\n const handleSetApplicantType = (option: Option) => {\n setSelectedApplicantType(String(option.id));\n };\n\n const handleSetStatus = (option: Option) => {\n setSelectedStatus(String(option.id));\n };\n\n const handleSearchChange = (value: string) => {\n setSearchString(value);\n };\n\n const handleRowsPerPageChange = (option: Option) => {\n handlePageSizeChange(Number(option.id));\n };\n\n const handleAddNew = () => {\n if (onAddNew) return onAddNew();\n window.location.href = createRoute;\n };\n\n const headers: TableHeader<Applicant>[] = [\n { key: 'index', label: translate('no'), width: '50px', minWidth: '50px' },\n {\n key: 'create_date',\n label: translate('submitDate'),\n width: '100px',\n minWidth: '100px',\n },\n {\n key: 'account_type',\n label: translate('object'),\n width: '100px',\n minWidth: '85px',\n },\n {\n key: 'name',\n label: translate('name'),\n width: '170px',\n minWidth: '130px',\n },\n {\n key: 'industry',\n label: translate('industry'),\n width: '150px',\n minWidth: '120px',\n },\n {\n key: 'brand_name',\n label: translate('brand'),\n width: '130px',\n minWidth: '100px',\n },\n {\n key: 'company_registry',\n label: translate('businessCode'),\n width: '135px',\n minWidth: '135px',\n },\n {\n key: 'status',\n label: translate('status'),\n width: '120px',\n minWidth: '100px',\n },\n {\n key: 'reject_note',\n label: translate('rejectNote'),\n width: '130px',\n minWidth: '100px',\n },\n {\n key: 'actions',\n label: translate('action'),\n width: '100px',\n minWidth: '85px',\n render: (applicant: Applicant) => {\n const canEdit =\n (applicant.status as string) === 'draft' || applicant.status === null;\n\n return (\n <MerchantTableActions\n applicant={applicant}\n onView={onViewMerchant}\n onEdit={\n canEdit ? () => onEditMerchant(applicant.merchant_id) : () => {}\n }\n />\n );\n },\n },\n ];\n\n return (\n <div className='max-w-full'>\n {isHeader ? <MerchantHeader onAddNew={handleAddNew} lang={lang} /> : null}\n\n <MerchantFilters\n selectedApplicantType={selectedApplicantType}\n selectedStatus={selectedStatus}\n dateRange={dateRange}\n searchString={searchString}\n onApplicantTypeChange={handleSetApplicantType}\n onStatusChange={handleSetStatus}\n onDateRangeChange={setDateRange}\n onSearchChange={handleSearchChange}\n onApplyFilters={handleApplyFilters}\n onResetFilters={handleResetFilters}\n lang={lang}\n />\n\n {error ? (\n <div className='text-red-500'>\n Lỗi khi lấy dữ liệu, xin hãy thử lại.\n </div>\n ) : null}\n\n <div className='mt-6 pb-2'>\n {loading ? (\n <TableSkeleton />\n ) : (\n <div className='overflow-x-auto'>\n <ReusableTable\n headers={headers}\n data={data}\n totalItems={totalItems}\n page={page}\n pageSize={pageSize}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handleRowsPerPageChange}\n lang={lang}\n translate={translate}\n cardView={isMobile}\n customDropdown={DropdownMenuAbsolute}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport React from \"react\";\n\ninterface MerchantFormData {\n country: string;\n city: string;\n district: string;\n ward: string;\n address: string;\n}\n\ninterface AddressFieldsProps {\n formData: MerchantFormData;\n errors?: Partial<Record<keyof MerchantFormData, string>>;\n readOnly?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const AddressFields: React.FC<AddressFieldsProps> = ({\n formData,\n errors,\n readOnly = true,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n\n const selects = [\n {\n label: translate(\"country\"),\n name: \"country\",\n value: formData.country,\n },\n {\n label: translate(\"city\"),\n name: \"city\",\n value: formData.city,\n },\n {\n label: translate(\"district\"),\n name: \"district\",\n value: formData.district,\n },\n {\n label: translate(\"ward\"),\n name: \"ward\",\n value: formData.ward,\n },\n ];\n\n return (\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold font-inter leading-[18px] tracking-normal text-[#2C2C2C]\">\n {translate(\"address\")}\n </h3>\n <div className=\"grid grid-cols-2 gap-2\">\n {selects.map((select) => (\n <div key={select.name} className=\"relative w-full\">\n <div\n className={`px-3 py-3 border ${\n errors?.[select.name as keyof MerchantFormData]\n ? \"border-red-500\"\n : \"border-[#E4E7EC]\"\n } rounded-md text-[#6B7280] font-inter text-sm font-normal leading-[18px] tracking-normal w-full`}\n >\n <strong>{select.label}: </strong>\n <span>{select.value || translate(\"not_selected\")}</span>\n </div>\n {errors?.[select.name as keyof MerchantFormData] && (\n <p className=\"text-red-500 text-xs mt-1\">\n {errors[select.name as keyof MerchantFormData]}\n </p>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"relative w-full mt-2\">\n <div\n className={`px-3 py-3 border ${\n errors?.address ? \"border-red-500\" : \"border-[#E4E7EC]\"\n } rounded-md text-[#6B7280] font-inter text-sm font-normal leading-[18px] tracking-normal w-full`}\n >\n <strong>{translate(\"address\")}: </strong>\n <span>{formData.address || translate(\"not_entered\")}</span>\n </div>\n {errors?.address && (\n <p className=\"text-red-500 text-xs mt-1\">{errors.address}</p>\n )}\n </div>\n </div>\n );\n};\n","import React, { useRef } from \"react\";\nimport { readLicense, type ILicenseData } from \"ocr-upload-reader\";\nimport DownloadIcon from \"../../assets/download.svg\";\nimport FileIcon from \"../../assets/file.svg\";\nimport { useTranslation } from \"@/hooks/use-translation\";\n\ninterface FileUploadProps {\n label: string;\n file: File | null;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: () => void;\n disabled?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n label,\n file,\n onChange,\n onParsedData,\n onRemoveFile,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const inputId = label.replace(/\\s+/g, \"-\").toLowerCase();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n onChange(event);\n const selectedFile = event.target.files?.[0];\n if (selectedFile && onParsedData) {\n try {\n const result = await readLicense(selectedFile);\n console.log(\"📄 OCR Result:\", result);\n onParsedData(result);\n } catch (err) {\n console.error(\"❌ OCR Error:\", (err as Error).message);\n }\n }\n };\n\n const handleRemoveFile = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n\n if (onRemoveFile) {\n onRemoveFile();\n } else {\n const fakeEvent = {\n target: {\n files: null,\n value: \"\",\n },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(fakeEvent);\n }\n };\n\n const triggerInput = () => fileInputRef.current?.click();\n\n return (\n <div className=\"space-y-2 relative\">\n <label\n htmlFor={inputId}\n className=\"font-inter text-sm font-semibold text-[#2C2C2C] mb-1\"\n >\n {translate(label)} <span className=\"text-red-500\">*</span>\n </label>\n\n {file ? (\n <div className=\"relative flex items-center border border-gray-300 rounded-lg px-4 py-3 w-full max-w-[400px] mt-2 bg-gray-50\">\n <img\n src={FileIcon}\n alt={translate(\"uploaded_file\")}\n className=\"w-10 h-10\"\n />\n <div className=\"ml-4 text-left overflow-hidden\">\n <div className=\"text-sm font-medium text-gray-900 truncate\">\n {file.name}\n </div>\n <div className=\"text-xs text-gray-500\">\n {(file.size / 1024).toFixed(0)} KB\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={handleRemoveFile}\n className=\"absolute top-1 right-1 p-1 rounded hover:bg-red-100 transition-colors duration-200\"\n aria-label={translate(\"remove_file\")}\n title={translate(\"remove_file\")}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-4 h-4 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ) : (\n <div className=\"border-2 border-dashed border-gray-300 rounded-lg p-4 text-center hover:border-blue-400 transition-colors min-h-[140px] flex flex-col items-center justify-center space-y-2 mt-2\">\n <input\n id={inputId}\n type=\"file\"\n accept=\".pdf,.jpg,.jpeg,.png\"\n ref={fileInputRef}\n onChange={handleFileChange}\n className=\"hidden\"\n />\n\n <img\n src={DownloadIcon}\n alt={translate(\"upload_icon\")}\n className=\"w-6 h-6\"\n />\n\n <p className=\"text-sm font-medium text-gray-600\">\n {translate(\"upload_file\")}\n </p>\n <p className=\"text-xs text-gray-400\">\n {translate(\"file_format_info\")}\n </p>\n <button\n type=\"button\"\n onClick={triggerInput}\n className=\"mt-1 px-4 py-1 bg-[#1E2A7B] text-white rounded text-sm hover:bg-[#1a2470] transition-colors \"\n >\n {translate(\"upload_button\")}\n </button>\n </div>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { AddressFields } from \"./AddressFields\";\nimport { FileUpload } from \"./FileUpload\";\nimport type { ILicenseData } from \"ocr-upload-reader\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { Input } from \"@/components/ui/input\";\nimport { FormData } from \"../types/formData\";\n\ninterface UserTypeFormProps {\n formData: FormData;\n onInputChange: (field: keyof FormData, value: string) => void;\n businessLicenseFile: File | null;\n taxDocumentFile: File | null;\n onFileUpload: (\n type: \"businessLicense\" | \"taxDocument\",\n event: React.ChangeEvent<HTMLInputElement>\n ) => void;\n autofilledFields?: string[];\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: (type: \"businessLicense\" | \"taxDocument\") => void;\n errors?: Partial<Record<keyof FormData, string>>;\n fileErrors?: {\n businessLicense?: string;\n taxDocument?: string;\n };\n readOnly?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const UserTypeForm: React.FC<UserTypeFormProps> = ({\n formData,\n onInputChange,\n businessLicenseFile,\n taxDocumentFile,\n onFileUpload,\n autofilledFields = [],\n onParsedData,\n onRemoveFile,\n errors,\n fileErrors,\n readOnly = true,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n console.log(\"lang from m-view\", lang);\n\n const isAutofilled = (field: keyof FormData) =>\n autofilledFields.includes(field);\n\n const renderInput = (\n label: string,\n field: keyof FormData,\n options: { isAuto?: boolean } = {}\n ) => {\n if (field === \"businessLicense\" || field === \"taxLicense\") return null;\n\n const value = formData[field];\n if (typeof value !== \"string\") return null; \n\n return (\n <div>\n <Input\n label={translate(label)}\n value={value}\n onChange={(v) => (!readOnly ? onInputChange(field, v) : undefined)}\n isAutofilled={options.isAuto ? isAutofilled(field) : false}\n readOnly={readOnly}\n // Thêm props để xử lý overflow\n title={value} // Hiển thị tooltip khi hover\n style={{\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden'\n }}\n />\n {errors?.[field] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[field]}</p>\n )}\n </div>\n );\n };\n\n const renderFileUpload = (\n label: string,\n type: \"businessLicense\" | \"taxDocument\",\n file: File | null\n ) => (\n <div>\n <FileUpload\n label={translate(label)}\n file={file}\n onChange={(e) => !readOnly && onFileUpload(type, e)}\n onParsedData={onParsedData}\n onRemoveFile={() => !readOnly && onRemoveFile?.(type)}\n disabled={readOnly}\n lang={lang}\n />\n {type === \"businessLicense\" && fileErrors?.businessLicense && (\n <p className=\"text-red-500 text-xs mt-1\">\n {fileErrors.businessLicense}\n </p>\n )}\n {type === \"taxDocument\" && fileErrors?.taxDocument && (\n <p className=\"text-red-500 text-xs mt-1\">{fileErrors.taxDocument}</p>\n )}\n </div>\n );\n\n const renderIndividualForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"full_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"industry\", \"industry\")}\n {renderInput(\"referral_code\", \"referralCode\")}\n <AddressFields formData={formData} readOnly={readOnly} lang={lang} />\n </div>\n </div>\n );\n\n const renderBusinessForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"household_business_name\", \"businessName\", {\n isAuto: true,\n })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n {renderInput(\"industry\", \"industry\")}\n <AddressFields formData={formData} readOnly={readOnly} lang={lang} />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\"referral_code\", \"referralCode\")}\n {renderFileUpload(\n \"business_license\",\n \"businessLicense\",\n businessLicenseFile\n )}\n {renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n const renderEnterpriseForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"enterprise_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n {renderInput(\"industry\", \"industry\")}\n {renderInput(\"representative\", \"representative\", { isAuto: true })}\n <AddressFields formData={formData} readOnly={readOnly} lang={lang} />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\n \"business_registration_number\",\n \"business_registration_number\",\n { isAuto: true }\n )}\n {renderInput(\"referral_code\", \"referralCode\")}\n {renderFileUpload(\n \"business_license\",\n \"businessLicense\",\n businessLicenseFile\n )}\n {renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n switch (formData.userType) {\n case \"individual\":\n return renderIndividualForm();\n case \"business\":\n return renderBusinessForm();\n case \"enterprise\":\n return renderEnterpriseForm();\n default:\n return null;\n }\n};","import { useTranslation } from \"@/hooks/use-translation\";\n\ninterface MerchantHeaderProps {\n title?: string;\n subtitle?: string;\n statusLabel?: string;\n statusType?: \"draft\" | \"pending\" | \"approved\" | \"rejected\" | null;\n lang?: \"vi\" | \"en\";\n}\n\nconst statusStyleMap = {\n draft: \"text-gray-800 bg-gray-100 border border-gray-400\",\n pending: \"text-yellow-600 bg-yellow-50 border border-yellow-400\",\n approved: \"text-green-600 bg-green-50 border border-green-400\",\n rejected: \"text-red-600 bg-red-50 border border-red-400\",\n};\n\nconst statusLabelMap = {\n DONE: \"done\",\n \"PENDING APPROVAL\": \"pending\",\n PROCESSING: \"processing\",\n null: \"draft\",\n};\n\nexport default function MerchantHeader({\n title = \"add_new_profile\",\n subtitle,\n statusLabel,\n statusType,\n lang = \"vi\",\n}: MerchantHeaderProps) {\n const { translate } = useTranslation(\"form\", lang);\n\n // Determine statusClass based on the statusType, defaulting to \"draft\" if null\n const statusClass = statusType\n ? statusStyleMap[statusType]\n : statusStyleMap.draft; // default to \"draft\"\n const translatedStatusLabel =\n statusLabelMap[statusLabel as keyof typeof statusLabelMap] || statusLabel;\n\n return (\n <div className=\"flex justify-between items-start py-4\">\n <div>\n <p className=\"uppercase text-sm font-medium text-[#1E2A7B]\">\n {translate(\"merchant_profile\")}\n </p>\n <div className=\"flex items-center mt-1 space-x-2 justify-center\">\n <h1 className=\"text-2xl font-bold text-[#2C2C2C]\">\n {translate(title)}\n </h1>\n {subtitle && (\n <span className=\"text-sm text-[#475467]\">\n | {translate(subtitle)}\n </span>\n )}\n </div>\n </div>\n\n {translatedStatusLabel && (\n <span\n className={`rounded-full px-6 py-2 text-sm font-medium ${statusClass}`}\n >\n {translate(translatedStatusLabel)}\n </span>\n )}\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { MerchantDetail } from \"../types/merchantDetail\";\nimport { getMerchantDetail } from \"../services/merchantService\";\n\ninterface UseMerchantDetailResult {\n data: MerchantDetail | null;\n loading: boolean;\n error: Error | null;\n}\n\nexport const useMerchantDetail = (\n authToken: string,\n merchantDetailId: string | null\n): UseMerchantDetailResult => {\n const [data, setData] = useState<MerchantDetail | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n const fetchData = async () => {\n if (!authToken || !merchantDetailId) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const result = await getMerchantDetail(authToken, merchantDetailId);\n setData(result);\n } catch (err) {\n if (err instanceof Error) {\n setError(err);\n } else {\n setError(new Error(\"Unknown error\"));\n }\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n }, [authToken, merchantDetailId]);\n\n return { data, loading, error };\n};\n","import React, { useEffect, useState } from 'react';\nimport { UserTypeForm } from './UserTypeForm';\nimport MerchantHeader from \"./Header\";\nimport { useTranslation } from '@/hooks/use-translation';\nimport { FormData } from '../types/formData';\nimport { useMerchantDetail } from '../hooks/useMerchantDetail';\n\nconst defaultFormData: FormData = {\n userType: 'business',\n phoneNumberSecond: '',\n businessName: '',\n email: '',\n branchName: '',\n taxLicense:null,\n businessLicense: null,\n taxCode: '',\n industry: '',\n representative: '',\n country: '',\n city: '',\n district: '',\n ward: '',\n address: '',\n referralCode: '',\n business_registration_number: '',\n};\n\nconst accountTypeToUserType = {\n PERSONAL: \"individual\",\n HOUSEHOLD: \"business\",\n BUSINESS: \"enterprise\",\n} as const;\n\ninterface MerchantViewProps {\n accessToken?: string;\n className?: string;\n merchantId?: string;\n isHeader?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const MerchantView: React.FC<MerchantViewProps> = ({\n accessToken,\n className = \"\",\n merchantId,\n isHeader = true,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const [formData, setFormData] = useState<FormData>({ ...defaultFormData });\n const { data: merchantDetail, loading: isFetchingMerchant } =\n useMerchantDetail(accessToken || \"\", merchantId || null);\n\n useEffect(() => {\n if (merchantDetail) {\n const mappedUserType =\n accountTypeToUserType[\n merchantDetail.account_type as keyof typeof accountTypeToUserType\n ] || \"business\";\n\n setFormData({\n userType: mappedUserType,\n taxCode: merchantDetail.vat || \"\",\n businessName: merchantDetail.name || \"\",\n branchName: merchantDetail.branch_name || \"\",\n email: merchantDetail.email || \"\",\n industry: merchantDetail.industry || \"\",\n representative: typeof merchantDetail.presentative === \"string\" ? merchantDetail.presentative : \"\",\n country: merchantDetail.country || \"\",\n city: merchantDetail.city || \"\",\n district: merchantDetail.district || \"\",\n ward: merchantDetail.ward || \"\",\n address: merchantDetail.street || \"\",\n referralCode: merchantDetail.referal_code || \"\",\n phoneNumberSecond: merchantDetail.phone,\n businessLicense: null,\n taxLicense: null,\n business_registration_number: merchantDetail.company_registry,\n });\n }\n }, [merchantDetail]);\n\n const statusType: \"draft\" | \"pending\" | \"approved\" | \"rejected\" | null =\n merchantDetail?.status === \"PENDING APPROVAL\"\n ? \"pending\"\n : merchantDetail?.status === \"PROCESSING\"\n ? \"approved\"\n : merchantDetail?.status === \"DONE\"\n ? \"approved\"\n : merchantDetail?.status === \"REJECTED\"\n ? \"rejected\"\n : merchantDetail?.status\n ? \"draft\"\n : null;\n\n const statusLabel = !merchantDetail?.status\n ? translate(\"draft\")\n : merchantDetail?.status === \"PENDING APPROVAL\"\n ? translate(\"pending\")\n : merchantDetail?.status === \"PROCESSING\"\n ? translate(\"processing\")\n : merchantDetail?.status === \"DONE\"\n ? translate(\"done\")\n : merchantDetail?.status === \"REJECTED\"\n ? translate(\"rejected\")\n : merchantDetail?.status;\n\n return (\n <div>\n {isHeader && (\n <MerchantHeader\n title={translate(\"profile_detail\")}\n subtitle={translate(\"profile_list\")}\n statusLabel={statusLabel}\n statusType={statusType}\n lang={lang}\n />\n )}\n\n <div\n className={`bg-white mx-auto px-8 py-6 rounded-xl overflow-y-auto ${className}`}\n >\n <div className=\"space-y-6\">\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium text-[#2C2C2C]\">\n {translate(\"object\")} <span className=\"text-red-500\">*</span>\n </label>\n <div className=\"grid grid-cols-3 gap-4\">\n {[\n { value: \"individual\", label: translate(\"individual\") },\n { value: \"business\", label: translate(\"household\") },\n { value: \"enterprise\", label: translate(\"business\") },\n ].map((option) => (\n <label\n key={option.value}\n className={`flex items-center space-x-2 p-3 border rounded-[12px] hover:cursor-not-allowed ${\n formData.userType === option.value\n ? \"border-[#1E2A7B]\"\n : \"border-[#E3E3E3]\"\n }`}\n >\n <input\n type=\"radio\"\n name=\"userType\"\n value={option.value}\n checked={formData.userType === option.value}\n disabled\n className=\"w-4 h-4 text-blue-600\"\n />\n <span className=\"text-sm text-[#2C2C2C]\">{option.label}</span>\n </label>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"text-sm font-medium mb-2\">\n {translate(\"merchant_info\")}\n </h3>\n <div className=\"min-h-[80px] p-4 border border-gray-300 rounded-md text-sm text-[#2C2C2C]\">\n {translate(\"merchant_info_description\")}\n </div>\n </div>\n\n <UserTypeForm\n formData={formData}\n onInputChange={() => {}}\n businessLicenseFile={null}\n taxDocumentFile={null}\n onFileUpload={() => {}}\n onRemoveFile={() => {}}\n autofilledFields={[]}\n errors={{}}\n fileErrors={{}}\n readOnly={true}\n lang={lang}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport React, { useMemo, memo } from \"react\";\nimport { useAddress } from \"../hooks/use-address\";\n\ninterface MerchantFormData {\n country: string;\n city: string;\n district: string;\n ward: string;\n address: string;\n}\n\ninterface AddressFieldsProps {\n formData: MerchantFormData;\n onInputChange: (field: keyof MerchantFormData, value: string) => void;\n errors?: Partial<Record<keyof MerchantFormData, string>>;\n lang?: \"vi\" | \"en\";\n}\n\nexport const AddressFields: React.FC<AddressFieldsProps> = memo(({\n formData,\n onInputChange,\n errors,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n\n const { countries, cities, districts, wards } = useAddress(\n formData.country,\n formData.city,\n formData.district\n );\n\n const selects = useMemo(() => [\n {\n label: \"country\" as keyof MerchantFormData,\n value: formData.country,\n options: countries.map((item) => ({\n value: item.id ?? \"\",\n label: item.name,\n })),\n },\n {\n label: \"city\" as keyof MerchantFormData,\n value: formData.city,\n options: cities.map((item) => ({\n value: item.id ?? \"\",\n label: item.name,\n })),\n },\n {\n label: \"district\" as keyof MerchantFormData,\n value: formData.district,\n options: districts.map((item) => ({\n value: item.id ?? \"\",\n label: item.name,\n })),\n },\n {\n label: \"ward\" as keyof MerchantFormData,\n value: formData.ward,\n options: wards.map((item) => ({\n value: item.id ?? \"\",\n label: item.name,\n })),\n },\n ], [countries, cities, districts, wards]); // Removed formData fields from here\n\n return (\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold text-[#2C2C2C]\">\n {translate(\"address\")}\n </h3>\n\n <div className=\"grid grid-cols-2 gap-2\">\n {selects.map(({ label, value, options }) => (\n <div key={label} className=\"relative w-full\">\n <select\n value={value}\n onChange={(e) => onInputChange(label, e.target.value)}\n className={`appearance-none w-full px-4 py-3 border ${\n errors?.[label] ? \"border-red-500\" : \"border-[#E4E7EC]\"\n } rounded-[8px] focus:outline-none focus:ring-2 focus:ring-blue-500 text-[#6B7280] text-sm`}\n >\n <option value=\"\">{translate(label)}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <div className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2\">\n <svg\n className=\"w-4 h-4 text-gray-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </div>\n {errors?.[label] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[label]}</p>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"w-full mt-2\">\n <input\n type=\"text\"\n value={formData.address}\n onChange={(e) => onInputChange(\"address\", e.target.value)}\n placeholder={translate(\"street_address\")}\n className={`w-full px-4 py-3 border ${\n errors?.address ? \"border-red-500\" : \"border-[#E4E7EC]\"\n } rounded-[8px] focus:outline-none focus:ring-2 focus:ring-blue-500 text-[#6B7280] text-sm`}\n />\n {errors?.address && (\n <p className=\"text-red-500 text-xs mt-1\">{errors.address}</p>\n )}\n </div>\n </div>\n );\n});\n\nAddressFields.displayName = 'AddressFields';","import React, { useRef } from \"react\";\nimport { readLicense, type ILicenseData } from \"ocr-upload-reader\";\nimport DownloadIcon from \"../../assets/download.svg\";\nimport FileIcon from \"../../assets/file.svg\";\nimport { useTranslation } from \"@/hooks/use-translation\";\n\ninterface FileUploadProps {\n label: string;\n file: File | null;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: () => void;\n disabled?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n label,\n file,\n onChange,\n onParsedData,\n onRemoveFile,\n disabled = false,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const inputId = label.replace(/\\s+/g, \"-\").toLowerCase();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n onChange(event);\n const selectedFile = event.target.files?.[0];\n if (selectedFile && onParsedData) {\n try {\n const result = await readLicense(selectedFile);\n console.log(\"📄 OCR Result:\", result);\n onParsedData(result);\n } catch (err) {\n console.error(\"❌ OCR Error:\", (err as Error).message);\n }\n }\n };\n\n const handleRemoveFile = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n\n if (onRemoveFile) {\n onRemoveFile();\n } else {\n const fakeEvent = {\n target: {\n files: null,\n value: \"\",\n },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(fakeEvent);\n }\n };\n\n const triggerInput = () => fileInputRef.current?.click();\n\n return (\n <div className=\"space-y-2 relative\">\n <label\n htmlFor={inputId}\n className=\"font-inter text-sm font-semibold text-[#2C2C2C] mb-1\"\n >\n {translate(label)} <span className=\"text-red-500\">*</span>\n </label>\n\n {file ? (\n <div className=\"relative flex items-center border border-gray-300 rounded-lg px-4 py-3 w-full max-w-[400px] mt-2 bg-gray-50\">\n <img\n src={FileIcon}\n alt={translate(\"uploaded_file\")}\n className=\"w-10 h-10\"\n />\n <div className=\"ml-4 text-left overflow-hidden\">\n <div className=\"text-sm font-medium text-gray-900 truncate\">\n {file.name}\n </div>\n <div className=\"text-xs text-gray-500\">\n {(file.size / 1024).toFixed(0)} KB\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={handleRemoveFile}\n className=\"absolute top-1 right-1 p-1 rounded hover:bg-red-100 transition-colors duration-200\"\n aria-label={translate(\"remove_file\")}\n title={translate(\"remove_file\")}\n disabled={disabled}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-4 h-4 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ) : (\n <div className=\"border-2 border-dashed border-gray-300 rounded-lg p-4 text-center hover:border-blue-400 transition-colors min-h-[140px] flex flex-col items-center justify-center space-y-2 mt-2\">\n <input\n id={inputId}\n type=\"file\"\n accept=\".pdf,.jpg,.jpeg,.png\"\n ref={fileInputRef}\n onChange={handleFileChange}\n className=\"hidden\"\n disabled={disabled}\n />\n\n <img\n src={DownloadIcon}\n alt={translate(\"upload_icon\")}\n className=\"w-6 h-6\"\n />\n\n <p className=\"text-sm font-medium text-gray-600\">\n {translate(\"upload_file\")}\n </p>\n <p className=\"text-xs text-gray-400\">\n {translate(\"file_format_info\")}\n </p>\n <button\n type=\"button\"\n onClick={triggerInput}\n className=\"mt-1 px-4 py-1 bg-[#1E2A7B] text-white rounded text-sm hover:bg-[#1a2470] transition-colors hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n disabled={disabled}\n >\n {translate(\"upload_button\")}\n </button>\n </div>\n )}\n </div>\n );\n};\n","import React, { useEffect, useRef } from \"react\";\nimport { AddressFields } from \"./AddressFields\";\nimport { FileUpload } from \"./FileUpload\";\nimport type { ILicenseData } from \"ocr-upload-reader\";\nimport IndustrySelect from \"../MerchantRegistrationForm/IndustrySelect\";\nimport { Input } from \"@/components/ui/input\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { FormData } from \"../types/formData\";\n\ninterface UserTypeFormProps {\n formData: FormData;\n onInputChange: (field: keyof FormData, value: string) => void;\n businessLicenseFile: File | null;\n taxDocumentFile: File | null;\n onFileUpload: (\n type: \"businessLicense\" | \"taxDocument\",\n event: React.ChangeEvent<HTMLInputElement>\n ) => void;\n autofilledFields?: string[];\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: (type: \"businessLicense\" | \"taxDocument\") => void;\n errors?: Partial<Record<keyof FormData, string>>;\n fileErrors?: {\n businessLicense?: string;\n taxDocument?: string;\n };\n initialData?: Partial<FormData>;\n lang?: \"vi\" | \"en\";\n}\n\nexport const UserTypeForm: React.FC<UserTypeFormProps> = ({\n formData,\n onInputChange,\n businessLicenseFile,\n taxDocumentFile,\n onFileUpload,\n autofilledFields = [],\n onParsedData,\n onRemoveFile,\n errors,\n fileErrors,\n initialData,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const initialDataProcessed = useRef(false);\n\n useEffect(() => {\n if (initialData && !initialDataProcessed.current) {\n initialDataProcessed.current = true;\n\n Object.entries(initialData).forEach(([key, value]) => {\n if (\n key === \"businessLicense\" ||\n key === \"taxLicense\" ||\n typeof value !== \"string\" ||\n !value\n )\n return;\n\n const currentValue = formData[key as keyof FormData];\n if (currentValue !== value && (!currentValue || currentValue === \"\")) {\n onInputChange(key as keyof FormData, value);\n }\n });\n }\n }, [initialData]);\n\n const renderInput = (\n label: string,\n field: keyof FormData,\n options: { isAuto?: boolean } = {}\n ) => {\n if (field === \"businessLicense\" || field === \"taxLicense\") return null;\n\n const value = formData[field];\n if (typeof value !== \"string\") return null;\n\n return (\n <div>\n <Input\n label={translate(label)}\n value={value}\n onChange={(v) => onInputChange(field, v)}\n />\n {errors?.[field] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[field]}</p>\n )}\n </div>\n );\n };\n\n const renderFileUpload = (\n label: string,\n type: \"businessLicense\" | \"taxDocument\",\n file: File | null\n ) => (\n <div>\n <FileUpload\n label={translate(label)}\n file={file}\n onChange={(e) => onFileUpload(type, e)}\n onParsedData={onParsedData}\n onRemoveFile={() => onRemoveFile?.(type)}\n lang={lang}\n />\n {type === \"businessLicense\" && fileErrors?.businessLicense && (\n <p className=\"text-red-500 text-xs mt-1\">\n {fileErrors.businessLicense}\n </p>\n )}\n {type === \"taxDocument\" && fileErrors?.taxDocument && (\n <p className=\"text-red-500 text-xs mt-1\">{fileErrors.taxDocument}</p>\n )}\n </div>\n );\n\n const renderIndividualForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"full_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n </div>\n <div className=\"space-y-4\">\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n {renderInput(\"referralCode\", \"referralCode\")}\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n errors={errors}\n lang={lang}\n />\n </div>\n </div>\n );\n\n const renderBusinessForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"household_business_name\", \"businessName\", {\n isAuto: true,\n })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n errors={errors}\n lang={lang}\n />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\"referral_code\", \"referralCode\")}\n {renderFileUpload(\n \"business_license\",\n \"businessLicense\",\n businessLicenseFile\n )}\n {renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n const renderEnterpriseForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"enterprise_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n {renderInput(\"representative\", \"representative\", { isAuto: true })}\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n errors={errors}\n lang={lang}\n />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\n \"business_registration_number\",\n \"business_registration_number\",\n {\n isAuto: true,\n }\n )}\n {renderInput(\"referral_code\", \"referralCode\")}\n {renderFileUpload(\n \"business_license\",\n \"businessLicense\",\n businessLicenseFile\n )}\n {renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n switch (formData.userType) {\n case \"individual\":\n return renderIndividualForm();\n case \"business\":\n return renderBusinessForm();\n case \"enterprise\":\n return renderEnterpriseForm();\n default:\n return null;\n }\n};\n","import { useTranslation } from \"@/hooks/use-translation\";\n\ninterface MerchantHeaderProps {\n title?: string;\n subtitle?: string;\n statusLabel?: string;\n statusType?: \"draft\" | \"pending\" | \"approved\" | \"rejected\" | null;\n lang: \"vi\" | \"en\";\n}\n\nconst statusStyleMap = {\n draft: \"text-gray-800 bg-gray-100 border border-gray-400\",\n pending: \"text-yellow-600 bg-yellow-50 border border-yellow-400\",\n approved: \"text-green-600 bg-green-50 border border-green-400\",\n rejected: \"text-red-600 bg-red-50 border border-red-400\",\n};\n\nconst statusLabelMap = {\n DONE: \"Hoàn tất\",\n \"PENDING APPROVAL\": \"Chờ duyệt\",\n PROCESSING: \"Đang xử lý\",\n null: \"Bản nháp\",\n};\n\nexport default function MerchantHeader({\n title = \"Thêm mới hồ sơ\",\n subtitle,\n statusLabel,\n statusType,\n lang = \"vi\",\n}: MerchantHeaderProps) {\n const { translate } = useTranslation(\"form\", lang);\n const statusClass = statusType\n ? statusStyleMap[statusType]\n : statusStyleMap.draft; \n const translatedStatusLabel =\n statusLabelMap[statusLabel as keyof typeof statusLabelMap] || statusLabel;\n\n return (\n <div className=\"flex justify-between items-start py-4\">\n <div>\n <p className=\"uppercase text-sm font-medium text-[#1E2A7B]\">\n {translate(\"merchant_profile\")}\n </p>\n <div className=\"flex items-center mt-1 space-x-2 justify-center\">\n <h1 className=\"text-2xl font-bold text-[#2C2C2C]\">{title}</h1>\n {subtitle && (\n <span className=\"text-sm text-[#475467]\">| {subtitle}</span>\n )}\n </div>\n </div>\n\n {translatedStatusLabel && (\n <span\n className={`rounded-full px-6 py-2 text-sm font-medium ${statusClass}`}\n >\n {translatedStatusLabel}\n </span>\n )}\n </div>\n );\n}\n","import portalAxiosClient from \"@/configs/portalAxiosClient\";\nimport { toFormData } from \"@/utils/form\";\nimport { CreateMerchantPayload } from \"../types/formData\";\n\nexport async function updateMerchant(\n merchantId: string,\n data: CreateMerchantPayload,\n accessToken?: string\n): Promise<{ success: boolean; message: string }> {\n try {\n const formData = toFormData(data);\n\n formData.append(\"partner_id\", merchantId);\n\n const customHeaders: Record<string, string> = {\n \"Content-Type\": \"multipart/form-data\",\n };\n\n if (accessToken) {\n customHeaders[\"Authorization\"] = `Bearer ${accessToken}`;\n }\n\n const res = await portalAxiosClient.put(\n \"/master-merchant/merchant\",\n formData,\n {\n headers: customHeaders,\n }\n );\n\n console.log(\"API Response:\", res.data);\n\n return res.data.data;\n } catch (error: any) {\n console.error(\"Service error:\", error);\n\n throw error;\n }\n}\n","import { useState, useCallback } from \"react\";\nimport type { CreateMerchantPayload } from \"../types/formData\";\nimport { updateMerchant } from \"../services/editFormService\";\n\ninterface ApiError {\n message: string;\n code?: string;\n details?: any;\n field_errors?: Record<string, string[]>;\n}\n\ninterface UseUpdateMerchantResult {\n update: (\n merchantId: string,\n payload: CreateMerchantPayload,\n accessToken?: string\n ) => Promise<{ success: boolean; message: string }>;\n loading: boolean;\n error: string | null;\n errorDetails: ApiError | null;\n success: boolean;\n reset: () => void;\n}\n\nexport function useUpdateMerchant(): UseUpdateMerchantResult {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [errorDetails, setErrorDetails] = useState<ApiError | null>(null);\n const [success, setSuccess] = useState(false);\n\n const update = useCallback(\n async (\n merchantId: string,\n payload: CreateMerchantPayload,\n accessToken?: string\n ): Promise<{ success: boolean; message: string }> => {\n setLoading(true);\n setError(null);\n setErrorDetails(null);\n setSuccess(false);\n\n try {\n const res = await updateMerchant(merchantId, payload, accessToken);\n if (!res?.success) {\n throw new Error(res?.message || \"Update merchant failed\");\n }\n setSuccess(true);\n return res;\n } catch (err: any) {\n console.error(\"Lỗi đầy đủ:\", err);\n\n let errorMessage = \"Đã xảy ra lỗi không xác định\";\n let details: ApiError | null = null;\n\n if (err?.response) {\n // API phản hồi với trạng thái lỗi\n const responseData = err.response.data;\n details = {\n message: responseData?.message || responseData?.error || \"Lỗi API\",\n code: responseData?.code || responseData?.error_code,\n details: responseData?.details,\n field_errors: responseData?.field_errors || responseData?.errors,\n };\n\n errorMessage =\n responseData?.message ||\n `HTTP ${err.response.status}: ${err.response.statusText}`;\n if (responseData?.field_errors || responseData?.errors) {\n const fieldErrors =\n responseData.field_errors || responseData.errors;\n const fieldErrorMessages = Object.entries(fieldErrors)\n .map(\n ([field, errors]) =>\n `${field}: ${\n Array.isArray(errors) ? errors.join(\", \") : errors\n }`\n )\n .join(\"; \");\n errorMessage = `Lỗi xác thực dữ liệu: ${fieldErrorMessages}`;\n }\n } else if (err?.request) {\n // Lỗi mạng\n errorMessage =\n \"Lỗi kết nối mạng. Vui lòng kiểm tra kết nối internet.\";\n details = {\n message: \"Lỗi mạng\",\n code: \"NETWORK_ERROR\",\n };\n } else {\n errorMessage = err?.message || \"Đã xảy ra lỗi không xác định\";\n details = {\n message: err?.message || \"Lỗi không xác định\",\n code: \"UNKNOWN_ERROR\",\n };\n }\n\n setError(errorMessage);\n setErrorDetails(details);\n throw new Error(errorMessage);\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const reset = () => {\n setError(null);\n setErrorDetails(null);\n setSuccess(false);\n setLoading(false);\n };\n\n return {\n update,\n loading,\n error,\n errorDetails,\n success,\n reset,\n };\n}\n","import React, { useEffect, useState, useCallback } from \"react\";\nimport { UserTypeForm } from \"./UserTypeForm\";\nimport MerchantHeader from \"./Header\";\nimport DefaultSuccessIcon from \"../../assets/success.svg\";\nimport ErrorModal from \"@/components/ui/error-modal\";\nimport SuccessModalToast from \"@/components/ui/success-modal\";\nimport Button from \"@/components/ui/button\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { EditMerchantPayload, FormData } from \"../types/formData\";\nimport { useMerchantDetail } from \"../hooks/useMerchantDetail\";\nimport { useUpdateMerchant } from \"../hooks/use-edit-merchant\";\n\ninterface AddressData {\n countries: Array<{ id: string; name: string }>;\n cities: Array<{ id: string; name: string }>;\n districts: Array<{ id: string; name: string }>;\n wards: Array<{ id: string; name: string }>;\n}\n\nconst defaultFormData: FormData = {\n userType: \"business\",\n phoneNumberSecond: \"\",\n businessName: \"\",\n email: \"\",\n branchName: \"\",\n taxLicense: null,\n businessLicense: null,\n taxCode: \"\",\n industry: \"\",\n representative: \"\",\n country: \"\",\n city: \"\",\n district: \"\",\n ward: \"\",\n address: \"\",\n referralCode: \"\",\n business_registration_number: \"\",\n};\n\nconst accountTypeToUserType = {\n PERSONAL: \"individual\",\n HOUSEHOLD: \"business\",\n BUSINESS: \"enterprise\",\n} as const;\n\ninterface MerchantEditProps {\n accessToken?: string;\n className?: string;\n merchantId?: string;\n isHeader?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const MerchantEdit: React.FC<MerchantEditProps> = ({\n accessToken,\n className = \"\",\n merchantId,\n isHeader = true,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const { data: merchantDetail, loading: isFetchingMerchant } = useMerchantDetail(\n accessToken || \"\",\n merchantId || null\n );\n const { update, loading, error, success } = useUpdateMerchant();\n const [formData, setFormData] = useState<FormData>({ ...defaultFormData });\n const [businessLicenseFile, setBusinessLicenseFile] = useState<File | null>(null);\n const [taxDocumentFile, setTaxDocumentFile] = useState<File | null>(null);\n const [errors, setErrors] = useState<Partial<Record<keyof FormData, string>>>({});\n const [fileErrors, setFileErrors] = useState<{ businessLicense?: string; taxDocument?: string }>({});\n const [showSuccessModal, setShowSuccessModal] = useState(false);\n const [showErrorModal, setShowErrorModal] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [editMode, setEditMode] = useState(false);\n const [isInitialized, setIsInitialized] = useState(false);\n\n useEffect(() => {\n if (merchantDetail && !isInitialized) {\n const mappedUserType = accountTypeToUserType[merchantDetail.account_type as keyof typeof accountTypeToUserType] || \"business\";\n\n setFormData({\n userType: mappedUserType,\n taxCode: merchantDetail.vat || \"\",\n businessName: merchantDetail.name || \"\",\n branchName: merchantDetail.branch_name || \"\",\n email: merchantDetail.email || \"\",\n industry: merchantDetail.industry_code || \"\",\n representative: typeof merchantDetail.presentative === \"string\" ? merchantDetail.presentative : \"\",\n country: merchantDetail.country_code || \"\",\n city: merchantDetail.city_code || \"\",\n district: merchantDetail.district_code || \"\",\n ward: merchantDetail.ward_code || \"\",\n address: merchantDetail.street || \"\",\n referralCode: merchantDetail.referal_code || \"\",\n phoneNumberSecond: merchantDetail.phone || \"\",\n businessLicense: null,\n taxLicense: null,\n business_registration_number: merchantDetail.company_registry || \"\",\n });\n setIsInitialized(true);\n }\n }, [merchantDetail, isInitialized]);\n\n const handleInputChange = useCallback((field: keyof FormData, value: string) => {\n if (formData[field] === value) {\n return;\n }\n\n setFormData((prev) => {\n const newData = { ...prev, [field]: value };\n \n if (field === \"country\" && value !== prev.country) {\n return {\n ...newData,\n city: \"\",\n district: \"\",\n ward: \"\",\n };\n } else if (field === \"city\" && value !== prev.city) {\n return {\n ...newData,\n district: \"\",\n ward: \"\",\n };\n } else if (field === \"district\" && value !== prev.district) {\n return {\n ...newData,\n ward: \"\",\n };\n }\n \n return newData;\n });\n\n if (errors[field]) {\n setErrors(prev => {\n const newErrors = { ...prev };\n delete newErrors[field];\n return newErrors;\n });\n }\n}, [formData, errors]); \n\n const handleFileUpload = useCallback((type: \"businessLicense\" | \"taxDocument\", e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n if (type === \"businessLicense\") {\n setBusinessLicenseFile(file);\n } else {\n setTaxDocumentFile(file);\n }\n }\n }, []);\n\n const handleRemoveFile = useCallback((type: \"businessLicense\" | \"taxDocument\") => {\n if (type === \"businessLicense\") {\n setBusinessLicenseFile(null);\n } else {\n setTaxDocumentFile(null);\n }\n }, []);\n\n const validateForm = useCallback((): boolean => {\n const newErrors: Partial<Record<keyof FormData, string>> = {};\n\n if (!formData.taxCode) newErrors.taxCode = translate(\"tax_code_required\");\n if (!formData.businessName) newErrors.businessName = translate(\"business_name_required\");\n if (!formData.phoneNumberSecond) newErrors.phoneNumberSecond = translate(\"phone_number_required\");\n if (!formData.email) newErrors.email = translate(\"email_required\");\n if (!formData.country) newErrors.country = translate(\"country_required\");\n if (!formData.city) newErrors.city = translate(\"city_required\");\n if (!formData.district) newErrors.district = translate(\"district_required\");\n if (!formData.ward) newErrors.ward = translate(\"ward_required\");\n if (!formData.address) newErrors.address = translate(\"address_required\");\n\n if (formData.email && !/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n newErrors.email = translate(\"email_invalid\");\n }\n\n if (formData.phoneNumberSecond && !/^[0-9]{10,11}$/.test(formData.phoneNumberSecond)) {\n newErrors.phoneNumberSecond = translate(\"phone_number_invalid\");\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n }, [formData, translate]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!validateForm()) {\n return;\n }\n\n const payload: EditMerchantPayload = {\n entity_type: formData.userType === \"individual\" ? \"PERSON\" : \"BUSINESS_HOUSEHOLD\",\n tax_code: formData.taxCode,\n full_name: formData.businessName,\n phone_number: formData.phoneNumberSecond,\n business_registration_number: formData.business_registration_number,\n email: formData.email,\n referral_code: formData.referralCode,\n industry: formData.industry,\n representative_name: formData.representative,\n country: formData.country,\n city: formData.city,\n district: formData.district,\n ward: formData.ward,\n street_address: formData.address,\n business_license: businessLicenseFile as File,\n tax_license: taxDocumentFile as File,\n partner_id: merchantId || \"\",\n };\n\n try {\n const res = await update(merchantId || \"\", payload, accessToken);\n if (res.success) {\n setShowSuccessModal(true);\n }\n } catch (err) {\n setErrorMessage(translate(\"update_error\"));\n setShowErrorModal(true);\n }\n };\n\n return (\n <div>\n {isHeader && (\n <MerchantHeader\n title={translate(\"profile_detail\")}\n subtitle={translate(\"profile_list\")}\n lang={lang}\n />\n )}\n\n <div className={`bg-white mx-auto px-8 py-6 rounded-xl overflow-y-auto ${className}`}>\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium text-[#2C2C2C]\">\n {translate(\"object\")} <span className=\"text-red-500\">*</span>\n </label>\n <div className=\"grid grid-cols-3 gap-4\">\n {[\n { value: \"individual\", label: translate(\"individual\") },\n { value: \"business\", label: translate(\"household\") },\n { value: \"enterprise\", label: translate(\"business\") },\n ].map((option) => (\n <label\n key={option.value}\n className={`flex items-center space-x-2 p-3 border rounded-[12px] ${\n formData.userType === option.value\n ? \"border-[#1E2A7B]\"\n : \"border-[#E3E3E3]\"\n }`}\n >\n <input\n type=\"radio\"\n name=\"userType\"\n value={option.value}\n checked={formData.userType === option.value}\n onChange={(e) => handleInputChange(\"userType\", e.target.value)}\n className=\"w-4 h-4 text-blue-600\"\n />\n <span className=\"text-sm text-[#2C2C2C]\">{option.label}</span>\n </label>\n ))}\n </div>\n </div>\n\n <UserTypeForm\n formData={formData}\n onInputChange={handleInputChange}\n businessLicenseFile={businessLicenseFile}\n taxDocumentFile={taxDocumentFile}\n onFileUpload={handleFileUpload}\n onRemoveFile={handleRemoveFile}\n autofilledFields={[]}\n errors={errors}\n fileErrors={fileErrors}\n lang={lang}\n />\n\n <div className=\"flex justify-end\">\n <Button\n type=\"submit\"\n disabled={loading}\n className=\"text-[#00BAEE] hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n >\n {translate(\"update_profile\")}\n </Button>\n </div>\n </form>\n\n {showSuccessModal && (\n <SuccessModalToast\n lang={lang}\n onClose={() => setShowSuccessModal(false)}\n imageSrc={DefaultSuccessIcon}\n />\n )}\n\n {showErrorModal && (\n <ErrorModal\n onClose={() => setShowErrorModal(false)}\n message={errorMessage}\n lang={lang}\n />\n )}\n </div>\n </div>\n );\n};"],"names":["runtime","exports","undefined","value","key","next","module","getId","require$$0","createJob","log","this","require$$1","require$$2","createScheduler","require","resolvePaths","OEM","defaultOptions","spawnWorker","terminateWorker","onMessage","send","loadImage","require$$3","require$$4","require$$5","createWorker","langs","oem","config","recognize","_0","detect","Tesseract","languages","PSM","require$$6","require$$7","LANGUAGE","usePortalApiConfig","useState","useCallback","useEffect","AddressFields","useTranslation","jsxs","jsx","FileUpload","useRef","memo","UserTypeForm","statusStyleMap","MerchantHeader","defaultFormData","createMerchant","Button","DropdownMenu","useMediaQuery","TableSkeleton","ReusableTable","DropdownMenuAbsolute","statusLabelMap","accountTypeToUserType","useMemo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAIA,WAAW,SAAUC,UAAS;AAGhC,QAAI,KAAK,OAAO;AAChB,QAAI,SAAS,GAAG;AAChB,QAAI,iBAAiB,OAAO,kBAAkB,SAAU,KAAK,KAAK,MAAM;AAAE,UAAI,GAAG,IAAI,KAAK;AAAA,IAAM;AAChG,QAAIC;AACJ,QAAI,UAAU,OAAO,WAAW,aAAa,SAAS,CAAA;AACtD,QAAI,iBAAiB,QAAQ,YAAY;AACzC,QAAI,sBAAsB,QAAQ,iBAAiB;AACnD,QAAI,oBAAoB,QAAQ,eAAe;AAE/C,aAAS,OAAO,KAAK,KAAK,OAAO;AAC/B,aAAO,eAAe,KAAK,KAAK;AAAA,QAC9B;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,UAAU;AAAA,MAChB,CAAK;AACD,aAAO,IAAI,GAAG;AAAA,IAClB;AACE,QAAI;AAEF,aAAO,CAAA,GAAI,EAAE;AAAA,IACjB,SAAW,KAAK;AACZ,eAAS,SAAS,KAAK,KAAK,OAAO;AACjC,eAAO,IAAI,GAAG,IAAI;AAAA,MACxB;AAAA,IACA;AAEE,aAAS,KAAK,SAAS,SAAS,MAAM,aAAa;AAEjD,UAAI,iBAAiB,WAAW,QAAQ,qBAAqB,YAAY,UAAU;AACnF,UAAI,YAAY,OAAO,OAAO,eAAe,SAAS;AACtD,UAAI,UAAU,IAAI,QAAQ,eAAe,CAAA,CAAE;AAI3C,qBAAe,WAAW,WAAW,EAAE,OAAO,iBAAiB,SAAS,MAAM,OAAO,GAAG;AAExF,aAAO;AAAA,IACX;AACE,IAAAD,SAAQ,OAAO;AAYf,aAAS,SAAS,IAAI,KAAK,KAAK;AAC9B,UAAI;AACF,eAAO,EAAE,MAAM,UAAU,KAAK,GAAG,KAAK,KAAK,GAAG,EAAC;AAAA,MACrD,SAAa,KAAK;AACZ,eAAO,EAAE,MAAM,SAAS,KAAK,IAAG;AAAA,MACtC;AAAA,IACA;AAEE,QAAI,yBAAyB;AAC7B,QAAI,yBAAyB;AAC7B,QAAI,oBAAoB;AACxB,QAAI,oBAAoB;AAIxB,QAAI,mBAAmB,CAAA;AAMvB,aAAS,YAAY;AAAA,IAAA;AACrB,aAAS,oBAAoB;AAAA,IAAA;AAC7B,aAAS,6BAA6B;AAAA,IAAA;AAItC,QAAI,oBAAoB,CAAA;AACxB,WAAO,mBAAmB,gBAAgB,WAAY;AACpD,aAAO;AAAA,IACX,CAAG;AAED,QAAI,WAAW,OAAO;AACtB,QAAI,0BAA0B,YAAY,SAAS,SAAS,OAAO,CAAA,CAAE,CAAC,CAAC;AACvE,QAAI,2BACA,4BAA4B,MAC5B,OAAO,KAAK,yBAAyB,cAAc,GAAG;AAGxD,0BAAoB;AAAA,IACxB;AAEE,QAAI,KAAK,2BAA2B,YAClC,UAAU,YAAY,OAAO,OAAO,iBAAiB;AACvD,sBAAkB,YAAY;AAC9B,mBAAe,IAAI,eAAe,EAAE,OAAO,4BAA4B,cAAc,MAAM;AAC3F;AAAA,MACE;AAAA,MACA;AAAA,MACA,EAAE,OAAO,mBAAmB,cAAc,KAAI;AAAA,IAClD;AACE,sBAAkB,cAAc;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAIE,aAAS,sBAAsB,WAAW;AACxC,OAAC,QAAQ,SAAS,QAAQ,EAAE,QAAQ,SAAS,QAAQ;AACnD,eAAO,WAAW,QAAQ,SAAS,KAAK;AACtC,iBAAO,KAAK,QAAQ,QAAQ,GAAG;AAAA,QACvC,CAAO;AAAA,MACP,CAAK;AAAA,IACL;AAEE,IAAAA,SAAQ,sBAAsB,SAAS,QAAQ;AAC7C,UAAI,OAAO,OAAO,WAAW,cAAc,OAAO;AAClD,aAAO,OACH,SAAS;AAAA;AAAA,OAGR,KAAK,eAAe,KAAK,UAAU,sBACpC;AAAA,IACR;AAEE,IAAAA,SAAQ,OAAO,SAAS,QAAQ;AAC9B,UAAI,OAAO,gBAAgB;AACzB,eAAO,eAAe,QAAQ,0BAA0B;AAAA,MAC9D,OAAW;AACL,eAAO,YAAY;AACnB,eAAO,QAAQ,mBAAmB,mBAAmB;AAAA,MAC3D;AACI,aAAO,YAAY,OAAO,OAAO,EAAE;AACnC,aAAO;AAAA,IACX;AAME,IAAAA,SAAQ,QAAQ,SAAS,KAAK;AAC5B,aAAO,EAAE,SAAS,IAAG;AAAA,IACzB;AAEE,aAAS,cAAc,WAAW,aAAa;AAC7C,eAAS,OAAO,QAAQ,KAAK,SAAS,QAAQ;AAC5C,YAAI,SAAS,SAAS,UAAU,MAAM,GAAG,WAAW,GAAG;AACvD,YAAI,OAAO,SAAS,SAAS;AAC3B,iBAAO,OAAO,GAAG;AAAA,QACzB,OAAa;AACL,cAAI,SAAS,OAAO;AACpB,cAAI,QAAQ,OAAO;AACnB,cAAI,SACA,OAAO,UAAU,YACjB,OAAO,KAAK,OAAO,SAAS,GAAG;AACjC,mBAAO,YAAY,QAAQ,MAAM,OAAO,EAAE,KAAK,SAASE,QAAO;AAC7D,qBAAO,QAAQA,QAAO,SAAS,MAAM;AAAA,YACjD,GAAa,SAAS,KAAK;AACf,qBAAO,SAAS,KAAK,SAAS,MAAM;AAAA,YAChD,CAAW;AAAA,UACX;AAEQ,iBAAO,YAAY,QAAQ,KAAK,EAAE,KAAK,SAAS,WAAW;AAIzD,mBAAO,QAAQ;AACf,oBAAQ,MAAM;AAAA,UACxB,GAAW,SAAS,OAAO;AAGjB,mBAAO,OAAO,SAAS,OAAO,SAAS,MAAM;AAAA,UACvD,CAAS;AAAA,QACT;AAAA,MACA;AAEI,UAAI;AAEJ,eAAS,QAAQ,QAAQ,KAAK;AAC5B,iBAAS,6BAA6B;AACpC,iBAAO,IAAI,YAAY,SAAS,SAAS,QAAQ;AAC/C,mBAAO,QAAQ,KAAK,SAAS,MAAM;AAAA,UAC7C,CAAS;AAAA,QACT;AAEM,eAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAaL,kBAAkB,gBAAgB;AAAA,UAChC;AAAA;AAAA;AAAA,UAGA;AAAA,YACE,2BAA0B;AAAA,MACtC;AAII,qBAAe,MAAM,WAAW,EAAE,OAAO,QAAO,CAAE;AAAA,IACtD;AAEE,0BAAsB,cAAc,SAAS;AAC7C,WAAO,cAAc,WAAW,qBAAqB,WAAY;AAC/D,aAAO;AAAA,IACX,CAAG;AACD,IAAAF,SAAQ,gBAAgB;AAKxB,IAAAA,SAAQ,QAAQ,SAAS,SAAS,SAAS,MAAM,aAAa,aAAa;AACzE,UAAI,gBAAgB,OAAQ,eAAc;AAE1C,UAAI,OAAO,IAAI;AAAA,QACb,KAAK,SAAS,SAAS,MAAM,WAAW;AAAA,QACxC;AAAA,MACN;AAEI,aAAOA,SAAQ,oBAAoB,OAAO,IACtC,OACA,KAAK,KAAI,EAAG,KAAK,SAAS,QAAQ;AAChC,eAAO,OAAO,OAAO,OAAO,QAAQ,KAAK,KAAI;AAAA,MACvD,CAAS;AAAA,IACT;AAEE,aAAS,iBAAiB,SAAS,MAAM,SAAS;AAChD,UAAI,QAAQ;AAEZ,aAAO,SAAS,OAAO,QAAQ,KAAK;AAClC,YAAI,UAAU,mBAAmB;AAC/B,gBAAM,IAAI,MAAM,8BAA8B;AAAA,QACtD;AAEM,YAAI,UAAU,mBAAmB;AAC/B,cAAI,WAAW,SAAS;AACtB,kBAAM;AAAA,UAChB;AAIQ,iBAAO,WAAU;AAAA,QACzB;AAEM,gBAAQ,SAAS;AACjB,gBAAQ,MAAM;AAEd,eAAO,MAAM;AACX,cAAI,WAAW,QAAQ;AACvB,cAAI,UAAU;AACZ,gBAAI,iBAAiB,oBAAoB,UAAU,OAAO;AAC1D,gBAAI,gBAAgB;AAClB,kBAAI,mBAAmB,iBAAkB;AACzC,qBAAO;AAAA,YACnB;AAAA,UACA;AAEQ,cAAI,QAAQ,WAAW,QAAQ;AAG7B,oBAAQ,OAAO,QAAQ,QAAQ,QAAQ;AAAA,UAEjD,WAAmB,QAAQ,WAAW,SAAS;AACrC,gBAAI,UAAU,wBAAwB;AACpC,sBAAQ;AACR,oBAAM,QAAQ;AAAA,YAC1B;AAEU,oBAAQ,kBAAkB,QAAQ,GAAG;AAAA,UAE/C,WAAmB,QAAQ,WAAW,UAAU;AACtC,oBAAQ,OAAO,UAAU,QAAQ,GAAG;AAAA,UAC9C;AAEQ,kBAAQ;AAER,cAAI,SAAS,SAAS,SAAS,MAAM,OAAO;AAC5C,cAAI,OAAO,SAAS,UAAU;AAG5B,oBAAQ,QAAQ,OACZ,oBACA;AAEJ,gBAAI,OAAO,QAAQ,kBAAkB;AACnC;AAAA,YACZ;AAEU,mBAAO;AAAA,cACL,OAAO,OAAO;AAAA,cACd,MAAM,QAAQ;AAAA,YAC1B;AAAA,UAEA,WAAmB,OAAO,SAAS,SAAS;AAClC,oBAAQ;AAGR,oBAAQ,SAAS;AACjB,oBAAQ,MAAM,OAAO;AAAA,UAC/B;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAME,aAAS,oBAAoB,UAAU,SAAS;AAC9C,UAAI,aAAa,QAAQ;AACzB,UAAI,SAAS,SAAS,SAAS,UAAU;AACzC,UAAI,WAAWC,aAAW;AAIxB,gBAAQ,WAAW;AAGnB,YAAI,eAAe,WAAW,SAAS,SAAS,QAAQ,GAAG;AAGzD,kBAAQ,SAAS;AACjB,kBAAQ,MAAMA;AACd,8BAAoB,UAAU,OAAO;AAErC,cAAI,QAAQ,WAAW,SAAS;AAG9B,mBAAO;AAAA,UACjB;AAAA,QACA;AACM,YAAI,eAAe,UAAU;AAC3B,kBAAQ,SAAS;AACjB,kBAAQ,MAAM,IAAI;AAAA,YAChB,sCAAsC,aAAa;AAAA,UAAU;AAAA,QACvE;AAEM,eAAO;AAAA,MACb;AAEI,UAAI,SAAS,SAAS,QAAQ,SAAS,UAAU,QAAQ,GAAG;AAE5D,UAAI,OAAO,SAAS,SAAS;AAC3B,gBAAQ,SAAS;AACjB,gBAAQ,MAAM,OAAO;AACrB,gBAAQ,WAAW;AACnB,eAAO;AAAA,MACb;AAEI,UAAI,OAAO,OAAO;AAElB,UAAI,CAAE,MAAM;AACV,gBAAQ,SAAS;AACjB,gBAAQ,MAAM,IAAI,UAAU,kCAAkC;AAC9D,gBAAQ,WAAW;AACnB,eAAO;AAAA,MACb;AAEI,UAAI,KAAK,MAAM;AAGb,gBAAQ,SAAS,UAAU,IAAI,KAAK;AAGpC,gBAAQ,OAAO,SAAS;AAQxB,YAAI,QAAQ,WAAW,UAAU;AAC/B,kBAAQ,SAAS;AACjB,kBAAQ,MAAMA;AAAAA,QACtB;AAAA,MAEA,OAAW;AAEL,eAAO;AAAA,MACb;AAII,cAAQ,WAAW;AACnB,aAAO;AAAA,IACX;AAIE,0BAAsB,EAAE;AAExB,WAAO,IAAI,mBAAmB,WAAW;AAOzC,WAAO,IAAI,gBAAgB,WAAW;AACpC,aAAO;AAAA,IACX,CAAG;AAED,WAAO,IAAI,YAAY,WAAW;AAChC,aAAO;AAAA,IACX,CAAG;AAED,aAAS,aAAa,MAAM;AAC1B,UAAI,QAAQ,EAAE,QAAQ,KAAK,CAAC,EAAC;AAE7B,UAAI,KAAK,MAAM;AACb,cAAM,WAAW,KAAK,CAAC;AAAA,MAC7B;AAEI,UAAI,KAAK,MAAM;AACb,cAAM,aAAa,KAAK,CAAC;AACzB,cAAM,WAAW,KAAK,CAAC;AAAA,MAC7B;AAEI,WAAK,WAAW,KAAK,KAAK;AAAA,IAC9B;AAEE,aAAS,cAAc,OAAO;AAC5B,UAAI,SAAS,MAAM,cAAc,CAAA;AACjC,aAAO,OAAO;AACd,aAAO,OAAO;AACd,YAAM,aAAa;AAAA,IACvB;AAEE,aAAS,QAAQ,aAAa;AAI5B,WAAK,aAAa,CAAC,EAAE,QAAQ,OAAM,CAAE;AACrC,kBAAY,QAAQ,cAAc,IAAI;AACtC,WAAK,MAAM,IAAI;AAAA,IACnB;AAEE,IAAAD,SAAQ,OAAO,SAAS,KAAK;AAC3B,UAAI,SAAS,OAAO,GAAG;AACvB,UAAI,OAAO,CAAA;AACX,eAAS,OAAO,QAAQ;AACtB,aAAK,KAAK,GAAG;AAAA,MACnB;AACI,WAAK,QAAO;AAIZ,aAAO,SAAS,OAAO;AACrB,eAAO,KAAK,QAAQ;AAClB,cAAIG,OAAM,KAAK,IAAG;AAClB,cAAIA,QAAO,QAAQ;AACjB,iBAAK,QAAQA;AACb,iBAAK,OAAO;AACZ,mBAAO;AAAA,UACjB;AAAA,QACA;AAKM,aAAK,OAAO;AACZ,eAAO;AAAA,MACb;AAAA,IACA;AAEE,aAAS,OAAO,UAAU;AACxB,UAAI,UAAU;AACZ,YAAI,iBAAiB,SAAS,cAAc;AAC5C,YAAI,gBAAgB;AAClB,iBAAO,eAAe,KAAK,QAAQ;AAAA,QAC3C;AAEM,YAAI,OAAO,SAAS,SAAS,YAAY;AACvC,iBAAO;AAAA,QACf;AAEM,YAAI,CAAC,MAAM,SAAS,MAAM,GAAG;AAC3B,cAAI,IAAI,IAAI,OAAO,SAASC,QAAO;AACjC,mBAAO,EAAE,IAAI,SAAS,QAAQ;AAC5B,kBAAI,OAAO,KAAK,UAAU,CAAC,GAAG;AAC5B,gBAAAA,MAAK,QAAQ,SAAS,CAAC;AACvB,gBAAAA,MAAK,OAAO;AACZ,uBAAOA;AAAA,cACrB;AAAA,YACA;AAEU,YAAAA,MAAK,QAAQH;AACb,YAAAG,MAAK,OAAO;AAEZ,mBAAOA;AAAA,UACjB;AAEQ,iBAAO,KAAK,OAAO;AAAA,QAC3B;AAAA,MACA;AAGI,aAAO,EAAE,MAAM,WAAU;AAAA,IAC7B;AACE,IAAAJ,SAAQ,SAAS;AAEjB,aAAS,aAAa;AACpB,aAAO,EAAE,OAAOC,aAAW,MAAM,KAAI;AAAA,IACzC;AAEE,YAAQ,YAAY;AAAA,MAClB,aAAa;AAAA,MAEb,OAAO,SAAS,eAAe;AAC7B,aAAK,OAAO;AACZ,aAAK,OAAO;AAGZ,aAAK,OAAO,KAAK,QAAQA;AACzB,aAAK,OAAO;AACZ,aAAK,WAAW;AAEhB,aAAK,SAAS;AACd,aAAK,MAAMA;AAEX,aAAK,WAAW,QAAQ,aAAa;AAErC,YAAI,CAAC,eAAe;AAClB,mBAAS,QAAQ,MAAM;AAErB,gBAAI,KAAK,OAAO,CAAC,MAAM,OACnB,OAAO,KAAK,MAAM,IAAI,KACtB,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG;AAC1B,mBAAK,IAAI,IAAIA;AAAAA,YACzB;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,MAEI,MAAM,WAAW;AACf,aAAK,OAAO;AAEZ,YAAI,YAAY,KAAK,WAAW,CAAC;AACjC,YAAI,aAAa,UAAU;AAC3B,YAAI,WAAW,SAAS,SAAS;AAC/B,gBAAM,WAAW;AAAA,QACzB;AAEM,eAAO,KAAK;AAAA,MAClB;AAAA,MAEI,mBAAmB,SAAS,WAAW;AACrC,YAAI,KAAK,MAAM;AACb,gBAAM;AAAA,QACd;AAEM,YAAI,UAAU;AACd,iBAAS,OAAO,KAAK,QAAQ;AAC3B,iBAAO,OAAO;AACd,iBAAO,MAAM;AACb,kBAAQ,OAAO;AAEf,cAAI,QAAQ;AAGV,oBAAQ,SAAS;AACjB,oBAAQ,MAAMA;AAAAA,UACxB;AAEQ,iBAAO,CAAC,CAAE;AAAA,QAClB;AAEM,iBAAS,IAAI,KAAK,WAAW,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AACpD,cAAI,QAAQ,KAAK,WAAW,CAAC;AAC7B,cAAI,SAAS,MAAM;AAEnB,cAAI,MAAM,WAAW,QAAQ;AAI3B,mBAAO,OAAO,KAAK;AAAA,UAC7B;AAEQ,cAAI,MAAM,UAAU,KAAK,MAAM;AAC7B,gBAAI,WAAW,OAAO,KAAK,OAAO,UAAU;AAC5C,gBAAI,aAAa,OAAO,KAAK,OAAO,YAAY;AAEhD,gBAAI,YAAY,YAAY;AAC1B,kBAAI,KAAK,OAAO,MAAM,UAAU;AAC9B,uBAAO,OAAO,MAAM,UAAU,IAAI;AAAA,cAChD,WAAuB,KAAK,OAAO,MAAM,YAAY;AACvC,uBAAO,OAAO,MAAM,UAAU;AAAA,cAC5C;AAAA,YAEA,WAAqB,UAAU;AACnB,kBAAI,KAAK,OAAO,MAAM,UAAU;AAC9B,uBAAO,OAAO,MAAM,UAAU,IAAI;AAAA,cAChD;AAAA,YAEA,WAAqB,YAAY;AACrB,kBAAI,KAAK,OAAO,MAAM,YAAY;AAChC,uBAAO,OAAO,MAAM,UAAU;AAAA,cAC5C;AAAA,YAEA,OAAiB;AACL,oBAAM,IAAI,MAAM,wCAAwC;AAAA,YACpE;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,MAEI,QAAQ,SAAS,MAAM,KAAK;AAC1B,iBAAS,IAAI,KAAK,WAAW,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AACpD,cAAI,QAAQ,KAAK,WAAW,CAAC;AAC7B,cAAI,MAAM,UAAU,KAAK,QACrB,OAAO,KAAK,OAAO,YAAY,KAC/B,KAAK,OAAO,MAAM,YAAY;AAChC,gBAAI,eAAe;AACnB;AAAA,UACV;AAAA,QACA;AAEM,YAAI,iBACC,SAAS,WACT,SAAS,eACV,aAAa,UAAU,OACvB,OAAO,aAAa,YAAY;AAGlC,yBAAe;AAAA,QACvB;AAEM,YAAI,SAAS,eAAe,aAAa,aAAa,CAAA;AACtD,eAAO,OAAO;AACd,eAAO,MAAM;AAEb,YAAI,cAAc;AAChB,eAAK,SAAS;AACd,eAAK,OAAO,aAAa;AACzB,iBAAO;AAAA,QACf;AAEM,eAAO,KAAK,SAAS,MAAM;AAAA,MACjC;AAAA,MAEI,UAAU,SAAS,QAAQ,UAAU;AACnC,YAAI,OAAO,SAAS,SAAS;AAC3B,gBAAM,OAAO;AAAA,QACrB;AAEM,YAAI,OAAO,SAAS,WAChB,OAAO,SAAS,YAAY;AAC9B,eAAK,OAAO,OAAO;AAAA,QAC3B,WAAiB,OAAO,SAAS,UAAU;AACnC,eAAK,OAAO,KAAK,MAAM,OAAO;AAC9B,eAAK,SAAS;AACd,eAAK,OAAO;AAAA,QACpB,WAAiB,OAAO,SAAS,YAAY,UAAU;AAC/C,eAAK,OAAO;AAAA,QACpB;AAEM,eAAO;AAAA,MACb;AAAA,MAEI,QAAQ,SAAS,YAAY;AAC3B,iBAAS,IAAI,KAAK,WAAW,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AACpD,cAAI,QAAQ,KAAK,WAAW,CAAC;AAC7B,cAAI,MAAM,eAAe,YAAY;AACnC,iBAAK,SAAS,MAAM,YAAY,MAAM,QAAQ;AAC9C,0BAAc,KAAK;AACnB,mBAAO;AAAA,UACjB;AAAA,QACA;AAAA,MACA;AAAA,MAEI,SAAS,SAAS,QAAQ;AACxB,iBAAS,IAAI,KAAK,WAAW,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AACpD,cAAI,QAAQ,KAAK,WAAW,CAAC;AAC7B,cAAI,MAAM,WAAW,QAAQ;AAC3B,gBAAI,SAAS,MAAM;AACnB,gBAAI,OAAO,SAAS,SAAS;AAC3B,kBAAI,SAAS,OAAO;AACpB,4BAAc,KAAK;AAAA,YAC/B;AACU,mBAAO;AAAA,UACjB;AAAA,QACA;AAIM,cAAM,IAAI,MAAM,uBAAuB;AAAA,MAC7C;AAAA,MAEI,eAAe,SAAS,UAAU,YAAY,SAAS;AACrD,aAAK,WAAW;AAAA,UACd,UAAU,OAAO,QAAQ;AAAA,UACzB;AAAA,UACA;AAAA,QACR;AAEM,YAAI,KAAK,WAAW,QAAQ;AAG1B,eAAK,MAAMA;AAAAA,QACnB;AAEM,eAAO;AAAA,MACb;AAAA,IACA;AAME,WAAOD;AAAA,EAET;AAAA;AAAA;AAAA;AAAA;AAAA,IAK+BK,QAAO;AAAA,EACtC;AAEA,MAAI;AACF,yBAAqBN;AAAA,EACvB,SAAS,sBAAsB;AAW7B,QAAI,OAAO,eAAe,UAAU;AAClC,iBAAW,qBAAqBA;AAAA,IACpC,OAAS;AACL,eAAS,KAAK,wBAAwB,EAAEA,QAAO;AAAA,IACnD;AAAA,EACA;;ACtvBA,IAAAO,UAAiB,CAAC,QAAQ,QACxB,GAAG,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;ACD5D,MAAMA,UAAQC;AAEd,IAAI,aAAa;AAEjB,IAAAC,cAAiB,CAAC;AAAA,EAChB,IAAI;AAAA,EACJ;AAAA,EACA,UAAU,CAAA;AACZ,MAAM;AACJ,MAAI,KAAK;AACT,MAAI,OAAO,OAAO,aAAa;AAC7B,SAAKF,QAAM,OAAO,UAAU;AAC5B,kBAAc;AAAA,EAClB;AAEE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA;;ACpBA,IAAI,UAAU;AAEdG,MAAA,UAAkB;AAElBA,MAAA,aAAqB,CAAC,aAAa;AACjC,YAAU;AACZ;AAEAA,MAAA,MAAc,IAAI,SAAU,UAAU,QAAQ,IAAI,MAAMC,QAAM,IAAI,IAAI;ACRtE,MAAMF,cAAYD;AAClB,MAAM,EAAA,KAAEE,MAAG,IAAKE;AAChB,MAAML,UAAQM;AAEd,IAAI,mBAAmB;AAEvB,IAAAC,oBAAiB,MAAM;AACrB,QAAM,KAAKP,QAAM,aAAa,gBAAgB;AAC9C,QAAM,UAAU,CAAA;AAChB,QAAM,iBAAiB,CAAA;AACvB,MAAI,WAAW,CAAA;AAEf,sBAAoB;AAEpB,QAAM,cAAc,MAAM,SAAS;AACnC,QAAM,gBAAgB,MAAM,OAAO,KAAK,OAAO,EAAE;AAEjD,QAAM,UAAU,MAAM;AACpB,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,OAAO,OAAO,KAAK,OAAO;AAChC,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AACvC,YAAI,OAAO,eAAe,KAAK,CAAC,CAAC,MAAM,aAAa;AAClD,mBAAS,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC;AAC5B;AAAA,QACV;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAEE,QAAM,QAAQ,CAAC,QAAQ,YACrB,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,UAAM,MAAME,YAAU,EAAE,QAAQ,QAAO,CAAE;AACzC,aAAS,KAAK,CAAO,MAAM;AACzB,eAAS,MAAK;AACd,qBAAe,EAAE,EAAE,IAAI;AACvB,UAAI;AACF,gBAAQ,MAAM,EAAE,MAAM,EAAE,MAAME,QAAM,CAAC,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC;AAAA,MACnE,SAAiB,KAAK;AACZ,eAAO,GAAG;AAAA,MACpB,UAAS;AACC,eAAO,eAAe,EAAE,EAAE;AAC1B,gBAAO;AAAA,MACjB;AAAA,IACA,EAAO;AACDD,UAAI,IAAI,EAAE,UAAU,IAAI,EAAE,cAAc;AACxCA,UAAI,IAAI,EAAE,sBAAsB,SAAS,MAAM,EAAE;AACjD,YAAO;AAAA,EACb,CAAK;AAGH,QAAM,YAAY,CAAC,MAAM;AACvB,YAAQ,EAAE,EAAE,IAAI;AAChBA,UAAI,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;AAC1BA,UAAI,IAAI,EAAE,wBAAwB,cAAa,CAAE,EAAE;AACnD,YAAO;AACP,WAAO,EAAE;AAAA,EACb;AAEE,QAAM,SAAS,CAAO,WAAW,YAAY;AAC3C,QAAI,cAAa,MAAO,GAAG;AACzB,YAAM,MAAM,IAAI,EAAE,4DAA4D;AAAA,IACpF;AACI,WAAO,MAAM,QAAQ,OAAO;AAAA,EAChC;AAEE,QAAM,YAAY,MAAY;AAC5B,WAAO,KAAK,OAAO,EAAE,QAAQ,CAAO,QAAQ;AAC1C,YAAM,QAAQ,GAAG,EAAE,UAAS;AAAA,IAClC,EAAK;AACD,eAAW,CAAA;AAAA,EACf;AAEE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA;;IC/EA,iBAAiB,CAAC,QAAQ;AACxB,QAAM,MAAM,CAAA;AAEZ,MAAI,OAAO,sBAAsB,aAAa;AAC5C,QAAI,OAAO;AAAA,EAAA,WACF,OAAO,aAAa,UAAU;AACvC,QAAI,OAAO;AAAA,EAAA,WACF,OAAO,2BAAY,YAAY,OAAOK,qBAAAA,oBAAY,YAAY;AACvE,QAAI,OAAO;AAAA,EAAA;AAGb,MAAI,OAAO,QAAQ,aAAa;AAC9B,WAAO;AAAA,EAAA;AAGT,SAAO,IAAI,GAAG;AAChB;AChBA,MAAM,YAAYP,eAA4B,MAAM,MAAM;AAE1D,MAAM,aAAa,YAAY,OAAM,IAAI,IAAI,GAAG,OAAO,SAAS,IAAI,EAAG,OAAO,OAAK;IAEnFQ,iBAAiB,CAAC,YAAY;AAC5B,QAAM,OAAO,mBAAK;AAClB,GAAC,YAAY,cAAc,UAAU,EAAE,QAAQ,CAAC,QAAQ;AACtD,QAAI,QAAQ,GAAG,GAAG;AAChB,WAAK,GAAG,IAAI,WAAW,KAAK,GAAG,CAAC;AAAA,IACtC;AAAA,EACA,CAAG;AACD,SAAO;AACT;ACNA,IAAAC,QAAiB;AAAA,EACf,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,yBAAyB;AAAA,EACzB,SAAS;AACX;;;;;ACXA,IAAAC,mBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf,eAAe;AAAA,EACf,QAAQ,MAAM;AAAA,EAAA;AAChB;ACRA,MAAM,UAAU,WAAiC;AACjD,MAAMA,mBAAiBN;AAKvB,IAAA,mBAAiB,iCACZM,mBADY;AAAA,EAEf,YAAY,8CAA8C,OAAO;AACnE;ACFA,IAAAC,gBAAiB,CAAC,EAAE,YAAY,oBAAoB;AAClD,MAAI;AACJ,MAAI,QAAQ,OAAO,eAAe;AAChC,UAAM,OAAO,IAAI,KAAK,CAAC,kBAAkB,UAAU,KAAK,GAAG;AAAA,MACzD,MAAM;AAAA,IACZ,CAAK;AACD,aAAS,IAAI,OAAO,IAAI,gBAAgB,IAAI,CAAC;AAAA,EACjD,OAAS;AACL,aAAS,IAAI,OAAO,UAAU;AAAA,EAClC;AAEE,SAAO;AACT;ICZAC,oBAAiB,CAAC,WAAW;AAC3B,SAAO,UAAS;AAClB;ACTA,IAAAC,cAAiB,CAAC,QAAQ,YAAY;AACpC,SAAO,YAAY,CAAC,EAAE,WAAW;AAC/B,YAAQ,IAAI;AAAA,EAChB;AACA;ACGA,IAAAC,SAAiB,CAAO,QAAQ,WAAW;AACzC,SAAO,YAAY,MAAM;AAC3B;ACFA,MAAM,qBAAqB,CAAC,SAC1B,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,QAAM,aAAa,IAAI,WAAU;AACjC,aAAW,SAAS,MAAM;AACxB,YAAQ,WAAW,MAAM;AAAA,EAC/B;AACI,aAAW,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAI,EAAE,QAAS;AACxD,WAAO,MAAM,gCAAgC,IAAI,EAAE,CAAC;AAAA,EAC1D;AACI,aAAW,kBAAkB,IAAI;AACrC,CAAG;AAUH,MAAMC,cAAY,CAAO,UAAU;AACjC,MAAI,OAAO;AACX,MAAI,OAAO,UAAU,aAAa;AAChC,WAAO;AAAA,EACX;AAEE,MAAI,OAAO,UAAU,UAAU;AAE7B,QAAI,yCAAyC,KAAK,KAAK,GAAG;AACxD,aAAO,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,EAC5B,MAAM,EAAE,EACR,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAAA,IACnC,OAAW;AACL,YAAM,OAAO,MAAM,MAAM,KAAK;AAC9B,aAAO,MAAM,KAAK,YAAW;AAAA,IACnC;AAAA,EACA,WAAa,OAAO,gBAAgB,eAAe,iBAAiB,aAAa;AAC7E,QAAI,MAAM,YAAY,OAAO;AAC3B,aAAO,MAAMA,YAAU,MAAM,GAAG;AAAA,IACtC;AACI,QAAI,MAAM,YAAY,SAAS;AAC7B,aAAO,MAAMA,YAAU,MAAM,MAAM;AAAA,IACzC;AACI,QAAI,MAAM,YAAY,UAAU;AAC9B,YAAM,IAAI,QAAQ,CAAC,YAAY;AAC7B,cAAM,OAAO,CAAO,SAAS;AAC3B,iBAAO,MAAM,mBAAmB,IAAI;AACpC,kBAAO;AAAA,QACjB,EAAS;AAAA,MACT,CAAO;AAAA,IACP;AAAA,EACA,WAAa,OAAO,oBAAoB,eAAe,iBAAiB,iBAAiB;AACrF,UAAM,OAAO,MAAM,MAAM,cAAa;AACtC,WAAO,MAAM,mBAAmB,IAAI;AAAA,EACxC,WAAa,iBAAiB,QAAQ,iBAAiB,MAAM;AACzD,WAAO,MAAM,mBAAmB,KAAK;AAAA,EACzC;AAEE,SAAO,IAAI,WAAW,IAAI;AAC5B;AAEA,IAAA,cAAiBA;AC3DjB,MAAML,mBAAiBV;AACvB,MAAMW,gBAAcP;AACpB,MAAMQ,oBAAkBP;AACxB,MAAMQ,cAAYG;AAClB,MAAMF,SAAOG;AACb,MAAMF,cAAYG;AAElB,IAAA,UAAiB;AAAA,EACjB,gBAAER;AAAAA,EACF,aAAEC;AAAAA,EACF,iBAAEC;AAAAA,EACF,WAAEC;AAAAA,EACF,MAAEC;AAAAA,EACF,WAAEC;AACF;ACvBA,MAAM,eAAef;AACrB,MAAM,YAAYI;AAClB,MAAM,EAAE,IAAG,IAAKC;AAChB,MAAM,QAAQW;AACd,MAAMP,QAAMQ;AACZ,MAAM;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAIC;AAEJ,IAAI,gBAAgB;AAEpB,IAAAC,iBAAiB,IAA0E,4CAAnE,QAAQ,OAAO,MAAMV,MAAI,WAAW,WAAW,CAAA,GAAI,SAAS,IAAO;AACzF,QAAM,KAAK,MAAM,UAAU,aAAa;AACxC,QAII,kBAAa,kCACZ,iBACA,SACJ,GANC;AAAA;AAAA,IACA;AAAA,MAEE,IADC,oBACD,IADC;AAAA,IAFH;AAAA,IACA;AAAA;AAMF,QAAM,WAAW,CAAA;AAIjB,QAAM,eAAe,OAAO,UAAU,WAAW,MAAM,MAAM,GAAG,IAAI;AACpE,MAAI,aAAa;AACjB,MAAI,gBAAgB;AACpB,QAAM,eAAe,CAACA,MAAI,SAASA,MAAI,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,QAAQ;AAE5E,MAAI;AACJ,MAAI;AACJ,QAAM,YAAY,IAAI,QAAQ,CAAC,SAAS,WAAW;AACjD,uBAAmB;AACnB,sBAAkB;AAAA,EACtB,CAAG;AACD,QAAM,cAAc,CAAC,UAAU;AAAE,oBAAgB,MAAM,OAAO;AAAA;AAE9D,MAAI,SAAS,YAAY,OAAO;AAChC,SAAO,UAAU;AAEjB,mBAAiB;AAEjB,QAAM,WAAW,CAAC,EAAE,IAAI,OAAO,QAAQ,QAAO,MAC5C,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,QAAI,IAAI,EAAE,YAAY,KAAK,YAAY,MAAM,EAAE;AAE/C,UAAM,YAAY,GAAG,MAAM,IAAI,KAAK;AACpC,aAAS,SAAS,IAAI,EAAE,SAAS,OAAM;AACvC,SAAK,QAAQ;AAAA,MACX,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACR,CAAO;AAAA,EACP,CAAK;AAGH,QAAM,OAAO,MACX,QAAQ,KAAK,qFAAqF;AAGpG,QAAM,eAAe,CAAC,UACpB,SAAS,UAAU;AAAA,IACjB,IAAI;AAAA,IAAO,QAAQ;AAAA,IAAQ,SAAS,EAAE,SAAS,EAAE,UAAU,cAAc,UAAU,QAAQ,UAAU,SAAS,QAAQ,UAAS;AAAA,EACrI,CAAK,CAAC;AAGJ,QAAM,YAAY,CAAC,MAAM,MAAM,UAC7B,SAAS,UAAU;AAAA,IACjB,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS,EAAE,QAAQ,aAAa,MAAM,CAAC,MAAM,IAAI,EAAC;AAAA,EACxD,CAAK,CAAC;AAGJ,QAAM,WAAW,CAAC,MAAM,UACtB,SAAS,UAAU;AAAA,IACjB,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS,EAAE,QAAQ,YAAY,MAAM,CAAC,MAAM,EAAE,UAAU,OAAM,CAAE,EAAC;AAAA,EACvE,CAAK,CAAC;AAGJ,QAAM,aAAa,CAAC,MAAM,UACxB,SAAS,UAAU;AAAA,IACjB,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS,EAAE,QAAQ,UAAU,MAAM,CAAC,IAAI,EAAC;AAAA,EAC/C,CAAK,CAAC;AAGJ,QAAM,KAAK,CAAC,QAAQ,MAAM,UACxB,SAAS,UAAU;AAAA,IACjB,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS,EAAE,QAAQ,KAAI;AAAA,EAC7B,CAAK,CAAC;AAGJ,QAAM,uBAAuB,CAAC,QAAQ,UAAU,SAAS,UAAU;AAAA,IACjE,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,QACP,UAAU,QAAQ;AAAA,QAClB,UAAU,QAAQ;AAAA,QAClB,WAAW,QAAQ;AAAA,QACnB,aAAa,QAAQ;AAAA,QACrB,MAAM,QAAQ;AAAA,QACd,UAAU,CAACA,MAAI,SAASA,MAAI,SAAS,EAAE,SAAS,UAAU,KACrD,CAAC,QAAQ;AAAA,MACtB;AAAA,IACA;AAAA,EACA,CAAG,CAAC;AAEF,QAAM,qBAAqB,CAAC,QAAQ,MAAM,SAAS,UACjD,SAAS,UAAU;AAAA,IACjB,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS,EAAE,OAAO,QAAQ,KAAK,MAAM,QAAQ,QAAO;AAAA,EAC1D,CAAK,CAAC;AAGJ,QAAM,eAAe,CAACW,SAAQ,OAAOC,MAAKC,SAAQ,UAAU;AAE1D,QAAI,gBAAgB,CAACb,MAAI,gBAAgBA,MAAI,uBAAuB,EAAE,SAASY,IAAG,EAAG,OAAM,MAAM,0CAA0C;AAE3I,UAAM,OAAOA,QAAO;AACpB,iBAAa;AAEb,UAAM,UAAUC,WAAU;AAC1B,oBAAgB;AAOhB,UAAM,WAAW,OAAOF,WAAU,WAAWA,OAAM,MAAM,GAAG,IAAIA;AAChE,UAAM,SAAS,SAAS,OAAO,CAAC,MAAM,CAAC,aAAa,SAAS,CAAC,CAAC;AAC/D,iBAAa,KAAK,GAAG,MAAM;AAE3B,QAAI,OAAO,SAAS,GAAG;AACrB,aAAO,qBAAqB,QAAQ,KAAK,EACtC,KAAK,MAAM,mBAAmBA,QAAO,MAAM,SAAS,KAAK,CAAC;AAAA,IACnE;AAEI,WAAO,mBAAmBA,QAAO,MAAM,SAAS,KAAK;AAAA,EACzD;AAEE,QAAM,gBAAgB,CAAC,SAAS,CAAA,GAAI,UAClC,SAAS,UAAU;AAAA,IACjB,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS,EAAE,OAAM;AAAA,EACvB,CAAK,CAAC;AAGJ,QAAMG,aAAY,CAAOC,QAEjB,yBAFiBA,KAEjB,mBAFiB,OAAO,OAAO,CAAA,GAAI,SAAS;AAAA,IAClD,MAAM;AAAA,EACV,GAAK,OAAK;AACN,oBAAS,UAAU;AAAA,MACjB,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,SAAS,EAAE,OAAO,MAAM,UAAU,KAAK,GAAG,SAAS,MAAM,OAAM;AAAA,IACrE,CAAK,CAAC;AAAA;AAGJ,QAAMC,UAAS,CAAO,OAAO,UAAU;AACrC,QAAI,aAAc,OAAM,MAAM,8DAA8D;AAE5F,WAAO,SAAS,UAAU;AAAA,MACxB,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,SAAS,EAAE,OAAO,MAAM,UAAU,KAAK,EAAC;AAAA,IAC9C,CAAK,CAAC;AAAA,EACN;AAEE,QAAM,YAAY,MAAY;AAC5B,QAAI,WAAW,MAAM;AAOnB,sBAAgB,MAAM;AACtB,eAAS;AAAA,IACf;AACI,WAAO,QAAQ,QAAO;AAAA,EAC1B;AAEE,YAAU,QAAQ,CAAC;AAAA,IACjB;AAAA,IAAU;AAAA,IAAO;AAAA,IAAQ;AAAA,IAAQ;AAAA,EACrC,MAAQ;AACJ,UAAM,YAAY,GAAG,MAAM,IAAI,KAAK;AACpC,QAAI,WAAW,WAAW;AACxB,UAAI,IAAI,QAAQ,eAAe,KAAK,EAAE;AACtC,eAAS,SAAS,EAAE,QAAQ,EAAE,OAAO,KAAI,CAAE;AAC3C,aAAO,SAAS,SAAS;AAAA,IAC/B,WAAe,WAAW,UAAU;AAC9B,eAAS,SAAS,EAAE,OAAO,IAAI;AAC/B,aAAO,SAAS,SAAS;AACzB,UAAI,WAAW,OAAQ,iBAAgB,IAAI;AAC3C,UAAI,cAAc;AAChB,qBAAa,IAAI;AAAA,MACzB,OAAa;AACL,cAAM,MAAM,IAAI;AAAA,MACxB;AAAA,IACA,WAAe,WAAW,YAAY;AAChC,aAAO,iCAAK,OAAL,EAAW,WAAW,MAAK,EAAE;AAAA,IAC1C;AAAA,EACA,CAAG;AAED,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAAF;AAAA,IACA,QAAAE;AAAA,IACA;AAAA,EACJ;AAEE,eAAY,EACT,KAAK,MAAM,qBAAqB,KAAK,CAAC,EACtC,KAAK,MAAM,mBAAmB,OAAO,KAAK,MAAM,CAAC,EACjD,KAAK,MAAM,iBAAiB,UAAU,CAAC,EACvC,MAAM,MAAM;AAAA,EAAA,CAAE;AAEjB,SAAO;AACT;ACnPA,MAAMN,iBAAenB;AAErB,MAAM,YAAY,CAAO,OAAO,OAAO,YAAY;AACjD,QAAM,SAAS,MAAMmB,eAAa,OAAO,GAAG,OAAO;AACnD,SAAO,OAAO,UAAU,KAAK,EAC1B,QAAQ,MAAY;AACnB,UAAM,OAAO,UAAS;AAAA,EAC5B,EAAK;AACL;AAEA,MAAM,SAAS,CAAO,OAAO,YAAY;AACvC,QAAM,SAAS,MAAMA,eAAa,OAAO,GAAG,OAAO;AACnD,SAAO,OAAO,OAAO,KAAK,EACvB,QAAQ,MAAY;AACnB,UAAM,OAAO,UAAS;AAAA,EAC5B,EAAK;AACL;AAEA,IAAAO,cAAiB;AAAA,EACf;AAAA,EACA;AACF;AC6FA,IAAAC,cAAiB;AAAA,EACf,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,UAAU;AAAA,EACV,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,UAAU;AAAA,EACV,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]}
1
+ {"version":3,"file":"merchant-profile.cjs","sources":["../node_modules/regenerator-runtime/runtime.js","../node_modules/tesseract.js/src/utils/getId.js","../node_modules/tesseract.js/src/createJob.js","../node_modules/tesseract.js/src/utils/log.js","../node_modules/tesseract.js/src/createScheduler.js","../node_modules/tesseract.js/src/utils/getEnvironment.js","../node_modules/tesseract.js/src/utils/resolvePaths.js","../node_modules/tesseract.js/src/constants/OEM.js","../node_modules/tesseract.js/src/constants/defaultOptions.js","../node_modules/tesseract.js/src/worker/browser/defaultOptions.js","../node_modules/tesseract.js/src/worker/browser/spawnWorker.js","../node_modules/tesseract.js/src/worker/browser/terminateWorker.js","../node_modules/tesseract.js/src/worker/browser/onMessage.js","../node_modules/tesseract.js/src/worker/browser/send.js","../node_modules/tesseract.js/src/worker/browser/loadImage.js","../node_modules/tesseract.js/src/worker/browser/index.js","../node_modules/tesseract.js/src/createWorker.js","../node_modules/tesseract.js/src/Tesseract.js","../node_modules/tesseract.js/src/constants/languages.js","../node_modules/tesseract.js/src/constants/PSM.js","../node_modules/tesseract.js/src/index.js","../node_modules/ocr-upload-reader/dist/data-type.js","../node_modules/ocr-upload-reader/dist/extract-data/license.js","../node_modules/ocr-upload-reader/dist/index.js","../src/configs/portalAxiosClient.ts","../src/merchant-profile/services/addressService.ts","../src/merchant-profile/hooks/use-address.ts","../src/merchant-profile/MerchantRegistrationForm/AddressFields.tsx","../src/assets/download.svg","../src/assets/file.svg","../src/merchant-profile/MerchantRegistrationForm/FileUpload.tsx","../src/merchant-profile/services/MCCList.ts","../src/merchant-profile/hooks/useMCCList.ts","../src/merchant-profile/MerchantRegistrationForm/IndustrySelect.tsx","../src/components/ui/input.tsx","../src/merchant-profile/MerchantRegistrationForm/UserTypeForm.tsx","../src/assets/success.svg","../src/merchant-profile/MerchantRegistrationForm/Header.tsx","../src/utils/mapLicenseData.ts","../src/components/ui/confirmModal.tsx","../src/components/ui/error-modal.tsx","../src/components/ui/success-modal.tsx","../src/utils/form.ts","../src/merchant-profile/services/merchantFormService.ts","../src/merchant-profile/hooks/use-create-merchant.ts","../src/merchant-profile/MerchantRegistrationForm/MerchantRegistrationForm.tsx","../src/merchant-profile/MerchantTable/merchantTableAction.tsx","../src/merchant-profile/MerchantTable/merchantTableHeader.tsx","../src/components/common/datePicker.tsx","../src/utils/merchantTableData.ts","../src/merchant-profile/MerchantTable/merchantTableFilter.tsx","../src/merchant-profile/services/merchantService.ts","../src/merchant-profile/hooks/use-merchant-table.ts","../src/merchant-profile/MerchantTable/index.tsx","../src/merchant-profile/MerchantView/AddressFields.tsx","../src/merchant-profile/MerchantView/FileUpload.tsx","../src/merchant-profile/MerchantView/UserTypeForm.tsx","../src/merchant-profile/MerchantView/Header.tsx","../src/merchant-profile/hooks/useMerchantDetail.ts","../src/merchant-profile/MerchantView/index.tsx","../src/merchant-profile/MerchantEdit/AddressFields.tsx","../src/merchant-profile/MerchantEdit/FileUpload.tsx","../src/merchant-profile/MerchantEdit/UserTypeForm.tsx","../src/merchant-profile/MerchantEdit/Header.tsx","../src/merchant-profile/services/editFormService.ts","../src/merchant-profile/hooks/use-edit-merchant.ts","../src/merchant-profile/MerchantEdit/index.tsx"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next mehtod, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","'use strict';\n\nmodule.exports = (prefix, cnt) => (\n `${prefix}-${cnt}-${Math.random().toString(16).slice(3, 8)}`\n);\n","'use strict';\n\nconst getId = require('./utils/getId');\n\nlet jobCounter = 0;\n\nmodule.exports = ({\n id: _id,\n action,\n payload = {},\n}) => {\n let id = _id;\n if (typeof id === 'undefined') {\n id = getId('Job', jobCounter);\n jobCounter += 1;\n }\n\n return {\n id,\n action,\n payload,\n };\n};\n","'use strict';\n\nlet logging = false;\n\nexports.logging = logging;\n\nexports.setLogging = (_logging) => {\n logging = _logging;\n};\n\nexports.log = (...args) => (logging ? console.log.apply(this, args) : null);\n","'use strict';\n\nconst createJob = require('./createJob');\nconst { log } = require('./utils/log');\nconst getId = require('./utils/getId');\n\nlet schedulerCounter = 0;\n\nmodule.exports = () => {\n const id = getId('Scheduler', schedulerCounter);\n const workers = {};\n const runningWorkers = {};\n let jobQueue = [];\n\n schedulerCounter += 1;\n\n const getQueueLen = () => jobQueue.length;\n const getNumWorkers = () => Object.keys(workers).length;\n\n const dequeue = () => {\n if (jobQueue.length !== 0) {\n const wIds = Object.keys(workers);\n for (let i = 0; i < wIds.length; i += 1) {\n if (typeof runningWorkers[wIds[i]] === 'undefined') {\n jobQueue[0](workers[wIds[i]]);\n break;\n }\n }\n }\n };\n\n const queue = (action, payload) => (\n new Promise((resolve, reject) => {\n const job = createJob({ action, payload });\n jobQueue.push(async (w) => {\n jobQueue.shift();\n runningWorkers[w.id] = job;\n try {\n resolve(await w[action].apply(this, [...payload, job.id]));\n } catch (err) {\n reject(err);\n } finally {\n delete runningWorkers[w.id];\n dequeue();\n }\n });\n log(`[${id}]: Add ${job.id} to JobQueue`);\n log(`[${id}]: JobQueue length=${jobQueue.length}`);\n dequeue();\n })\n );\n\n const addWorker = (w) => {\n workers[w.id] = w;\n log(`[${id}]: Add ${w.id}`);\n log(`[${id}]: Number of workers=${getNumWorkers()}`);\n dequeue();\n return w.id;\n };\n\n const addJob = async (action, ...payload) => {\n if (getNumWorkers() === 0) {\n throw Error(`[${id}]: You need to have at least one worker before adding jobs`);\n }\n return queue(action, payload);\n };\n\n const terminate = async () => {\n Object.keys(workers).forEach(async (wid) => {\n await workers[wid].terminate();\n });\n jobQueue = [];\n };\n\n return {\n addWorker,\n addJob,\n terminate,\n getQueueLen,\n getNumWorkers,\n };\n};\n","'use strict';\n\nmodule.exports = (key) => {\n const env = {};\n\n if (typeof WorkerGlobalScope !== 'undefined') {\n env.type = 'webworker';\n } else if (typeof document === 'object') {\n env.type = 'browser';\n } else if (typeof process === 'object' && typeof require === 'function') {\n env.type = 'node';\n }\n\n if (typeof key === 'undefined') {\n return env;\n }\n\n return env[key];\n};\n","'use strict';\n\nconst isBrowser = require('./getEnvironment')('type') === 'browser';\n\nconst resolveURL = isBrowser ? s => (new URL(s, window.location.href)).href : s => s; // eslint-disable-line\n\nmodule.exports = (options) => {\n const opts = { ...options };\n ['corePath', 'workerPath', 'langPath'].forEach((key) => {\n if (options[key]) {\n opts[key] = resolveURL(opts[key]);\n }\n });\n return opts;\n};\n","'use strict';\n\n/*\n * OEM = OCR Engine Mode, and there are 4 possible modes.\n *\n * By default tesseract.js uses LSTM_ONLY mode.\n *\n */\nmodule.exports = {\n TESSERACT_ONLY: 0,\n LSTM_ONLY: 1,\n TESSERACT_LSTM_COMBINED: 2,\n DEFAULT: 3,\n};\n","'use strict';\n\nmodule.exports = {\n /*\n * Use BlobURL for worker script by default\n * TODO: remove this option\n *\n */\n workerBlobURL: true,\n logger: () => {},\n};\n","'use strict';\n\nconst version = require('../../../package.json').version;\nconst defaultOptions = require('../../constants/defaultOptions');\n\n/*\n * Default options for browser worker\n */\nmodule.exports = {\n ...defaultOptions,\n workerPath: `https://cdn.jsdelivr.net/npm/tesseract.js@v${version}/dist/worker.min.js`,\n};\n","'use strict';\n\n/**\n * spawnWorker\n *\n * @name spawnWorker\n * @function create a new Worker in browser\n * @access public\n */\nmodule.exports = ({ workerPath, workerBlobURL }) => {\n let worker;\n if (Blob && URL && workerBlobURL) {\n const blob = new Blob([`importScripts(\"${workerPath}\");`], {\n type: 'application/javascript',\n });\n worker = new Worker(URL.createObjectURL(blob));\n } else {\n worker = new Worker(workerPath);\n }\n\n return worker;\n};\n","'use strict';\n\n/**\n * terminateWorker\n *\n * @name terminateWorker\n * @function terminate worker\n * @access public\n */\nmodule.exports = (worker) => {\n worker.terminate();\n};\n","'use strict';\n\nmodule.exports = (worker, handler) => {\n worker.onmessage = ({ data }) => { // eslint-disable-line\n handler(data);\n };\n};\n","'use strict';\n\n/**\n * send\n *\n * @name send\n * @function send packet to worker and create a job\n * @access public\n */\nmodule.exports = async (worker, packet) => {\n worker.postMessage(packet);\n};\n","'use strict';\n\n/**\n * readFromBlobOrFile\n *\n * @name readFromBlobOrFile\n * @function\n * @access private\n */\nconst readFromBlobOrFile = (blob) => (\n new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n fileReader.onload = () => {\n resolve(fileReader.result);\n };\n fileReader.onerror = ({ target: { error: { code } } }) => {\n reject(Error(`File could not be read! Code=${code}`));\n };\n fileReader.readAsArrayBuffer(blob);\n })\n);\n\n/**\n * loadImage\n *\n * @name loadImage\n * @function load image from different source\n * @access private\n */\nconst loadImage = async (image) => {\n let data = image;\n if (typeof image === 'undefined') {\n return 'undefined';\n }\n\n if (typeof image === 'string') {\n // Base64 Image\n if (/data:image\\/([a-zA-Z]*);base64,([^\"]*)/.test(image)) {\n data = atob(image.split(',')[1])\n .split('')\n .map((c) => c.charCodeAt(0));\n } else {\n const resp = await fetch(image);\n data = await resp.arrayBuffer();\n }\n } else if (typeof HTMLElement !== 'undefined' && image instanceof HTMLElement) {\n if (image.tagName === 'IMG') {\n data = await loadImage(image.src);\n }\n if (image.tagName === 'VIDEO') {\n data = await loadImage(image.poster);\n }\n if (image.tagName === 'CANVAS') {\n await new Promise((resolve) => {\n image.toBlob(async (blob) => {\n data = await readFromBlobOrFile(blob);\n resolve();\n });\n });\n }\n } else if (typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas) {\n const blob = await image.convertToBlob();\n data = await readFromBlobOrFile(blob);\n } else if (image instanceof File || image instanceof Blob) {\n data = await readFromBlobOrFile(image);\n }\n\n return new Uint8Array(data);\n};\n\nmodule.exports = loadImage;\n","'use strict';\n\n/**\n *\n * Tesseract Worker adapter for browser\n *\n * @fileoverview Tesseract Worker adapter for browser\n * @author Kevin Kwok <antimatter15@gmail.com>\n * @author Guillermo Webster <gui@mit.edu>\n * @author Jerome Wu <jeromewus@gmail.com>\n */\nconst defaultOptions = require('./defaultOptions');\nconst spawnWorker = require('./spawnWorker');\nconst terminateWorker = require('./terminateWorker');\nconst onMessage = require('./onMessage');\nconst send = require('./send');\nconst loadImage = require('./loadImage');\n\nmodule.exports = {\n defaultOptions,\n spawnWorker,\n terminateWorker,\n onMessage,\n send,\n loadImage,\n};\n","'use strict';\n\nconst resolvePaths = require('./utils/resolvePaths');\nconst createJob = require('./createJob');\nconst { log } = require('./utils/log');\nconst getId = require('./utils/getId');\nconst OEM = require('./constants/OEM');\nconst {\n defaultOptions,\n spawnWorker,\n terminateWorker,\n onMessage,\n loadImage,\n send,\n} = require('./worker/node');\n\nlet workerCounter = 0;\n\nmodule.exports = async (langs = 'eng', oem = OEM.LSTM_ONLY, _options = {}, config = {}) => {\n const id = getId('Worker', workerCounter);\n const {\n logger,\n errorHandler,\n ...options\n } = resolvePaths({\n ...defaultOptions,\n ..._options,\n });\n const promises = {};\n\n // Current langs, oem, and config file.\n // Used if the user ever re-initializes the worker using `worker.reinitialize`.\n const currentLangs = typeof langs === 'string' ? langs.split('+') : langs;\n let currentOem = oem;\n let currentConfig = config;\n const lstmOnlyCore = [OEM.DEFAULT, OEM.LSTM_ONLY].includes(oem) && !options.legacyCore;\n\n let workerResReject;\n let workerResResolve;\n const workerRes = new Promise((resolve, reject) => {\n workerResResolve = resolve;\n workerResReject = reject;\n });\n const workerError = (event) => { workerResReject(event.message); };\n\n let worker = spawnWorker(options);\n worker.onerror = workerError;\n\n workerCounter += 1;\n\n const startJob = ({ id: jobId, action, payload }) => (\n new Promise((resolve, reject) => {\n log(`[${id}]: Start ${jobId}, action=${action}`);\n // Using both `action` and `jobId` in case user provides non-unique `jobId`.\n const promiseId = `${action}-${jobId}`;\n promises[promiseId] = { resolve, reject };\n send(worker, {\n workerId: id,\n jobId,\n action,\n payload,\n });\n })\n );\n\n const load = () => (\n console.warn('`load` is depreciated and should be removed from code (workers now come pre-loaded)')\n );\n\n const loadInternal = (jobId) => (\n startJob(createJob({\n id: jobId, action: 'load', payload: { options: { lstmOnly: lstmOnlyCore, corePath: options.corePath, logging: options.logging } },\n }))\n );\n\n const writeText = (path, text, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method: 'writeFile', args: [path, text] },\n }))\n );\n\n const readText = (path, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method: 'readFile', args: [path, { encoding: 'utf8' }] },\n }))\n );\n\n const removeFile = (path, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method: 'unlink', args: [path] },\n }))\n );\n\n const FS = (method, args, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'FS',\n payload: { method, args },\n }))\n );\n\n const loadLanguageInternal = (_langs, jobId) => startJob(createJob({\n id: jobId,\n action: 'loadLanguage',\n payload: {\n langs: _langs,\n options: {\n langPath: options.langPath,\n dataPath: options.dataPath,\n cachePath: options.cachePath,\n cacheMethod: options.cacheMethod,\n gzip: options.gzip,\n lstmOnly: [OEM.DEFAULT, OEM.LSTM_ONLY].includes(currentOem)\n && !options.legacyLang,\n },\n },\n }));\n\n const initializeInternal = (_langs, _oem, _config, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'initialize',\n payload: { langs: _langs, oem: _oem, config: _config },\n }))\n );\n\n const reinitialize = (langs = 'eng', oem, config, jobId) => { // eslint-disable-line\n\n if (lstmOnlyCore && [OEM.TESSERACT_ONLY, OEM.TESSERACT_LSTM_COMBINED].includes(oem)) throw Error('Legacy model requested but code missing.');\n\n const _oem = oem || currentOem;\n currentOem = _oem;\n\n const _config = config || currentConfig;\n currentConfig = _config;\n\n // Only load langs that are not already loaded.\n // This logic fails if the user downloaded the LSTM-only English data for a language\n // and then uses `worker.reinitialize` to switch to the Legacy engine.\n // However, the correct data will still be downloaded after initialization fails\n // and this can be avoided entirely if the user loads the correct data ahead of time.\n const langsArr = typeof langs === 'string' ? langs.split('+') : langs;\n const _langs = langsArr.filter((x) => !currentLangs.includes(x));\n currentLangs.push(..._langs);\n\n if (_langs.length > 0) {\n return loadLanguageInternal(_langs, jobId)\n .then(() => initializeInternal(langs, _oem, _config, jobId));\n }\n\n return initializeInternal(langs, _oem, _config, jobId);\n };\n\n const setParameters = (params = {}, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'setParameters',\n payload: { params },\n }))\n );\n\n const recognize = async (image, opts = {}, output = {\n text: true,\n }, jobId) => (\n startJob(createJob({\n id: jobId,\n action: 'recognize',\n payload: { image: await loadImage(image), options: opts, output },\n }))\n );\n\n const detect = async (image, jobId) => {\n if (lstmOnlyCore) throw Error('`worker.detect` requires Legacy model, which was not loaded.');\n\n return startJob(createJob({\n id: jobId,\n action: 'detect',\n payload: { image: await loadImage(image) },\n }));\n };\n\n const terminate = async () => {\n if (worker !== null) {\n /*\n await startJob(createJob({\n id: jobId,\n action: 'terminate',\n }));\n */\n terminateWorker(worker);\n worker = null;\n }\n return Promise.resolve();\n };\n\n onMessage(worker, ({\n workerId, jobId, status, action, data,\n }) => {\n const promiseId = `${action}-${jobId}`;\n if (status === 'resolve') {\n log(`[${workerId}]: Complete ${jobId}`);\n promises[promiseId].resolve({ jobId, data });\n delete promises[promiseId];\n } else if (status === 'reject') {\n promises[promiseId].reject(data);\n delete promises[promiseId];\n if (action === 'load') workerResReject(data);\n if (errorHandler) {\n errorHandler(data);\n } else {\n throw Error(data);\n }\n } else if (status === 'progress') {\n logger({ ...data, userJobId: jobId });\n }\n });\n\n const resolveObj = {\n id,\n worker,\n load,\n writeText,\n readText,\n removeFile,\n FS,\n reinitialize,\n setParameters,\n recognize,\n detect,\n terminate,\n };\n\n loadInternal()\n .then(() => loadLanguageInternal(langs))\n .then(() => initializeInternal(langs, oem, config))\n .then(() => workerResResolve(resolveObj))\n .catch(() => {});\n\n return workerRes;\n};\n","'use strict';\n\nconst createWorker = require('./createWorker');\n\nconst recognize = async (image, langs, options) => {\n const worker = await createWorker(langs, 1, options);\n return worker.recognize(image)\n .finally(async () => {\n await worker.terminate();\n });\n};\n\nconst detect = async (image, options) => {\n const worker = await createWorker('osd', 0, options);\n return worker.detect(image)\n .finally(async () => {\n await worker.terminate();\n });\n};\n\nmodule.exports = {\n recognize,\n detect,\n};\n","'use strict';\n\n/*\n * languages with existing tesseract traineddata\n * https://tesseract-ocr.github.io/tessdoc/Data-Files#data-files-for-version-400-november-29-2016\n */\n\n/**\n * @typedef {object} Languages\n * @property {string} AFR Afrikaans\n * @property {string} AMH Amharic\n * @property {string} ARA Arabic\n * @property {string} ASM Assamese\n * @property {string} AZE Azerbaijani\n * @property {string} AZE_CYRL Azerbaijani - Cyrillic\n * @property {string} BEL Belarusian\n * @property {string} BEN Bengali\n * @property {string} BOD Tibetan\n * @property {string} BOS Bosnian\n * @property {string} BUL Bulgarian\n * @property {string} CAT Catalan; Valencian\n * @property {string} CEB Cebuano\n * @property {string} CES Czech\n * @property {string} CHI_SIM Chinese - Simplified\n * @property {string} CHI_TRA Chinese - Traditional\n * @property {string} CHR Cherokee\n * @property {string} CYM Welsh\n * @property {string} DAN Danish\n * @property {string} DEU German\n * @property {string} DZO Dzongkha\n * @property {string} ELL Greek, Modern (1453-)\n * @property {string} ENG English\n * @property {string} ENM English, Middle (1100-1500)\n * @property {string} EPO Esperanto\n * @property {string} EST Estonian\n * @property {string} EUS Basque\n * @property {string} FAS Persian\n * @property {string} FIN Finnish\n * @property {string} FRA French\n * @property {string} FRK German Fraktur\n * @property {string} FRM French, Middle (ca. 1400-1600)\n * @property {string} GLE Irish\n * @property {string} GLG Galician\n * @property {string} GRC Greek, Ancient (-1453)\n * @property {string} GUJ Gujarati\n * @property {string} HAT Haitian; Haitian Creole\n * @property {string} HEB Hebrew\n * @property {string} HIN Hindi\n * @property {string} HRV Croatian\n * @property {string} HUN Hungarian\n * @property {string} IKU Inuktitut\n * @property {string} IND Indonesian\n * @property {string} ISL Icelandic\n * @property {string} ITA Italian\n * @property {string} ITA_OLD Italian - Old\n * @property {string} JAV Javanese\n * @property {string} JPN Japanese\n * @property {string} KAN Kannada\n * @property {string} KAT Georgian\n * @property {string} KAT_OLD Georgian - Old\n * @property {string} KAZ Kazakh\n * @property {string} KHM Central Khmer\n * @property {string} KIR Kirghiz; Kyrgyz\n * @property {string} KOR Korean\n * @property {string} KUR Kurdish\n * @property {string} LAO Lao\n * @property {string} LAT Latin\n * @property {string} LAV Latvian\n * @property {string} LIT Lithuanian\n * @property {string} MAL Malayalam\n * @property {string} MAR Marathi\n * @property {string} MKD Macedonian\n * @property {string} MLT Maltese\n * @property {string} MSA Malay\n * @property {string} MYA Burmese\n * @property {string} NEP Nepali\n * @property {string} NLD Dutch; Flemish\n * @property {string} NOR Norwegian\n * @property {string} ORI Oriya\n * @property {string} PAN Panjabi; Punjabi\n * @property {string} POL Polish\n * @property {string} POR Portuguese\n * @property {string} PUS Pushto; Pashto\n * @property {string} RON Romanian; Moldavian; Moldovan\n * @property {string} RUS Russian\n * @property {string} SAN Sanskrit\n * @property {string} SIN Sinhala; Sinhalese\n * @property {string} SLK Slovak\n * @property {string} SLV Slovenian\n * @property {string} SPA Spanish; Castilian\n * @property {string} SPA_OLD Spanish; Castilian - Old\n * @property {string} SQI Albanian\n * @property {string} SRP Serbian\n * @property {string} SRP_LATN Serbian - Latin\n * @property {string} SWA Swahili\n * @property {string} SWE Swedish\n * @property {string} SYR Syriac\n * @property {string} TAM Tamil\n * @property {string} TEL Telugu\n * @property {string} TGK Tajik\n * @property {string} TGL Tagalog\n * @property {string} THA Thai\n * @property {string} TIR Tigrinya\n * @property {string} TUR Turkish\n * @property {string} UIG Uighur; Uyghur\n * @property {string} UKR Ukrainian\n * @property {string} URD Urdu\n * @property {string} UZB Uzbek\n * @property {string} UZB_CYRL Uzbek - Cyrillic\n * @property {string} VIE Vietnamese\n * @property {string} YID Yiddish\n */\n\n/**\n * @type {Languages}\n */\nmodule.exports = {\n AFR: 'afr',\n AMH: 'amh',\n ARA: 'ara',\n ASM: 'asm',\n AZE: 'aze',\n AZE_CYRL: 'aze_cyrl',\n BEL: 'bel',\n BEN: 'ben',\n BOD: 'bod',\n BOS: 'bos',\n BUL: 'bul',\n CAT: 'cat',\n CEB: 'ceb',\n CES: 'ces',\n CHI_SIM: 'chi_sim',\n CHI_TRA: 'chi_tra',\n CHR: 'chr',\n CYM: 'cym',\n DAN: 'dan',\n DEU: 'deu',\n DZO: 'dzo',\n ELL: 'ell',\n ENG: 'eng',\n ENM: 'enm',\n EPO: 'epo',\n EST: 'est',\n EUS: 'eus',\n FAS: 'fas',\n FIN: 'fin',\n FRA: 'fra',\n FRK: 'frk',\n FRM: 'frm',\n GLE: 'gle',\n GLG: 'glg',\n GRC: 'grc',\n GUJ: 'guj',\n HAT: 'hat',\n HEB: 'heb',\n HIN: 'hin',\n HRV: 'hrv',\n HUN: 'hun',\n IKU: 'iku',\n IND: 'ind',\n ISL: 'isl',\n ITA: 'ita',\n ITA_OLD: 'ita_old',\n JAV: 'jav',\n JPN: 'jpn',\n KAN: 'kan',\n KAT: 'kat',\n KAT_OLD: 'kat_old',\n KAZ: 'kaz',\n KHM: 'khm',\n KIR: 'kir',\n KOR: 'kor',\n KUR: 'kur',\n LAO: 'lao',\n LAT: 'lat',\n LAV: 'lav',\n LIT: 'lit',\n MAL: 'mal',\n MAR: 'mar',\n MKD: 'mkd',\n MLT: 'mlt',\n MSA: 'msa',\n MYA: 'mya',\n NEP: 'nep',\n NLD: 'nld',\n NOR: 'nor',\n ORI: 'ori',\n PAN: 'pan',\n POL: 'pol',\n POR: 'por',\n PUS: 'pus',\n RON: 'ron',\n RUS: 'rus',\n SAN: 'san',\n SIN: 'sin',\n SLK: 'slk',\n SLV: 'slv',\n SPA: 'spa',\n SPA_OLD: 'spa_old',\n SQI: 'sqi',\n SRP: 'srp',\n SRP_LATN: 'srp_latn',\n SWA: 'swa',\n SWE: 'swe',\n SYR: 'syr',\n TAM: 'tam',\n TEL: 'tel',\n TGK: 'tgk',\n TGL: 'tgl',\n THA: 'tha',\n TIR: 'tir',\n TUR: 'tur',\n UIG: 'uig',\n UKR: 'ukr',\n URD: 'urd',\n UZB: 'uzb',\n UZB_CYRL: 'uzb_cyrl',\n VIE: 'vie',\n YID: 'yid',\n};\n","'use strict';\n\n/*\n * PSM = Page Segmentation Mode\n */\nmodule.exports = {\n OSD_ONLY: '0',\n AUTO_OSD: '1',\n AUTO_ONLY: '2',\n AUTO: '3',\n SINGLE_COLUMN: '4',\n SINGLE_BLOCK_VERT_TEXT: '5',\n SINGLE_BLOCK: '6',\n SINGLE_LINE: '7',\n SINGLE_WORD: '8',\n CIRCLE_WORD: '9',\n SINGLE_CHAR: '10',\n SPARSE_TEXT: '11',\n SPARSE_TEXT_OSD: '12',\n RAW_LINE: '13',\n};\n","'use strict';\n\n/**\n *\n * Entry point for tesseract.js, should be the entry when bundling.\n *\n * @fileoverview entry point for tesseract.js\n * @author Kevin Kwok <antimatter15@gmail.com>\n * @author Guillermo Webster <gui@mit.edu>\n * @author Jerome Wu <jeromewus@gmail.com>\n */\nrequire('regenerator-runtime/runtime');\nconst createScheduler = require('./createScheduler');\nconst createWorker = require('./createWorker');\nconst Tesseract = require('./Tesseract');\nconst languages = require('./constants/languages');\nconst OEM = require('./constants/OEM');\nconst PSM = require('./constants/PSM');\nconst { setLogging } = require('./utils/log');\n\nmodule.exports = {\n languages,\n OEM,\n PSM,\n createScheduler,\n createWorker,\n setLogging,\n ...Tesseract,\n};\n","export var LANGUAGE;\n(function (LANGUAGE) {\n LANGUAGE[\"EN\"] = \"eng\";\n LANGUAGE[\"VI\"] = \"vie\";\n})(LANGUAGE || (LANGUAGE = {}));\n","export function extractCompanyName(text) {\n const lines = text.split('\\n').map(l => l.trim()).filter(Boolean);\n const joinedText = lines.join('\\n');\n const regexVietnameseName = /Tên\\s+công\\s+ty\\s+viết\\s+bằng\\s+tiếng\\s+Việt[::\\-]?\\s*(CÔNG\\s+TY\\s+[^\\n]+?)(?=\\s*(Tên\\s+công\\s+ty\\s+viết|Tên\\s+địa|Tên\\s+giao\\s+dịch|Địa\\s+chỉ|Mã\\s+số|$))/i;\n const match1 = joinedText.match(regexVietnameseName);\n if (match1)\n return cleanCompanyName(match1[1]);\n for (let i = 0; i < lines.length; i++) {\n if (/^1\\.\\s*Tên\\s+địa\\s+điểm\\s+kinh\\s+doanh[::]?$/i.test(lines[i])) {\n const next1 = lines[i + 1] ?? '';\n const next2 = lines[i + 2] ?? '';\n const combined = `${next1} ${next2}`;\n const match2 = combined.match(/(CÔNG\\s+TY\\s+[A-ZÀ-Ỹ\\s,\\.–\\-]+)/i);\n if (match2)\n return cleanCompanyName(match2[1]);\n }\n }\n for (const line of lines) {\n if (/^CÔNG\\s+TY\\s+[A-ZÀ-Ỹ\\s,\\.–\\-]+$/i.test(line)) {\n return cleanCompanyName(line);\n }\n }\n const fallback = joinedText.match(/(CÔNG\\s+TY\\s+[A-ZÀ-Ỹ\\s,\\.–\\-]{10,})/i);\n if (fallback)\n return cleanCompanyName(fallback[1]);\n return null;\n}\nexport function extractRepresentativeName(text) {\n const regex = /Họ\\s*và\\s*tên[::]?\\s*([A-ZÀ-Ỹa-zà-ỹ\\s]+)(?=\\s*Giới|Sinh|Dân|Quốc|$)/i;\n const match = text.match(regex);\n if (match) {\n return match[1].replace(/\\s+/g, ' ').trim();\n }\n const lines = text.split('\\n').map(l => l.trim());\n const startIndex = lines.findIndex(l => /thông\\s+tin\\s+về\\s+người\\s+đứng\\s+đầu/i.test(l));\n if (startIndex >= 0) {\n for (let i = startIndex; i < startIndex + 5; i++) {\n const line = lines[i] || '';\n const matchLine = line.match(/Họ\\s*và\\s*tên[::]?\\s*([A-ZÀ-Ỹa-zà-ỹ\\s]+)/i);\n if (matchLine) {\n return matchLine[1].replace(/\\s+/g, ' ').trim();\n }\n }\n }\n return null;\n}\nexport function extractRepresentativeAddress(text) {\n const lines = text.split('\\n').map(l => l.trim());\n let currentAddress = \"\";\n let fallbackAddress = \"\";\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (/Chỗ\\s*ở\\s*hiện\\s*tại[::]?\\s*/i.test(line)) {\n const value = line.split(/[::]/)[1]?.trim() ?? '';\n const nextLine = lines[i + 1]?.trim() ?? '';\n if (value && !isLikelyField(nextLine)) {\n currentAddress = `${value} ${nextLine}`.trim();\n }\n else {\n currentAddress = value.trim();\n }\n }\n if (/Nơi\\s*đăng\\s*ký\\s*hộ\\s*khẩu.*trú[::]?\\s*/i.test(line)) {\n const value = line.split(/[::]/)[1]?.trim() ?? '';\n const nextLine = lines[i + 1]?.trim() ?? '';\n if (value && !isLikelyField(nextLine)) {\n fallbackAddress = `${value} ${nextLine}`.trim();\n }\n else {\n fallbackAddress = value.trim();\n }\n }\n }\n return (cleanLine(currentAddress) ??\n cleanLine(fallbackAddress) ??\n null);\n}\nexport function extractRepresentativeGender(text) {\n const regex = /Giới\\s*tính[::]?\\s*(Nam|Nữ)/i;\n const match = text.match(regex);\n if (match) {\n return match[1].trim().toLowerCase() === 'nam' ? 'Nam' : 'Nữ';\n }\n const lines = text.split('\\n');\n for (const line of lines) {\n const matchInline = line.match(/Giới\\s*tính[::]?\\s*(Nam|Nữ)/i);\n if (matchInline) {\n return matchInline[1].trim().toLowerCase() === 'nam' ? 'Nam' : 'Nữ';\n }\n }\n return null;\n}\nexport function extractRepresentativeDob(text) {\n const regex = /(Sinh\\s*ngày|Ngày\\s*sinh)[^0-9]*(\\d{1,2}\\/\\d{1,2}\\/\\d{4})/i;\n const match = text.match(regex);\n if (match) {\n const date = match[2].trim();\n const corrected = date.replace(/\\/79(\\d{2})/, '/19$1');\n return corrected;\n }\n return null;\n}\nexport function extractRepresentativeNationality(text) {\n const regex = /Quốc\\s*tịch[::]?\\s*([^\\n]+)/i;\n const match = text.match(regex);\n if (match) {\n let result = match[1].trim();\n result = result.split(/(Loại|Giấy|Họ\\s*và\\s*tên|Sinh\\s*ngày|Dân\\s*tộc|CMND|Chứng\\s*minh)/i)[0];\n return result.trim().replace(/\\s+/g, ' ');\n }\n return null;\n}\nexport function extractRepresentativeIdCard(text) {\n const regex = /Số\\s*giấy\\s*chứng\\s*(?:thực)?\\s*c[aá]?\\s*nh[aâ]n[::]?\\s*([A-Za-z0-9\\/]+)/i;\n const match = text.match(regex);\n if (match) {\n const raw = match[1].trim();\n const onlyDigits = raw.replace(/\\D/g, '');\n return onlyDigits || null;\n }\n return null;\n}\nfunction cleanCompanyName(name) {\n return name\n .replace(/[^A-Za-zÀ-ỹ0-9\\s,\\.–\\-]/g, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\nexport function extractTaxCode(text) {\n const regex = /Mã\\s*số\\s*(?:doanh\\s*nghiệp|thuế)[^\\d]{0,10}(\\d{8,15})/i;\n const match = text.match(regex);\n return match ? match[1].trim() : null;\n}\nexport function extractAddress(text) {\n const regex = /^(\\d+\\.\\s*)?địa\\s*chỉ[::]?\\s*(.*)/i;\n const lines = text.split('\\n').map(l => l.trim());\n const addressLines = [];\n let found = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!found && /^(\\d+\\.\\s*)?địa\\s*chỉ/i.test(line)) {\n found = true;\n const match = line.match(regex);\n if (match && match[2])\n addressLines.push(cleanLine(match[2]));\n continue;\n }\n if (found) {\n if (!line || /^[0-9]+\\.\\s|\\b(Điện thoại|Email|Fax|Họ\\s+và\\s+tên|Sinh ngày|Chỗ ở hiện tại|Tên doanh nghiệp|Mã số doanh nghiệp)/i.test(line)) {\n break;\n }\n addressLines.push(cleanLine(line));\n }\n }\n if (addressLines.length === 0)\n return null;\n const result = addressLines.join(', ').replace(/\\s{2,}/g, ' ').trim();\n return result;\n}\nexport function extractEmail(text) {\n const regex = /email[::]?\\s*([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})/i;\n if (!regex.test(text.toLocaleLowerCase()))\n return null;\n const match = text.toLowerCase().match(regex);\n return match ? match[1].trim() : null;\n}\nexport function extractPhoneNumber(text) {\n const phoneRegex = /(?:Điện\\s*thoại|Phone)[^\\d]{0,10}((?:\\d[\\s\\-]?){8,13})/i;\n const match = text.match(phoneRegex);\n return match ? match[1].replace(/[\\s\\-]/g, '') : null;\n}\nfunction isLikelyField(line) {\n return /^(Sinh ngày|Giới tính|Dân tộc|Loại giấy|Số giấy|Ngày cấp|Nơi cấp|Email|Website|Fax|Điện thoại)/i.test(line) ||\n /\\d{1,2}\\/\\d{1,2}\\/\\d{4}/.test(line);\n}\nfunction cleanLine(line) {\n return line.replace(/\\s+/g, ' ').replace(/[^\\wÀ-ỹ\\s,\\.\\/-]/g, '').trim();\n}\n","import Tesseract from 'tesseract.js';\nimport { LANGUAGE } from './data-type.js';\nimport { extractCompanyName, extractAddress, extractTaxCode, extractRepresentativeName, extractRepresentativeAddress, extractRepresentativeGender, extractRepresentativeDob, extractRepresentativeNationality, extractRepresentativeIdCard } from './extract-data/license.js';\nimport { toCitizenId, toDateOfBirth, toFullName, toPlaceOfOrigin, toPlaceOfResidence, toSex } from './extract-data/identity-card.js';\nimport { getProvincesDictionary, getVietnameseDictionary, getVietnameseProvinces, toNationality } from './utils/dictionary.js';\nimport { extractBusinessTaxCode, extractDateOfIssueTaxCode, extractDateOfRegistration, extractNumOfIdentityCard, extractNumOfRegistration, extractTaxDepartment, extractTaxPayer } from './extract-data/certificate-registration.js';\nimport { loadImageFromBlob } from './utils/image.js';\nimport { identityCardZones } from './zones.js';\nexport { LANGUAGE };\nexport async function readImage(file, lang = LANGUAGE.VI) {\n const url = URL.createObjectURL(file);\n return await Tesseract.recognize(url, lang);\n}\nexport async function readImageByZone(file, lang = LANGUAGE.VI, zone) {\n const worker = await Tesseract.createWorker(lang, 1);\n const img = await loadImageFromBlob(file);\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const CANVAS_WIDTH = 1280;\n const CANVAS_HEIGHT = 800;\n canvas.width = CANVAS_WIDTH;\n canvas.height = CANVAS_HEIGHT;\n const imageRatio = img.width / img.height;\n const canvasRatio = CANVAS_WIDTH / CANVAS_HEIGHT;\n let drawWidth = CANVAS_WIDTH;\n let drawHeight = CANVAS_HEIGHT;\n let offsetX = 0;\n let offsetY = 0;\n if (imageRatio > canvasRatio) {\n drawWidth = CANVAS_WIDTH;\n drawHeight = CANVAS_WIDTH / imageRatio;\n offsetY = (CANVAS_HEIGHT - drawHeight) / 2;\n }\n else {\n drawHeight = CANVAS_HEIGHT;\n drawWidth = CANVAS_HEIGHT * imageRatio;\n offsetX = (CANVAS_WIDTH - drawWidth) / 2;\n }\n ctx.drawImage(img, offsetX, offsetY, drawWidth, drawHeight);\n const fields = {};\n for (const key in zone) {\n for (const zn of zone[key]) {\n const { x, y, width, height } = zn;\n const cropX = x;\n const cropY = y;\n const cropW = width;\n const cropH = height;\n const cropCanvas = document.createElement('canvas');\n cropCanvas.width = cropW;\n cropCanvas.height = cropH;\n const cropCtx = cropCanvas.getContext('2d');\n cropCtx.drawImage(canvas, cropX, cropY, cropW, cropH, 0, 0, cropW, cropH);\n const croppedBlob = await new Promise((resolve) => cropCanvas.toBlob((b) => resolve(b), 'image/jpeg'));\n const { data } = await worker.recognize(croppedBlob);\n const currentField = fields[key] ?? '';\n fields[key] = currentField + \", \" + data.text.trim();\n }\n }\n await worker.terminate();\n return fields;\n}\nexport async function readLicense(file, lang = LANGUAGE.VI) {\n const text = await readImage(file, lang);\n return parseToLicenseJson(text.data.text);\n}\nexport async function readIdentityCard(file, lang = LANGUAGE.VI) {\n const fields = await readImageByZone(file, lang, identityCardZones);\n return await parseToIdentityCardJson(fields);\n}\nexport async function readCertificateOfRegistration(file, lang = LANGUAGE.VI) {\n const text = await readImage(file, lang);\n return parseToCertificateOfRegistrationJson(text.data.text);\n}\nfunction parseToCertificateOfRegistrationJson(text) {\n const result = {};\n result['tax_code'] ?? (result['tax_code'] = extractBusinessTaxCode(text));\n result['tax_payer'] ?? (result['tax_payer'] = extractTaxPayer(text));\n result['num_of_registration'] ?? (result['num_of_registration'] = extractNumOfRegistration(text));\n result['date_of_registration'] ?? (result['date_of_registration'] = extractDateOfRegistration(text));\n result['num_of_establishment'] ?? (result['num_of_establishment'] = null);\n result['date_of_establishment'] ?? (result['date_of_establishment'] = null);\n result['date_of_issue_tax_code'] ?? (result['date_of_issue_tax_code'] = extractDateOfIssueTaxCode(text));\n result['tax_department'] ?? (result['tax_department'] = extractTaxDepartment(text));\n result['num_of_identity_card'] ?? (result['num_of_identity_card'] = extractNumOfIdentityCard(text));\n return result;\n}\nfunction parseToLicenseJson(text) {\n const result = {};\n const organization = {};\n const contactPerson = {};\n const legalRepresentative = {};\n organization['name'] ?? (organization['name'] = extractCompanyName(text));\n organization['tax_code'] ?? (organization['tax_code'] = extractTaxCode(text));\n organization['address'] ?? (organization['address'] = extractAddress(text));\n organization['tax_authority'] ?? (organization['tax_authority'] = null);\n contactPerson['name'] ?? (contactPerson['name'] = null);\n contactPerson['address'] ?? (contactPerson['address'] = null);\n contactPerson['email'] ?? (contactPerson['email'] = null);\n contactPerson['phone_number'] ?? (contactPerson['phone_number'] = null);\n legalRepresentative['name'] ?? (legalRepresentative['name'] = extractRepresentativeName(text));\n legalRepresentative['dob'] ?? (legalRepresentative['dob'] = extractRepresentativeDob(text));\n legalRepresentative['gender'] ?? (legalRepresentative['gender'] = extractRepresentativeGender(text));\n legalRepresentative['phone'] ?? (legalRepresentative['phone'] = null);\n legalRepresentative['id_card'] ?? (legalRepresentative['id_card'] = extractRepresentativeIdCard(text));\n legalRepresentative['passport_number'] ?? (legalRepresentative['passport_number'] = null);\n legalRepresentative['nationality'] ?? (legalRepresentative['nationality'] = extractRepresentativeNationality(text));\n legalRepresentative['permanent_address'] ?? (legalRepresentative['permanent_address'] = extractRepresentativeAddress(text));\n result['organization'] ?? (result['organization'] = organization);\n result['contactPerson'] ?? (result['contactPerson'] = contactPerson);\n result['legalRepresentative'] ?? (result['legalRepresentative'] = legalRepresentative);\n return result;\n}\nasync function parseToIdentityCardJson(fields) {\n const result = {};\n const dictionary = await getVietnameseDictionary();\n const provinces = await getVietnameseProvinces();\n result['citizen_id'] ?? (result['citizen_id'] = toCitizenId(fields['citizen_id']));\n result['full_name'] ?? (result['full_name'] = toFullName(fields['full_name'], dictionary));\n result['dob'] ?? (result['dob'] = toDateOfBirth(fields['dob']));\n result['sex'] ?? (result['sex'] = toSex(fields['sex']));\n result['nationality'] ?? (result['nationality'] = toNationality(fields['nationality']));\n result['place_of_origin'] ?? (result['place_of_origin'] = toPlaceOfOrigin(fields['place_of_origin'], Array.from(getProvincesDictionary(provinces))));\n result['place_of_residence'] ?? (result['place_of_residence'] = toPlaceOfResidence(fields['place_of_residence'], Array.from(getProvincesDictionary(provinces))));\n return result;\n}\n","import usePortalApiConfig from '@/shared/store/use-portal-api-config.store';\nimport axios from 'axios';\n\nconst portalAxiosClient = axios.create({\n timeout: 10000,\n});\n\nportalAxiosClient.interceptors.request.use((config) => {\n const baseURL = usePortalApiConfig.getState().baseURL;\n const accessToken = usePortalApiConfig.getState().accessToken;\n\n config.baseURL = baseURL;\n\n if (!config.headers.Authorization) {\n if (accessToken) {\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n return config;\n});\nexport default portalAxiosClient;\n","import portalAxiosClient from \"@/configs/portalAxiosClient\";\n\ninterface LocationOption {\n id?: string;\n code?: string;\n name: string;\n}\n\nexport const getCountries = async (): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get(\"/address/country\");\n return data.data;\n};\n\nexport const getCities = async (\n countryCode: string\n): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get(\"/address/city\", {\n params: {\n country_code: countryCode,\n page_size: -1,\n },\n });\n return data.data;\n};\n\nexport const getDistricts = async (\n cityId: string\n): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get(\"/address/district\", {\n params: { city_id: cityId, page_size: -1 },\n });\n return data.data;\n};\n\nexport const getWards = async (\n districtId: string\n): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get(\"/address/ward\", {\n params: { district_id: districtId, page_size: -1 },\n });\n return data.data;\n};\n\nexport const getNewCities = async (): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get('/address/new-city', {\n params: { page_size: -1 },\n });\n return data.data;\n};\n\nexport const getNewWards = async (\n cityId: string,\n): Promise<LocationOption[]> => {\n const { data } = await portalAxiosClient.get('/address/new-ward', {\n params: { city_id: cityId, page_size: -1 },\n });\n return data.data;\n};","import { useEffect, useState, useCallback } from 'react';\n\nimport type { Country, City, District, Ward } from '../types/addressType';\nimport {\n getCities,\n getCountries,\n getDistricts,\n getWards,\n getNewCities,\n getNewWards,\n} from '../services/addressService';\n\ninterface AddressState {\n countries: Country[];\n cities: City[];\n districts: District[];\n wards: Ward[];\n newCities: City[];\n newWards: Ward[];\n}\n\nexport const useAddress = (\n countryCode: string,\n cityCode: string,\n districtCode: string,\n): AddressState => {\n const [countries, setCountries] = useState<Country[]>([]);\n const [cities, setCities] = useState<City[]>([]);\n const [districts, setDistricts] = useState<District[]>([]);\n const [wards, setWards] = useState<Ward[]>([]);\n const [newCities, setNewCities] = useState<City[]>([]);\n const [newWards, setNewWards] = useState<Ward[]>([]);\n\n const resetCities = useCallback(() => setCities([]), []);\n const resetDistricts = useCallback(() => setDistricts([]), []);\n const resetWards = useCallback(() => setWards([]), []);\n const resetNewWards = useCallback(() => setNewWards([]), []);\n\n // Fetch countries once\n useEffect(() => {\n let active = true;\n\n const fetchCountries = async () => {\n try {\n const data = await getCountries();\n if (active) setCountries(data);\n } catch (error) {\n console.error('Failed to fetch countries:', error);\n if (active) setCountries([]);\n }\n };\n\n if (countries.length === 0) {\n fetchCountries();\n }\n\n return () => {\n active = false;\n };\n }, []);\n\n // Fetch newCities once (independent of country/city selection)\n useEffect(() => {\n let active = true;\n\n const fetchNewCities = async () => {\n try {\n const data = await getNewCities();\n if (active) setNewCities(data);\n } catch (error) {\n console.error('Failed to fetch new cities:', error);\n if (active) setNewCities([]);\n }\n };\n\n fetchNewCities();\n\n return () => {\n active = false;\n };\n }, []);\n\n // Fetch cities based on countryCode\n useEffect(() => {\n let active = true;\n\n const fetchCities = async () => {\n if (!countryCode || countryCode.trim() === '') {\n resetCities();\n resetDistricts();\n resetWards();\n return;\n }\n\n try {\n const data = await getCities(countryCode);\n if (active) {\n setCities(data);\n resetDistricts();\n resetWards();\n }\n } catch (error) {\n console.error('Failed to fetch cities:', error);\n if (active) {\n setCities([]);\n resetDistricts();\n resetWards();\n }\n }\n };\n\n fetchCities();\n return () => {\n active = false;\n };\n }, [countryCode, resetCities, resetDistricts, resetWards]);\n\n // Fetch districts based on cityCode\n useEffect(() => {\n let active = true;\n\n const fetchDistricts = async () => {\n if (!cityCode || cityCode.trim() === '') {\n resetDistricts();\n resetWards();\n return;\n }\n\n try {\n const data = await getDistricts(cityCode);\n if (active) {\n setDistricts(data);\n resetWards();\n }\n } catch (error) {\n console.error('Failed to fetch districts:', error);\n if (active) {\n setDistricts([]);\n resetWards();\n }\n }\n };\n\n fetchDistricts();\n return () => {\n active = false;\n };\n }, [cityCode, resetDistricts, resetWards]);\n\n useEffect(() => {\n let active = true;\n\n const fetchWards = async () => {\n if (!districtCode || districtCode.trim() === '') {\n resetWards();\n return;\n }\n\n try {\n const data = await getWards(districtCode);\n if (active) setWards(data);\n } catch (error) {\n console.error('Failed to fetch wards:', error);\n if (active) setWards([]);\n }\n };\n\n fetchWards();\n return () => {\n active = false;\n };\n }, [districtCode, resetWards]);\n\n useEffect(() => {\n let active = true;\n\n const fetchNewWards = async () => {\n if (!cityCode || cityCode.trim() === '') {\n resetNewWards();\n return;\n }\n\n try {\n const data = await getNewWards(cityCode);\n if (active) setNewWards(data);\n } catch (error) {\n console.error('Failed to fetch new wards:', error);\n if (active) setNewWards([]);\n }\n };\n\n fetchNewWards();\n return () => {\n active = false;\n };\n }, [cityCode, resetNewWards]);\n\n return {\n countries,\n cities,\n districts,\n wards,\n newCities,\n newWards,\n };\n};\n","import React, { useMemo } from 'react';\nimport { useTranslation } from '@/hooks/use-translation';\nimport { useAddress } from '../hooks/use-address';\n\ninterface MerchantFormData {\n country: string;\n city: string;\n district: string;\n ward: string;\n address: string;\n}\n\ninterface AddressFieldsProps {\n formData: MerchantFormData;\n onInputChange: (field: keyof MerchantFormData, value: string) => void;\n errors?: Partial<Record<keyof MerchantFormData, string>>;\n lang?: 'vi' | 'en';\n}\n\nexport const AddressFields: React.FC<AddressFieldsProps> = ({\n formData,\n onInputChange,\n errors,\n lang = 'vi',\n}) => {\n const { translate } = useTranslation('form', lang);\n\n const addressData = useAddress(\n formData.country,\n formData.city,\n formData.district,\n );\n\n const countries = addressData?.countries ?? [];\n const newCities = addressData?.newCities ?? [];\n const newWards = addressData?.newWards ?? [];\n\n const selects = useMemo(\n () => [\n {\n name: 'country' as const,\n value: formData.country ?? '',\n placeholder: translate('country'), \n options: countries.map((item: any) => ({\n value: item?.id ?? '',\n label: item?.name ?? '',\n })),\n },\n {\n name: 'city' as const,\n value: formData.city ?? '',\n placeholder: translate('city'),\n options: newCities.map((item: any) => ({\n value: item?.id ?? '',\n label: item?.name ?? '',\n })),\n },\n {\n name: 'ward' as const,\n value: formData.ward ?? '',\n placeholder: translate('ward'),\n options: newWards.map((item: any) => ({\n value: item?.id ?? '',\n label: item?.name ?? '',\n })),\n },\n ],\n [\n countries,\n newCities,\n newWards,\n translate,\n formData.country,\n formData.city,\n formData.ward,\n ],\n );\n\n return (\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold font-inter leading-[18px] tracking-normal text-[#2C2C2C]\">\n {translate('address')}\n </h3>\n\n <div className=\"flex flex-col gap-2\">\n {selects.map((select) => (\n <div key={select.name} className=\"relative w-full\">\n <select\n value={select.value || ''}\n onChange={(e) => onInputChange(select.name, e.target.value)}\n className={`appearance-none w-full px-4 py-3 border ${\n errors?.[select.name] ? 'border-red-500' : 'border-[#E4E7EC]'\n } rounded-[8px] focus:outline-none focus:ring-2 focus:ring-blue-500 text-[#6B7280] font-inter text-sm font-normal leading-[18px] tracking-normal hover:ring-2 hover:ring-blue-900`}\n >\n <option value=\"\" disabled hidden>\n {select.placeholder}\n </option>\n\n {select.options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n <div className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2\">\n <svg\n className=\"w-4 h-4 text-gray-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </div>\n\n {errors?.[select.name] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[select.name]}</p>\n )}\n </div>\n ))}\n </div>\n\n <input\n type=\"text\"\n value={formData.address ?? ''}\n onChange={(e) => onInputChange('address', e.target.value)}\n placeholder={translate('street')}\n className={`w-full px-3 py-3 border hover:ring-2 hover:ring-blue-900 ${\n errors?.address ? 'border-red-500' : 'border-[#E4E7EC]'\n } rounded-md text-[#6B7280] font-inter text-sm font-normal leading-[18px] tracking-normal`}\n />\n\n {errors?.address && (\n <p className=\"text-red-500 text-xs mt-1\">{errors.address}</p>\n )}\n </div>\n );\n};\n","export default \"data:image/svg+xml,%3csvg%20width='27'%20height='26'%20viewBox='0%200%2027%2026'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M13.4526%209.28544L13.4526%2022.3027'%20stroke='%236B7280'%20stroke-width='0.810811'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M16.6055%2012.4497L13.453%209.2843L10.3006%2012.4497'%20stroke='%236B7280'%20stroke-width='0.810811'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M18.4618%2017.186H19.4704C21.6704%2017.186%2023.4531%2015.4033%2023.4531%2013.2023V7.92225C23.4531%205.72766%2021.6747%203.94928%2019.4802%203.94928L7.43691%203.94928C5.23691%203.94928%203.45312%205.73306%203.45312%207.93306V13.2141C3.45312%2015.4077%205.23258%2017.186%207.4261%2017.186H8.44447'%20stroke='%236B7280'%20stroke-width='0.810811'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='33'%20height='32'%20viewBox='0%200%2033%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_7893_9513)'%3e%3cg%20filter='url(%23filter0_di_7893_9513)'%3e%3cpath%20d='M24.8205%2032H8.82051C6.16954%2032%204.02051%2029.851%204.02051%2027.2V4.8C4.02051%202.14903%206.16954%200%208.8205%200H17.2323C18.5053%200%2019.7262%200.505712%2020.6264%201.40589L28.2146%208.99411C29.1148%209.89429%2029.6205%2011.1152%2029.6205%2012.3882V27.2C29.6205%2029.851%2027.4715%2032%2024.8205%2032Z'%20fill='white'/%3e%3cpath%20d='M8.82031%200.599609H17.2324C18.3463%200.599646%2019.4145%201.04248%2020.2021%201.83008L27.79%209.41797C28.5777%2010.2056%2029.0205%2011.2748%2029.0205%2012.3887V27.2002C29.0204%2029.5197%2027.1398%2031.4004%2024.8203%2031.4004H8.82031C6.50087%2031.4003%204.62022%2029.5196%204.62012%2027.2002V4.7998C4.62022%202.48036%206.50087%200.599713%208.82031%200.599609Z'%20stroke='%23E5E5E5'%20stroke-width='1.2'/%3e%3c/g%3e%3cpath%20d='M19.2207%200.800049V7.20005C19.2207%208.96736%2020.6534%2010.4%2022.4207%2010.4H28.8207'%20stroke='%23E5E5E5'%20stroke-width='1.2'/%3e%3cg%20filter='url(%23filter1_i_7893_9513)'%3e%3cmask%20id='path-4-inside-1_7893_9513'%20fill='white'%3e%3cpath%20d='M0.820312%2017.2C0.820312%2015.4327%202.253%2014%204.02031%2014H18.4203C20.1876%2014%2021.6203%2015.4327%2021.6203%2017.2V24C21.6203%2025.7673%2020.1876%2027.2%2018.4203%2027.2H4.02031C2.253%2027.2%200.820312%2025.7673%200.820312%2024V17.2Z'/%3e%3c/mask%3e%3cpath%20d='M0.820312%2017.2C0.820312%2015.4327%202.253%2014%204.02031%2014H18.4203C20.1876%2014%2021.6203%2015.4327%2021.6203%2017.2V24C21.6203%2025.7673%2020.1876%2027.2%2018.4203%2027.2H4.02031C2.253%2027.2%200.820312%2025.7673%200.820312%2024V17.2Z'%20fill='%23FB3748'/%3e%3cpath%20d='M0.0203125%2017.2C0.0203125%2014.9909%201.81117%2013.2%204.02031%2013.2H18.4203C20.6295%2013.2%2022.4203%2014.9909%2022.4203%2017.2L20.8203%2017.2C20.8203%2015.8745%2019.7458%2014.8%2018.4203%2014.8H4.02031C2.69483%2014.8%201.62031%2015.8745%201.62031%2017.2L0.0203125%2017.2ZM21.6203%2027.2H0.820312H21.6203ZM4.02031%2027.2C1.81117%2027.2%200.0203125%2025.4091%200.0203125%2023.2V17.2C0.0203125%2014.9909%201.81117%2013.2%204.02031%2013.2L4.02031%2014.8C2.69483%2014.8%201.62031%2015.8745%201.62031%2017.2V24C1.62031%2025.7673%202.69483%2027.2%204.02031%2027.2H4.02031ZM18.4203%2013.2C20.6295%2013.2%2022.4203%2014.9909%2022.4203%2017.2V23.2C22.4203%2025.4091%2020.6295%2027.2%2018.4203%2027.2H18.4203C19.7458%2027.2%2020.8203%2025.7673%2020.8203%2024V17.2C20.8203%2015.8745%2019.7458%2014.8%2018.4203%2014.8L18.4203%2013.2Z'%20fill='black'%20fill-opacity='0.08'%20mask='url(%23path-4-inside-1_7893_9513)'/%3e%3cpath%20d='M3.79457%2023.6001V17.7819H5.97639C6.42335%2017.7819%206.79835%2017.8652%207.10139%2018.0319C7.40631%2018.1986%207.63642%2018.4277%207.79173%2018.7194C7.94892%2019.0092%208.02752%2019.3387%208.02752%2019.7081C8.02752%2020.0812%207.94892%2020.4126%207.79173%2020.7024C7.63453%2020.9921%207.40252%2021.2204%207.0957%2021.387C6.78888%2021.5518%206.41104%2021.6342%205.96218%2021.6342H4.51616V20.7677H5.82014C6.0815%2020.7677%206.29551%2020.7223%206.46218%2020.6313C6.62885%2020.5404%206.75195%2020.4154%206.8315%2020.2563C6.91294%2020.0973%206.95366%2019.9145%206.95366%2019.7081C6.95366%2019.5016%206.91294%2019.3198%206.8315%2019.1626C6.75195%2019.0054%206.6279%2018.8832%206.45934%2018.7961C6.29267%2018.7071%206.07771%2018.6626%205.81445%2018.6626H4.84854V23.6001H3.79457ZM11.0746%2023.6001H9.103V17.7819H11.1144C11.692%2017.7819%2012.1882%2017.8984%2012.603%2018.1313C13.0197%2018.3624%2013.3397%2018.6948%2013.5632%2019.1285C13.7867%2019.5622%2013.8985%2020.0812%2013.8985%2020.6853C13.8985%2021.2914%2013.7858%2021.8122%2013.5604%2022.2478C13.3369%2022.6834%2013.014%2023.0177%2012.5916%2023.2507C12.1712%2023.4836%2011.6655%2023.6001%2011.0746%2023.6001ZM10.157%2022.6882H11.0235C11.4288%2022.6882%2011.7668%2022.6143%2012.0377%2022.4666C12.3085%2022.317%2012.5121%2022.0944%2012.6485%2021.799C12.7848%2021.5016%2012.853%2021.1304%2012.853%2020.6853C12.853%2020.2402%2012.7848%2019.8709%2012.6485%2019.5774C12.5121%2019.2819%2012.3104%2019.0613%2012.0433%2018.9154C11.7782%2018.7677%2011.4486%2018.6938%2011.0547%2018.6938H10.157V22.6882ZM15.0599%2023.6001V17.7819H18.7872V18.6654H16.1139V20.245H18.5315V21.1285H16.1139V23.6001H15.0599Z'%20fill='white'/%3e%3c/g%3e%3c/g%3e%3cdefs%3e%3cfilter%20id='filter0_di_7893_9513'%20x='2.42051'%20y='-3.2'%20width='28.7996'%20height='37.6'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeColorMatrix%20in='SourceAlpha'%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20127%200'%20result='hardAlpha'/%3e%3cfeOffset%20dy='0.8'/%3e%3cfeGaussianBlur%20stdDeviation='0.8'/%3e%3cfeComposite%20in2='hardAlpha'%20operator='out'/%3e%3cfeColorMatrix%20type='matrix'%20values='0%200%200%200%200.894118%200%200%200%200%200.898039%200%200%200%200%200.905882%200%200%200%200.24%200'/%3e%3cfeBlend%20mode='normal'%20in2='BackgroundImageFix'%20result='effect1_dropShadow_7893_9513'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='effect1_dropShadow_7893_9513'%20result='shape'/%3e%3cfeColorMatrix%20in='SourceAlpha'%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20127%200'%20result='hardAlpha'/%3e%3cfeOffset%20dy='-3.2'/%3e%3cfeGaussianBlur%20stdDeviation='1.6'/%3e%3cfeComposite%20in2='hardAlpha'%20operator='arithmetic'%20k2='-1'%20k3='1'/%3e%3cfeColorMatrix%20type='matrix'%20values='0%200%200%200%200.813571%200%200%200%200%200.82%200%200%200%200%200.826429%200%200%200%200.32%200'/%3e%3cfeBlend%20mode='normal'%20in2='shape'%20result='effect2_innerShadow_7893_9513'/%3e%3c/filter%3e%3cfilter%20id='filter1_i_7893_9513'%20x='0.820312'%20y='14'%20width='20.7998'%20height='16.4'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeColorMatrix%20in='SourceAlpha'%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20127%200'%20result='hardAlpha'/%3e%3cfeOffset%20dy='3.2'/%3e%3cfeGaussianBlur%20stdDeviation='1.6'/%3e%3cfeComposite%20in2='hardAlpha'%20operator='arithmetic'%20k2='-1'%20k3='1'/%3e%3cfeColorMatrix%20type='matrix'%20values='0%200%200%200%201%200%200%200%200%201%200%200%200%200%201%200%200%200%200.08%200'/%3e%3cfeBlend%20mode='normal'%20in2='shape'%20result='effect1_innerShadow_7893_9513'/%3e%3c/filter%3e%3cclipPath%20id='clip0_7893_9513'%3e%3crect%20width='32'%20height='32'%20fill='white'%20transform='translate(0.820312)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","import React, { useRef } from \"react\";\nimport { readLicense, type ILicenseData } from \"ocr-upload-reader\";\nimport DownloadIcon from \"../../assets/download.svg\";\nimport FileIcon from \"../../assets/file.svg\";\nimport { useTranslation } from \"@/hooks/use-translation\";\n\ninterface FileUploadProps {\n label: string;\n file: File | null;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: () => void;\n lang?: \"vi\" | \"en\";\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n label,\n file,\n onChange,\n onParsedData,\n onRemoveFile,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const inputId = label.replace(/\\s+/g, \"-\").toLowerCase();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n onChange(event);\n const selectedFile = event.target.files?.[0];\n if (selectedFile && onParsedData) {\n try {\n const result = await readLicense(selectedFile);\n console.log(\"📄 OCR Result:\", result);\n onParsedData(result);\n } catch (err) {\n console.error(\"❌ OCR Error:\", (err as Error).message);\n }\n }\n };\n\n const handleRemoveFile = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n\n if (onRemoveFile) {\n onRemoveFile();\n } else {\n const fakeEvent = {\n target: {\n files: null,\n value: \"\",\n },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(fakeEvent);\n }\n };\n\n const triggerInput = () => fileInputRef.current?.click();\n\n return (\n <div className=\"space-y-2 relative\">\n <label\n htmlFor={inputId}\n className=\"font-inter text-sm font-semibold text-[#2C2C2C] mb-1\"\n >\n {translate(label)} <span className=\"text-red-500\">*</span>\n </label>\n\n {file ? (\n <div className=\"relative flex items-center border border-gray-300 rounded-lg px-4 py-3 w-full max-w-[400px] mt-2 bg-gray-50\">\n <img\n src={FileIcon}\n alt={translate(\"uploaded_file\")}\n className=\"w-10 h-10\"\n />\n <div className=\"ml-4 text-left overflow-hidden\">\n <div className=\"text-sm font-medium text-gray-900 truncate\">\n {file.name}\n </div>\n <div className=\"text-xs text-gray-500\">\n {(file.size / 1024).toFixed(0)} KB\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={handleRemoveFile}\n className=\"absolute top-1 right-1 p-1 rounded hover:bg-red-100 transition-colors duration-200\"\n aria-label={translate(\"remove_file\")}\n title={translate(\"remove_file\")}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-4 h-4 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ) : (\n <div className=\"border-2 border-dashed border-gray-300 rounded-lg p-4 text-center hover:border-blue-400 transition-colors min-h-[140px] flex flex-col items-center justify-center space-y-2 mt-2\">\n <input\n id={inputId}\n type=\"file\"\n accept=\".pdf,.jpg,.jpeg,.png\"\n ref={fileInputRef}\n onChange={handleFileChange}\n className=\"hidden\"\n />\n\n <img\n src={DownloadIcon}\n alt={translate(\"upload_icon\")}\n className=\"w-6 h-6\"\n />\n\n <p className=\"text-sm font-medium text-gray-600\">\n {translate(\"upload_file\")}\n </p>\n <p className=\"text-xs text-gray-400\">\n {translate(\"file_format_info\")}\n </p>\n <button\n type=\"button\"\n onClick={triggerInput}\n className=\"mt-1 px-4 py-1 bg-[#1E2A7B] text-white rounded text-sm hover:bg-[#1a2470] hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n >\n {translate(\"upload_button\")}\n </button>\n </div>\n )}\n </div>\n );\n};\n","import portalAxiosClient from \"@/configs/portalAxiosClient\";\nimport { MCCOption } from \"../types/MCCList\";\n\nexport const getMCCList = async (): Promise<MCCOption[]> => {\n const { data } = await portalAxiosClient.get(\"/metadata/mcc\");\n return data.data;\n};\n","import { useState, useEffect, useRef } from \"react\";\nimport { MCCOption } from \"../types/MCCList\";\nimport { getMCCList } from \"../services/MCCList\";\n\nlet globalMCCCache: MCCOption[] | null = null;\nlet globalMCCPromise: Promise<MCCOption[]> | null = null;\n\nexport const useMCCList = () => {\n const [industries, setIndustries] = useState<MCCOption[]>([]);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const hasFetched = useRef(false);\n\n useEffect(() => {\n if (globalMCCCache) {\n setIndustries(globalMCCCache);\n setLoading(false);\n return;\n }\n\n if (globalMCCPromise) {\n globalMCCPromise\n .then((data) => {\n setIndustries(data);\n setLoading(false);\n })\n .catch((err) => {\n setError(\"Failed to load industries.\");\n setLoading(false);\n });\n return;\n }\n\n if (hasFetched.current) {\n return;\n }\n\n const fetchIndustries = async () => {\n try {\n globalMCCPromise = getMCCList();\n const mccList = await globalMCCPromise;\n\n globalMCCCache = mccList;\n\n setIndustries(mccList);\n } catch (err) {\n setError(\"Failed to load industries.\");\n console.error(\"Error fetching MCC list:\", err);\n } finally {\n setLoading(false);\n globalMCCPromise = null;\n }\n };\n\n hasFetched.current = true;\n fetchIndustries();\n }, []);\n\n return { industries, loading, error };\n};\n","import { useTranslation } from '@/hooks/use-translation';\nimport React, { memo, useMemo } from 'react';\nimport { useMCCList } from '../hooks/useMCCList';\n\ninterface Industry {\n code: string;\n name: string;\n}\n\ninterface IndustrySelectProps {\n value: string;\n onChange: (value: string) => void;\n lang?: 'vi' | 'en';\n}\n\nconst IndustrySelect: React.FC<IndustrySelectProps> = memo(\n ({ value, onChange, lang = 'vi' }) => {\n const { translate } = useTranslation('form', lang);\n\n const { industries, loading, error } = useMCCList() as {\n industries?: Industry[];\n loading?: boolean;\n error?: unknown;\n };\n\n const safeIndustries = useMemo(() => industries ?? [], [industries]);\n\n const isDisabled = Boolean(loading) || Boolean(error);\n\n const errorMessage =\n typeof error === 'string'\n ? error\n : error && typeof error === 'object' && 'message' in (error as any)\n ? String((error as any).message)\n : error\n ? String(error)\n : '';\n\n return (\n <div>\n <label className=\"block text-sm font-semibold text-[#2C2C2C] mb-2\">\n {translate('industry')}\n <span className=\"text-red-500 ml-1\">*</span>\n </label>\n\n <div className=\"relative\">\n <select\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value)}\n className={`\n appearance-none w-full px-4 py-3 pr-10 border rounded-[8px]\n focus:outline-none focus:ring-2 focus:ring-blue-500\n text-[#6B7280] font-inter text-sm font-normal leading-[18px]\n tracking-normal hover:ring-2 hover:ring-blue-900\n ${isDisabled ? 'bg-gray-100 cursor-not-allowed' : 'bg-white'}\n `}\n disabled={isDisabled}\n >\n <option value=\"\">{translate('select_industry')}</option>\n\n {safeIndustries.map((industry) => (\n <option key={industry.code} value={industry.code}>\n {industry.name}\n </option>\n ))}\n </select>\n\n <div className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2\">\n <svg\n className=\"w-4 h-4 text-gray-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </div>\n </div>\n\n {loading && (\n <div className=\"text-sm text-blue-500 mt-2\">\n {translate('loading_industries')}\n </div>\n )}\n\n {Boolean(errorMessage) && (\n <div className=\"text-sm text-red-500 mt-2\">{errorMessage}</div>\n )}\n </div>\n );\n },\n);\n\nIndustrySelect.displayName = 'IndustrySelect';\n\nexport default IndustrySelect;\n","import React from \"react\";\n\ninterface InputProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n type?: string;\n className?: string;\n isAutofilled?: boolean;\n labelClassname?: string;\n required?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n title?: string;\n style?: React.CSSProperties; \n}\n\nexport const Input: React.FC<InputProps> = ({\n label,\n value,\n onChange,\n placeholder,\n type = \"text\",\n className = \"\",\n isAutofilled = false,\n labelClassname = \"\",\n required = true,\n readOnly,\n disabled,\n title,\n style,\n}) => (\n <div className=\"space-y-1 min-w-[90px]\">\n <label\n className={`font-inter ${\n labelClassname ? labelClassname : \"font-semibold text-sm\"\n } leading-[18px] tracking-normal text-[#2C2C2C] mb-1`}\n >\n {label} {required ? <span className=\"text-red-500\">*</span> : \"\"}\n </label>\n\n <input\n type={type}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n readOnly={readOnly}\n disabled={disabled}\n title={title} // Thêm title prop\n style={style} // Thêm style prop\n className={`w-full h-[44px] px-3 py-[6px] border ${\n isAutofilled ? \"bg-gray-100\" : \"border-[#E4E7EC]\"\n } rounded-[8px] font-inter text-sm font-normal leading-[18px] tracking-normal text-[#2C2C2C]\n focus:outline-none ${\n readOnly\n ? \"cursor-not-allowed bg-gray-100\"\n : \"focus:ring-2 focus:ring-[#1E2A7B] hover:ring-2 hover:ring-blue-900\"\n }\n mt-2\n ${className}`}\n />\n\n {isAutofilled && (\n <p className=\"text-xs text-blue-500 italic mt-1 hover:ring-2 hover:ring-blue-900\">\n Đã tự động điền từ giấy tờ, bạn có thể chỉnh sửa nếu cần.\n </p>\n )}\n </div>\n);","import React from 'react';\nimport { AddressFields } from './AddressFields';\nimport { FileUpload } from './FileUpload';\nimport type { ILicenseData } from 'ocr-upload-reader';\nimport IndustrySelect from \"./IndustrySelect\";\nimport { useTranslation } from '@/hooks/use-translation';\nimport { Input } from '@/components/ui/input';\nimport { FormData } from '../types/formData';\n\ninterface UserTypeFormProps {\n formData: FormData;\n onInputChange: (field: keyof FormData, value: string) => void;\n businessLicenseFile: File | null;\n taxDocumentFile: File | null;\n onFileUpload: (\n type: \"businessLicense\" | \"taxDocument\",\n event: React.ChangeEvent<HTMLInputElement>\n ) => void;\n autofilledFields?: string[];\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: (type: \"businessLicense\" | \"taxDocument\") => void;\n errors?: Partial<Record<keyof FormData, string>>;\n fileErrors?: {\n businessLicense?: string;\n taxDocument?: string;\n };\n lang?: \"vi\" | \"en\";\n}\n\nexport const UserTypeForm: React.FC<UserTypeFormProps> = ({\n formData,\n onInputChange,\n businessLicenseFile,\n taxDocumentFile,\n onFileUpload,\n autofilledFields = [],\n onParsedData,\n onRemoveFile,\n errors,\n fileErrors,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n\n const isAutofilled = (field: keyof FormData) =>\n autofilledFields.includes(field);\n\n const renderInput = (\n label: string,\n field: keyof FormData,\n options: { isAuto?: boolean } = {}\n ) => {\n if (field === \"businessLicense\" || field === \"taxLicense\") return null;\n\n const value = formData[field];\n if (typeof value !== \"string\") return null; // Ensure type safety\n\n return (\n <div>\n <Input\n label={translate(label)}\n value={value}\n onChange={(v) => onInputChange(field, v)}\n />\n {errors?.[field] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[field]}</p>\n )}\n </div>\n );\n };\n\n\n const renderFileUpload = (\n label: string,\n type: \"businessLicense\" | \"taxDocument\",\n file: File | null\n ) => (\n <div>\n <FileUpload\n label={translate(label)}\n file={file}\n onChange={(e) => onFileUpload(type, e)}\n onParsedData={onParsedData}\n onRemoveFile={() => onRemoveFile?.(type)}\n lang={lang}\n />\n {type === \"businessLicense\" && fileErrors?.businessLicense && (\n <p className=\"text-red-500 text-xs mt-1\">\n {fileErrors.businessLicense}\n </p>\n )}\n {type === \"taxDocument\" && fileErrors?.taxDocument && (\n <p className=\"text-red-500 text-xs mt-1\">{fileErrors.taxDocument}</p>\n )}\n </div>\n );\n\n const renderIndividualForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"full_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n </div>\n <div className=\"space-y-4\">\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n {renderInput(\"referral_code\", \"referralCode\")}\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n lang={lang}\n />\n </div>\n </div>\n );\n\n const renderBusinessForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"household_business_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n lang={lang}\n />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\"referral_code\", \"referralCode\")}\n {formData.userType !== \"individual\" && renderFileUpload(\"business_license\", \"businessLicense\", businessLicenseFile)}\n {formData.userType !== \"individual\" && renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n\n const renderEnterpriseForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"enterprise_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n {renderInput(\"representative\", \"representative\", { isAuto: true })}\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n lang={lang}\n />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\n \"business_registration_number\",\n \"business_registration_number\",\n { isAuto: true }\n )}\n {renderInput(\"referral_code\", \"referralCode\")}\n {renderFileUpload(\n \"business_license\",\n \"businessLicense\",\n businessLicenseFile\n )}\n {renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n switch (formData.userType) {\n case \"individual\":\n return renderIndividualForm();\n case \"business\":\n return renderBusinessForm();\n case \"enterprise\":\n return renderEnterpriseForm();\n default:\n return null;\n }\n};\n","export default \"data:image/svg+xml,%3csvg%20width='120'%20height='120'%20viewBox='0%200%20120%20120'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3crect%20width='120'%20height='120'%20fill='url(%23pattern0_7876_126934)'/%3e%3cdefs%3e%3cpattern%20id='pattern0_7876_126934'%20patternContentUnits='objectBoundingBox'%20width='1'%20height='1'%3e%3cuse%20xlink:href='%23image0_7876_126934'%20transform='scale(0.002)'/%3e%3c/pattern%3e%3cimage%20id='image0_7876_126934'%20width='500'%20height='500'%20preserveAspectRatio='none'%20xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAAAXNSR0IArs4c6QAAIABJREFUeF7svQuUJFd55/mPiMzIrHdVd0stqdWi9aAlhIxADfiJHojdGR5eBHY3Y7zHXo4fGssrmPWcZdcgzfQZw3q99uJHj/GgsWfBHmPc2rU9M17t2IvUQsCsEciikZBR00KNultSP6vrmZmREXH33IiMrKiqzMqIyIjIePzj6Jwsdd64j993I/753fvdexXwIgESIAESIAESyD0BJfctYANIgARIgARIgARAQWcnIAESIAESIIECEKCgF8CIbAIJkAAJkAAJUNDZB0iABEiABEigAAQo6AUwIptAAiRAAiRAAhR09gESIAESIAESKAABCnoBjMgmkAAJkAAJkAAFnX2ABEiABEiABApAgIJeACOyCSRAAiRAAiRAQWcfIAESIAESIIECEKCgF8CIbAIJkAAJkAAJUNDZB0iABEiABEigAAQo6AUwIptAAiRAAiRAAhR09gESIAESIAESKAABCnoBjMgmkAAJkAAJkAAFnX2ABEiABEiABApAgIJeACOyCSRAAiRAAiRAQWcfIAESIAESIIECEKCgF8CIbAIJkAAJkAAJUNDZB0iABEiABEigAAQo6AUwIptAAiRAAiRAAhR09gESIAESIAESKAABCnoBjMgmkAAJkAAJkAAFnX2ABEiABEiABApAgIJeACOyCSRAAiRAAiRAQWcfIAESIAESIIECEKCgF8CIbAIJkAAJkAAJUNDZB0iABEiABEigAAQo6AUwIptAAiRAAiRAAhR09gESIAESIAESKAABCnoBjMgmJEFAiAOHPonD9z/AZyQJvMyTBEggdgJ8WcWOlBkWgsD+w+LA7cdw+Im9bnMePsBnpRCGZSNIoLgE+JIqrm3ZssgEhDj0hQ/iswtTuG5uHsqZWx1hdwSeHntkqryRBEggWQIU9GT5MvfcERDitx99Gz59epdT8+nGTLcF1xvXuB47vfXcWZUVJoEyEKCgl8HKbGNgAgcOfUK8oL+ExbEFtK0x6NUWapoCfXHSyaMr6hyGD8yUCUmABNIhQEFPhzNLyQUBIfYfPoBvNlUo1QoUvQoIASEE0GrDaNew3dDXDcPTW8+FYVlJEigFAQp6KczMRgYh4PfO9bEJtFUbiveE2AKK1UbVxiZvnXPrQegy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'/%3e%3c/defs%3e%3c/svg%3e\"","import { useTranslation } from \"@/hooks/use-translation\";\nimport React from \"react\";\n\ninterface MerchantHeaderProps {\n title?: string;\n subtitle?: string;\n statusLabel?: string;\n statusType?: \"draft\" | \"pending\" | \"approved\" | \"rejected\";\n lang?: \"vi\" | \"en\";\n}\n\nconst statusStyleMap = {\n draft: \"text-gray-800 bg-gray-200 border border-gray-400\",\n pending: \"text-yellow-600 bg-yellow-50 border border-yellow-400\",\n approved: \"text-green-600 bg-green-50 border border-green-400\",\n rejected: \"text-red-600 bg-red-50 border border-red-400\",\n};\n\nexport default function MerchantHeader({\n title = \"add_new_profile\",\n subtitle,\n statusLabel,\n statusType,\n lang = \"vi\",\n}: MerchantHeaderProps) {\n const { translate } = useTranslation(\"form\", lang);\n const statusClass = statusType ? statusStyleMap[statusType] : \"\";\n\n return (\n <div className=\"flex justify-between items-start py-4\">\n <div>\n <p className=\"uppercase text-sm font-medium text-[#1E2A7B]\">\n {translate(\"merchant_profile\")}\n </p>\n <div className=\"flex items-center mt-1 space-x-2 justify-center\">\n <h1 className=\"text-2xl font-bold text-[#2C2C2C]\">\n {translate(title)}\n </h1>\n {subtitle && (\n <span className=\"text-sm text-[#475467]\">\n | {translate(subtitle)}\n </span>\n )}\n </div>\n </div>\n\n {statusLabel && (\n <span\n className={`rounded-full px-6 py-2 text-sm font-bold ${statusClass}`}\n >\n {translate(statusLabel)}\n </span>\n )}\n </div>\n );\n}\n","import type { ILicenseData } from 'ocr-upload-reader';\n\nexport const mapLicenseData = (data: ILicenseData) => {\n return {\n organization: {\n name: data.organization?.name || '',\n address: data.organization?.address || '',\n taxCode: data.organization?.tax_code || '',\n taxAuthority: data.organization?.tax_authority || '',\n },\n contactPerson: {\n name: data.contactPerson?.name || '',\n address: data.contactPerson?.address || '',\n email: data.contactPerson?.email || '',\n phone: data.contactPerson?.phone_number || '',\n },\n legalRepresentative: {\n name: data.legalRepresentative?.name || '',\n dob: data.legalRepresentative?.dob || '',\n gender: data.legalRepresentative?.gender || '',\n phone: data.legalRepresentative?.phone || '',\n idCard: data.legalRepresentative?.id_card || '',\n passportNumber: data.legalRepresentative?.passport_number || '',\n nationality: data.legalRepresentative?.nationality || '',\n permanentAddress: data.legalRepresentative?.permanent_address || '',\n },\n };\n};\n","import { useEffect, useRef } from 'react';\nimport { useTranslation } from '../../hooks/use-translation';\n\ninterface ConfirmModalProps {\n open: boolean;\n title: string;\n description: string;\n onConfirm: () => void;\n onCancel: () => void;\n lang?: 'vi' | 'en';\n}\n\nexport const ConfirmModal = ({\n open,\n title,\n description,\n onConfirm,\n onCancel,\n lang = 'vi',\n}: ConfirmModalProps) => {\n const modalRef = useRef<HTMLDivElement>(null);\n const { translate } = useTranslation('form', lang);\n\n useEffect(() => {\n if (!open) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onCancel();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [open, onCancel]);\n\n if (!open) {\n return null;\n }\n\n return (\n <div className='fixed inset-0 bg-black/30 backdrop-blur-sm z-40 flex items-center justify-center'>\n <div\n ref={modalRef}\n role='dialog'\n aria-modal='true'\n aria-labelledby='modal-title'\n aria-describedby='modal-description'\n className='w-full max-w-md bg-white rounded-xl p-6 shadow-xl z-50 space-y-4'\n >\n <h2 id='modal-title' className='text-lg font-semibold text-gray-800'>\n {title}\n </h2>\n <p id='modal-description' className='text-sm text-gray-600'>\n {description}\n </p>\n <div className='flex justify-end gap-2 mt-4'>\n <button\n onClick={onCancel}\n className='px-4 py-2 rounded-md bg-gray-200 text-gray-700 hover:bg-gray-300 hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl'\n >\n {translate('no')}\n </button>\n <button\n onClick={onConfirm}\n className='px-4 py-2 rounded-md bg-[#1E2A7B] text-white hover:bg-[#293a70] hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl'\n >\n {translate('yes')}\n </button>\n </div>\n </div>\n </div>\n );\n};\n","import { useTranslation } from \"../../hooks/use-translation\";\nimport React from \"react\";\n\ninterface ErrorModalProps {\n message: string;\n onClose: () => void;\n lang?: \"vi\" | \"en\";\n}\n\nconst ErrorModal: React.FC<ErrorModalProps> = ({\n message,\n onClose,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n return (\n <div className=\"fixed inset-0 bg-black bg-opacity-40 backdrop-blur-sm flex justify-center items-center z-50 p-4\">\n <div className=\"bg-white rounded-2xl shadow-2xl max-w-md w-full transform \">\n {/* Header với icon */}\n <div className=\"flex items-center justify-center pt-8 pb-4\">\n <div className=\"w-16 h-16 bg-red-100 rounded-full flex items-center justify-center\">\n <svg\n className=\"w-8 h-8 text-red-600\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\"\n />\n </svg>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"px-8 pb-6\">\n <h2 className=\"text-2xl font-bold text-gray-900 text-center mb-4\">\n {translate(\"error_occur\")}\n </h2>\n <p className=\"text-gray-600 text-center leading-relaxed\">{message}</p>\n </div>\n\n {/* Actions */}\n <div className=\"px-8 pb-8\">\n <button\n onClick={onClose}\n className=\"w-full py-3 px-6 bg-[#1F2B7B] text-white font-semibold rounded transform hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n >\n {translate(\"close\")}\n </button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ErrorModal;\n","import { useTranslation } from \"../../hooks/use-translation\";\nimport React from \"react\";\n\ninterface SuccessModalToastProps {\n onClose: () => void;\n imageSrc: string;\n lang?: \"vi\" | \"en\";\n}\n\nconst SuccessModalToast: React.FC<SuccessModalToastProps> = ({\n onClose,\n imageSrc,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n return (\n <div className=\"fixed inset-0 bg-black bg-opacity-30 flex items-center justify-center z-50\">\n <div className=\"bg-white rounded-2xl w-[400px] p-6 text-center relative shadow-lg\">\n <button\n className=\"absolute top-4 right-4 text-gray-500 hover:text-gray-700\"\n onClick={onClose}\n aria-label=\"Đóng\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n\n <img\n src={imageSrc}\n alt=\"success\"\n className=\"mx-auto w-[120px] h-[120px] mb-4\"\n />\n\n <h2 className=\"text-xl font-semibold text-[#0A203D] mb-1\">\n {translate(\"success_announcement\")}\n </h2>\n <p className=\"text-sm text-[#0A203D] mb-6\">{translate(\"success_form\")}</p>\n\n <button\n onClick={onClose}\n className=\"bg-[#1F2B7B] text-white text-sm rounded w-[342px] h-[44px] px-8 py-3 hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n >\n {translate(\"done\")}\n </button>\n </div>\n </div>\n );\n};\n\nexport default SuccessModalToast;\n","export function toFormData(obj: Record<string, any>): FormData {\n const formData = new FormData();\n\n Object.keys(obj).forEach((key) => {\n const value = obj[key];\n\n if (value instanceof File) {\n formData.append(key, value);\n }\n\n else if (Array.isArray(value)) {\n value.forEach((v, i) => {\n formData.append(`${key}[${i}]`, v);\n });\n }\n\n else if (value !== undefined && value !== null) {\n formData.append(key, value.toString());\n }\n });\n\n return formData;\n}\n","import portalAxiosClient from \"@/configs/portalAxiosClient\";\nimport { toFormData } from \"@/utils/form\";\nimport { CreateMerchantPayload } from \"../types/formData\";\n\nexport async function createMerchant(\n data: CreateMerchantPayload,\n accessToken?: string\n): Promise<{ success: boolean; message: string }> {\n try {\n const formData = toFormData(data);\n console.log(\"Form Data raw: \", data);\n console.log(\"Form Data: \", formData);\n\n const customHeaders: Record<string, string> = {\n \"Content-Type\": \"multipart/form-data\",\n };\n\n if (accessToken) {\n customHeaders[\"Authorization\"] = `Bearer ${accessToken}`;\n }\n\n const res = await portalAxiosClient.post(\n \"/master-merchant/merchant\",\n formData,\n {\n headers: customHeaders,\n }\n );\n\n console.log(\"API Response:\", res.data);\n\n return res.data.data;\n } catch (error: any) {\n console.error(\"Service error:\", error);\n\n throw error;\n }\n}\n","import { useState, useCallback } from \"react\";\nimport type { CreateMerchantPayload } from \"../types/formData\";\nimport { createMerchant } from \"../services/merchantFormService\";\n\ninterface ApiError {\n message: string;\n code?: string;\n details?: any;\n field_errors?: Record<string, string[]>;\n}\n\ninterface UseCreateMerchantResult {\n submit: (\n payload: CreateMerchantPayload,\n accessToken?: string\n ) => Promise<{ success: boolean; message: string }>;\n loading: boolean;\n error: string | null;\n errorDetails: ApiError | null;\n success: boolean;\n reset: () => void;\n}\n\nexport function useCreateMerchant(): UseCreateMerchantResult {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [errorDetails, setErrorDetails] = useState<ApiError | null>(null);\n const [success, setSuccess] = useState(false);\n\n const submit = useCallback(\n async (\n payload: CreateMerchantPayload,\n accessToken?: string\n ): Promise<{ success: boolean; message: string }> => {\n setLoading(true);\n setError(null);\n setErrorDetails(null);\n setSuccess(false);\n\n const filteredPayload = Object.fromEntries(\n Object.entries(payload).filter(([_, value]) => value != null)\n );\n\n try {\n const res = await createMerchant(\n filteredPayload as CreateMerchantPayload,\n accessToken\n );\n if (!res?.success) {\n throw new Error(res?.message || \"Gửi dữ liệu thất bại\");\n }\n setSuccess(true);\n return res;\n } catch (err: any) {\n console.error(\"Lỗi đầy đủ:\", err);\n\n let errorMessage = \"Đã xảy ra lỗi không xác định\";\n let details: ApiError | null = null;\n\n if (err?.response) {\n console.error(\"Phản hồi lỗi:\", err.response);\n console.error(\"Dữ liệu phản hồi lỗi:\", err.response.data);\n console.error(\"Trạng thái phản hồi lỗi:\", err.response.status);\n console.error(\"Headers phản hồi lỗi:\", err.response.headers);\n\n const responseData = err.response.data;\n\n details = {\n message: responseData?.message || responseData?.error || \"Lỗi API\",\n code: responseData?.code || responseData?.error_code,\n details: responseData?.details,\n field_errors: responseData?.field_errors || responseData?.errors,\n };\n\n errorMessage =\n responseData?.message ||\n responseData?.error ||\n responseData?.detail ||\n `HTTP ${err.response.status}: ${err.response.statusText}`;\n\n if (responseData?.field_errors || responseData?.errors) {\n const fieldErrors =\n responseData.field_errors || responseData.errors;\n const fieldErrorMessages = Object.entries(fieldErrors)\n .map(\n ([field, errors]) =>\n `${field}: ${\n Array.isArray(errors) ? errors.join(\", \") : errors\n }`\n )\n .join(\"; \");\n\n if (fieldErrorMessages) {\n errorMessage = `Lỗi xác thực dữ liệu: ${fieldErrorMessages}`;\n }\n }\n } else if (err?.request) {\n console.error(\"Lỗi mạng:\", err.request);\n errorMessage =\n \"Lỗi kết nối mạng. Vui lòng kiểm tra kết nối internet.\";\n details = {\n message: \"Lỗi mạng\",\n code: \"NETWORK_ERROR\",\n };\n } else {\n console.error(\"Lỗi khác:\", err);\n errorMessage = err?.message || \"Đã xảy ra lỗi không xác định\";\n details = {\n message: err?.message || \"Lỗi không xác định\",\n code: \"UNKNOWN_ERROR\",\n };\n }\n\n setError(errorMessage);\n setErrorDetails(details);\n throw new Error(errorMessage);\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const reset = () => {\n setError(null);\n setErrorDetails(null);\n setSuccess(false);\n setLoading(false);\n };\n\n return {\n submit,\n loading,\n error,\n errorDetails,\n success,\n reset,\n };\n}\n","import React, { useEffect, useState } from 'react';\nimport { readLicense } from 'ocr-upload-reader';\nimport { UserTypeForm } from './UserTypeForm';\nimport DefaultSuccessIcon from '../../assets/success.svg';\nimport MerchantHeader from './Header';\nimport { useTranslation } from '@/hooks/use-translation';\nimport { mapLicenseData } from '@/utils/mapLicenseData';\nimport { ConfirmModal } from '@/components/ui/confirmModal';\nimport Button from '@/components/ui/button';\nimport ErrorModal from '@/components/ui/error-modal';\nimport SuccessModalToast from '@/components/ui/success-modal';\nimport { FormData } from '../types/formData';\nimport { useCreateMerchant } from '../hooks/use-create-merchant';\nimport usePortalApiConfig from '@/shared/store/use-portal-api-config.store';\n\ninterface SubmitPayload {\n entity_type: 'PERSON' | 'BUSINESS_HOUSEHOLD' | 'ENTERPRISE';\n tax_code: string;\n full_name: string;\n brand_name?: string;\n phone_number: string;\n business_registration_number?: string;\n email: string;\n referral_code?: string;\n industry: string;\n representative_name: string;\n country: string;\n city: string;\n district: string;\n ward: string;\n street_address: string;\n business_license: File | null;\n tax_license: File | null;\n merchant_id?: string;\n}\n\ninterface MerchantRegistrationFormProps {\n accessToken?: string;\n onClose?: () => void;\n onSubmit?: (data: SubmitPayload) => Promise<void>;\n onSuccess?: (data?: SubmitPayload) => void;\n onError?: (err: Error) => void;\n defaultValues?: Partial<FormData>;\n successIconSrc?: string;\n className?: string;\n merchantId?: string;\n isHeader?: boolean;\n lang?: 'vi' | 'en';\n}\n\nconst defaultFormData: FormData = {\n userType: 'business',\n phoneNumberSecond: '',\n businessName: '',\n email: '',\n branchName: '',\n taxLicense: null,\n businessLicense: null,\n taxCode: '',\n industry: '',\n representative: '',\n country: '',\n city: '',\n district: '',\n ward: '',\n address: '',\n referralCode: '',\n business_registration_number: '',\n};\n\nconst ConfirmSource = {\n Business: 'business',\n Tax: 'tax',\n} as const;\n\ntype ConfirmSource = (typeof ConfirmSource)[keyof typeof ConfirmSource];\n\nconst DOCUMENT_CONFIGS = {\n [ConfirmSource.Business]: {\n successMsg: 'business_license_success_msg',\n errorMsg: 'business_license_error_msg',\n emptyDataMsg: 'business_license_empty_data_msg',\n modalTitle: 'business_license_overwrite_modal_title',\n },\n [ConfirmSource.Tax]: {\n successMsg: 'tax_document_success_msg',\n errorMsg: 'tax_document_error_msg',\n emptyDataMsg: 'tax_document_empty_data_msg',\n modalTitle: 'tax_document_overwrite_modal_title',\n },\n};\n\nexport const MerchantRegistrationForm: React.FC<\n MerchantRegistrationFormProps\n> = ({\n accessToken,\n onClose,\n onSubmit,\n onSuccess,\n onError,\n defaultValues = {},\n successIconSrc,\n className = '',\n merchantId,\n isHeader = true,\n lang = 'vi',\n}) => {\n const { translate } = useTranslation('form', lang);\n const [formData, setFormData] = useState<FormData>({\n ...defaultFormData,\n ...defaultValues,\n });\n const [autofilledFields, setAutofilledFields] = useState<string[]>([]);\n const [businessLicenseFile, setBusinessLicenseFile] = useState<File | null>(\n null,\n );\n const [taxDocumentFile, setTaxDocumentFile] = useState<File | null>(null);\n const [touchedFields, setTouchedFields] = useState<string[]>([]);\n const [showConfirm, setShowConfirm] = useState(false);\n const [confirmSource, setConfirmSource] = useState<ConfirmSource | null>(\n null,\n );\n const [pendingOverwriteFields, setPendingOverwriteFields] = useState<\n Partial<FormData>\n >({});\n const [errors, setErrors] = useState<Partial<Record<keyof FormData, string>>>(\n {},\n );\n const [fileErrors, setFileErrors] = useState<{\n businessLicense?: string;\n taxDocument?: string;\n }>({});\n const [showSuccessModal, setShowSuccessModal] = useState(false);\n const [showErrorModal, setShowErrorModal] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const { submit: createMerchant } = useCreateMerchant();\n\n // Sync accessToken vào store mỗi khi prop thay đổi\n useEffect(() => {\n if (accessToken) {\n usePortalApiConfig.setState({ accessToken });\n }\n }, [accessToken]);\n\n const generateRandomData = (): Partial<FormData> => {\n const characters =\n 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n const referralCode = Array.from({ length: 8 })\n .map(() =>\n characters.charAt(Math.floor(Math.random() * characters.length)),\n )\n .join('');\n return { referralCode };\n };\n\n useEffect(() => {\n const randomData = generateRandomData();\n setFormData((prev) => ({ ...prev, ...randomData }));\n setAutofilledFields(Object.keys(randomData));\n }, []);\n\n const handleInputChange = (field: keyof FormData, value: string) => {\n setFormData((prev) => {\n const next = { ...prev, [field]: value || '' };\n if (field === 'country') {\n next.city = '';\n next.district = '';\n next.ward = '';\n } else if (field === 'city') {\n next.district = '';\n next.ward = '';\n } else if (field === 'district') {\n next.ward = '';\n }\n return next;\n });\n\n setErrors((prev) => {\n const copy = { ...prev };\n delete copy[field];\n return copy;\n });\n\n if (!touchedFields.includes(field)) {\n setTouchedFields((prev) => [...prev, field]);\n }\n\n if (autofilledFields.includes(field)) {\n setAutofilledFields((prev) => prev.filter((f) => f !== field));\n }\n };\n\n const validateField = (\n field: keyof FormData,\n value: string,\n ): string | null => {\n const trimmed = value.trim();\n if (!trimmed) return translate('required_field_error');\n if (field === 'email' && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(trimmed)) {\n return translate('invalid_email_error');\n }\n if (field === 'phoneNumberSecond' && !/^[0-9]{9,11}$/.test(trimmed)) {\n return translate('invalid_phone_number_error');\n }\n return null;\n };\n\n const validateForm = (): boolean => {\n const newErrors: Partial<Record<keyof FormData, string>> = {};\n const fileErrs: typeof fileErrors = {};\n\n const requiredFields: (keyof FormData)[] = [\n 'taxCode',\n 'businessName',\n 'phoneNumberSecond',\n 'email',\n 'industry',\n 'country',\n 'city',\n 'district',\n 'ward',\n 'address',\n ];\n\n if (\n formData.userType === 'business' ||\n formData.userType === 'enterprise'\n ) {\n requiredFields.push('branchName');\n }\n if (formData.userType === 'enterprise') {\n requiredFields.push('representative');\n }\n\n requiredFields.forEach((field) => {\n const error = validateField(field, formData[field] || '');\n if (error) newErrors[field] = error;\n });\n\n if (formData.userType !== 'individual') {\n if (!businessLicenseFile) {\n fileErrs.businessLicense = translate('business_license_required_error');\n }\n if (!taxDocumentFile) {\n fileErrs.taxDocument = translate('tax_document_required_error');\n }\n }\n\n setErrors(newErrors);\n setFileErrors(fileErrs);\n\n return (\n Object.keys(newErrors).length === 0 && Object.keys(fileErrs).length === 0\n );\n };\n\n const getFilledFields = (data: Partial<FormData>) =>\n Object.entries(data)\n .filter(([_, v]) => !!v)\n .map(([k]) => k);\n\n const handleOverwriteConfirm = () => {\n setFormData((prev) => ({ ...prev, ...pendingOverwriteFields }));\n setAutofilledFields(getFilledFields(pendingOverwriteFields));\n console.log(translate(DOCUMENT_CONFIGS[confirmSource!].successMsg));\n setShowConfirm(false);\n setPendingOverwriteFields({});\n };\n\n const processOCR = async (file: File, source: ConfirmSource) => {\n try {\n const rawData = await readLicense(file);\n const parsed = mapLicenseData(rawData);\n const extractedFields: Partial<FormData> = {\n businessName: parsed.organization.name,\n taxCode: parsed.organization.taxCode,\n address: parsed.organization.address,\n email: parsed.contactPerson.email,\n phoneNumberSecond: parsed.contactPerson.phone,\n representative: parsed.legalRepresentative.name,\n };\n const filled = getFilledFields(extractedFields);\n if (filled.length === 0)\n return alert(DOCUMENT_CONFIGS[source].emptyDataMsg);\n\n const hasExistingData = filled.some((key) => {\n const formValue = formData[key as keyof FormData];\n const extractedValue = extractedFields[key as keyof FormData];\n return formValue && formValue !== extractedValue;\n });\n\n if (hasExistingData) {\n setConfirmSource(source);\n setPendingOverwriteFields(extractedFields);\n setShowConfirm(true);\n } else {\n setFormData((prev) => ({ ...prev, ...extractedFields }));\n setAutofilledFields(filled);\n console.log(translate(DOCUMENT_CONFIGS[source].successMsg));\n }\n } catch (err) {\n console.error('OCR error:', err);\n alert(translate(DOCUMENT_CONFIGS[source].errorMsg));\n }\n };\n\n const handleFileUpload = async (\n type: 'businessLicense' | 'taxDocument',\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const file = event.target.files?.[0] || undefined;\n if (!file) {\n setFileErrors((prev) => ({ ...prev, [type]: undefined }));\n return;\n }\n\n type === 'businessLicense'\n ? setBusinessLicenseFile(file)\n : setTaxDocumentFile(file);\n\n const source =\n type === 'businessLicense' ? ConfirmSource.Business : ConfirmSource.Tax;\n await processOCR(file, source);\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n const isValid = validateForm();\n if (!isValid) {\n setErrorMessage(translate('form_validation_error'));\n setShowErrorModal(true);\n return;\n }\n\n if (\n formData.userType === 'enterprise' &&\n !formData.business_registration_number\n ) {\n setErrorMessage(translate('business_registration_number_required'));\n setShowErrorModal(true);\n return;\n }\n\n const requiresFiles = ['business', 'enterprise'].includes(\n formData.userType,\n );\n if (requiresFiles && (!businessLicenseFile || !taxDocumentFile)) {\n setErrorMessage(translate('file_upload_required_error'));\n setShowErrorModal(true);\n return;\n }\n\n const payload: SubmitPayload = {\n entity_type:\n formData.userType === 'individual'\n ? 'PERSON'\n : formData.userType === 'business'\n ? 'BUSINESS_HOUSEHOLD'\n : 'ENTERPRISE',\n tax_code: formData.taxCode,\n full_name: formData.businessName,\n brand_name:\n formData.userType !== 'individual' ? formData.branchName : undefined,\n phone_number: formData.phoneNumberSecond,\n business_registration_number:\n formData.userType === 'enterprise'\n ? formData.business_registration_number\n : undefined,\n email: formData.email,\n referral_code: formData.referralCode,\n industry: formData.industry,\n representative_name: formData.representative,\n country: formData.country,\n city: formData.city,\n district: formData.district,\n ward: formData.ward,\n street_address: formData.address,\n business_license:\n formData.userType === 'individual' ? null : businessLicenseFile,\n tax_license: formData.userType === 'individual' ? null : taxDocumentFile,\n ...(merchantId && { merchant_id: merchantId }),\n };\n\n try {\n const res = await createMerchant(payload, accessToken);\n if (res.success) {\n setShowSuccessModal(true);\n onSuccess?.(payload);\n }\n } catch (err) {\n console.error('Submit error details:', { error: err });\n setErrorMessage(translate('submit_error'));\n setShowErrorModal(true);\n onError?.(err as Error);\n }\n };\n\n return (\n <div>\n <div>\n {isHeader ? (\n <MerchantHeader\n title=\"profile_detail\"\n subtitle=\"profile_list\"\n statusLabel=\"draft\"\n statusType=\"draft\"\n lang={lang}\n />\n ) : null}\n </div>\n <div\n className={`bg-white mx-auto px-8 py-6 rounded-xl overflow-y-auto ${className}`}\n >\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium Hawkins-medium text-[#2C2C2C]\">\n {translate('object')} <span className=\"text-red-500\">*</span>\n </label>\n <div className=\"grid grid-cols-3 gap-4\">\n {[\n { value: 'individual', label: translate('individual') },\n { value: 'business', label: translate('household') },\n { value: 'enterprise', label: translate('business') },\n ].map((option) => (\n <label\n key={option.value}\n className={`flex items-center space-x-2 p-3 border rounded-[12px] cursor-pointer hover:ring-2 hover:ring-blue-900 ${\n formData.userType === option.value\n ? 'border-[#1E2A7B]'\n : 'border-[#E3E3E3]'\n }`}\n >\n <input\n type=\"radio\"\n name=\"userType\"\n value={option.value}\n checked={formData.userType === option.value}\n onChange={(e) =>\n handleInputChange(\n 'userType',\n e.target.value as FormData['userType'],\n )\n }\n className=\"w-4 h-4 text-blue-600\"\n />\n <span className=\"text-sm text-[#2C2C2C]\">{option.label}</span>\n </label>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"text-sm font-medium mb-2\">\n {translate('merchant_info')}\n </h3>\n <div className=\"min-h-[80px] p-4 border border-gray-300 rounded-md text-sm text-[#2C2C2C]\">\n {translate('merchant_info_description')}\n </div>\n </div>\n\n <UserTypeForm\n formData={formData}\n onInputChange={handleInputChange}\n businessLicenseFile={businessLicenseFile}\n taxDocumentFile={taxDocumentFile}\n onFileUpload={handleFileUpload}\n autofilledFields={autofilledFields}\n onRemoveFile={(type) => {\n if (type === 'businessLicense') {\n setBusinessLicenseFile(null);\n setFileErrors((prev) => ({\n ...prev,\n businessLicense: undefined,\n }));\n } else {\n setTaxDocumentFile(null);\n setFileErrors((prev) => ({ ...prev, taxDocument: undefined }));\n }\n }}\n errors={errors}\n fileErrors={fileErrors}\n lang={lang}\n />\n\n <div className=\"flex justify-end\">\n <Button\n type=\"submit\"\n className=\"text-[#00BAEE] hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n >\n {translate('submit_profile')}\n </Button>\n </div>\n </form>\n\n <ConfirmModal\n open={showConfirm}\n lang={lang}\n title={\n confirmSource\n ? translate(DOCUMENT_CONFIGS[confirmSource].modalTitle)\n : translate('overwrite_data')\n }\n description={translate('overwrite_data_description')}\n onConfirm={handleOverwriteConfirm}\n onCancel={() => setShowConfirm(false)}\n />\n\n {showSuccessModal && (\n <SuccessModalToast\n lang={lang}\n onClose={() => {\n setShowSuccessModal(false);\n onClose?.();\n }}\n imageSrc={successIconSrc || DefaultSuccessIcon}\n />\n )}\n\n {showErrorModal && (\n <ErrorModal\n onClose={() => {\n setShowErrorModal(false);\n onClose?.();\n }}\n message={errorMessage}\n lang={lang}\n />\n )}\n </div>\n </div>\n );\n};\n","import { Applicant } from \"../types/merchantTableData\";\n\ninterface MerchantTableActionsProps {\n applicant: Applicant;\n onView: (merchantId: string) => void;\n onEdit: (merchantId: string) => void;\n}\n\nexport default function MerchantTableActions({\n applicant,\n onView,\n onEdit,\n}: MerchantTableActionsProps) {\n return (\n <div className=\"flex gap-1\">\n <button\n onClick={() => onView(applicant.merchant_id)}\n className=\"group p-2 rounded hover:bg-[#1E2A7B] transition-colors\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-5 h-5 stroke-[#475467] group-hover:stroke-white fill-none transition-colors\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M2.458 12C3.732 7.943 7.523 5 12 5s8.268 2.943\n 9.542 7c-1.274 4.057-5.065 7-9.542 7S3.732\n 16.057 2.458 12z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n </button>\n\n {/* Edit Button */}\n <button\n onClick={() => onEdit(applicant.merchant_id)}\n className=\"group p-2 rounded hover:bg-[#1E2A7B]\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-5 h-5 fill-[#475467] group-hover:fill-white transition-colors\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M3 17.25V21h3.75l11.06-11.06-3.75-3.75L3 17.25zM21.41 6.34a1.25 1.25 0 0 0 0-1.77l-2.34-2.34a1.25\n 1.25 0 0 0-1.77 0l-1.83 1.83 4.11 4.11 1.83-1.83z\"\n />\n </svg>\n </button>\n </div>\n );\n}\n","import { useTranslation } from \"@/hooks/use-translation\";\n\ninterface MerchantHeaderProps {\n onAddNew: () => void;\n lang?: \"vi\" | \"en\";\n}\n\nexport default function MerchantHeader({\n onAddNew,\n lang = \"vi\",\n}: MerchantHeaderProps) {\n const { translate } = useTranslation(\"table\", lang);\n\n return (\n <div className=\"flex w-full max-w-full flex-row items-center justify-between gap-2 md:gap-4 overflow-x-auto\">\n <div className=\"flex flex-col\">\n <h1 className=\"uppercase text-sm font-medium text-[#1E2A7B] truncate max-w-full\">\n {translate(\"merchantProfile\")}\n </h1>\n <h1 className=\"text-2xl font-bold text-[#2C2C2C] truncate max-w-full\">\n {translate(\"profileList\")}\n </h1>\n </div>\n <button\n onClick={onAddNew}\n className=\"rounded-lg p-3 border border-[#00BAEE] text-[#00BAEE] md:ml-0 ml-0 w-auto truncate max-w-full\"\n >\n + {translate(\"addNew\")}\n </button>\n </div>\n );\n}\n","import { useTranslation } from \"../../hooks/use-translation\";\nimport React, { useRef } from \"react\";\n\ninterface DateRangePickerProps {\n startDate: Date | null;\n endDate: Date | null;\n onChange: (dates: [Date | null, Date | null]) => void;\n label?: string;\n lang?: \"vi\" | \"en\";\n}\n\nconst CalendarIcon = () => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-gray-400\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n);\n\nconst formatDate = (date: Date | null) => {\n return date\n ? date.toLocaleDateString(\"vi-VN\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n })\n : \"\";\n};\n\nconst DateRangePicker: React.FC<DateRangePickerProps> = ({\n startDate,\n endDate,\n onChange,\n label,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"table\", lang);\n const startRef = useRef<HTMLInputElement>(null);\n const endRef = useRef<HTMLInputElement>(null);\n\n const handleClear = () => {\n onChange([null, null]);\n };\n\n const handleStartChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newStart = e.target.value ? new Date(e.target.value) : null;\n let newEnd = endDate;\n\n if (newEnd && newStart && newEnd < newStart) {\n newEnd = newStart;\n }\n\n onChange([newStart, newEnd]);\n\n setTimeout(() => {\n endRef.current?.showPicker();\n }, 100);\n };\n\n const handleEndChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newEnd = e.target.value ? new Date(e.target.value) : null;\n let newStart = startDate;\n\n if (newStart && newEnd && newEnd < newStart) {\n newStart = newEnd;\n }\n\n onChange([newStart, newEnd]);\n };\n\n return (\n <div className=\"w-full relative min-w-[90px] \">\n {label && (\n <label className=\"block font-semibold mb-1.5 text-gray-700\">\n {label}\n </label>\n )}\n\n <div\n onClick={() => {\n if (!startDate) {\n startRef.current?.showPicker();\n } else {\n endRef.current?.showPicker();\n }\n }}\n className=\"transition-all duration-200 ease-out active:scale-[0.98] hover:shadow-md flex items-center justify-between px-4 py-2 border border-gray-300 rounded-lg w-full shadow-sm bg-white hover:border-blue-500 focus:outline-none cursor-pointer\"\n >\n <span className=\"text-gray-700 text-sm truncate transition-opacity duration-300 ease-in-out\">\n {startDate || endDate\n ? `${formatDate(startDate)} - ${formatDate(endDate)}`\n : translate(\"select_date_range\")}\n </span>\n\n <div className=\"flex items-center gap-1 ml-2 transition-opacity duration-300 ease-in-out\">\n {(startDate || endDate) && (\n <button\n className=\"text-gray-400 hover:text-red-500 text-lg font-bold transition-transform duration-200 hover:scale-110\"\n onClick={(e) => {\n e.stopPropagation();\n handleClear();\n }}\n >\n ✕\n </button>\n )}\n <CalendarIcon />\n </div>\n </div>\n\n {/* Hidden date inputs */}\n <input\n type=\"date\"\n ref={startRef}\n className=\"absolute top-0 left-2 w-full h-full opacity-0 pointer-events-none z-10\"\n onChange={handleStartChange}\n />\n <input\n type=\"date\"\n ref={endRef}\n className=\"absolute top-0 left-2 w-full h-full opacity-0 pointer-events-none z-10\"\n onChange={handleEndChange}\n />\n </div>\n );\n};\n\nexport default DateRangePicker;\n","import type { Option } from \"../components/common/dropdownMenu\";\n\nexport const APPLICANT_TYPE_OPTIONS: Option[] = [\n { name: \"BUSINESS\", id: \"BUSINESS\" },\n { name: \"PERSONAL\", id: \"PERSONAL\" },\n { name: \"HOUSEHOLD\", id: \"HOUSEHOLD\" },\n];\n\nexport const STATUS_OPTIONS: Option[] = [\n { name: \"DONE\", id: \"DONE\" },\n { name: \"PENDING APPROVAL\", id: \"PENDING APPROVAL\" },\n { name: \"REJECTED\", id: \"REJECTED\" },\n { name: \"DRAFT\", id: \"NULL\" },\n];\n","\nimport DropdownMenu, { Option } from \"@/components/common/dropdownMenu\";\nimport DateRangePicker from \"@/components/common/datePicker\";\nimport { Input } from \"@/components/ui/input\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { APPLICANT_TYPE_OPTIONS, STATUS_OPTIONS } from \"@/utils/merchantTableData\";\n\ninterface MerchantFiltersProps {\n selectedApplicantType: string | number;\n selectedStatus: string | number;\n dateRange: [Date | null, Date | null];\n searchString: string;\n onApplicantTypeChange: (option: Option) => void;\n onStatusChange: (option: Option) => void;\n onDateRangeChange: (range: [Date | null, Date | null]) => void;\n onSearchChange: (value: string) => void;\n onApplyFilters: () => void;\n onResetFilters: () => void;\n lang?: \"vi\" | \"en\";\n}\n\nconst ReloadIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\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=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"></path>\n <path d=\"M21 3v5h-5\"></path>\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"></path>\n <path d=\"M3 21v-5h5\"></path>\n </svg>\n);\n\nconst SearchIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n);\n\nexport default function MerchantFilters({\n selectedApplicantType,\n selectedStatus,\n dateRange,\n searchString,\n onApplicantTypeChange,\n onStatusChange,\n onDateRangeChange,\n onSearchChange,\n onApplyFilters,\n onResetFilters,\n lang = \"en\",\n}: MerchantFiltersProps) {\n const { translate } = useTranslation(\"table\", lang);\n const [startDate, endDate] = dateRange;\n\n return (\n <div className=\"w-full mt-6 p-4 bg-white rounded-xl shadow-lg sm:p-2\">\n <div className=\"hidden lg:min-w-[980px] lg:pb-1 lg:flex flex-row gap-5 items-end w-full min-w-0 overflow-x-auto\">\n <div className=\"w-full max-w-xs\">\n <DateRangePicker\n startDate={startDate}\n endDate={endDate}\n onChange={onDateRangeChange}\n label={translate(\"submitDate\")}\n lang={lang}\n />\n </div>\n <div className=\"w-full max-w-xs\">\n <DropdownMenu\n label={translate(\"object\")}\n options={APPLICANT_TYPE_OPTIONS.map(option => ({\n ...option,\n name: translate(option.name)\n }))}\n value={selectedApplicantType}\n onChange={onApplicantTypeChange}\n placeholder={translate(\"all\")}\n containerClassName=\"w-full min-w-[120px]\"\n triggerClassName=\"whitespace-nowrap truncate\"\n />\n </div>\n <div className=\"w-full max-w-xs\">\n <DropdownMenu\n label={translate(\"status\")}\n options={STATUS_OPTIONS.map(option => ({\n ...option,\n name: translate(option.name)\n }))}\n value={selectedStatus}\n onChange={onStatusChange}\n placeholder={translate(\"all\")}\n containerClassName=\"w-full min-w-[120px]\"\n triggerClassName=\"whitespace-nowrap truncate\"\n />\n </div>\n <div className=\"w-full max-w-xs\">\n <Input\n label={translate(\"search\")}\n placeholder={translate(\"searchPlaceholder\")}\n onChange={onSearchChange}\n value={searchString}\n labelClassname=\"font-bold\"\n required={false}\n />\n </div>\n <button\n onClick={onResetFilters}\n className=\"rounded-lg border px-4 py-2 border-[#00BAEE] text-[#00BAEE] flex items-center justify-center gap-2 hover:bg-[#00BAEE] hover:text-white transition-colors duration-200 min-w-[110px] w-auto\"\n >\n <ReloadIcon />\n {translate(\"reset\")}\n </button>\n <button\n onClick={onApplyFilters}\n className=\"rounded-lg px-4 py-2 text-white bg-[#1E2A7B] flex items-center justify-center gap-2 hover:bg-[#1E2A7B]/90 transition-colors duration-200 min-w-[120px] w-auto\"\n >\n <SearchIcon />\n {translate(\"apply\")}\n </button>\n </div>\n {/* md only: grid 2 cols, buttons in last row */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 lg:hidden\">\n <div className=\"w-full\">\n <DateRangePicker\n startDate={startDate}\n endDate={endDate}\n onChange={onDateRangeChange}\n label={translate(\"submitDate\")}\n lang={lang}\n />\n </div>\n <DropdownMenu\n label={translate(\"object\")}\n options={APPLICANT_TYPE_OPTIONS.map(option => ({\n ...option,\n name: translate(option.name)\n }))}\n value={selectedApplicantType}\n onChange={onApplicantTypeChange}\n placeholder={translate(\"all\")}\n containerClassName=\"w-full min-w-[120px]\"\n triggerClassName=\"whitespace-nowrap truncate\"\n />\n <DropdownMenu\n label={translate(\"status\")}\n options={STATUS_OPTIONS.map(option => ({\n ...option,\n name: translate(option.name)\n }))}\n value={selectedStatus}\n onChange={onStatusChange}\n placeholder={translate(\"all\")}\n containerClassName=\"w-full min-w-[120px]\"\n triggerClassName=\"whitespace-nowrap truncate\"\n />\n <div className=\"w-full\">\n <Input\n label={translate(\"search\")}\n placeholder={translate(\"searchPlaceholder\")}\n onChange={onSearchChange}\n value={searchString}\n labelClassname=\"font-bold\"\n required={false}\n />\n </div>\n <button\n onClick={onResetFilters}\n className=\"rounded-lg border px-4 py-2 border-[#00BAEE] text-[#00BAEE] flex items-center justify-center gap-2 hover:bg-[#00BAEE] hover:text-white transition-colors duration-200 min-w-[110px] w-full\"\n >\n <ReloadIcon />\n {translate(\"reset\")}\n </button>\n <button\n onClick={onApplyFilters}\n className=\"rounded-lg px-4 py-2 text-white bg-[#1E2A7B] flex items-center justify-center gap-2 hover:bg-[#1E2A7B]/90 transition-colors duration-200 min-w-[120px] w-full\"\n >\n <SearchIcon />\n {translate(\"apply\")}\n </button>\n </div>\n </div>\n );\n}\n","import portalAxiosClient from \"@/configs/portalAxiosClient\";\nimport { ApiResponse, MerchantDetail } from \"../types/merchantDetail\";\n\nexport const getMerchantList = async (\n authToken: string,\n accountType?: string,\n status?: string,\n page?: number,\n pageSize?: number\n) => {\n try {\n console.log(\"auth tk\", typeof authToken);\n const params: any = {};\n\n if (accountType) params.account_type = accountType;\n if (status) params.status = status;\n if (typeof page === \"number\") params.page = page;\n if (typeof pageSize === \"number\") params.page_size = pageSize;\n\n const res = await portalAxiosClient.get(\"/master-merchant/merchant\", {\n headers: {\n Authorization: `Bearer ${authToken}`,\n },\n params,\n });\n\n return res;\n } catch (error) {\n console.error(error);\n }\n};\n\nexport const getMerchantDetail = async (\n authToken: string,\n merchantDetailId: string\n): Promise<MerchantDetail> => {\n const res = await portalAxiosClient.get<ApiResponse<MerchantDetail>>(\n \"/master-merchant/merchant\",\n {\n headers: {\n Authorization: `Bearer ${authToken}`,\n },\n params: {\n merchant_id: merchantDetailId,\n },\n }\n );\n\n return res.data.data;\n};\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { Applicant } from \"../types/merchantTableData\";\nimport { getMerchantList } from \"../services/merchantService\";\n\nexport function useMerchantData(authToken: string) {\n const [data, setData] = useState<Applicant[]>([]);\n const [totalItems, setTotalItems] = useState<number>(0);\n const [page, setPage] = useState<number>(1);\n const [pageSize, setPageSize] = useState<number>(10);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [filters, setFilters] = useState<{\n accountType: string;\n status: string;\n searchString: string;\n dateRange: [Date | null, Date | null];\n }>({\n accountType: \"\",\n status: \"\",\n searchString: \"\",\n dateRange: [null, null],\n });\n\n const fetchData = useCallback(async () => {\n if (!authToken) return;\n setLoading(true);\n try {\n const res = await getMerchantList(\n authToken,\n filters.accountType,\n filters.status,\n page,\n pageSize\n );\n\n const newData = (res?.data?.data.data || []).map(\n (item: Applicant, index: number) => ({\n ...item,\n index: (page - 1) * pageSize + index + 1, // calculate index of items\n })\n );\n\n setData(newData);\n setTotalItems(res?.data?.data.total || 0);\n setError(null);\n } catch (err: any) {\n setError(err.message || \"Đã xảy ra lỗi khi lấy dữ liệu\");\n setData([]);\n setTotalItems(0);\n } finally {\n setLoading(false);\n }\n }, [authToken, page, pageSize, filters]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n const applyFilters = useCallback(\n (\n accountType: string | number,\n status: string | number,\n dateRange: [Date | null, Date | null],\n searchString: string\n ) => {\n setFilters({\n accountType: String(accountType),\n status: String(status),\n dateRange,\n searchString,\n });\n setPage(1);\n },\n []\n );\n\n const resetFilters = useCallback(() => {\n setFilters({\n accountType: \"\",\n status: \"\",\n searchString: \"\",\n dateRange: [null, null],\n });\n setPage(1); // Reset to first page\n }, []);\n\n const handlePageChange = (newPage: number) => {\n if (newPage > 0 && newPage <= Math.ceil(totalItems / pageSize)) {\n setPage(newPage);\n }\n };\n\n const handlePageSizeChange = (newPageSize: number) => {\n setPageSize(newPageSize);\n setPage(1); // Reset to first page when page size changes\n };\n\n return {\n data, // Paginated data\n totalItems, // Total number of items for pagination\n page,\n pageSize,\n applyFilters,\n resetFilters,\n handlePageChange,\n handlePageSizeChange,\n loading,\n error,\n };\n}\n","import React, { useState, useEffect } from 'react';\nimport MerchantTableActions from './merchantTableAction';\nimport MerchantHeader from './merchantTableHeader';\nimport MerchantFilters from './merchantTableFilter';\nimport { useTranslation } from '@/hooks/use-translation';\nimport { useMediaQuery } from '@/hooks/use-media-query';\nimport TableSkeleton from '@/components/common/dataTable/tableSkeleton';\nimport ReusableTable, { TableHeader } from '@/components/common/dataTable/dataTable';\nimport DropdownMenuAbsolute from '@/components/common/dropdownMenuAbsolute';\nimport { Option } from '@/components/common/dropdownMenu';\nimport { Applicant } from '../types/merchantTableData';\nimport { useMerchantData } from '../hooks/use-merchant-table';\n\ninterface MerchantTableProps {\n authToken: string;\n isHeader?: boolean;\n createRoute: string;\n onAddNew?: () => void;\n onViewMerchant: (merchantId: string) => void;\n onEditMerchant: (merchantId: string) => void;\n lang?: 'vi' | 'en' | undefined;\n}\n\nexport function MerchantTable({\n authToken,\n isHeader = true,\n createRoute,\n onAddNew,\n onViewMerchant,\n onEditMerchant,\n lang = 'vi',\n}: MerchantTableProps) {\n const { translate } = useTranslation('table', lang);\n const [selectedApplicantType, setSelectedApplicantType] =\n useState<string>('');\n const [selectedStatus, setSelectedStatus] = useState<string>('');\n const [dateRange, setDateRange] = useState<[Date | null, Date | null]>([\n null,\n null,\n ]);\n const [searchString, setSearchString] = useState('');\n\n const {\n applyFilters,\n error,\n data,\n loading,\n resetFilters,\n totalItems,\n page,\n pageSize,\n handlePageChange,\n handlePageSizeChange,\n } = useMerchantData(authToken);\n\n const isMobile = useMediaQuery('(max-width: 768px)');\n\n const handleApplyFilters = () => {\n applyFilters(\n selectedApplicantType,\n selectedStatus,\n dateRange,\n searchString\n );\n };\n\n const handleResetFilters = () => {\n setSelectedApplicantType('');\n setSelectedStatus('');\n setDateRange([null, null]);\n setSearchString('');\n resetFilters();\n };\n\n const handleSetApplicantType = (option: Option) => {\n setSelectedApplicantType(String(option.id));\n };\n\n const handleSetStatus = (option: Option) => {\n setSelectedStatus(String(option.id));\n };\n\n const handleSearchChange = (value: string) => {\n setSearchString(value);\n };\n\n const handleRowsPerPageChange = (option: Option) => {\n handlePageSizeChange(Number(option.id));\n };\n\n const handleAddNew = () => {\n if (onAddNew) return onAddNew();\n window.location.href = createRoute;\n };\n\n const headers: TableHeader<Applicant>[] = [\n { key: 'index', label: translate('no'), width: '50px', minWidth: '50px' },\n {\n key: 'create_date',\n label: translate('submitDate'),\n width: '100px',\n minWidth: '100px',\n },\n {\n key: 'account_type',\n label: translate('object'),\n width: '100px',\n minWidth: '85px',\n },\n {\n key: 'name',\n label: translate('name'),\n width: '170px',\n minWidth: '130px',\n },\n {\n key: 'industry',\n label: translate('industry'),\n width: '150px',\n minWidth: '120px',\n },\n {\n key: 'brand_name',\n label: translate('brand'),\n width: '130px',\n minWidth: '100px',\n },\n {\n key: 'company_registry',\n label: translate('businessCode'),\n width: '135px',\n minWidth: '135px',\n },\n {\n key: 'status',\n label: translate('status'),\n width: '120px',\n minWidth: '100px',\n },\n {\n key: 'reject_note',\n label: translate('rejectNote'),\n width: '130px',\n minWidth: '100px',\n },\n {\n key: 'actions',\n label: translate('action'),\n width: '100px',\n minWidth: '85px',\n render: (applicant: Applicant) => {\n const canEdit =\n (applicant.status as string) === 'draft' || applicant.status === null;\n\n return (\n <MerchantTableActions\n applicant={applicant}\n onView={onViewMerchant}\n onEdit={\n canEdit ? () => onEditMerchant(applicant.merchant_id) : () => {}\n }\n />\n );\n },\n },\n ];\n\n return (\n <div className='max-w-full'>\n {isHeader ? <MerchantHeader onAddNew={handleAddNew} lang={lang} /> : null}\n\n <MerchantFilters\n selectedApplicantType={selectedApplicantType}\n selectedStatus={selectedStatus}\n dateRange={dateRange}\n searchString={searchString}\n onApplicantTypeChange={handleSetApplicantType}\n onStatusChange={handleSetStatus}\n onDateRangeChange={setDateRange}\n onSearchChange={handleSearchChange}\n onApplyFilters={handleApplyFilters}\n onResetFilters={handleResetFilters}\n lang={lang}\n />\n\n {error ? (\n <div className='text-red-500'>\n Lỗi khi lấy dữ liệu, xin hãy thử lại.\n </div>\n ) : null}\n\n <div className='mt-6 pb-2'>\n {loading ? (\n <TableSkeleton />\n ) : (\n <div className='overflow-x-auto'>\n <ReusableTable\n headers={headers}\n data={data}\n totalItems={totalItems}\n page={page}\n pageSize={pageSize}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handleRowsPerPageChange}\n lang={lang}\n translate={translate}\n cardView={isMobile}\n customDropdown={DropdownMenuAbsolute}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport React from \"react\";\n\ninterface MerchantFormData {\n country: string;\n city: string;\n district: string;\n ward: string;\n address: string;\n}\n\ninterface AddressFieldsProps {\n formData: MerchantFormData;\n errors?: Partial<Record<keyof MerchantFormData, string>>;\n readOnly?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const AddressFields: React.FC<AddressFieldsProps> = ({\n formData,\n errors,\n readOnly = true,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n\n const selects = [\n {\n label: translate(\"country\"),\n name: \"country\",\n value: formData.country,\n },\n {\n label: translate(\"city\"),\n name: \"city\",\n value: formData.city,\n },\n {\n label: translate(\"district\"),\n name: \"district\",\n value: formData.district,\n },\n {\n label: translate(\"ward\"),\n name: \"ward\",\n value: formData.ward,\n },\n ];\n\n return (\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold font-inter leading-[18px] tracking-normal text-[#2C2C2C]\">\n {translate(\"address\")}\n </h3>\n <div className=\"grid grid-cols-2 gap-2\">\n {selects.map((select) => (\n <div key={select.name} className=\"relative w-full\">\n <div\n className={`px-3 py-3 border ${\n errors?.[select.name as keyof MerchantFormData]\n ? \"border-red-500\"\n : \"border-[#E4E7EC]\"\n } rounded-md text-[#6B7280] font-inter text-sm font-normal leading-[18px] tracking-normal w-full`}\n >\n <strong>{select.label}: </strong>\n <span>{select.value || translate(\"not_selected\")}</span>\n </div>\n {errors?.[select.name as keyof MerchantFormData] && (\n <p className=\"text-red-500 text-xs mt-1\">\n {errors[select.name as keyof MerchantFormData]}\n </p>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"relative w-full mt-2\">\n <div\n className={`px-3 py-3 border ${\n errors?.address ? \"border-red-500\" : \"border-[#E4E7EC]\"\n } rounded-md text-[#6B7280] font-inter text-sm font-normal leading-[18px] tracking-normal w-full`}\n >\n <strong>{translate(\"address\")}: </strong>\n <span>{formData.address || translate(\"not_entered\")}</span>\n </div>\n {errors?.address && (\n <p className=\"text-red-500 text-xs mt-1\">{errors.address}</p>\n )}\n </div>\n </div>\n );\n};\n","import React, { useRef } from \"react\";\nimport { readLicense, type ILicenseData } from \"ocr-upload-reader\";\nimport DownloadIcon from \"../../assets/download.svg\";\nimport FileIcon from \"../../assets/file.svg\";\nimport { useTranslation } from \"@/hooks/use-translation\";\n\ninterface FileUploadProps {\n label: string;\n file: File | null;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: () => void;\n disabled?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n label,\n file,\n onChange,\n onParsedData,\n onRemoveFile,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const inputId = label.replace(/\\s+/g, \"-\").toLowerCase();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n onChange(event);\n const selectedFile = event.target.files?.[0];\n if (selectedFile && onParsedData) {\n try {\n const result = await readLicense(selectedFile);\n console.log(\"📄 OCR Result:\", result);\n onParsedData(result);\n } catch (err) {\n console.error(\"❌ OCR Error:\", (err as Error).message);\n }\n }\n };\n\n const handleRemoveFile = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n\n if (onRemoveFile) {\n onRemoveFile();\n } else {\n const fakeEvent = {\n target: {\n files: null,\n value: \"\",\n },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(fakeEvent);\n }\n };\n\n const triggerInput = () => fileInputRef.current?.click();\n\n return (\n <div className=\"space-y-2 relative\">\n <label\n htmlFor={inputId}\n className=\"font-inter text-sm font-semibold text-[#2C2C2C] mb-1\"\n >\n {translate(label)} <span className=\"text-red-500\">*</span>\n </label>\n\n {file ? (\n <div className=\"relative flex items-center border border-gray-300 rounded-lg px-4 py-3 w-full max-w-[400px] mt-2 bg-gray-50\">\n <img\n src={FileIcon}\n alt={translate(\"uploaded_file\")}\n className=\"w-10 h-10\"\n />\n <div className=\"ml-4 text-left overflow-hidden\">\n <div className=\"text-sm font-medium text-gray-900 truncate\">\n {file.name}\n </div>\n <div className=\"text-xs text-gray-500\">\n {(file.size / 1024).toFixed(0)} KB\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={handleRemoveFile}\n className=\"absolute top-1 right-1 p-1 rounded hover:bg-red-100 transition-colors duration-200\"\n aria-label={translate(\"remove_file\")}\n title={translate(\"remove_file\")}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-4 h-4 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ) : (\n <div className=\"border-2 border-dashed border-gray-300 rounded-lg p-4 text-center hover:border-blue-400 transition-colors min-h-[140px] flex flex-col items-center justify-center space-y-2 mt-2\">\n <input\n id={inputId}\n type=\"file\"\n accept=\".pdf,.jpg,.jpeg,.png\"\n ref={fileInputRef}\n onChange={handleFileChange}\n className=\"hidden\"\n />\n\n <img\n src={DownloadIcon}\n alt={translate(\"upload_icon\")}\n className=\"w-6 h-6\"\n />\n\n <p className=\"text-sm font-medium text-gray-600\">\n {translate(\"upload_file\")}\n </p>\n <p className=\"text-xs text-gray-400\">\n {translate(\"file_format_info\")}\n </p>\n <button\n type=\"button\"\n onClick={triggerInput}\n className=\"mt-1 px-4 py-1 bg-[#1E2A7B] text-white rounded text-sm hover:bg-[#1a2470] transition-colors \"\n >\n {translate(\"upload_button\")}\n </button>\n </div>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { AddressFields } from \"./AddressFields\";\nimport { FileUpload } from \"./FileUpload\";\nimport type { ILicenseData } from \"ocr-upload-reader\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { Input } from \"@/components/ui/input\";\nimport { FormData } from \"../types/formData\";\n\ninterface UserTypeFormProps {\n formData: FormData;\n onInputChange: (field: keyof FormData, value: string) => void;\n businessLicenseFile: File | null;\n taxDocumentFile: File | null;\n onFileUpload: (\n type: \"businessLicense\" | \"taxDocument\",\n event: React.ChangeEvent<HTMLInputElement>\n ) => void;\n autofilledFields?: string[];\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: (type: \"businessLicense\" | \"taxDocument\") => void;\n errors?: Partial<Record<keyof FormData, string>>;\n fileErrors?: {\n businessLicense?: string;\n taxDocument?: string;\n };\n readOnly?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const UserTypeForm: React.FC<UserTypeFormProps> = ({\n formData,\n onInputChange,\n businessLicenseFile,\n taxDocumentFile,\n onFileUpload,\n autofilledFields = [],\n onParsedData,\n onRemoveFile,\n errors,\n fileErrors,\n readOnly = true,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n console.log(\"lang from m-view\", lang);\n\n const isAutofilled = (field: keyof FormData) =>\n autofilledFields.includes(field);\n\n const renderInput = (\n label: string,\n field: keyof FormData,\n options: { isAuto?: boolean } = {}\n ) => {\n if (field === \"businessLicense\" || field === \"taxLicense\") return null;\n\n const value = formData[field];\n if (typeof value !== \"string\") return null; \n\n return (\n <div>\n <Input\n label={translate(label)}\n value={value}\n onChange={(v) => (!readOnly ? onInputChange(field, v) : undefined)}\n isAutofilled={options.isAuto ? isAutofilled(field) : false}\n readOnly={readOnly}\n // Thêm props để xử lý overflow\n title={value} // Hiển thị tooltip khi hover\n style={{\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden'\n }}\n />\n {errors?.[field] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[field]}</p>\n )}\n </div>\n );\n };\n\n const renderFileUpload = (\n label: string,\n type: \"businessLicense\" | \"taxDocument\",\n file: File | null\n ) => (\n <div>\n <FileUpload\n label={translate(label)}\n file={file}\n onChange={(e) => !readOnly && onFileUpload(type, e)}\n onParsedData={onParsedData}\n onRemoveFile={() => !readOnly && onRemoveFile?.(type)}\n disabled={readOnly}\n lang={lang}\n />\n {type === \"businessLicense\" && fileErrors?.businessLicense && (\n <p className=\"text-red-500 text-xs mt-1\">\n {fileErrors.businessLicense}\n </p>\n )}\n {type === \"taxDocument\" && fileErrors?.taxDocument && (\n <p className=\"text-red-500 text-xs mt-1\">{fileErrors.taxDocument}</p>\n )}\n </div>\n );\n\n const renderIndividualForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"full_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"industry\", \"industry\")}\n {renderInput(\"referral_code\", \"referralCode\")}\n <AddressFields formData={formData} readOnly={readOnly} lang={lang} />\n </div>\n </div>\n );\n\n const renderBusinessForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"household_business_name\", \"businessName\", {\n isAuto: true,\n })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n {renderInput(\"industry\", \"industry\")}\n <AddressFields formData={formData} readOnly={readOnly} lang={lang} />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\"referral_code\", \"referralCode\")}\n {renderFileUpload(\n \"business_license\",\n \"businessLicense\",\n businessLicenseFile\n )}\n {renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n const renderEnterpriseForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"enterprise_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n {renderInput(\"industry\", \"industry\")}\n {renderInput(\"representative\", \"representative\", { isAuto: true })}\n <AddressFields formData={formData} readOnly={readOnly} lang={lang} />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\n \"business_registration_number\",\n \"business_registration_number\",\n { isAuto: true }\n )}\n {renderInput(\"referral_code\", \"referralCode\")}\n {renderFileUpload(\n \"business_license\",\n \"businessLicense\",\n businessLicenseFile\n )}\n {renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n switch (formData.userType) {\n case \"individual\":\n return renderIndividualForm();\n case \"business\":\n return renderBusinessForm();\n case \"enterprise\":\n return renderEnterpriseForm();\n default:\n return null;\n }\n};","import { useTranslation } from \"@/hooks/use-translation\";\n\ninterface MerchantHeaderProps {\n title?: string;\n subtitle?: string;\n statusLabel?: string;\n statusType?: \"draft\" | \"pending\" | \"approved\" | \"rejected\" | null;\n lang?: \"vi\" | \"en\";\n}\n\nconst statusStyleMap = {\n draft: \"text-gray-800 bg-gray-100 border border-gray-400\",\n pending: \"text-yellow-600 bg-yellow-50 border border-yellow-400\",\n approved: \"text-green-600 bg-green-50 border border-green-400\",\n rejected: \"text-red-600 bg-red-50 border border-red-400\",\n};\n\nconst statusLabelMap = {\n DONE: \"done\",\n \"PENDING APPROVAL\": \"pending\",\n PROCESSING: \"processing\",\n null: \"draft\",\n};\n\nexport default function MerchantHeader({\n title = \"add_new_profile\",\n subtitle,\n statusLabel,\n statusType,\n lang = \"vi\",\n}: MerchantHeaderProps) {\n const { translate } = useTranslation(\"form\", lang);\n\n // Determine statusClass based on the statusType, defaulting to \"draft\" if null\n const statusClass = statusType\n ? statusStyleMap[statusType]\n : statusStyleMap.draft; // default to \"draft\"\n const translatedStatusLabel =\n statusLabelMap[statusLabel as keyof typeof statusLabelMap] || statusLabel;\n\n return (\n <div className=\"flex justify-between items-start py-4\">\n <div>\n <p className=\"uppercase text-sm font-medium text-[#1E2A7B]\">\n {translate(\"merchant_profile\")}\n </p>\n <div className=\"flex items-center mt-1 space-x-2 justify-center\">\n <h1 className=\"text-2xl font-bold text-[#2C2C2C]\">\n {translate(title)}\n </h1>\n {subtitle && (\n <span className=\"text-sm text-[#475467]\">\n | {translate(subtitle)}\n </span>\n )}\n </div>\n </div>\n\n {translatedStatusLabel && (\n <span\n className={`rounded-full px-6 py-2 text-sm font-medium ${statusClass}`}\n >\n {translate(translatedStatusLabel)}\n </span>\n )}\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { MerchantDetail } from \"../types/merchantDetail\";\nimport { getMerchantDetail } from \"../services/merchantService\";\n\ninterface UseMerchantDetailResult {\n data: MerchantDetail | null;\n loading: boolean;\n error: Error | null;\n}\n\nexport const useMerchantDetail = (\n authToken: string,\n merchantDetailId: string | null\n): UseMerchantDetailResult => {\n const [data, setData] = useState<MerchantDetail | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n const fetchData = async () => {\n if (!authToken || !merchantDetailId) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const result = await getMerchantDetail(authToken, merchantDetailId);\n setData(result);\n } catch (err) {\n if (err instanceof Error) {\n setError(err);\n } else {\n setError(new Error(\"Unknown error\"));\n }\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n }, [authToken, merchantDetailId]);\n\n return { data, loading, error };\n};\n","import React, { useEffect, useState } from 'react';\nimport { UserTypeForm } from './UserTypeForm';\nimport MerchantHeader from \"./Header\";\nimport { useTranslation } from '@/hooks/use-translation';\nimport { FormData } from '../types/formData';\nimport { useMerchantDetail } from '../hooks/useMerchantDetail';\n\nconst defaultFormData: FormData = {\n userType: 'business',\n phoneNumberSecond: '',\n businessName: '',\n email: '',\n branchName: '',\n taxLicense:null,\n businessLicense: null,\n taxCode: '',\n industry: '',\n representative: '',\n country: '',\n city: '',\n district: '',\n ward: '',\n address: '',\n referralCode: '',\n business_registration_number: '',\n};\n\nconst accountTypeToUserType = {\n PERSONAL: \"individual\",\n HOUSEHOLD: \"business\",\n BUSINESS: \"enterprise\",\n} as const;\n\ninterface MerchantViewProps {\n accessToken?: string;\n className?: string;\n merchantId?: string;\n isHeader?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const MerchantView: React.FC<MerchantViewProps> = ({\n accessToken,\n className = \"\",\n merchantId,\n isHeader = true,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const [formData, setFormData] = useState<FormData>({ ...defaultFormData });\n const { data: merchantDetail, loading: isFetchingMerchant } =\n useMerchantDetail(accessToken || \"\", merchantId || null);\n\n useEffect(() => {\n if (merchantDetail) {\n const mappedUserType =\n accountTypeToUserType[\n merchantDetail.account_type as keyof typeof accountTypeToUserType\n ] || \"business\";\n\n setFormData({\n userType: mappedUserType,\n taxCode: merchantDetail.vat || \"\",\n businessName: merchantDetail.name || \"\",\n branchName: merchantDetail.branch_name || \"\",\n email: merchantDetail.email || \"\",\n industry: merchantDetail.industry || \"\",\n representative: typeof merchantDetail.presentative === \"string\" ? merchantDetail.presentative : \"\",\n country: merchantDetail.country || \"\",\n city: merchantDetail.city || \"\",\n district: merchantDetail.district || \"\",\n ward: merchantDetail.ward || \"\",\n address: merchantDetail.street || \"\",\n referralCode: merchantDetail.referal_code || \"\",\n phoneNumberSecond: merchantDetail.phone,\n businessLicense: null,\n taxLicense: null,\n business_registration_number: merchantDetail.company_registry,\n });\n }\n }, [merchantDetail]);\n\n const statusType: \"draft\" | \"pending\" | \"approved\" | \"rejected\" | null =\n merchantDetail?.status === \"PENDING APPROVAL\"\n ? \"pending\"\n : merchantDetail?.status === \"PROCESSING\"\n ? \"approved\"\n : merchantDetail?.status === \"DONE\"\n ? \"approved\"\n : merchantDetail?.status === \"REJECTED\"\n ? \"rejected\"\n : merchantDetail?.status\n ? \"draft\"\n : null;\n\n const statusLabel = !merchantDetail?.status\n ? translate(\"draft\")\n : merchantDetail?.status === \"PENDING APPROVAL\"\n ? translate(\"pending\")\n : merchantDetail?.status === \"PROCESSING\"\n ? translate(\"processing\")\n : merchantDetail?.status === \"DONE\"\n ? translate(\"done\")\n : merchantDetail?.status === \"REJECTED\"\n ? translate(\"rejected\")\n : merchantDetail?.status;\n\n return (\n <div>\n {isHeader && (\n <MerchantHeader\n title={translate(\"profile_detail\")}\n subtitle={translate(\"profile_list\")}\n statusLabel={statusLabel}\n statusType={statusType}\n lang={lang}\n />\n )}\n\n <div\n className={`bg-white mx-auto px-8 py-6 rounded-xl overflow-y-auto ${className}`}\n >\n <div className=\"space-y-6\">\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium text-[#2C2C2C]\">\n {translate(\"object\")} <span className=\"text-red-500\">*</span>\n </label>\n <div className=\"grid grid-cols-3 gap-4\">\n {[\n { value: \"individual\", label: translate(\"individual\") },\n { value: \"business\", label: translate(\"household\") },\n { value: \"enterprise\", label: translate(\"business\") },\n ].map((option) => (\n <label\n key={option.value}\n className={`flex items-center space-x-2 p-3 border rounded-[12px] hover:cursor-not-allowed ${\n formData.userType === option.value\n ? \"border-[#1E2A7B]\"\n : \"border-[#E3E3E3]\"\n }`}\n >\n <input\n type=\"radio\"\n name=\"userType\"\n value={option.value}\n checked={formData.userType === option.value}\n disabled\n className=\"w-4 h-4 text-blue-600\"\n />\n <span className=\"text-sm text-[#2C2C2C]\">{option.label}</span>\n </label>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"text-sm font-medium mb-2\">\n {translate(\"merchant_info\")}\n </h3>\n <div className=\"min-h-[80px] p-4 border border-gray-300 rounded-md text-sm text-[#2C2C2C]\">\n {translate(\"merchant_info_description\")}\n </div>\n </div>\n\n <UserTypeForm\n formData={formData}\n onInputChange={() => {}}\n businessLicenseFile={null}\n taxDocumentFile={null}\n onFileUpload={() => {}}\n onRemoveFile={() => {}}\n autofilledFields={[]}\n errors={{}}\n fileErrors={{}}\n readOnly={true}\n lang={lang}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { useTranslation } from \"@/hooks/use-translation\";\nimport React, { useMemo, memo } from \"react\";\nimport { useAddress } from \"../hooks/use-address\";\n\ninterface MerchantFormData {\n country: string;\n city: string;\n district: string;\n ward: string;\n address: string;\n}\n\ninterface AddressFieldsProps {\n formData: MerchantFormData;\n onInputChange: (field: keyof MerchantFormData, value: string) => void;\n errors?: Partial<Record<keyof MerchantFormData, string>>;\n lang?: \"vi\" | \"en\";\n}\n\nexport const AddressFields: React.FC<AddressFieldsProps> = memo(({\n formData,\n onInputChange,\n errors,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n\n const { countries, cities, districts, wards } = useAddress(\n formData.country,\n formData.city,\n formData.district\n );\n\n const selects = useMemo(() => [\n {\n label: \"country\" as keyof MerchantFormData,\n value: formData.country,\n options: countries.map((item) => ({\n value: item.id ?? \"\",\n label: item.name,\n })),\n },\n {\n label: \"city\" as keyof MerchantFormData,\n value: formData.city,\n options: cities.map((item) => ({\n value: item.id ?? \"\",\n label: item.name,\n })),\n },\n {\n label: \"district\" as keyof MerchantFormData,\n value: formData.district,\n options: districts.map((item) => ({\n value: item.id ?? \"\",\n label: item.name,\n })),\n },\n {\n label: \"ward\" as keyof MerchantFormData,\n value: formData.ward,\n options: wards.map((item) => ({\n value: item.id ?? \"\",\n label: item.name,\n })),\n },\n ], [countries, cities, districts, wards]); // Removed formData fields from here\n\n return (\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold text-[#2C2C2C]\">\n {translate(\"address\")}\n </h3>\n\n <div className=\"grid grid-cols-2 gap-2\">\n {selects.map(({ label, value, options }) => (\n <div key={label} className=\"relative w-full\">\n <select\n value={value}\n onChange={(e) => onInputChange(label, e.target.value)}\n className={`appearance-none w-full px-4 py-3 border ${\n errors?.[label] ? \"border-red-500\" : \"border-[#E4E7EC]\"\n } rounded-[8px] focus:outline-none focus:ring-2 focus:ring-blue-500 text-[#6B7280] text-sm`}\n >\n <option value=\"\">{translate(label)}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <div className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2\">\n <svg\n className=\"w-4 h-4 text-gray-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </div>\n {errors?.[label] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[label]}</p>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"w-full mt-2\">\n <input\n type=\"text\"\n value={formData.address}\n onChange={(e) => onInputChange(\"address\", e.target.value)}\n placeholder={translate(\"street_address\")}\n className={`w-full px-4 py-3 border ${\n errors?.address ? \"border-red-500\" : \"border-[#E4E7EC]\"\n } rounded-[8px] focus:outline-none focus:ring-2 focus:ring-blue-500 text-[#6B7280] text-sm`}\n />\n {errors?.address && (\n <p className=\"text-red-500 text-xs mt-1\">{errors.address}</p>\n )}\n </div>\n </div>\n );\n});\n\nAddressFields.displayName = 'AddressFields';","import React, { useRef } from \"react\";\nimport { readLicense, type ILicenseData } from \"ocr-upload-reader\";\nimport DownloadIcon from \"../../assets/download.svg\";\nimport FileIcon from \"../../assets/file.svg\";\nimport { useTranslation } from \"@/hooks/use-translation\";\n\ninterface FileUploadProps {\n label: string;\n file: File | null;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: () => void;\n disabled?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n label,\n file,\n onChange,\n onParsedData,\n onRemoveFile,\n disabled = false,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const inputId = label.replace(/\\s+/g, \"-\").toLowerCase();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n onChange(event);\n const selectedFile = event.target.files?.[0];\n if (selectedFile && onParsedData) {\n try {\n const result = await readLicense(selectedFile);\n console.log(\"📄 OCR Result:\", result);\n onParsedData(result);\n } catch (err) {\n console.error(\"❌ OCR Error:\", (err as Error).message);\n }\n }\n };\n\n const handleRemoveFile = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n\n if (onRemoveFile) {\n onRemoveFile();\n } else {\n const fakeEvent = {\n target: {\n files: null,\n value: \"\",\n },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(fakeEvent);\n }\n };\n\n const triggerInput = () => fileInputRef.current?.click();\n\n return (\n <div className=\"space-y-2 relative\">\n <label\n htmlFor={inputId}\n className=\"font-inter text-sm font-semibold text-[#2C2C2C] mb-1\"\n >\n {translate(label)} <span className=\"text-red-500\">*</span>\n </label>\n\n {file ? (\n <div className=\"relative flex items-center border border-gray-300 rounded-lg px-4 py-3 w-full max-w-[400px] mt-2 bg-gray-50\">\n <img\n src={FileIcon}\n alt={translate(\"uploaded_file\")}\n className=\"w-10 h-10\"\n />\n <div className=\"ml-4 text-left overflow-hidden\">\n <div className=\"text-sm font-medium text-gray-900 truncate\">\n {file.name}\n </div>\n <div className=\"text-xs text-gray-500\">\n {(file.size / 1024).toFixed(0)} KB\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={handleRemoveFile}\n className=\"absolute top-1 right-1 p-1 rounded hover:bg-red-100 transition-colors duration-200\"\n aria-label={translate(\"remove_file\")}\n title={translate(\"remove_file\")}\n disabled={disabled}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-4 h-4 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ) : (\n <div className=\"border-2 border-dashed border-gray-300 rounded-lg p-4 text-center hover:border-blue-400 transition-colors min-h-[140px] flex flex-col items-center justify-center space-y-2 mt-2\">\n <input\n id={inputId}\n type=\"file\"\n accept=\".pdf,.jpg,.jpeg,.png\"\n ref={fileInputRef}\n onChange={handleFileChange}\n className=\"hidden\"\n disabled={disabled}\n />\n\n <img\n src={DownloadIcon}\n alt={translate(\"upload_icon\")}\n className=\"w-6 h-6\"\n />\n\n <p className=\"text-sm font-medium text-gray-600\">\n {translate(\"upload_file\")}\n </p>\n <p className=\"text-xs text-gray-400\">\n {translate(\"file_format_info\")}\n </p>\n <button\n type=\"button\"\n onClick={triggerInput}\n className=\"mt-1 px-4 py-1 bg-[#1E2A7B] text-white rounded text-sm hover:bg-[#1a2470] transition-colors hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n disabled={disabled}\n >\n {translate(\"upload_button\")}\n </button>\n </div>\n )}\n </div>\n );\n};\n","import React, { useEffect, useRef } from \"react\";\nimport { AddressFields } from \"./AddressFields\";\nimport { FileUpload } from \"./FileUpload\";\nimport type { ILicenseData } from \"ocr-upload-reader\";\nimport IndustrySelect from \"../MerchantRegistrationForm/IndustrySelect\";\nimport { Input } from \"@/components/ui/input\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { FormData } from \"../types/formData\";\n\ninterface UserTypeFormProps {\n formData: FormData;\n onInputChange: (field: keyof FormData, value: string) => void;\n businessLicenseFile: File | null;\n taxDocumentFile: File | null;\n onFileUpload: (\n type: \"businessLicense\" | \"taxDocument\",\n event: React.ChangeEvent<HTMLInputElement>\n ) => void;\n autofilledFields?: string[];\n onParsedData?: (data: ILicenseData) => void;\n onRemoveFile?: (type: \"businessLicense\" | \"taxDocument\") => void;\n errors?: Partial<Record<keyof FormData, string>>;\n fileErrors?: {\n businessLicense?: string;\n taxDocument?: string;\n };\n initialData?: Partial<FormData>;\n lang?: \"vi\" | \"en\";\n}\n\nexport const UserTypeForm: React.FC<UserTypeFormProps> = ({\n formData,\n onInputChange,\n businessLicenseFile,\n taxDocumentFile,\n onFileUpload,\n autofilledFields = [],\n onParsedData,\n onRemoveFile,\n errors,\n fileErrors,\n initialData,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const initialDataProcessed = useRef(false);\n\n useEffect(() => {\n if (initialData && !initialDataProcessed.current) {\n initialDataProcessed.current = true;\n\n Object.entries(initialData).forEach(([key, value]) => {\n if (\n key === \"businessLicense\" ||\n key === \"taxLicense\" ||\n typeof value !== \"string\" ||\n !value\n )\n return;\n\n const currentValue = formData[key as keyof FormData];\n if (currentValue !== value && (!currentValue || currentValue === \"\")) {\n onInputChange(key as keyof FormData, value);\n }\n });\n }\n }, [initialData]);\n\n const renderInput = (\n label: string,\n field: keyof FormData,\n options: { isAuto?: boolean } = {}\n ) => {\n if (field === \"businessLicense\" || field === \"taxLicense\") return null;\n\n const value = formData[field];\n if (typeof value !== \"string\") return null;\n\n return (\n <div>\n <Input\n label={translate(label)}\n value={value}\n onChange={(v) => onInputChange(field, v)}\n />\n {errors?.[field] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[field]}</p>\n )}\n </div>\n );\n };\n\n const renderFileUpload = (\n label: string,\n type: \"businessLicense\" | \"taxDocument\",\n file: File | null\n ) => (\n <div>\n <FileUpload\n label={translate(label)}\n file={file}\n onChange={(e) => onFileUpload(type, e)}\n onParsedData={onParsedData}\n onRemoveFile={() => onRemoveFile?.(type)}\n lang={lang}\n />\n {type === \"businessLicense\" && fileErrors?.businessLicense && (\n <p className=\"text-red-500 text-xs mt-1\">\n {fileErrors.businessLicense}\n </p>\n )}\n {type === \"taxDocument\" && fileErrors?.taxDocument && (\n <p className=\"text-red-500 text-xs mt-1\">{fileErrors.taxDocument}</p>\n )}\n </div>\n );\n\n const renderIndividualForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"full_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n </div>\n <div className=\"space-y-4\">\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n {renderInput(\"referralCode\", \"referralCode\")}\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n errors={errors}\n lang={lang}\n />\n </div>\n </div>\n );\n\n const renderBusinessForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"household_business_name\", \"businessName\", {\n isAuto: true,\n })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n errors={errors}\n lang={lang}\n />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\"referral_code\", \"referralCode\")}\n {renderFileUpload(\n \"business_license\",\n \"businessLicense\",\n businessLicenseFile\n )}\n {renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n const renderEnterpriseForm = () => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n <div className=\"space-y-4\">\n {renderInput(\"tax_code\", \"taxCode\", { isAuto: true })}\n {renderInput(\"enterprise_name\", \"businessName\", { isAuto: true })}\n {renderInput(\"phone_number\", \"phoneNumberSecond\", { isAuto: true })}\n {renderInput(\"email\", \"email\", { isAuto: true })}\n <IndustrySelect\n value={formData.industry || \"\"}\n onChange={(value) => onInputChange(\"industry\", value)}\n lang={lang}\n />\n {renderInput(\"representative\", \"representative\", { isAuto: true })}\n <AddressFields\n formData={formData}\n onInputChange={onInputChange}\n errors={errors}\n lang={lang}\n />\n </div>\n <div className=\"space-y-4\">\n {renderInput(\"short_name_brand\", \"branchName\")}\n {renderInput(\n \"business_registration_number\",\n \"business_registration_number\",\n {\n isAuto: true,\n }\n )}\n {renderInput(\"referral_code\", \"referralCode\")}\n {renderFileUpload(\n \"business_license\",\n \"businessLicense\",\n businessLicenseFile\n )}\n {renderFileUpload(\"tax_document\", \"taxDocument\", taxDocumentFile)}\n </div>\n </div>\n );\n\n switch (formData.userType) {\n case \"individual\":\n return renderIndividualForm();\n case \"business\":\n return renderBusinessForm();\n case \"enterprise\":\n return renderEnterpriseForm();\n default:\n return null;\n }\n};\n","import { useTranslation } from \"@/hooks/use-translation\";\n\ninterface MerchantHeaderProps {\n title?: string;\n subtitle?: string;\n statusLabel?: string;\n statusType?: \"draft\" | \"pending\" | \"approved\" | \"rejected\" | null;\n lang: \"vi\" | \"en\";\n}\n\nconst statusStyleMap = {\n draft: \"text-gray-800 bg-gray-100 border border-gray-400\",\n pending: \"text-yellow-600 bg-yellow-50 border border-yellow-400\",\n approved: \"text-green-600 bg-green-50 border border-green-400\",\n rejected: \"text-red-600 bg-red-50 border border-red-400\",\n};\n\nconst statusLabelMap = {\n DONE: \"Hoàn tất\",\n \"PENDING APPROVAL\": \"Chờ duyệt\",\n PROCESSING: \"Đang xử lý\",\n null: \"Bản nháp\",\n};\n\nexport default function MerchantHeader({\n title = \"Thêm mới hồ sơ\",\n subtitle,\n statusLabel,\n statusType,\n lang = \"vi\",\n}: MerchantHeaderProps) {\n const { translate } = useTranslation(\"form\", lang);\n const statusClass = statusType\n ? statusStyleMap[statusType]\n : statusStyleMap.draft; \n const translatedStatusLabel =\n statusLabelMap[statusLabel as keyof typeof statusLabelMap] || statusLabel;\n\n return (\n <div className=\"flex justify-between items-start py-4\">\n <div>\n <p className=\"uppercase text-sm font-medium text-[#1E2A7B]\">\n {translate(\"merchant_profile\")}\n </p>\n <div className=\"flex items-center mt-1 space-x-2 justify-center\">\n <h1 className=\"text-2xl font-bold text-[#2C2C2C]\">{title}</h1>\n {subtitle && (\n <span className=\"text-sm text-[#475467]\">| {subtitle}</span>\n )}\n </div>\n </div>\n\n {translatedStatusLabel && (\n <span\n className={`rounded-full px-6 py-2 text-sm font-medium ${statusClass}`}\n >\n {translatedStatusLabel}\n </span>\n )}\n </div>\n );\n}\n","import portalAxiosClient from \"@/configs/portalAxiosClient\";\nimport { toFormData } from \"@/utils/form\";\nimport { CreateMerchantPayload } from \"../types/formData\";\n\nexport async function updateMerchant(\n merchantId: string,\n data: CreateMerchantPayload,\n accessToken?: string\n): Promise<{ success: boolean; message: string }> {\n try {\n const formData = toFormData(data);\n\n formData.append(\"partner_id\", merchantId);\n\n const customHeaders: Record<string, string> = {\n \"Content-Type\": \"multipart/form-data\",\n };\n\n if (accessToken) {\n customHeaders[\"Authorization\"] = `Bearer ${accessToken}`;\n }\n\n const res = await portalAxiosClient.put(\n \"/master-merchant/merchant\",\n formData,\n {\n headers: customHeaders,\n }\n );\n\n console.log(\"API Response:\", res.data);\n\n return res.data.data;\n } catch (error: any) {\n console.error(\"Service error:\", error);\n\n throw error;\n }\n}\n","import { useState, useCallback } from \"react\";\nimport type { CreateMerchantPayload } from \"../types/formData\";\nimport { updateMerchant } from \"../services/editFormService\";\n\ninterface ApiError {\n message: string;\n code?: string;\n details?: any;\n field_errors?: Record<string, string[]>;\n}\n\ninterface UseUpdateMerchantResult {\n update: (\n merchantId: string,\n payload: CreateMerchantPayload,\n accessToken?: string\n ) => Promise<{ success: boolean; message: string }>;\n loading: boolean;\n error: string | null;\n errorDetails: ApiError | null;\n success: boolean;\n reset: () => void;\n}\n\nexport function useUpdateMerchant(): UseUpdateMerchantResult {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [errorDetails, setErrorDetails] = useState<ApiError | null>(null);\n const [success, setSuccess] = useState(false);\n\n const update = useCallback(\n async (\n merchantId: string,\n payload: CreateMerchantPayload,\n accessToken?: string\n ): Promise<{ success: boolean; message: string }> => {\n setLoading(true);\n setError(null);\n setErrorDetails(null);\n setSuccess(false);\n\n try {\n const res = await updateMerchant(merchantId, payload, accessToken);\n if (!res?.success) {\n throw new Error(res?.message || \"Update merchant failed\");\n }\n setSuccess(true);\n return res;\n } catch (err: any) {\n console.error(\"Lỗi đầy đủ:\", err);\n\n let errorMessage = \"Đã xảy ra lỗi không xác định\";\n let details: ApiError | null = null;\n\n if (err?.response) {\n // API phản hồi với trạng thái lỗi\n const responseData = err.response.data;\n details = {\n message: responseData?.message || responseData?.error || \"Lỗi API\",\n code: responseData?.code || responseData?.error_code,\n details: responseData?.details,\n field_errors: responseData?.field_errors || responseData?.errors,\n };\n\n errorMessage =\n responseData?.message ||\n `HTTP ${err.response.status}: ${err.response.statusText}`;\n if (responseData?.field_errors || responseData?.errors) {\n const fieldErrors =\n responseData.field_errors || responseData.errors;\n const fieldErrorMessages = Object.entries(fieldErrors)\n .map(\n ([field, errors]) =>\n `${field}: ${\n Array.isArray(errors) ? errors.join(\", \") : errors\n }`\n )\n .join(\"; \");\n errorMessage = `Lỗi xác thực dữ liệu: ${fieldErrorMessages}`;\n }\n } else if (err?.request) {\n // Lỗi mạng\n errorMessage =\n \"Lỗi kết nối mạng. Vui lòng kiểm tra kết nối internet.\";\n details = {\n message: \"Lỗi mạng\",\n code: \"NETWORK_ERROR\",\n };\n } else {\n errorMessage = err?.message || \"Đã xảy ra lỗi không xác định\";\n details = {\n message: err?.message || \"Lỗi không xác định\",\n code: \"UNKNOWN_ERROR\",\n };\n }\n\n setError(errorMessage);\n setErrorDetails(details);\n throw new Error(errorMessage);\n } finally {\n setLoading(false);\n }\n },\n []\n );\n\n const reset = () => {\n setError(null);\n setErrorDetails(null);\n setSuccess(false);\n setLoading(false);\n };\n\n return {\n update,\n loading,\n error,\n errorDetails,\n success,\n reset,\n };\n}\n","import React, { useEffect, useState, useCallback } from \"react\";\nimport { UserTypeForm } from \"./UserTypeForm\";\nimport MerchantHeader from \"./Header\";\nimport DefaultSuccessIcon from \"../../assets/success.svg\";\nimport ErrorModal from \"@/components/ui/error-modal\";\nimport SuccessModalToast from \"@/components/ui/success-modal\";\nimport Button from \"@/components/ui/button\";\nimport { useTranslation } from \"@/hooks/use-translation\";\nimport { EditMerchantPayload, FormData } from \"../types/formData\";\nimport { useMerchantDetail } from \"../hooks/useMerchantDetail\";\nimport { useUpdateMerchant } from \"../hooks/use-edit-merchant\";\n\ninterface AddressData {\n countries: Array<{ id: string; name: string }>;\n cities: Array<{ id: string; name: string }>;\n districts: Array<{ id: string; name: string }>;\n wards: Array<{ id: string; name: string }>;\n}\n\nconst defaultFormData: FormData = {\n userType: \"business\",\n phoneNumberSecond: \"\",\n businessName: \"\",\n email: \"\",\n branchName: \"\",\n taxLicense: null,\n businessLicense: null,\n taxCode: \"\",\n industry: \"\",\n representative: \"\",\n country: \"\",\n city: \"\",\n district: \"\",\n ward: \"\",\n address: \"\",\n referralCode: \"\",\n business_registration_number: \"\",\n};\n\nconst accountTypeToUserType = {\n PERSONAL: \"individual\",\n HOUSEHOLD: \"business\",\n BUSINESS: \"enterprise\",\n} as const;\n\ninterface MerchantEditProps {\n accessToken?: string;\n className?: string;\n merchantId?: string;\n isHeader?: boolean;\n lang?: \"vi\" | \"en\";\n}\n\nexport const MerchantEdit: React.FC<MerchantEditProps> = ({\n accessToken,\n className = \"\",\n merchantId,\n isHeader = true,\n lang = \"vi\",\n}) => {\n const { translate } = useTranslation(\"form\", lang);\n const { data: merchantDetail, loading: isFetchingMerchant } = useMerchantDetail(\n accessToken || \"\",\n merchantId || null\n );\n const { update, loading, error, success } = useUpdateMerchant();\n const [formData, setFormData] = useState<FormData>({ ...defaultFormData });\n const [businessLicenseFile, setBusinessLicenseFile] = useState<File | null>(null);\n const [taxDocumentFile, setTaxDocumentFile] = useState<File | null>(null);\n const [errors, setErrors] = useState<Partial<Record<keyof FormData, string>>>({});\n const [fileErrors, setFileErrors] = useState<{ businessLicense?: string; taxDocument?: string }>({});\n const [showSuccessModal, setShowSuccessModal] = useState(false);\n const [showErrorModal, setShowErrorModal] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [editMode, setEditMode] = useState(false);\n const [isInitialized, setIsInitialized] = useState(false);\n\n useEffect(() => {\n if (merchantDetail && !isInitialized) {\n const mappedUserType = accountTypeToUserType[merchantDetail.account_type as keyof typeof accountTypeToUserType] || \"business\";\n\n setFormData({\n userType: mappedUserType,\n taxCode: merchantDetail.vat || \"\",\n businessName: merchantDetail.name || \"\",\n branchName: merchantDetail.branch_name || \"\",\n email: merchantDetail.email || \"\",\n industry: merchantDetail.industry_code || \"\",\n representative: typeof merchantDetail.presentative === \"string\" ? merchantDetail.presentative : \"\",\n country: merchantDetail.country_code || \"\",\n city: merchantDetail.city_code || \"\",\n district: merchantDetail.district_code || \"\",\n ward: merchantDetail.ward_code || \"\",\n address: merchantDetail.street || \"\",\n referralCode: merchantDetail.referal_code || \"\",\n phoneNumberSecond: merchantDetail.phone || \"\",\n businessLicense: null,\n taxLicense: null,\n business_registration_number: merchantDetail.company_registry || \"\",\n });\n setIsInitialized(true);\n }\n }, [merchantDetail, isInitialized]);\n\n const handleInputChange = useCallback((field: keyof FormData, value: string) => {\n if (formData[field] === value) {\n return;\n }\n\n setFormData((prev) => {\n const newData = { ...prev, [field]: value };\n \n if (field === \"country\" && value !== prev.country) {\n return {\n ...newData,\n city: \"\",\n district: \"\",\n ward: \"\",\n };\n } else if (field === \"city\" && value !== prev.city) {\n return {\n ...newData,\n district: \"\",\n ward: \"\",\n };\n } else if (field === \"district\" && value !== prev.district) {\n return {\n ...newData,\n ward: \"\",\n };\n }\n \n return newData;\n });\n\n if (errors[field]) {\n setErrors(prev => {\n const newErrors = { ...prev };\n delete newErrors[field];\n return newErrors;\n });\n }\n}, [formData, errors]); \n\n const handleFileUpload = useCallback((type: \"businessLicense\" | \"taxDocument\", e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n if (type === \"businessLicense\") {\n setBusinessLicenseFile(file);\n } else {\n setTaxDocumentFile(file);\n }\n }\n }, []);\n\n const handleRemoveFile = useCallback((type: \"businessLicense\" | \"taxDocument\") => {\n if (type === \"businessLicense\") {\n setBusinessLicenseFile(null);\n } else {\n setTaxDocumentFile(null);\n }\n }, []);\n\n const validateForm = useCallback((): boolean => {\n const newErrors: Partial<Record<keyof FormData, string>> = {};\n\n if (!formData.taxCode) newErrors.taxCode = translate(\"tax_code_required\");\n if (!formData.businessName) newErrors.businessName = translate(\"business_name_required\");\n if (!formData.phoneNumberSecond) newErrors.phoneNumberSecond = translate(\"phone_number_required\");\n if (!formData.email) newErrors.email = translate(\"email_required\");\n if (!formData.country) newErrors.country = translate(\"country_required\");\n if (!formData.city) newErrors.city = translate(\"city_required\");\n if (!formData.district) newErrors.district = translate(\"district_required\");\n if (!formData.ward) newErrors.ward = translate(\"ward_required\");\n if (!formData.address) newErrors.address = translate(\"address_required\");\n\n if (formData.email && !/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n newErrors.email = translate(\"email_invalid\");\n }\n\n if (formData.phoneNumberSecond && !/^[0-9]{10,11}$/.test(formData.phoneNumberSecond)) {\n newErrors.phoneNumberSecond = translate(\"phone_number_invalid\");\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n }, [formData, translate]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!validateForm()) {\n return;\n }\n\n const payload: EditMerchantPayload = {\n entity_type: formData.userType === \"individual\" ? \"PERSON\" : \"BUSINESS_HOUSEHOLD\",\n tax_code: formData.taxCode,\n full_name: formData.businessName,\n phone_number: formData.phoneNumberSecond,\n business_registration_number: formData.business_registration_number,\n email: formData.email,\n referral_code: formData.referralCode,\n industry: formData.industry,\n representative_name: formData.representative,\n country: formData.country,\n city: formData.city,\n district: formData.district,\n ward: formData.ward,\n street_address: formData.address,\n business_license: businessLicenseFile as File,\n tax_license: taxDocumentFile as File,\n partner_id: merchantId || \"\",\n };\n\n try {\n const res = await update(merchantId || \"\", payload, accessToken);\n if (res.success) {\n setShowSuccessModal(true);\n }\n } catch (err) {\n setErrorMessage(translate(\"update_error\"));\n setShowErrorModal(true);\n }\n };\n\n return (\n <div>\n {isHeader && (\n <MerchantHeader\n title={translate(\"profile_detail\")}\n subtitle={translate(\"profile_list\")}\n lang={lang}\n />\n )}\n\n <div className={`bg-white mx-auto px-8 py-6 rounded-xl overflow-y-auto ${className}`}>\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium text-[#2C2C2C]\">\n {translate(\"object\")} <span className=\"text-red-500\">*</span>\n </label>\n <div className=\"grid grid-cols-3 gap-4\">\n {[\n { value: \"individual\", label: translate(\"individual\") },\n { value: \"business\", label: translate(\"household\") },\n { value: \"enterprise\", label: translate(\"business\") },\n ].map((option) => (\n <label\n key={option.value}\n className={`flex items-center space-x-2 p-3 border rounded-[12px] ${\n formData.userType === option.value\n ? \"border-[#1E2A7B]\"\n : \"border-[#E3E3E3]\"\n }`}\n >\n <input\n type=\"radio\"\n name=\"userType\"\n value={option.value}\n checked={formData.userType === option.value}\n onChange={(e) => handleInputChange(\"userType\", e.target.value)}\n className=\"w-4 h-4 text-blue-600\"\n />\n <span className=\"text-sm text-[#2C2C2C]\">{option.label}</span>\n </label>\n ))}\n </div>\n </div>\n\n <UserTypeForm\n formData={formData}\n onInputChange={handleInputChange}\n businessLicenseFile={businessLicenseFile}\n taxDocumentFile={taxDocumentFile}\n onFileUpload={handleFileUpload}\n onRemoveFile={handleRemoveFile}\n autofilledFields={[]}\n errors={errors}\n fileErrors={fileErrors}\n lang={lang}\n />\n\n <div className=\"flex justify-end\">\n <Button\n type=\"submit\"\n disabled={loading}\n className=\"text-[#00BAEE] hover:scale-[1.02] transition-all duration-200 shadow-lg hover:shadow-xl\"\n >\n {translate(\"update_profile\")}\n </Button>\n </div>\n </form>\n\n {showSuccessModal && (\n <SuccessModalToast\n lang={lang}\n onClose={() => setShowSuccessModal(false)}\n imageSrc={DefaultSuccessIcon}\n />\n )}\n\n {showErrorModal && (\n <ErrorModal\n onClose={() => setShowErrorModal(false)}\n message={errorMessage}\n lang={lang}\n />\n )}\n </div>\n </div>\n );\n};"],"names":["runtime","exports","undefined","value","key","next","module","getId","require$$0","createJob","log","this","require$$1","require$$2","createScheduler","require","resolvePaths","OEM","defaultOptions","spawnWorker","terminateWorker","onMessage","send","loadImage","require$$3","require$$4","require$$5","createWorker","langs","oem","config","recognize","_0","detect","Tesseract","languages","PSM","require$$6","require$$7","LANGUAGE","usePortalApiConfig","useState","useCallback","useEffect","AddressFields","useTranslation","useMemo","_a","_b","_c","jsxs","jsx","FileUpload","useRef","memo","UserTypeForm","statusStyleMap","MerchantHeader","defaultFormData","createMerchant","Button","DropdownMenu","useMediaQuery","TableSkeleton","ReusableTable","DropdownMenuAbsolute","statusLabelMap","accountTypeToUserType"],"mappings":"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EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,UAAU;AAAA,EACV,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]}