@fctc/interface-logic 1.8.1 → 1.8.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/configs/axios-client.ts","../src/constants/api/key-constant.ts","../src/constants/api/method-constant.ts","../src/constants/api/uri-constant.ts","../src/utils/error-handler.ts","../src/utils/format.ts","../src/constants/field/field-type-constant.ts","../src/constants/method/method-type-constant.ts","../src/constants/model/model-constant.ts","../src/constants/type/index.ts","../src/constants/widget/widget-avatar-constant.ts","../src/constants/widget/widget-color-constant.ts","../src/constants/widget/widget-status-constant.ts","../src/utils/domain/py_tokenizer.ts","../src/utils/domain/py_parser.ts","../src/utils/domain/py_date.ts","../src/utils/domain/py_builtin.ts","../src/utils/domain/py_utils.ts","../src/utils/domain/py_interpreter.ts","../src/utils/domain/py.ts","../src/utils/domain/context.ts","../src/utils/domain/objects.ts","../src/utils/domain/arrays.ts","../src/utils/domain/strings.ts","../src/utils/domain/domain.ts","../src/utils/function.ts","../src/utils/storage/local-storage.ts","../src/utils/storage/session-storage.ts","../src/store/index.ts","../src/store/reducers/breadcrums-slice/index.ts","../src/store/reducers/env-slice/index.ts","../src/store/reducers/excel-slice/index.ts","../src/store/reducers/form-slice/index.ts","../src/store/reducers/header-slice/index.ts","../src/store/reducers/list-slice/index.ts","../src/store/reducers/login-slice/index.ts","../src/store/reducers/navbar-slice/index.ts","../src/store/reducers/profile-slice/index.ts","../src/store/reducers/search-slice/index.ts","../src/store/store.ts","../node_modules/redux/src/utils/formatProdErrorMessage.ts","../node_modules/redux/src/utils/symbol-observable.ts","../node_modules/redux/src/utils/actionTypes.ts","../node_modules/redux/src/utils/isPlainObject.ts","../node_modules/redux/src/utils/kindOf.ts","../node_modules/redux/src/createStore.ts","../node_modules/redux/src/utils/warning.ts","../node_modules/redux/src/combineReducers.ts","../node_modules/redux/src/bindActionCreators.ts","../node_modules/redux/src/compose.ts","../node_modules/redux/src/applyMiddleware.ts","../node_modules/redux/src/utils/isAction.ts","../src/environment/EnvStore.ts","../src/hooks/auth/use-forgot-password.ts","../src/services/action-service/index.ts","../src/services/auth-service/index.ts","../src/services/company-service/index.ts","../src/services/excel-service/index.ts","../src/services/form-service/index.ts","../src/services/kanban-service/index.ts","../src/services/model-service/index.ts","../src/services/user-service/index.ts","../src/services/view-service/index.ts","../src/hooks/auth/use-forgotpassword-sso.ts","../src/hooks/auth/use-get-provider.ts","../src/hooks/auth/use-isvalid-token.ts","../src/hooks/auth/use-login-credential.ts","../src/hooks/auth/use-login-socical.ts","../src/hooks/auth/use-reset-password.ts","../src/hooks/auth/use-reset-password-sso.ts","../src/hooks/auth/use-update-password.ts","../src/hooks/auth/use-logout.ts","../src/hooks/auth/use-get-access-by-code.ts","../src/hooks/auth/use-validate-action-token.ts","../src/hooks/company/use-get-company-info.ts","../src/hooks/company/use-get-current-company.ts","../src/hooks/company/use-get-list-company.ts","../src/hooks/excel/use-export-excel.ts","../src/hooks/excel/use-get-field-export.ts","../src/hooks/excel/use-get-file-excel.ts","../src/hooks/excel/use-parse-preview.ts","../src/hooks/excel/use-upload-file.ts","../src/hooks/excel/use-upload-id-file.ts","../src/hooks/excel/uss-execute-import.ts","../src/hooks/form/use-change-status.ts","../src/hooks/form/use-delete-comment.ts","../src/hooks/form/use-get-comment.ts","../src/hooks/form/use-get-form-view.ts","../src/hooks/form/use-get-image.ts","../src/hooks/form/use-send-comment.ts","../src/hooks/form/use-upload-image.ts","../src/hooks/model/use-delete.ts","../src/hooks/model/use-get-all.ts","../src/hooks/model/use-get-conversion-rate.ts","../src/hooks/model/use-get-currency.ts","../src/hooks/model/use-get-detail.ts","../src/hooks/model/use-get-field-onchange.ts","../src/hooks/model/use-get-list-my-bank-account.ts","../src/models/base-model/index.ts","../src/hooks/model/use-model.ts","../src/hooks/model/use-odoo-data-transform.ts","../src/hooks/model/use-onchange-form.ts","../src/hooks/model/use-save.ts","../src/hooks/user/use-get-profile.ts","../src/hooks/user/use-get-user.ts","../src/hooks/user/use-switch-locale.ts","../src/hooks/view/use-button.ts","../src/hooks/view/use-duplicate-record.ts","../src/hooks/view/use-get-action-detail.ts","../src/hooks/view/use-get-calendar.ts","../src/hooks/view/use-get-groups.ts","../src/hooks/view/use-get-list-data.ts","../src/hooks/view/use-get-menu.ts","../src/hooks/view/use-get-print-report.ts","../src/hooks/view/use-get-progress-bar.ts","../src/hooks/view/use-get-selection.ts","../src/hooks/view/use-get-view.ts","../src/hooks/view/use-load-action.ts","../src/hooks/view/use-load-message.ts","../src/hooks/view/use-print.ts","../src/hooks/view/use-remove-row.ts","../src/hooks/view/use-resequence.ts","../src/hooks/view/use-run-action.ts","../src/hooks/view/use-signin-sso.ts","../src/hooks/view/use-verify-2FA.ts","../src/hooks/view/uset-get-2FA-method.ts","../src/hooks/view/use-get-fields-view-security.ts","../src/hooks/view/use-grant-access.ts","../src/hooks/view/use-remove-totp-setup.ts","../src/hooks/view/use-request-setup-totp.ts","../src/hooks/view/use-settings-web-read-2fa.ts","../src/hooks/view/use-verify-totp.ts","../src/provider/react-query-provider.tsx","../src/provider/redux-provider.tsx","../src/provider/main-provider.tsx","../src/provider/version-gate-provider.tsx"],"sourcesContent":["export * from './configs'\r\nexport * from './constants'\r\nexport * from './environment'\r\nexport * from './hooks'\r\nexport * from './provider'\r\nexport * from './services'\r\nexport * from './store'\r\nexport * from './utils'\r\nexport * from './types'\r\n","/* eslint-disable unused-imports/no-unused-vars */\r\nimport axios from 'axios'\r\n\r\nimport { UriConstants } from '../constants/api'\r\nimport { EnvStore } from '../environment'\r\nimport { updateTokenParamInOriginalRequest } from '../utils'\r\nimport { localStorageUtils, sessionStorageUtils } from '../utils/storage'\r\n\r\nexport const axiosClient = {\r\n init(config: EnvStore) {\r\n const localStorage = config.localStorageUtils ?? localStorageUtils()\r\n const sessionStorage = config.sessionStorageUtils ?? sessionStorageUtils()\r\n const db = config.db\r\n let isRefreshing: boolean = false\r\n let failedQueue: any[] = []\r\n\r\n const processQueue = (error: any, token: string | null = null) => {\r\n failedQueue?.forEach((prom) => {\r\n if (error) {\r\n prom.reject(error)\r\n } else {\r\n prom.resolve(token)\r\n }\r\n })\r\n\r\n failedQueue = []\r\n }\r\n\r\n const instance = axios.create({\r\n adapter: axios.defaults.adapter,\r\n baseURL: config.baseUrl,\r\n timeout: 50000,\r\n paramsSerializer: (params) => new URLSearchParams(params).toString(),\r\n })\r\n\r\n // Add a request interceptor\r\n instance.interceptors.request.use(async (config) => {\r\n const { useRefreshToken, useActionToken, actionToken } = config as any\r\n\r\n if (useActionToken && actionToken) {\r\n config.headers['Action-Token'] = actionToken\r\n }\r\n\r\n const getToken = useRefreshToken\r\n ? localStorage.getRefreshToken\r\n : localStorage.getAccessToken\r\n\r\n const token = await getToken?.()\r\n if (token) config.headers['Authorization'] = `Bearer ${token}`\r\n\r\n return config\r\n }, Promise.reject)\r\n\r\n //Add a response interceptor\r\n instance.interceptors.response.use(\r\n (response) => {\r\n return handleResponse(response)\r\n },\r\n async (error) => {\r\n const handleError = async (error: any) => {\r\n if (!error.response) {\r\n return error\r\n }\r\n const { data } = error.response\r\n if (\r\n data &&\r\n data.code === 400 &&\r\n ['invalid_grant'].includes(data.data?.error)\r\n ) {\r\n await clearAuthToken()\r\n }\r\n return data\r\n }\r\n const originalRequest = error.config\r\n if (\r\n (error.response?.status === 403 ||\r\n error.response?.status === 401 ||\r\n error.response?.status === 404) &&\r\n ['TOKEN_EXPIRED', 'AUTHEN_FAIL', 401, 'ERR_2FA_006'].includes(\r\n error.response.data.code\r\n )\r\n ) {\r\n if (isRefreshing) {\r\n return new Promise(function (resolve, reject) {\r\n failedQueue.push({ resolve, reject })\r\n })\r\n .then((token) => {\r\n originalRequest.headers['Authorization'] = 'Bearer ' + token\r\n\r\n // Update data with token is param (if any)\r\n originalRequest.data = updateTokenParamInOriginalRequest(\r\n originalRequest,\r\n token as string\r\n )\r\n\r\n return instance.request(originalRequest)\r\n })\r\n .catch(async (err) => {\r\n if (\r\n (err.response?.status === 400 ||\r\n err.response?.status === 401) &&\r\n ['invalid_grant'].includes(err.response.data.error)\r\n ) {\r\n await clearAuthToken()\r\n }\r\n // reject(err)\r\n // processQueue(err, null)\r\n })\r\n }\r\n const browserSession = await sessionStorage.getBrowserSession()\r\n const refreshToken = await localStorage.getRefreshToken()\r\n const accessTokenExp = await localStorage.getAccessToken()\r\n isRefreshing = true\r\n\r\n if (\r\n !refreshToken &&\r\n (!browserSession || browserSession == 'unActive')\r\n ) {\r\n await clearAuthToken()\r\n } else {\r\n const payload = Object.fromEntries(\r\n Object.entries({\r\n refresh_token: refreshToken,\r\n grant_type: 'refresh_token',\r\n client_id: config.config.clientId,\r\n client_secret: config.config.clientSecret,\r\n }).filter(([_, value]) => !!value)\r\n )\r\n\r\n return new Promise(function (resolve) {\r\n axios\r\n .post(\r\n `${config.baseUrl}${\r\n config.refreshTokenEndpoint ?? UriConstants.AUTH_TOKEN_PATH\r\n }`,\r\n payload,\r\n {\r\n headers: {\r\n 'Content-Type': config.refreshTokenEndpoint\r\n ? 'application/x-www-form-urlencoded'\r\n : 'multipart/form-data',\r\n Authorization: `Bearer ${accessTokenExp}`,\r\n },\r\n }\r\n )\r\n .then(async (res) => {\r\n const data = res.data\r\n // 1) put token to LocalStorage\r\n await localStorage.setToken(data.access_token)\r\n await localStorage.setRefreshToken(data.refresh_token)\r\n // get information\r\n\r\n // 2) Change Authorization header\r\n axios.defaults.headers.common['Authorization'] =\r\n 'Bearer ' + data.access_token\r\n originalRequest.headers['Authorization'] =\r\n 'Bearer ' + data.access_token\r\n\r\n // 3) Update data with token is param (if any)\r\n originalRequest.data = updateTokenParamInOriginalRequest(\r\n originalRequest,\r\n data.access_token\r\n )\r\n\r\n processQueue(null, data.access_token)\r\n\r\n // 4) return originalRequest object with Axios\r\n resolve(instance.request(originalRequest))\r\n })\r\n .catch(async (err) => {\r\n if (\r\n (err &&\r\n (err?.error_code === 'AUTHEN_FAIL' ||\r\n err?.error_code === 'TOKEN_EXPIRED' ||\r\n err?.error_code === 'TOKEN_INCORRECT' ||\r\n err?.code === 'ERR_BAD_REQUEST')) ||\r\n err?.error_code === 'ERR_2FA_006'\r\n ) {\r\n await clearAuthToken()\r\n }\r\n\r\n if (err && err.response) {\r\n const { error_code } = err.response?.data || {}\r\n if (error_code === 'AUTHEN_FAIL') {\r\n await clearAuthToken()\r\n }\r\n }\r\n processQueue(err, null)\r\n // reject(err)\r\n })\r\n .finally(() => {\r\n isRefreshing = false\r\n })\r\n })\r\n }\r\n }\r\n\r\n return Promise.reject(await handleError(error))\r\n }\r\n )\r\n\r\n const handleResponse = (res: any) => {\r\n if (res && res.data) {\r\n return res.data\r\n }\r\n\r\n return res\r\n }\r\n\r\n const handleError = (error: any) => {\r\n // Check if it's an Axios error and if it's a network error\r\n if (error.isAxiosError && error.code === 'ECONNABORTED') {\r\n console.error('Request Timeout Error:', error)\r\n // Handle timeout error\r\n // You can return a custom message or perform any action you want\r\n return 'Request Timeout Error'\r\n } else if (error.isAxiosError && !error.response) {\r\n console.error('Network Error:', error)\r\n // Handle network error\r\n // You can return a custom message or perform any action you want\r\n return 'Network Error'\r\n } else {\r\n // For other errors, log and return the error\r\n console.error('Other Error:', error?.response)\r\n const errorMessage =\r\n error?.response?.data?.message || 'An error occurred'\r\n return { message: errorMessage, status: error?.response?.status }\r\n }\r\n }\r\n const clearAuthToken = async () => {\r\n await localStorage.clearToken()\r\n if (typeof window !== 'undefined') {\r\n window.location.href = `/login`\r\n }\r\n }\r\n\r\n function formatUrl(url: string, db?: string) {\r\n return url + (db ? '?db=' + db : '')\r\n }\r\n\r\n const responseBody = (response: any) => response\r\n const requests = {\r\n get: (url: string, headers: any) =>\r\n instance.get(formatUrl(url, db), headers).then(responseBody),\r\n\r\n post: (url: string, body: any, headers: any) =>\r\n instance.post(formatUrl(url, db), body, headers).then(responseBody),\r\n\r\n post_excel: (url: string, body: any, headers: any) =>\r\n instance\r\n .post(formatUrl(url, db), body, {\r\n responseType: 'arraybuffer',\r\n headers: {\r\n 'Content-Type':\r\n typeof window !== 'undefined'\r\n ? 'application/json'\r\n : 'application/javascript',\r\n Accept:\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n },\r\n })\r\n .then(responseBody),\r\n\r\n put: (url: string, body: any, headers: any) =>\r\n instance.put(formatUrl(url, db), body, headers).then(responseBody),\r\n\r\n patch: (url: string, body: any) =>\r\n instance.patch(formatUrl(url, db), body).then(responseBody),\r\n\r\n delete: (url: string, body: any) =>\r\n instance.delete(formatUrl(url, db), body).then(responseBody),\r\n }\r\n\r\n return requests\r\n },\r\n}\r\n","export enum KeyConstants {\r\n PROFILE = 'userinfo',\r\n CURRENT_COMPANY = 'current_company',\r\n LIST_COMPANY = 'list_company',\r\n COMPANY_INFO = 'company_info',\r\n MENU = 'menus',\r\n GET_VIEW_BY_ACTION = 'get_view_by_action',\r\n ACTION_DETAIL = 'action_detail',\r\n GET_DATA_SELECTION = 'get_data_select',\r\n WEB_SAVE = 'web_save',\r\n WEB_READ = 'web_read',\r\n GET_PROVIDER = 'get_provider',\r\n}\r\n","export enum MethodConstants {\r\n WEB_SEARCH_READ = 'web_search_read',\r\n WEB_READ_GROUP = 'web_read_group',\r\n WEB_READ = 'web_read',\r\n WEB_SAVE = 'web_save',\r\n UNLINK = 'unlink',\r\n ONCHANGE = 'onchange',\r\n GET_ONCHANGE_FIELDS = 'get_fields_onchange',\r\n GET_FIELD_VIEW = 'get_fields_view_v2',\r\n}\r\n","export enum UriConstants {\r\n AUTH_TOKEN_PATH = '/authentication/oauth2/token',\r\n GENTOKEN_SOCIAL = '/token/generate',\r\n CALL_PATH = '/call',\r\n COMPANY_PATH = '/company',\r\n PROFILE_PATH = '/userinfo',\r\n RESET_PASSWORD_PATH = '/reset_password',\r\n CHANGE_PASSWORD_PATH = '/change_password',\r\n UPDATE_PASSWORD_PATH = '/change_password_parent',\r\n LOAD_ACTION = `/load_action`,\r\n REPORT_PATH = `/report`,\r\n RUN_ACTION_PATH = `/run_action`,\r\n UPLOAD_FILE_PATH = `/upload/file`,\r\n GET_MESSAGE = `/chatter/thread/messages`,\r\n SENT_MESSAGE = `/chatter/message/post`,\r\n UPLOAD_IMAGE = `/mail/attachment/upload`,\r\n DELETE_MESSAGE = `/chatter/message/update_content`,\r\n IMAGE_PATH = `/web/image`,\r\n LOAD_MESSAGE = `/load_message_failures`,\r\n TOKEN = `/check_token`,\r\n CREATE_UPDATE_PATH = `/create_update`,\r\n TWOFA_METHOD_PATH = `/id/api/v2/call`,\r\n SIGNIN_SSO = `/signin-sso/oauth`,\r\n GRANT_ACCESS = '/grant-access',\r\n TOKEN_BY_CODE = '/token',\r\n LOGOUT = '/logout',\r\n}\r\n","export class WesapError extends Error {\r\n code: number\r\n\r\n constructor(message: string, code: number) {\r\n super(message)\r\n this.code = code\r\n }\r\n}\r\n\r\nexport function handleError(\r\n error: Error,\r\n env: { services: { notification: { error: (message: string) => void } } },\r\n) {\r\n if (error instanceof WesapError) {\r\n env.services.notification.error(error.message)\r\n } else {\r\n env.services.notification.error('An unexpected error occurred')\r\n }\r\n}\r\n","/* eslint-disable no-useless-escape */\r\n// export const formatCurrency = (amount: number, currency = 'USD') => {\r\n// const formatter = new Intl.NumberFormat('vi-VN', {\r\n// style: 'currency',\r\n// currency: currency,\r\n// minimumFractionDigits: 0,\r\n// })\r\n\r\nimport moment from 'moment'\r\n\r\n// return formatter.format(amount).replaceAll(',', '.')\r\n// }\r\nexport const formatCurrency = (amount: number, currency = 'USD') => {\r\n const formatter = new Intl.NumberFormat('vi-VN', {\r\n style: 'currency',\r\n currency: currency,\r\n minimumFractionDigits: 0,\r\n })\r\n\r\n return formatter.format(amount).replaceAll('.', ',')\r\n}\r\n\r\nexport const formatDate = (\r\n date: string | Date,\r\n locale: string = 'en-US',\r\n): string => {\r\n return new Intl.DateTimeFormat(locale).format(new Date(date))\r\n}\r\n\r\nexport const validateAndParseDate = (\r\n input: string,\r\n isDateTime: boolean = false,\r\n) => {\r\n if (!input || typeof input !== 'string') return null\r\n\r\n // Xóa các ký tự đặc biệt (trừ số, dấu trừ, dấu /, dấu :, và khoảng trắng) để xử lý các case số\r\n const cleanInput = input.replace(/[^0-9-\\/:\\s]/g, '')\r\n\r\n // Định dạng đầu ra\r\n const dateFormat = 'YYYY-MM-DD'\r\n const dateTimeFormat = 'YYYY-MM-DD HH:mm:ss' // Định dạng 24 giờ\r\n\r\n // Lấy ngày, tháng, năm hiện tại\r\n const currentDay = moment().format('DD')\r\n const currentMonth = moment().format('MM')\r\n const currentYear = moment().format('YYYY')\r\n const defaultTime = '00:00:00' // Thời gian mặc định: 00:00:00\r\n const maxYear = parseInt(currentYear) + 10 // Năm hiện tại + 10\r\n\r\n // Hàm kiểm tra ngày hợp lệ, bao gồm năm nhuận\r\n const isValidDate = (day: string, month: string, year: string) => {\r\n const date = moment(`${day}-${month}-${year}`, 'DD-MM-YYYY', true)\r\n return date.isValid()\r\n }\r\n\r\n // Hàm kiểm tra giờ, phút, giây hợp lệ\r\n const isValidTime = (\r\n hour: string,\r\n minute: string = '00',\r\n second: string = '00',\r\n ) => {\r\n const h = parseInt(hour, 10)\r\n const m = parseInt(minute, 10)\r\n const s = parseInt(second, 10)\r\n return h >= 0 && h <= 23 && m >= 0 && m <= 59 && s >= 0 && s <= 59\r\n }\r\n\r\n // Hàm trả về định dạng phù hợp (date hoặc datetime) và trừ 7 giờ nếu isDateTime = true\r\n const formatOutput = (\r\n day: string,\r\n month: string,\r\n year: string,\r\n time: string = defaultTime,\r\n ) => {\r\n let result = moment(\r\n `${day}-${month}-${year} ${time}`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n if (isDateTime) {\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return result.format(dateFormat)\r\n }\r\n\r\n // Case 0: Định dạng datetime DD/MM/YYYY HH[:mm[:ss]] hoặc DD-MM-YYYY HH[:mm[:ss]] (VD: 16/09/2002 16:09:03, 16-09-2002 16, 16/09/2002 3:9)\r\n if (\r\n isDateTime &&\r\n input.match(\r\n /^\\d{1,2}[\\/-]\\d{1,2}[\\/-]\\d{2,4}\\s+\\d{1,2}(:\\d{1,2}(:\\d{1,2})?)?$/,\r\n )\r\n ) {\r\n const [datePart, timePart] = input.split(/\\s+/)\r\n const dateParts = datePart.split(/[\\/-]/)\r\n const timeParts = timePart.split(':')\r\n const day = dateParts[0].padStart(2, '0')\r\n const month = dateParts[1].padStart(2, '0')\r\n const year =\r\n dateParts[2].length <= 2\r\n ? `20${dateParts[2].padStart(2, '0')}`\r\n : dateParts[2].padStart(4, '0')\r\n const hour = timeParts[0].padStart(2, '0')\r\n const minute = timeParts[1] ? timeParts[1].padStart(2, '0') : '00'\r\n const second = timeParts[2] ? timeParts[2].padStart(2, '0') : '00'\r\n if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:${minute}:${second}`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // Case 1: Định dạng YYYY-MM-DD (VD: 2025-12-09)\r\n if (cleanInput.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\r\n const [year, month, day] = cleanInput.split('-')\r\n if (isValidDate(day, month, year)) {\r\n return formatOutput(day, month, year)\r\n }\r\n return null\r\n }\r\n\r\n // Case 2: Định dạng DD/MM/YYYY hoặc DD/MM/YY (VD: 09/12/2025, 09/12/25)\r\n if (cleanInput.match(/^\\d{1,2}\\/\\d{1,2}\\/\\d{2,4}$/)) {\r\n const [day, month, year] = cleanInput.split('/')\r\n const paddedDay = day.padStart(2, '0')\r\n const paddedMonth = month.padStart(2, '0')\r\n const fullYear =\r\n year.length <= 2 ? `20${year.padStart(2, '0')}` : year.padStart(4, '0')\r\n if (isValidDate(paddedDay, paddedMonth, fullYear)) {\r\n return formatOutput(paddedDay, paddedMonth, fullYear)\r\n }\r\n return null\r\n }\r\n\r\n // Case 3: Định dạng DD-MM-YYYY hoặc DD-MM-YY (VD: 16-09-2002, 16-09-02)\r\n if (cleanInput.match(/^\\d{1,2}-\\d{1,2}-\\d{2,4}$/)) {\r\n const [day, month, year] = cleanInput.split('-')\r\n const paddedDay = day.padStart(2, '0')\r\n const paddedMonth = month.padStart(2, '0')\r\n const fullYear =\r\n year.length <= 2 ? `20${year.padStart(2, '0')}` : year.padStart(4, '0')\r\n if (isValidDate(paddedDay, paddedMonth, fullYear)) {\r\n return formatOutput(paddedDay, paddedMonth, fullYear)\r\n }\r\n return null\r\n }\r\n\r\n // Case 4: Định dạng DD/MM hoặc DD-MM (VD: 16/09, 16-09)\r\n if (cleanInput.match(/^\\d{1,2}[\\/-]\\d{1,2}$/)) {\r\n const [day, month] = cleanInput.split(/[\\/-]/)\r\n const paddedDay = day.padStart(2, '0')\r\n const paddedMonth = month.padStart(2, '0')\r\n if (isValidDate(paddedDay, paddedMonth, currentYear)) {\r\n return formatOutput(paddedDay, paddedMonth, currentYear)\r\n }\r\n return null\r\n }\r\n\r\n // Case 5: Input là 4 chữ số, ưu tiên năm nếu trong khoảng 2000 đến năm hiện tại + 10\r\n if (cleanInput.match(/^\\d{4}$/)) {\r\n const num = parseInt(cleanInput, 10)\r\n if (num >= 2000 && num <= maxYear) {\r\n // Parse là năm, lấy ngày/tháng hiện tại\r\n if (isValidDate(currentDay, currentMonth, num.toString())) {\r\n return formatOutput(currentDay, currentMonth, num.toString())\r\n }\r\n return null\r\n }\r\n // Nếu không phải năm, xử lý như case DDMM\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n if (isValidDate(day, month, currentYear)) {\r\n return formatOutput(day, month, currentYear)\r\n }\r\n return null\r\n }\r\n\r\n // Case 6: Số âm (trừ ngày từ hiện tại)\r\n if (cleanInput.startsWith('-') && /^\\-\\d+$/.test(cleanInput)) {\r\n const daysToSubtract = Math.abs(parseInt(cleanInput, 10))\r\n let result = moment().subtract(daysToSubtract, 'days')\r\n if (isDateTime) {\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n }\r\n if (result.isValid()) {\r\n return isDateTime\r\n ? result.format(dateTimeFormat)\r\n : result.format(dateFormat)\r\n }\r\n return null\r\n }\r\n\r\n // Case 7: Các định dạng có ký tự đặc biệt (VD: 10&&&&1&&&20, 1&&&1&&&2020)\r\n if (input.match(/^\\d{1,2}[^0-9-\\/]+\\d{1,2}[^0-9-\\/]+\\d{2,4}.*$/)) {\r\n const parts = input.split(/[^0-9-\\/]+/).filter(Boolean)\r\n const day = parts[0].padStart(2, '0')\r\n const month = parts[1].padStart(2, '0')\r\n let year = parts[2]\r\n year = year.length === 2 ? `20${year}` : year.padStart(4, '0')\r\n if (isValidDate(day, month, year)) {\r\n return formatOutput(day, month, year)\r\n }\r\n return null\r\n }\r\n\r\n // Case 8: Datetime cases dạng số (only when isDateTime = true)\r\n if (isDateTime) {\r\n // 9 chữ số: DDMMYYYYH (VD: 160920023 -> 2002-09-16 03:00:00 - 7h -> 2002-09-15 20:00:00)\r\n if (cleanInput.length === 9) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 9).padStart(2, '0')\r\n if (isValidDate(day, month, year) && isValidTime(hour)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:00:00`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // 10 chữ số: DDMMYYYYHH (VD: 1609200216 -> 2002-09-16 16:00:00 - 7h -> 2002-09-16 09:00:00)\r\n if (cleanInput.length === 10) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 10)\r\n if (isValidDate(day, month, year) && isValidTime(hour)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:00:00`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // 11 chữ số: DDMMYYYYHmm (VD: 16092002133 -> 2002-09-16 13:03:00 - 7h -> 2002-09-16 06:03:00)\r\n if (cleanInput.length === 11) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 10)\r\n const minute = cleanInput.slice(10, 11).padStart(2, '0')\r\n if (isValidDate(day, month, year) && isValidTime(hour, minute)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:${minute}:00`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // 12 chữ số: DDMMYYYYHHmm (VD: 160920021609 -> 2002-09-16 16:09:00 - 7h -> 2002-09-16 09:09:00)\r\n if (cleanInput.length === 12) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 10)\r\n const minute = cleanInput.slice(10, 12)\r\n if (isValidDate(day, month, year) && isValidTime(hour, minute)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:${minute}:00`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // 13 chữ số: DDMMYYYYHHmms (VD: 1609200213333 -> 2002-09-16 13:33:03 - 7h -> 2002-09-16 06:33:03)\r\n if (cleanInput.length === 13) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 10)\r\n const minute = cleanInput.slice(10, 12)\r\n const second = cleanInput.slice(12, 13).padStart(2, '0')\r\n if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:${minute}:${second}`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // 14 chữ số: DDMMYYYYHHmmss (VD: 16092002160959 -> 2002-09-16 16:09:59 - 7h -> 2002-09-16 09:09:59)\r\n if (cleanInput.length === 14) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 10)\r\n const minute = cleanInput.slice(10, 12)\r\n const second = cleanInput.slice(12, 14)\r\n if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:${minute}:${second}`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n }\r\n\r\n // Các case số thuần\r\n const len = cleanInput.length\r\n\r\n if (len === 1 || len === 2) {\r\n // Case: 16 -> 2025-06-16 00:00:00 - 7h -> 2025-06-15 17:00:00 (if isDateTime = true)\r\n const paddedDay = cleanInput.padStart(2, '0')\r\n if (isValidDate(paddedDay, currentMonth, currentYear)) {\r\n return formatOutput(paddedDay, currentMonth, currentYear)\r\n }\r\n return null // VD: 32 -> null\r\n }\r\n\r\n if (len === 3) {\r\n // Case: 129 -> 2025-09-12 00:00:00 - 7h -> 2025-09-11 17:00:00 (if isDateTime = true)\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 3).padStart(2, '0')\r\n if (isValidDate(day, month, currentYear)) {\r\n return formatOutput(day, month, currentYear)\r\n }\r\n return null\r\n }\r\n\r\n if (len === 6) {\r\n // Case: 120522 -> 2022-05-12 00:00:00 - 7h -> 2022-05-11 17:00:00 (if isDateTime = true)\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n let year = cleanInput.slice(4, 6)\r\n year = `20${year}` // Giả định năm 20xx\r\n if (parseInt(month) > 12) {\r\n // Nếu tháng không hợp lệ, lấy tháng/năm hiện tại\r\n if (isValidDate(day, currentMonth, currentYear)) {\r\n return formatOutput(day, currentMonth, currentYear)\r\n }\r\n return null\r\n }\r\n if (isValidDate(day, month, year)) {\r\n return formatOutput(day, month, year)\r\n }\r\n return null\r\n }\r\n\r\n if (len === 7) {\r\n // Case: 3002222 -> null\r\n return null\r\n }\r\n\r\n if (len === 8) {\r\n // Case: 12052021 -> 2021-05-12 00:00:00 - 7h -> 2021-05-11 17:00:00 (if isDateTime = true)\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n if (isValidDate(day, month, year)) {\r\n return formatOutput(day, month, year)\r\n }\r\n return null // VD: 3002222 -> null\r\n }\r\n\r\n if (len > 8 && !isDateTime) {\r\n // Case: 120520212 -> null (only when not in datetime mode)\r\n return null\r\n }\r\n\r\n return null // Các trường hợp không khớp\r\n}\r\n","export enum FieldTypeConstants {\r\n CHAR = 'char',\r\n TEXT = 'text',\r\n INTEGER = 'integer',\r\n FLOAT = 'float',\r\n BOOLEAN = 'boolean',\r\n DATE = 'date',\r\n DATETIME = 'datetime',\r\n BINARY = 'binary',\r\n SELECTION = 'selection',\r\n HTML = 'html',\r\n MANY2ONE = 'many2one',\r\n ONE2MANY = 'one2many',\r\n MANY2MANY = 'many2many',\r\n MONETARY = 'monetary',\r\n REFERENCE = 'reference',\r\n FUNCTION = 'function',\r\n PROPERTY = 'property',\r\n}\r\n","export enum MethodType {\r\n CREATE = 0,\r\n UPDATE = 1,\r\n DELETE = 2,\r\n UNLINK = 3,\r\n NO_CHANGE = 4,\r\n}\r\n","export enum ModelConstants {\r\n MENU = 'ir.ui.menu',\r\n USER = 'res.users',\r\n COMPANY = 'res.company',\r\n WINDOW_ACTION = 'ir.actions.act_window',\r\n BASE_IMPORT = 'base_import.import',\r\n GET_IMPORT = 'get_import_templates',\r\n}\r\n","export enum ComponentType {\r\n GROUP = 'group',\r\n FIELD = 'field',\r\n TREE = 'tree',\r\n DIV = 'div',\r\n LIST = 'list',\r\n FORM = 'form',\r\n SETTINGS = 'setting',\r\n SPAN = 'span',\r\n KANBAN = 'kanban',\r\n CALENDAR = 'calendar',\r\n TYPE = 'view-type',\r\n}\r\n\r\nexport const SearchType = {\r\n FILTER: 'filter_by',\r\n SEARCH: 'search_by',\r\n GROUP: 'group_by',\r\n}\r\n","export enum WIDGETAVATAR {\r\n many2one_avatar_user = 'many2one_avatar_user',\r\n many2many_avatar_user = 'many2many_avatar_user',\r\n}\r\n\r\nexport enum WIDGETCURRENCY {\r\n many2one_avatar_user = 'many2one_avatar_user',\r\n many2many_avatar_user = 'many2many_avatar_user',\r\n}\r\n","export enum WIDGETCOLOR {\r\n many2many_tags = 'many2many_tags',\r\n helpdesk_sla_many2many_tags = 'helpdesk_sla_many2many_tags',\r\n}\r\n","export enum WIDGETSTATUS {\r\n sla_status_ids = 'sla_status_ids',\r\n}\r\n\r\nexport enum WIDGETNOSTRING {\r\n sla_status_ids = 'sla_status_ids',\r\n}\r\n","/** @odoo-module **/\r\n\r\n// -----------------------------------------------------------------------------\r\n// Types\r\n// -----------------------------------------------------------------------------\r\n\r\nexport interface TokenNumber {\r\n type: 0\r\n value: number\r\n}\r\n\r\nexport interface TokenString {\r\n type: 1\r\n value: string\r\n}\r\n\r\nexport interface TokenSymbol {\r\n type: 2\r\n value: string\r\n}\r\n\r\nexport interface TokenName {\r\n type: 3\r\n value: string\r\n}\r\n\r\nexport interface TokenConstant {\r\n type: 4\r\n value: string\r\n}\r\n\r\nexport type Token =\r\n | TokenNumber\r\n | TokenString\r\n | TokenSymbol\r\n | TokenName\r\n | TokenConstant\r\n\r\nexport class TokenizerError extends Error {}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Helpers and Constants\r\n// -----------------------------------------------------------------------------\r\n\r\nconst directMap: Record<string, string> = {\r\n '\\\\': '\\\\',\r\n '\"': '\"',\r\n \"'\": \"'\",\r\n a: '\\x07',\r\n b: '\\x08',\r\n f: '\\x0c',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t',\r\n v: '\\v',\r\n}\r\n\r\nfunction decodeStringLiteral(str: string, unicode: boolean): string {\r\n const out: string[] = []\r\n let code: number\r\n for (let i = 0; i < str.length; ++i) {\r\n if (str[i] !== '\\\\') {\r\n out.push(str[i])\r\n continue\r\n }\r\n const escape = str[i + 1]\r\n if (escape in directMap) {\r\n out.push(directMap[escape])\r\n ++i\r\n continue\r\n }\r\n switch (escape) {\r\n case '\\n':\r\n ++i\r\n continue\r\n case 'N':\r\n if (!unicode) {\r\n break\r\n }\r\n throw new TokenizerError('SyntaxError: \\\\N{} escape not implemented')\r\n case 'u':\r\n if (!unicode) {\r\n break\r\n }\r\n const uni = str.slice(i + 2, i + 6)\r\n if (!/[0-9a-f]{4}/i.test(uni)) {\r\n throw new TokenizerError(\r\n [\r\n \"SyntaxError: (unicode error) 'unicodeescape' codec\",\r\n \" can't decode bytes in position \",\r\n i,\r\n '-',\r\n i + 4,\r\n ': truncated \\\\uXXXX escape',\r\n ].join(''),\r\n )\r\n }\r\n code = parseInt(uni, 16)\r\n out.push(String.fromCharCode(code))\r\n i += 5\r\n continue\r\n case 'U':\r\n if (!unicode) {\r\n break\r\n }\r\n throw new TokenizerError('SyntaxError: \\\\U escape not implemented')\r\n case 'x':\r\n const hex = str.slice(i + 2, i + 4)\r\n if (!/[0-9a-f]{2}/i.test(hex)) {\r\n if (!unicode) {\r\n throw new TokenizerError('ValueError: invalid \\\\x escape')\r\n }\r\n throw new TokenizerError(\r\n [\r\n \"SyntaxError: (unicode error) 'unicodeescape'\",\r\n \" codec can't decode bytes in position \",\r\n i,\r\n '-',\r\n i + 2,\r\n ': truncated \\\\xXX escape',\r\n ].join(''),\r\n )\r\n }\r\n code = parseInt(hex, 16)\r\n out.push(String.fromCharCode(code))\r\n i += 3\r\n continue\r\n default:\r\n if (!/[0-8]/.test(escape)) {\r\n break\r\n }\r\n const r = /[0-8]{1,3}/g\r\n r.lastIndex = i + 1\r\n const m = r.exec(str)\r\n if (!m) break\r\n const oct = m[0]\r\n code = parseInt(oct, 8)\r\n out.push(String.fromCharCode(code))\r\n i += oct.length\r\n continue\r\n }\r\n out.push('\\\\')\r\n }\r\n return out.join('')\r\n}\r\n\r\nconst constants: Set<string> = new Set(['None', 'False', 'True'])\r\n\r\nexport const comparators: string[] = [\r\n 'in',\r\n 'not',\r\n 'not in',\r\n 'is',\r\n 'is not',\r\n '<',\r\n '<=',\r\n '>',\r\n '>=',\r\n '<>',\r\n '!=',\r\n '==',\r\n]\r\n\r\nexport const binaryOperators: string[] = [\r\n 'or',\r\n 'and',\r\n '|',\r\n '^',\r\n '&',\r\n '<<',\r\n '>>',\r\n '+',\r\n '-',\r\n '*',\r\n '/',\r\n '//',\r\n '%',\r\n '~',\r\n '**',\r\n '.',\r\n]\r\n\r\nexport const unaryOperators: string[] = ['-']\r\n\r\nconst symbols: Set<string> = new Set([\r\n ...['(', ')', '[', ']', '{', '}', ':', ','],\r\n ...['if', 'else', 'lambda', '='],\r\n ...comparators,\r\n ...binaryOperators,\r\n ...unaryOperators,\r\n])\r\n\r\nfunction group(...args: string[]): string {\r\n return '(' + args.join('|') + ')'\r\n}\r\n\r\nconst Name = '[a-zA-Z_]\\\\w*'\r\nconst Whitespace = '[ \\\\f\\\\t]*'\r\nconst DecNumber = '\\\\d+(L|l)?'\r\nconst IntNumber = DecNumber\r\n\r\nconst Exponent = '[eE][+-]?\\\\d+'\r\nconst PointFloat = group(`\\\\d+\\\\.\\\\d*(${Exponent})?`, `\\\\.\\\\d+(${Exponent})?`)\r\nconst FloatNumber = group(PointFloat, `\\\\d+${Exponent}`)\r\n\r\nconst Number = group(FloatNumber, IntNumber)\r\nconst Operator = group(\r\n '\\\\*\\\\*=?',\r\n '>>=?',\r\n '<<=?',\r\n '<>',\r\n '!=',\r\n '//=?',\r\n '[+\\\\-*/%&|^=<>]=?',\r\n '~',\r\n)\r\nconst Bracket = '[\\\\[\\\\]\\\\(\\\\)\\\\{\\\\}]'\r\nconst Special = '[:;.,`@]'\r\nconst Funny = group(Operator, Bracket, Special)\r\nconst ContStr = group(\r\n \"([uU])?'([^\\\\n'\\\\\\\\]*(?:\\\\\\\\.[^\\\\n'\\\\\\\\]*)*)'\",\r\n '([uU])?\"([^\\\\n\"\\\\\\\\]*(?:\\\\\\\\.[^\\\\n\"\\\\\\\\]*)*)\"',\r\n)\r\nconst PseudoToken = Whitespace + group(Number, Funny, ContStr, Name)\r\nconst NumberPattern = new RegExp('^' + Number + '$')\r\nconst StringPattern = new RegExp('^' + ContStr + '$')\r\nconst NamePattern = new RegExp('^' + Name + '$')\r\nconst strip = new RegExp('^' + Whitespace)\r\n\r\n// -----------------------------------------------------------------------------\r\n// Tokenize function\r\n// -----------------------------------------------------------------------------\r\n\r\nexport function tokenize(str: string): Token[] {\r\n const tokens: Token[] = []\r\n const max = str.length\r\n let start = 0\r\n let end = 0\r\n const pseudoprog = new RegExp(PseudoToken, 'g')\r\n\r\n while (pseudoprog.lastIndex < max) {\r\n const pseudomatch = pseudoprog.exec(str)\r\n if (!pseudomatch) {\r\n if (/^\\s+$/.test(str.slice(end))) {\r\n break\r\n }\r\n throw new TokenizerError(\r\n 'Failed to tokenize <<' +\r\n str +\r\n '>> at index ' +\r\n (end || 0) +\r\n '; parsed so far: ' +\r\n tokens,\r\n )\r\n }\r\n\r\n if (pseudomatch.index > end) {\r\n if (str.slice(end, pseudomatch.index).trim()) {\r\n throw new TokenizerError('Invalid expression')\r\n }\r\n }\r\n\r\n start = pseudomatch.index\r\n end = pseudoprog.lastIndex\r\n let token = str.slice(start, end).replace(strip, '')\r\n\r\n if (NumberPattern.test(token)) {\r\n tokens.push({\r\n type: 0,\r\n value: parseFloat(token),\r\n })\r\n } else if (StringPattern.test(token)) {\r\n const m = StringPattern.exec(token)\r\n if (!m) throw new TokenizerError('Invalid string match')\r\n tokens.push({\r\n type: 1,\r\n value: decodeStringLiteral(\r\n m[3] !== undefined ? m[3] : m[5],\r\n !!(m[2] || m[4]),\r\n ),\r\n })\r\n } else if (symbols.has(token)) {\r\n if (\r\n token === 'in' &&\r\n tokens.length > 0 &&\r\n tokens[tokens.length - 1].value === 'not'\r\n ) {\r\n token = 'not in'\r\n tokens.pop()\r\n } else if (\r\n token === 'not' &&\r\n tokens.length > 0 &&\r\n tokens[tokens.length - 1].value === 'is'\r\n ) {\r\n token = 'is not'\r\n tokens.pop()\r\n }\r\n tokens.push({\r\n type: 2,\r\n value: token,\r\n })\r\n } else if (constants.has(token)) {\r\n tokens.push({\r\n type: 4,\r\n value: token,\r\n })\r\n } else if (NamePattern.test(token)) {\r\n tokens.push({\r\n type: 3,\r\n value: token,\r\n })\r\n } else {\r\n throw new TokenizerError('Invalid expression')\r\n }\r\n }\r\n\r\n return tokens\r\n}\r\n","// py_parser.ts\r\n\r\nimport { binaryOperators, comparators, Token } from './py_tokenizer'\r\n\r\n// -----------------------------------------------------------------------------\r\n// Types\r\n// -----------------------------------------------------------------------------\r\n\r\nexport interface ASTNumber {\r\n type: 0\r\n value: number\r\n}\r\nexport interface ASTString {\r\n type: 1\r\n value: string\r\n}\r\nexport interface ASTBoolean {\r\n type: 2\r\n value: boolean\r\n}\r\nexport interface ASTNone {\r\n type: 3\r\n}\r\nexport interface ASTList {\r\n type: 4\r\n value: AST[]\r\n}\r\nexport interface ASTName {\r\n type: 5\r\n value: string\r\n}\r\nexport interface ASTUnaryOperator {\r\n type: 6\r\n op: string\r\n right: AST\r\n}\r\nexport interface ASTBinaryOperator {\r\n type: 7\r\n op: string\r\n left: AST\r\n right: AST\r\n}\r\nexport interface ASTFunctionCall {\r\n type: 8\r\n fn: AST\r\n args: AST[]\r\n kwargs: { [key: string]: AST }\r\n}\r\nexport interface ASTAssignment {\r\n type: 9\r\n name: ASTName\r\n value: AST\r\n}\r\nexport interface ASTTuple {\r\n type: 10\r\n value: AST[]\r\n}\r\nexport interface ASTDictionary {\r\n type: 11\r\n value: { [key: string]: AST }\r\n}\r\nexport interface ASTLookup {\r\n type: 12\r\n target: AST\r\n key: AST\r\n}\r\nexport interface ASTIf {\r\n type: 13\r\n condition: AST\r\n ifTrue: AST\r\n ifFalse: AST\r\n}\r\nexport interface ASTBooleanOperator {\r\n type: 14\r\n op: string\r\n left: AST\r\n right: AST\r\n}\r\nexport interface ASTObjLookup {\r\n type: 15\r\n obj: AST\r\n key: string\r\n}\r\n\r\nexport type AST =\r\n | ASTNumber\r\n | ASTString\r\n | ASTBoolean\r\n | ASTNone\r\n | ASTList\r\n | ASTName\r\n | ASTUnaryOperator\r\n | ASTBinaryOperator\r\n | ASTFunctionCall\r\n | ASTAssignment\r\n | ASTTuple\r\n | ASTDictionary\r\n | ASTLookup\r\n | ASTIf\r\n | ASTBooleanOperator\r\n | ASTObjLookup\r\n\r\nexport class ParserError extends Error {}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Constants and helpers\r\n// -----------------------------------------------------------------------------\r\n\r\nconst chainedOperators = new Set<string>(comparators)\r\nconst infixOperators = new Set<string>([...binaryOperators, ...comparators])\r\n\r\nexport function bp(symbol: string): number {\r\n switch (symbol) {\r\n case '=':\r\n return 10\r\n case 'if':\r\n return 20\r\n case 'in':\r\n case 'not in':\r\n case 'is':\r\n case 'is not':\r\n case '<':\r\n case '<=':\r\n case '>':\r\n case '>=':\r\n case '<>':\r\n case '==':\r\n case '!=':\r\n return 60\r\n case 'or':\r\n return 30\r\n case 'and':\r\n return 40\r\n case 'not':\r\n return 50\r\n case '|':\r\n return 70\r\n case '^':\r\n return 80\r\n case '&':\r\n return 90\r\n case '<<':\r\n case '>>':\r\n return 100\r\n case '+':\r\n case '-':\r\n return 110\r\n case '*':\r\n case '/':\r\n case '//':\r\n case '%':\r\n return 120\r\n case '**':\r\n return 140\r\n case '.':\r\n case '(':\r\n case '[':\r\n return 150\r\n default:\r\n return 0\r\n }\r\n}\r\n\r\nfunction bindingPower(token: Token): number {\r\n return token.type === 2 /* Symbol */ ? bp(token.value) : 0\r\n}\r\n\r\nfunction isSymbol(token: Token, value: string): boolean {\r\n return token.type === 2 /* Symbol */ && token.value === value\r\n}\r\n\r\nfunction parsePrefix(current: Token, tokens: Token[]): AST {\r\n switch (current.type) {\r\n case 0 /* Number */:\r\n return { type: 0 /* Number */, value: current.value as number }\r\n case 1 /* String */:\r\n return { type: 1 /* String */, value: current.value as string }\r\n case 4 /* Constant */:\r\n if (current.value === 'None') {\r\n return { type: 3 /* None */ }\r\n } else {\r\n return { type: 2 /* Boolean */, value: current.value === 'True' }\r\n }\r\n case 3 /* Name */:\r\n return { type: 5 /* Name */, value: current.value as string }\r\n case 2 /* Symbol */:\r\n switch (current.value) {\r\n case '-':\r\n case '+':\r\n case '~':\r\n return {\r\n type: 6 /* UnaryOperator */,\r\n op: current.value,\r\n right: _parse(tokens, 130),\r\n }\r\n case 'not':\r\n return {\r\n type: 6 /* UnaryOperator */,\r\n op: current.value,\r\n right: _parse(tokens, 50),\r\n }\r\n case '(':\r\n const content: AST[] = []\r\n let isTuple = false\r\n while (tokens[0] && !isSymbol(tokens[0], ')')) {\r\n content.push(_parse(tokens, 0))\r\n if (tokens[0]) {\r\n if (tokens[0] && isSymbol(tokens[0], ',')) {\r\n isTuple = true\r\n tokens.shift()\r\n } else if (!isSymbol(tokens[0], ')')) {\r\n throw new ParserError('parsing error')\r\n }\r\n } else {\r\n throw new ParserError('parsing error')\r\n }\r\n }\r\n if (!tokens[0] || !isSymbol(tokens[0], ')')) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n isTuple = isTuple || content.length === 0\r\n return isTuple ? { type: 10 /* Tuple */, value: content } : content[0]\r\n case '[':\r\n const value: AST[] = []\r\n while (tokens[0] && !isSymbol(tokens[0], ']')) {\r\n value.push(_parse(tokens, 0))\r\n if (tokens[0]) {\r\n if (isSymbol(tokens[0], ',')) {\r\n tokens.shift()\r\n } else if (!isSymbol(tokens[0], ']')) {\r\n throw new ParserError('parsing error')\r\n }\r\n }\r\n }\r\n if (!tokens[0] || !isSymbol(tokens[0], ']')) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n return { type: 4 /* List */, value }\r\n case '{':\r\n const dict: { [key: string]: AST } = {}\r\n while (tokens[0] && !isSymbol(tokens[0], '}')) {\r\n const key = _parse(tokens, 0)\r\n if (\r\n (key.type !== 1 /* String */ && key.type !== 0) /* Number */ ||\r\n !tokens[0] ||\r\n !isSymbol(tokens[0], ':')\r\n ) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n const val = _parse(tokens, 0)\r\n dict[key.value as string] = val\r\n if (isSymbol(tokens[0], ',')) {\r\n tokens.shift()\r\n }\r\n }\r\n if (!tokens.shift()) {\r\n throw new ParserError('parsing error')\r\n }\r\n return { type: 11 /* Dictionary */, value: dict }\r\n default:\r\n throw new ParserError('Token cannot be parsed')\r\n }\r\n default:\r\n throw new ParserError('Token cannot be parsed')\r\n }\r\n}\r\n\r\nfunction parseInfix(left: AST, current: Token, tokens: Token[]): AST {\r\n switch (current.type) {\r\n case 2 /* Symbol */:\r\n if (infixOperators.has(current.value)) {\r\n let right = _parse(tokens, bindingPower(current))\r\n if (current.value === 'and' || current.value === 'or') {\r\n return {\r\n type: 14 /* BooleanOperator */,\r\n op: current.value,\r\n left,\r\n right,\r\n }\r\n } else if (current.value === '.') {\r\n if (right.type === 5 /* Name */) {\r\n return {\r\n type: 15 /* ObjLookup */,\r\n obj: left,\r\n key: right.value as string,\r\n }\r\n } else {\r\n throw new ParserError('invalid obj lookup')\r\n }\r\n }\r\n let op: AST = {\r\n type: 7 /* BinaryOperator */,\r\n op: current.value,\r\n left,\r\n right,\r\n }\r\n while (\r\n chainedOperators.has(current.value) &&\r\n tokens[0] &&\r\n tokens[0].type === 2 /* Symbol */ &&\r\n chainedOperators.has(tokens[0].value)\r\n ) {\r\n const nextToken = tokens.shift()!\r\n op = {\r\n type: 14 /* BooleanOperator */,\r\n op: 'and',\r\n left: op,\r\n right: {\r\n type: 7 /* BinaryOperator */,\r\n op: nextToken.value as any,\r\n left: right,\r\n right: _parse(tokens, bindingPower(nextToken)),\r\n },\r\n }\r\n right = (op as ASTBooleanOperator).right\r\n }\r\n return op\r\n }\r\n switch (current.value) {\r\n case '(':\r\n const args: AST[] = []\r\n const kwargs: { [key: string]: AST } = {}\r\n while (tokens[0] && !isSymbol(tokens[0], ')')) {\r\n const arg = _parse(tokens, 0)\r\n if (arg.type === 9 /* Assignment */) {\r\n kwargs[arg.name.value] = arg.value\r\n } else {\r\n args.push(arg)\r\n }\r\n if (tokens[0] && isSymbol(tokens[0], ',')) {\r\n tokens.shift()\r\n }\r\n }\r\n if (!tokens[0] || !isSymbol(tokens[0], ')')) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n return { type: 8 /* FunctionCall */, fn: left, args, kwargs }\r\n case '=':\r\n if (left.type === 5 /* Name */) {\r\n return {\r\n type: 9 /* Assignment */,\r\n name: left as ASTName,\r\n value: _parse(tokens, 10),\r\n }\r\n }\r\n break\r\n case '[':\r\n const key = _parse(tokens)\r\n if (!tokens[0] || !isSymbol(tokens[0], ']')) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n return {\r\n type: 12 /* Lookup */,\r\n target: left,\r\n key: key,\r\n }\r\n case 'if':\r\n const condition = _parse(tokens)\r\n if (!tokens[0] || !isSymbol(tokens[0], 'else')) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n const ifFalse = _parse(tokens)\r\n return {\r\n type: 13 /* If */,\r\n condition,\r\n ifTrue: left,\r\n ifFalse,\r\n }\r\n default:\r\n break\r\n }\r\n }\r\n throw new ParserError('Token cannot be parsed')\r\n}\r\n\r\nfunction _parse(tokens: Token[], bp: number = 0): AST {\r\n const token = tokens.shift()\r\n // console.log('token', token, tokens)\r\n\r\n if (!token) {\r\n throw new ParserError('Unexpected end of input')\r\n }\r\n let expr = parsePrefix(token, tokens)\r\n while (tokens[0] && bindingPower(tokens[0]) > bp) {\r\n expr = parseInfix(expr, tokens.shift()!, tokens)\r\n }\r\n\r\n // console.log('expr', expr)\r\n\r\n return expr\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Parse function\r\n// -----------------------------------------------------------------------------\r\n\r\nexport function parse(tokens: Token[]): AST {\r\n if (tokens.length) {\r\n return _parse(tokens, 0)\r\n }\r\n throw new ParserError('Missing token')\r\n}\r\n\r\nexport function parseArgs<T extends string[]>(\r\n args: any[],\r\n spec: T,\r\n): Record<T[number], any> {\r\n const last = args[args.length - 1]\r\n const unnamedArgs = typeof last === 'object' ? args.slice(0, -1) : args\r\n const kwargs: Record<string, any> = typeof last === 'object' ? last : {}\r\n for (const [index, val] of unnamedArgs.entries()) {\r\n kwargs[spec[index]] = val\r\n }\r\n return kwargs as Record<T[number], any>\r\n}\r\n","// datetime.ts\r\n\r\nimport { parseArgs } from './py_parser'\r\n\r\n// -----------------------------------------------------------------------------\r\n// Errors\r\n// -----------------------------------------------------------------------------\r\n\r\nexport class AssertionError extends Error {}\r\nexport class ValueError extends Error {}\r\nexport class NotSupportedError extends Error {}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Helpers\r\n// -----------------------------------------------------------------------------\r\n\r\nfunction fmt2(n: number): string {\r\n return String(n).padStart(2, '0')\r\n}\r\n\r\nfunction fmt4(n: number): string {\r\n return String(n).padStart(4, '0')\r\n}\r\n\r\n/**\r\n * Computes (Math.floor(a/b), a%b) and passes that to the callback.\r\n * Returns the callback's result.\r\n */\r\nfunction divmod(\r\n a: number,\r\n b: number,\r\n fn: (quotient: number, remainder: number) => any,\r\n): any {\r\n let mod = a % b\r\n if ((mod > 0 && b < 0) || (mod < 0 && b > 0)) {\r\n mod += b\r\n }\r\n return fn(Math.floor(a / b), mod)\r\n}\r\n\r\nfunction assert(bool: boolean, message: string = 'AssertionError'): void {\r\n if (!bool) {\r\n throw new AssertionError(message)\r\n }\r\n}\r\n\r\nconst DAYS_IN_MONTH: (number | null)[] = [\r\n null,\r\n 31,\r\n 28,\r\n 31,\r\n 30,\r\n 31,\r\n 30,\r\n 31,\r\n 31,\r\n 30,\r\n 31,\r\n 30,\r\n 31,\r\n]\r\nconst DAYS_BEFORE_MONTH: (number | null)[] = [null]\r\n\r\nfor (let dbm = 0, i = 1; i < DAYS_IN_MONTH.length; ++i) {\r\n DAYS_BEFORE_MONTH.push(dbm)\r\n dbm += DAYS_IN_MONTH[i] as number\r\n}\r\n\r\nfunction daysInMonth(year: number, month: number): number {\r\n if (month === 2 && isLeap(year)) {\r\n return 29\r\n }\r\n return DAYS_IN_MONTH[month] as number\r\n}\r\n\r\nfunction isLeap(year: number): boolean {\r\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\r\n}\r\n\r\nfunction daysBeforeYear(year: number): number {\r\n const y = year - 1\r\n return y * 365 + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400)\r\n}\r\n\r\nfunction daysBeforeMonth(year: number, month: number): number {\r\n const postLeapFeb = month > 2 && isLeap(year)\r\n return (DAYS_BEFORE_MONTH[month] as number) + (postLeapFeb ? 1 : 0)\r\n}\r\n\r\nfunction ymd2ord(year: number, month: number, day: number): number {\r\n const dim = daysInMonth(year, month)\r\n if (!(1 <= day && day <= dim)) {\r\n throw new ValueError(`day must be in 1..${dim}`)\r\n }\r\n return daysBeforeYear(year) + daysBeforeMonth(year, month) + day\r\n}\r\n\r\nconst DI400Y = daysBeforeYear(401)\r\nconst DI100Y = daysBeforeYear(101)\r\nconst DI4Y = daysBeforeYear(5)\r\n\r\nfunction ord2ymd(n: number): { year: number; month: number; day: number } {\r\n --n\r\n let n400 = 0,\r\n n100 = 0,\r\n n4 = 0,\r\n n1 = 0,\r\n n0 = 0\r\n divmod(n, DI400Y, (_n400: number, n: number) => {\r\n n400 = _n400\r\n divmod(n, DI100Y, (_n100: number, n: number) => {\r\n n100 = _n100\r\n divmod(n, DI4Y, (_n4: number, n: number) => {\r\n n4 = _n4\r\n divmod(n, 365, (_n1: number, n: number) => {\r\n n1 = _n1\r\n n0 = n\r\n })\r\n })\r\n })\r\n })\r\n\r\n n = n0\r\n const year = n400 * 400 + 1 + n100 * 100 + n4 * 4 + n1\r\n if (n1 === 4 || n100 === 100) {\r\n assert(n0 === 0)\r\n return {\r\n year: year - 1,\r\n month: 12,\r\n day: 31,\r\n }\r\n }\r\n\r\n const leapyear = n1 === 3 && (n4 !== 24 || n100 === 3)\r\n assert(leapyear === isLeap(year))\r\n let month = (n + 50) >> 5\r\n let preceding = DAYS_BEFORE_MONTH[month]! + (month > 2 && leapyear ? 1 : 0)\r\n if (preceding > n) {\r\n --month\r\n preceding -= DAYS_IN_MONTH[month]! + (month === 2 && leapyear ? 1 : 0)\r\n }\r\n n -= preceding\r\n return {\r\n year: year,\r\n month: month,\r\n day: n + 1,\r\n }\r\n}\r\n\r\n/**\r\n * Converts the input into a valid date, applying overflows as needed.\r\n */\r\nfunction tmxxx(\r\n year: number,\r\n month: number,\r\n day: number,\r\n hour: number,\r\n minute: number | 0,\r\n second: number | 0,\r\n microsecond?: number,\r\n): {\r\n year: number\r\n month: number\r\n day: number\r\n hour: number\r\n minute: number\r\n second: number\r\n microsecond: number\r\n} {\r\n hour = hour || 0\r\n minute = minute || 0\r\n second = second || 0\r\n microsecond = microsecond || 0\r\n\r\n if (microsecond < 0 || microsecond > 999999) {\r\n divmod(microsecond, 1000000, (carry: number, ms: number) => {\r\n microsecond = ms\r\n second += carry\r\n })\r\n }\r\n if (second < 0 || second > 59) {\r\n divmod(second, 60, (carry: number, s: number) => {\r\n second = s\r\n minute += carry\r\n })\r\n }\r\n if (minute < 0 || minute > 59) {\r\n divmod(minute, 60, (carry: number, m: number) => {\r\n minute = m\r\n hour += carry\r\n })\r\n }\r\n if (hour < 0 || hour > 23) {\r\n divmod(hour, 24, (carry: number, h: number) => {\r\n hour = h\r\n day += carry\r\n })\r\n }\r\n if (month < 1 || month > 12) {\r\n divmod(month - 1, 12, (carry: number, m: number) => {\r\n month = m + 1\r\n year += carry\r\n })\r\n }\r\n const dim = daysInMonth(year, month)\r\n if (day < 1 || day > dim) {\r\n if (day === 0) {\r\n --month\r\n if (month > 0) {\r\n day = daysInMonth(year, month)\r\n } else {\r\n --year\r\n month = 12\r\n day = 31\r\n }\r\n } else if (day === dim + 1) {\r\n ++month\r\n day = 1\r\n if (month > 12) {\r\n month = 1\r\n ++year\r\n }\r\n } else {\r\n const r = ord2ymd(ymd2ord(year, month, 1) + (day - 1))\r\n year = r.year\r\n month = r.month\r\n day = r.day\r\n }\r\n }\r\n return {\r\n year,\r\n month,\r\n day,\r\n hour,\r\n minute,\r\n second,\r\n microsecond,\r\n }\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Date/Time and related classes\r\n// -----------------------------------------------------------------------------\r\n\r\nexport class PyDate {\r\n static today(): PyDate {\r\n return this.convertDate(new Date())\r\n }\r\n\r\n static convertDate(date: Date): PyDate {\r\n const year = date.getFullYear()\r\n const month = date.getMonth() + 1\r\n const day = date.getDate()\r\n return new PyDate(year, month, day)\r\n }\r\n\r\n constructor(\r\n public year: number,\r\n public month: number, // 1-indexed => 1 = january, 2 = february, ...\r\n public day: number, // 1-indexed => 1 = first day of month, ...\r\n ) {}\r\n\r\n static create(...args: any[]): PyDate {\r\n const { year, month, day } = parseArgs(args, ['year', 'month', 'day'])\r\n return new PyDate(year, month, day)\r\n }\r\n\r\n add(timedelta: PyTimeDelta): PyDate {\r\n const s = tmxxx(this.year, this.month, this.day + timedelta.days, 0, 0, 0)\r\n return new PyDate(s.year, s.month, s.day)\r\n }\r\n\r\n isEqual(other: any): boolean {\r\n if (!(other instanceof PyDate)) {\r\n return false\r\n }\r\n return (\r\n this.year === other.year &&\r\n this.month === other.month &&\r\n this.day === other.day\r\n )\r\n }\r\n\r\n strftime(format: string): string {\r\n return format.replace(/%([A-Za-z])/g, (m: string, c: string) => {\r\n switch (c) {\r\n case 'Y':\r\n return fmt4(this.year)\r\n case 'm':\r\n return fmt2(this.month)\r\n case 'd':\r\n return fmt2(this.day)\r\n default:\r\n throw new ValueError(`No known conversion for ${m}`)\r\n }\r\n })\r\n }\r\n\r\n substract(other: PyTimeDelta | PyDate): PyDate | PyTimeDelta {\r\n if (other instanceof PyTimeDelta) {\r\n return this.add(other.negate())\r\n }\r\n if (other instanceof PyDate) {\r\n return PyTimeDelta.create(this.toordinal() - other.toordinal())\r\n }\r\n throw new NotSupportedError()\r\n }\r\n\r\n toJSON(): string {\r\n return this.strftime('%Y-%m-%d')\r\n }\r\n\r\n toordinal(): number {\r\n return ymd2ord(this.year, this.month, this.day)\r\n }\r\n}\r\n\r\nexport class PyDateTime {\r\n static now(): PyDateTime {\r\n return this.convertDate(new Date())\r\n }\r\n\r\n static convertDate(date: Date): PyDateTime {\r\n const year = date.getFullYear()\r\n const month = date.getMonth() + 1\r\n const day = date.getDate()\r\n const hour = date.getHours()\r\n const minute = date.getMinutes()\r\n const second = date.getSeconds()\r\n return new PyDateTime(year, month, day, hour, minute, second, 0)\r\n }\r\n\r\n static create(...args: any[]): PyDateTime {\r\n const namedArgs = parseArgs(args, [\r\n 'year',\r\n 'month',\r\n 'day',\r\n 'hour',\r\n 'minute',\r\n 'second',\r\n 'microsecond',\r\n ])\r\n const year = namedArgs.year\r\n const month = namedArgs.month\r\n const day = namedArgs.day\r\n const hour = namedArgs.hour || 0\r\n const minute = namedArgs.minute || 0\r\n const second = namedArgs.second || 0\r\n const ms = namedArgs.microsecond / 1000 || 0\r\n return new PyDateTime(year, month, day, hour, minute, second, ms)\r\n }\r\n\r\n static combine(...args: any[]): PyDateTime {\r\n const { date, time } = parseArgs(args, ['date', 'time'])\r\n return PyDateTime.create(\r\n date.year,\r\n date.month,\r\n date.day,\r\n time.hour,\r\n time.minute,\r\n time.second,\r\n )\r\n }\r\n\r\n constructor(\r\n public year: number,\r\n public month: number, // 1-indexed => 1 = january, 2 = february, ...\r\n public day: number, // 1-indexed => 1 = first day of month, ...\r\n public hour: number,\r\n public minute: number,\r\n public second: number,\r\n public microsecond: number,\r\n ) {}\r\n\r\n add(timedelta: PyTimeDelta): PyDateTime {\r\n const s = tmxxx(\r\n this.year,\r\n this.month,\r\n this.day + timedelta.days,\r\n this.hour,\r\n this.minute,\r\n this.second + timedelta.seconds,\r\n this.microsecond + timedelta.microseconds,\r\n )\r\n return new PyDateTime(\r\n s.year,\r\n s.month,\r\n s.day,\r\n s.hour,\r\n s.minute,\r\n s.second,\r\n s.microsecond,\r\n )\r\n }\r\n\r\n isEqual(other: any): boolean {\r\n if (!(other instanceof PyDateTime)) {\r\n return false\r\n }\r\n return (\r\n this.year === other.year &&\r\n this.month === other.month &&\r\n this.day === other.day &&\r\n this.hour === other.hour &&\r\n this.minute === other.minute &&\r\n this.second === other.second &&\r\n this.microsecond === other.microsecond\r\n )\r\n }\r\n\r\n strftime(format: string): string {\r\n return format.replace(/%([A-Za-z])/g, (m: string, c: string) => {\r\n switch (c) {\r\n case 'Y':\r\n return fmt4(this.year)\r\n case 'm':\r\n return fmt2(this.month)\r\n case 'd':\r\n return fmt2(this.day)\r\n case 'H':\r\n return fmt2(this.hour)\r\n case 'M':\r\n return fmt2(this.minute)\r\n case 'S':\r\n return fmt2(this.second)\r\n default:\r\n throw new ValueError(`No known conversion for ${m}`)\r\n }\r\n })\r\n }\r\n\r\n substract(timedelta: PyTimeDelta): PyDateTime {\r\n return this.add(timedelta.negate())\r\n }\r\n\r\n toJSON(): string {\r\n return this.strftime('%Y-%m-%d %H:%M:%S')\r\n }\r\n\r\n to_utc(): PyDateTime {\r\n const d = new Date(\r\n this.year,\r\n this.month - 1,\r\n this.day,\r\n this.hour,\r\n this.minute,\r\n this.second,\r\n )\r\n const timedelta = PyTimeDelta.create({ minutes: d.getTimezoneOffset() })\r\n return this.add(timedelta)\r\n }\r\n}\r\n\r\nexport class PyTime extends PyDate {\r\n static create(...args: any[]): PyTime {\r\n const namedArgs = parseArgs(args, ['hour', 'minute', 'second'])\r\n const hour = namedArgs.hour || 0\r\n const minute = namedArgs.minute || 0\r\n const second = namedArgs.second || 0\r\n return new PyTime(hour, minute, second)\r\n }\r\n\r\n constructor(\r\n public hour: number,\r\n public minute: number,\r\n public second: number,\r\n ) {\r\n const now = new Date()\r\n const year = now.getFullYear()\r\n const month = now.getMonth() + 1\r\n const day = now.getDate()\r\n super(year, month, day)\r\n this.hour = hour\r\n this.minute = minute\r\n this.second = second\r\n }\r\n\r\n strftime(format: string): string {\r\n return format.replace(/%([A-Za-z])/g, (m: string, c: string) => {\r\n switch (c) {\r\n case 'Y':\r\n return fmt4(this.year)\r\n case 'm':\r\n return fmt2(this.month)\r\n case 'd':\r\n return fmt2(this.day)\r\n case 'H':\r\n return fmt2(this.hour)\r\n case 'M':\r\n return fmt2(this.minute)\r\n case 'S':\r\n return fmt2(this.second)\r\n default:\r\n throw new ValueError(`No known conversion for ${m}`)\r\n }\r\n })\r\n }\r\n\r\n toJSON(): string {\r\n return this.strftime('%H:%M:%S')\r\n }\r\n}\r\n\r\nconst DAYS_IN_YEAR: number[] = [\r\n 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 366,\r\n]\r\nconst TIME_PERIODS: string[] = ['hour', 'minute', 'second']\r\nconst PERIODS: string[] = ['year', 'month', 'day', ...TIME_PERIODS]\r\nconst RELATIVE_KEYS: string[] =\r\n 'years months weeks days hours minutes seconds microseconds leapdays'.split(\r\n ' ',\r\n )\r\nconst ABSOLUTE_KEYS: string[] =\r\n 'year month day hour minute second microsecond weekday nlyearday yearday'.split(\r\n ' ',\r\n )\r\nconst argsSpec: string[] = ['dt1', 'dt2']\r\n\r\nexport class PyRelativeDelta {\r\n static create(...args: any[]): PyRelativeDelta {\r\n const params = parseArgs(args, argsSpec)\r\n if ('dt1' in params) {\r\n throw new Error('relativedelta(dt1, dt2) is not supported for now')\r\n }\r\n for (const period of PERIODS) {\r\n if (period in params) {\r\n const val = params[period]\r\n assert(val >= 0, `${period} ${val} is out of range`)\r\n }\r\n }\r\n\r\n for (const key of RELATIVE_KEYS) {\r\n params[key] = params[key] || 0\r\n }\r\n for (const key of ABSOLUTE_KEYS) {\r\n params[key] = key in params ? params[key] : null\r\n }\r\n params.days += 7 * params.weeks\r\n\r\n let yearDay = 0\r\n if (params.nlyearday) {\r\n yearDay = params.nlyearday\r\n } else if (params.yearday) {\r\n yearDay = params.yearday\r\n if (yearDay > 59) {\r\n params.leapDays = -1\r\n }\r\n }\r\n\r\n if (yearDay) {\r\n for (let monthIndex = 0; monthIndex < DAYS_IN_YEAR.length; monthIndex++) {\r\n if (yearDay <= DAYS_IN_YEAR[monthIndex]) {\r\n params.month = monthIndex + 1\r\n if (monthIndex === 0) {\r\n params.day = yearDay\r\n } else {\r\n params.day = yearDay - DAYS_IN_YEAR[monthIndex - 1]\r\n }\r\n break\r\n }\r\n }\r\n }\r\n\r\n return new PyRelativeDelta(params)\r\n }\r\n\r\n static add(\r\n date: PyDateTime | PyDate,\r\n delta: PyRelativeDelta,\r\n ): PyDateTime | PyDate {\r\n if (!(date instanceof PyDate || date instanceof PyDateTime)) {\r\n throw new NotSupportedError()\r\n }\r\n\r\n const s = tmxxx(\r\n (delta.year || date.year) + delta.years,\r\n (delta.month || date.month) + delta.months,\r\n delta.day || date.day,\r\n delta.hour || (date instanceof PyDateTime ? date.hour : 0),\r\n delta.minute || (date instanceof PyDateTime ? date.minute : 0),\r\n delta.second || (date instanceof PyDateTime ? date.second : 0),\r\n delta.microseconds || (date instanceof PyDateTime ? date.microsecond : 0),\r\n )\r\n\r\n const newDateTime = new PyDateTime(\r\n s.year,\r\n s.month,\r\n s.day,\r\n s.hour,\r\n s.minute,\r\n s.second,\r\n s.microsecond,\r\n )\r\n\r\n let leapDays = 0\r\n if (delta.leapDays && newDateTime.month > 2 && isLeap(newDateTime.year)) {\r\n leapDays = delta.leapDays\r\n }\r\n\r\n const temp = newDateTime.add(\r\n PyTimeDelta.create({\r\n days: delta.days + leapDays,\r\n hours: delta.hours,\r\n minutes: delta.minutes,\r\n seconds: delta.seconds,\r\n microseconds: delta.microseconds,\r\n }),\r\n )\r\n\r\n const hasTime = Boolean(\r\n temp.hour || temp.minute || temp.second || temp.microsecond,\r\n )\r\n const returnDate =\r\n !hasTime && date instanceof PyDate\r\n ? new PyDate(temp.year, temp.month, temp.day)\r\n : temp\r\n\r\n if (delta.weekday !== null) {\r\n const wantedDow = delta.weekday + 1 // python: Monday is 0; JS: Monday is 1\r\n const _date = new Date(\r\n returnDate.year,\r\n returnDate.month - 1,\r\n returnDate.day,\r\n )\r\n const days = (7 - _date.getDay() + wantedDow) % 7\r\n return returnDate.add(new PyTimeDelta(days, 0, 0))\r\n }\r\n return returnDate\r\n }\r\n\r\n static substract(\r\n date: PyDateTime | PyDate,\r\n delta: PyRelativeDelta,\r\n ): PyDateTime | PyDate {\r\n return PyRelativeDelta.add(date, delta.negate())\r\n }\r\n\r\n constructor(params: Record<string, any> = {}, sign: 1 | -1 = 1) {\r\n this.years = sign * params.years\r\n this.months = sign * params.months\r\n this.days = sign * params.days\r\n this.hours = sign * params.hours\r\n this.minutes = sign * params.minutes\r\n this.seconds = sign * params.seconds\r\n this.microseconds = sign * params.microseconds\r\n this.leapDays = params.leapDays\r\n this.year = params.year\r\n this.month = params.month\r\n this.day = params.day\r\n this.hour = params.hour\r\n this.minute = params.minute\r\n this.second = params.second\r\n this.microsecond = params.microsecond\r\n this.weekday = params.weekday\r\n }\r\n\r\n years: number\r\n months: number\r\n days: number\r\n hours: number\r\n minutes: number\r\n seconds: number\r\n microseconds: number\r\n leapDays: number | undefined\r\n year: number | null\r\n month: number | null\r\n day: number | null\r\n hour: number | null\r\n minute: number | null\r\n second: number | null\r\n microsecond: number | null\r\n weekday: number | null\r\n\r\n negate(): PyRelativeDelta {\r\n return new PyRelativeDelta(this, -1)\r\n }\r\n\r\n isEqual(): never {\r\n throw new NotSupportedError()\r\n }\r\n}\r\n\r\nconst TIME_DELTA_KEYS: string[] =\r\n 'weeks days hours minutes seconds milliseconds microseconds'.split(' ')\r\n\r\nfunction modf(x: number): [number, number] {\r\n const mod = x % 1\r\n return [mod < 0 ? mod + 1 : mod, Math.floor(x)]\r\n}\r\n\r\nexport class PyTimeDelta {\r\n static create(...args: any[]): PyTimeDelta {\r\n const namedArgs = parseArgs(args, ['days', 'seconds', 'microseconds'])\r\n for (const key of TIME_DELTA_KEYS) {\r\n namedArgs[key] = namedArgs[key] || 0\r\n }\r\n\r\n let d = 0\r\n let s = 0\r\n let us = 0\r\n\r\n const days = namedArgs.days + namedArgs.weeks * 7\r\n let seconds =\r\n namedArgs.seconds + 60 * namedArgs.minutes + 3600 * namedArgs.hours\r\n let microseconds = namedArgs.microseconds + 1000 * namedArgs.milliseconds\r\n\r\n const [dFrac, dInt] = modf(days)\r\n d = dInt\r\n let daysecondsfrac = 0\r\n if (dFrac) {\r\n const [dsFrac, dsInt] = modf(dFrac * 24 * 3600)\r\n s = dsInt\r\n daysecondsfrac = dsFrac\r\n }\r\n\r\n const [sFrac, sInt] = modf(seconds)\r\n seconds = sInt\r\n const secondsfrac = sFrac + daysecondsfrac\r\n\r\n divmod(seconds, 24 * 3600, (days: number, seconds: number) => {\r\n d += days\r\n s += seconds\r\n })\r\n\r\n microseconds += secondsfrac * 1e6\r\n divmod(microseconds, 1000000, (seconds: number, microseconds: number) => {\r\n divmod(seconds, 24 * 3600, (days: number, seconds: number) => {\r\n d += days\r\n s += seconds\r\n us += Math.round(microseconds)\r\n })\r\n })\r\n\r\n return new PyTimeDelta(d, s, us)\r\n }\r\n\r\n constructor(\r\n public days: number,\r\n public seconds: number,\r\n public microseconds: number,\r\n ) {}\r\n\r\n add(other: PyTimeDelta): PyTimeDelta {\r\n return PyTimeDelta.create({\r\n days: this.days + other.days,\r\n seconds: this.seconds + other.seconds,\r\n microseconds: this.microseconds + other.microseconds,\r\n })\r\n }\r\n\r\n divide(n: number): PyTimeDelta {\r\n const us = (this.days * 24 * 3600 + this.seconds) * 1e6 + this.microseconds\r\n return PyTimeDelta.create({ microseconds: Math.floor(us / n) })\r\n }\r\n\r\n isEqual(other: any): boolean {\r\n if (!(other instanceof PyTimeDelta)) {\r\n return false\r\n }\r\n return (\r\n this.days === other.days &&\r\n this.seconds === other.seconds &&\r\n this.microseconds === other.microseconds\r\n )\r\n }\r\n\r\n isTrue(): boolean {\r\n return this.days !== 0 || this.seconds !== 0 || this.microseconds !== 0\r\n }\r\n\r\n multiply(n: number): PyTimeDelta {\r\n return PyTimeDelta.create({\r\n days: n * this.days,\r\n seconds: n * this.seconds,\r\n microseconds: n * this.microseconds,\r\n })\r\n }\r\n\r\n negate(): PyTimeDelta {\r\n return PyTimeDelta.create({\r\n days: -this.days,\r\n seconds: -this.seconds,\r\n microseconds: -this.microseconds,\r\n })\r\n }\r\n\r\n substract(other: PyTimeDelta): PyTimeDelta {\r\n return PyTimeDelta.create({\r\n days: this.days - other.days,\r\n seconds: this.seconds - other.seconds,\r\n microseconds: this.microseconds - other.microseconds,\r\n })\r\n }\r\n\r\n total_seconds(): number {\r\n return this.days * 86400 + this.seconds + this.microseconds / 1000000\r\n }\r\n}\r\n","// py_utils.ts\r\n\r\nimport {\r\n PyDate,\r\n PyDateTime,\r\n PyRelativeDelta,\r\n PyTime,\r\n PyTimeDelta,\r\n} from './py_date'\r\n\r\nexport class EvaluationError extends Error {\r\n constructor(message?: string) {\r\n super(message)\r\n this.name = 'EvaluationError'\r\n }\r\n}\r\n\r\nexport function execOnIterable<T>(\r\n iterable: any,\r\n func: (iterable: Iterable<T>) => any,\r\n): any {\r\n if (iterable === null) {\r\n throw new EvaluationError('value not iterable')\r\n }\r\n if (\r\n typeof iterable === 'object' &&\r\n !Array.isArray(iterable) &&\r\n !(iterable instanceof Set)\r\n ) {\r\n iterable = Object.keys(iterable)\r\n }\r\n if (typeof iterable?.[Symbol.iterator] !== 'function') {\r\n throw new EvaluationError('value not iterable')\r\n }\r\n return func(iterable as Iterable<T>)\r\n}\r\n\r\nexport const BUILTINS = {\r\n /**\r\n * @param {any} value\r\n * @returns {boolean}\r\n */\r\n bool(value: any): boolean {\r\n // console.log('value', value)\r\n\r\n switch (typeof value) {\r\n case 'number':\r\n return value !== 0\r\n case 'string':\r\n return value !== ''\r\n case 'boolean':\r\n return value\r\n case 'object':\r\n if (value === null || value === undefined) {\r\n return false\r\n }\r\n if ('isTrue' in value && typeof value.isTrue === 'function') {\r\n return value.isTrue()\r\n }\r\n if (value instanceof Array) {\r\n return !!value.length\r\n }\r\n if (value instanceof Set) {\r\n return !!value.size\r\n }\r\n return Object.keys(value).length !== 0\r\n default:\r\n return true\r\n }\r\n },\r\n\r\n set<T>(iterable?: Iterable<T>): Set<T> {\r\n if (arguments.length > 2) {\r\n throw new EvaluationError(\r\n `set expected at most 1 argument, got (${arguments.length - 1})`,\r\n )\r\n }\r\n return execOnIterable(\r\n iterable,\r\n (iterable: Iterable<T>) => new Set(iterable),\r\n )\r\n },\r\n\r\n time: {\r\n strftime(format: string): string {\r\n return PyDateTime.now().strftime(format)\r\n },\r\n },\r\n\r\n context_today(): PyDate {\r\n return PyDate.today()\r\n },\r\n\r\n get current_date(): string {\r\n return this.today\r\n },\r\n\r\n get today(): string {\r\n return PyDate.today().strftime('%Y-%m-%d')\r\n },\r\n\r\n get now(): string {\r\n return PyDateTime.now().strftime('%Y-%m-%d %H:%M:%S')\r\n },\r\n\r\n datetime: {\r\n time: PyTime,\r\n timedelta: PyTimeDelta,\r\n datetime: PyDateTime,\r\n date: PyDate,\r\n },\r\n\r\n relativedelta: PyRelativeDelta,\r\n\r\n true: true,\r\n false: false,\r\n}\r\n","// py_utils.ts\r\n\r\nimport { PyDate, PyDateTime } from './py_date'\r\nimport { AST, bp } from './py_parser'\r\n\r\n// -----------------------------------------------------------------------------\r\n// Utils\r\n// -----------------------------------------------------------------------------\r\n\r\nexport function toPyValue(value: any): AST {\r\n switch (typeof value) {\r\n case 'string':\r\n return { type: 1 /* String */, value }\r\n case 'number':\r\n return { type: 0 /* Number */, value }\r\n case 'boolean':\r\n return { type: 2 /* Boolean */, value }\r\n case 'object':\r\n if (Array.isArray(value)) {\r\n return { type: 4 /* List */, value: value.map(toPyValue) }\r\n } else if (value === null) {\r\n return { type: 3 /* None */ }\r\n } else if (value instanceof Date) {\r\n return {\r\n type: 1 /* String */,\r\n value: String(PyDateTime.convertDate(value)),\r\n }\r\n } else if (value instanceof PyDate || value instanceof PyDateTime) {\r\n return { type: 1 /* String */, value: value as any }\r\n } else {\r\n const content: { [key: string]: AST } = {}\r\n for (const key in value) {\r\n content[key] = toPyValue(value[key])\r\n }\r\n return { type: 11 /* Dictionary */, value: content }\r\n }\r\n default:\r\n throw new Error('Invalid type')\r\n }\r\n}\r\n\r\nexport function formatAST(ast: AST, lbp: number = 0): string {\r\n switch (ast.type) {\r\n case 3 /* None */:\r\n return 'None'\r\n case 1 /* String */:\r\n return JSON.stringify(ast.value)\r\n case 0 /* Number */:\r\n return String(ast.value)\r\n case 2 /* Boolean */:\r\n return ast.value ? 'True' : 'False'\r\n case 4 /* List */:\r\n return `[${ast.value.map(formatAST).join(', ')}]`\r\n case 6 /* UnaryOperator */:\r\n if (ast.op === 'not') {\r\n return `not ${formatAST(ast.right, 50)}`\r\n }\r\n return `${ast.op}${formatAST(ast.right, 130)}`\r\n case 7 /* BinaryOperator */:\r\n const abp = bp(ast.op)\r\n const binaryStr = `${formatAST(ast.left, abp)} ${ast.op} ${formatAST(ast.right, abp)}`\r\n return abp < lbp ? `(${binaryStr})` : binaryStr\r\n case 11 /* Dictionary */:\r\n const pairs: string[] = []\r\n for (const k in ast.value) {\r\n pairs.push(`\"${k}\": ${formatAST(ast.value[k])}`)\r\n }\r\n return `{${pairs.join(', ')}}`\r\n case 10 /* Tuple */:\r\n return `(${ast.value.map(formatAST).join(', ')})`\r\n case 5 /* Name */:\r\n return ast.value\r\n case 12 /* Lookup */:\r\n return `${formatAST(ast.target)}[${formatAST(ast.key)}]`\r\n case 13 /* If */:\r\n const { ifTrue, condition, ifFalse } = ast\r\n return `${formatAST(ifTrue)} if ${formatAST(condition)} else ${formatAST(ifFalse)}`\r\n case 14 /* BooleanOperator */:\r\n const boolAbp = bp(ast.op)\r\n const boolStr = `${formatAST(ast.left, boolAbp)} ${ast.op} ${formatAST(ast.right, boolAbp)}`\r\n return boolAbp < lbp ? `(${boolStr})` : boolStr\r\n case 15 /* ObjLookup */:\r\n return `${formatAST(ast.obj, 150)}.${ast.key}`\r\n case 8 /* FunctionCall */:\r\n const args = ast.args.map(formatAST)\r\n const kwargs: string[] = []\r\n for (const kwarg in ast.kwargs) {\r\n kwargs.push(`${kwarg} = ${formatAST(ast.kwargs[kwarg])}`)\r\n }\r\n const argStr = args.concat(kwargs).join(', ')\r\n return `${formatAST(ast.fn)}(${argStr})`\r\n default:\r\n throw new Error('invalid expression: ' + JSON.stringify(ast))\r\n }\r\n}\r\n\r\nexport const PY_DICT = Object.create(null)\r\n\r\nexport function toPyDict(obj: Record<string, any>): any {\r\n return new Proxy(obj, {\r\n getPrototypeOf() {\r\n return PY_DICT\r\n },\r\n })\r\n}\r\n","// py_evaluate.ts\r\n\r\n// Giả lập các import từ các file khác\r\nimport { BUILTINS, EvaluationError, execOnIterable } from './py_builtin'\r\nimport {\r\n NotSupportedError,\r\n PyDate,\r\n PyDateTime,\r\n PyRelativeDelta,\r\n PyTime,\r\n PyTimeDelta,\r\n} from './py_date'\r\nimport { parseArgs } from './py_parser'\r\nimport { PY_DICT, toPyDict } from './py_utils'\r\n\r\n// -----------------------------------------------------------------------------\r\n// Types\r\n// -----------------------------------------------------------------------------\r\n\r\nexport interface AST {\r\n type: number\r\n value?: any\r\n op?: string\r\n left?: AST\r\n right?: AST\r\n fn?: AST\r\n args?: AST[]\r\n kwargs?: Record<string, AST>\r\n target?: AST\r\n key?: AST | string\r\n condition?: AST\r\n ifTrue?: AST\r\n ifFalse?: AST\r\n obj?: AST\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Constants and helpers\r\n// -----------------------------------------------------------------------------\r\n\r\nconst isTrue: (value: any) => boolean = BUILTINS.bool\r\n\r\nfunction applyUnaryOp(ast: AST, context: any): any {\r\n const value = evaluate(ast.right!, context)\r\n switch (ast.op) {\r\n case '-':\r\n if (value instanceof Object && 'negate' in value) {\r\n return (value as PyTimeDelta | PyRelativeDelta).negate()\r\n }\r\n return -value\r\n case '+':\r\n return value\r\n case 'not':\r\n return !isTrue(value)\r\n default:\r\n throw new EvaluationError(`Unknown unary operator: ${ast.op}`)\r\n }\r\n}\r\n\r\nfunction pytypeIndex(val: any): number {\r\n switch (typeof val) {\r\n case 'object':\r\n return val === null ? 1 : Array.isArray(val) ? 5 : 3\r\n case 'number':\r\n return 2\r\n case 'string':\r\n return 4\r\n default:\r\n throw new EvaluationError(`Unknown type: ${typeof val}`)\r\n }\r\n}\r\n\r\nfunction isConstructor(obj: any): boolean {\r\n return !!obj.prototype && !!obj.prototype.constructor.name\r\n}\r\n\r\nfunction isLess(left: any, right: any): boolean {\r\n if (typeof left === 'number' && typeof right === 'number') {\r\n return left < right\r\n }\r\n if (typeof left === 'boolean') {\r\n left = left ? 1 : 0\r\n }\r\n if (typeof right === 'boolean') {\r\n right = right ? 1 : 0\r\n }\r\n const leftIndex = pytypeIndex(left)\r\n const rightIndex = pytypeIndex(right)\r\n if (leftIndex === rightIndex) {\r\n return left < right\r\n }\r\n return leftIndex < rightIndex\r\n}\r\n\r\nfunction isEqual(left: any, right: any): boolean {\r\n if (typeof left !== typeof right) {\r\n if (typeof left === 'boolean' && typeof right === 'number') {\r\n return right === (left ? 1 : 0)\r\n }\r\n if (typeof left === 'number' && typeof right === 'boolean') {\r\n return left === (right ? 1 : 0)\r\n }\r\n return false\r\n }\r\n if (left instanceof Object && 'isEqual' in left) {\r\n return (left as PyDate | PyDateTime | PyTimeDelta).isEqual(right)\r\n }\r\n return left === right\r\n}\r\n\r\nfunction isIn(left: any, right: any): boolean {\r\n if (Array.isArray(right)) {\r\n return right.includes(left)\r\n }\r\n if (typeof right === 'string' && typeof left === 'string') {\r\n return right.includes(left)\r\n }\r\n if (typeof right === 'object') {\r\n return left in right\r\n }\r\n return false\r\n}\r\n\r\nfunction applyBinaryOp(ast: AST, context: any): any {\r\n const left = evaluate(ast.left!, context)\r\n const right = evaluate(ast.right!, context)\r\n // console.log(\"left\", left, ast.left)\r\n // console.log(\"right\", right, ast.right)\r\n switch (ast.op) {\r\n case '+': {\r\n const relativeDeltaOnLeft = left instanceof PyRelativeDelta\r\n const relativeDeltaOnRight = right instanceof PyRelativeDelta\r\n if (relativeDeltaOnLeft || relativeDeltaOnRight) {\r\n const date = relativeDeltaOnLeft ? right : left\r\n const delta = relativeDeltaOnLeft ? left : right\r\n return PyRelativeDelta.add(date, delta)\r\n }\r\n\r\n const timeDeltaOnLeft = left instanceof PyTimeDelta\r\n const timeDeltaOnRight = right instanceof PyTimeDelta\r\n if (timeDeltaOnLeft && timeDeltaOnRight) {\r\n return left.add(right)\r\n }\r\n if (timeDeltaOnLeft) {\r\n if (right instanceof PyDate || right instanceof PyDateTime) {\r\n return right.add(left)\r\n } else {\r\n throw new NotSupportedError()\r\n }\r\n }\r\n if (timeDeltaOnRight) {\r\n if (left instanceof PyDate || left instanceof PyDateTime) {\r\n return left.add(right)\r\n } else {\r\n throw new NotSupportedError()\r\n }\r\n }\r\n if (left instanceof Array && right instanceof Array) {\r\n return [...left, ...right]\r\n }\r\n return left + right\r\n }\r\n case '-': {\r\n const isRightDelta = right instanceof PyRelativeDelta\r\n if (isRightDelta) {\r\n return PyRelativeDelta.substract(left, right)\r\n }\r\n\r\n const timeDeltaOnRight = right instanceof PyTimeDelta\r\n if (timeDeltaOnRight) {\r\n if (left instanceof PyTimeDelta) {\r\n return left.substract(right)\r\n } else if (left instanceof PyDate || left instanceof PyDateTime) {\r\n return left.substract(right)\r\n } else {\r\n throw new NotSupportedError()\r\n }\r\n }\r\n\r\n if (left instanceof PyDate) {\r\n return left.substract(right)\r\n }\r\n return left - right\r\n }\r\n case '*': {\r\n const timeDeltaOnLeft = left instanceof PyTimeDelta\r\n const timeDeltaOnRight = right instanceof PyTimeDelta\r\n if (timeDeltaOnLeft || timeDeltaOnRight) {\r\n const number = timeDeltaOnLeft ? right : left\r\n const delta = timeDeltaOnLeft ? left : right\r\n return delta.multiply(number)\r\n }\r\n return left * right\r\n }\r\n case '/':\r\n return left / right\r\n case '%':\r\n return left % right\r\n case '//':\r\n if (left instanceof PyTimeDelta) {\r\n return left.divide(right)\r\n }\r\n return Math.floor(left / right)\r\n case '**':\r\n return left ** right\r\n case '==':\r\n return isEqual(left, right)\r\n case '<>':\r\n case '!=':\r\n return !isEqual(left, right)\r\n case '<':\r\n return isLess(left, right)\r\n case '>':\r\n return isLess(right, left)\r\n case '>=':\r\n return isEqual(left, right) || isLess(right, left)\r\n case '<=':\r\n return isEqual(left, right) || isLess(left, right)\r\n case 'in':\r\n return isIn(left, right)\r\n case 'not in':\r\n return !isIn(left, right)\r\n default:\r\n throw new EvaluationError(`Unknown binary operator: ${ast.op}`)\r\n }\r\n}\r\ninterface DictType {\r\n [key: string]: any\r\n get(key: string, defValue?: any): any\r\n}\r\nconst DICT = {\r\n get(...args: any[]): any {\r\n // console.log(\"get from dict\", args)\r\n // console.log(\"get from dict\", this)\r\n\r\n const { key, defValue } = parseArgs(args, ['key', 'defValue'])\r\n const self = this as DictType\r\n\r\n if (key in self) {\r\n return self[key]\r\n } else if (defValue !== undefined) {\r\n return defValue\r\n }\r\n return null\r\n },\r\n}\r\n\r\nconst STRING = {\r\n lower(this: string): string {\r\n return this.toLowerCase()\r\n },\r\n upper(this: string): string {\r\n return this.toUpperCase()\r\n },\r\n}\r\n\r\nfunction applyFunc(\r\n key: string,\r\n func: (iterable: Iterable<any>) => Set<any>,\r\n set: Set<any>,\r\n ...args: any[]\r\n): Set<any> {\r\n if (args.length === 1) {\r\n return new Set(set)\r\n }\r\n if (args.length > 2) {\r\n throw new EvaluationError(\r\n `${key}: py_js supports at most 1 argument, got (${args.length - 1})`,\r\n )\r\n }\r\n return execOnIterable(args[0], func)\r\n}\r\n\r\nconst SET = {\r\n intersection(this: Set<any>, ...args: any[]): Set<any> {\r\n return applyFunc(\r\n 'intersection',\r\n (iterable: Iterable<any>) => {\r\n const intersection = new Set()\r\n for (const i of iterable) {\r\n if (this.has(i)) {\r\n intersection.add(i)\r\n }\r\n }\r\n return intersection\r\n },\r\n this,\r\n ...args,\r\n )\r\n },\r\n difference(this: Set<any>, ...args: any[]): Set<any> {\r\n return applyFunc(\r\n 'difference',\r\n (iterable: Iterable<any>) => {\r\n iterable = new Set(iterable)\r\n const difference = new Set()\r\n for (const e of this) {\r\n if (!(iterable as Set<any>).has(e)) {\r\n difference.add(e)\r\n }\r\n }\r\n return difference\r\n },\r\n this,\r\n ...args,\r\n )\r\n },\r\n union(this: Set<any>, ...args: any[]): Set<any> {\r\n return applyFunc(\r\n 'union',\r\n (iterable: Iterable<any>) => {\r\n return new Set([...this, ...iterable])\r\n },\r\n this,\r\n ...args,\r\n )\r\n },\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Evaluate function\r\n// -----------------------------------------------------------------------------\r\n\r\nfunction methods(_class: any): Function[] {\r\n return Object.getOwnPropertyNames(_class.prototype).map(\r\n (prop) => _class.prototype[prop],\r\n )\r\n}\r\n\r\nconst allowedFns = new Set<Function>([\r\n BUILTINS.time.strftime,\r\n BUILTINS.set,\r\n BUILTINS.bool,\r\n BUILTINS.context_today,\r\n BUILTINS.datetime.datetime.now,\r\n BUILTINS.datetime.datetime.combine,\r\n BUILTINS.datetime.date.today,\r\n ...methods(BUILTINS.relativedelta),\r\n ...Object.values(BUILTINS.datetime).flatMap((obj: any) => methods(obj)),\r\n ...Object.values(SET),\r\n ...Object.values(DICT),\r\n ...Object.values(STRING),\r\n])\r\n\r\nconst unboundFn = Symbol('unbound function')\r\n\r\nexport function evaluate(ast: AST, context: any = {}): any {\r\n const dicts = new Set<any>()\r\n let pyContext: any\r\n // console.log(\"context\", context)\r\n const evalContext = Object.create(context)\r\n if (!evalContext?.context) {\r\n Object.defineProperty(evalContext, 'context', {\r\n get() {\r\n if (!pyContext) {\r\n pyContext = toPyDict(context)\r\n }\r\n return pyContext\r\n },\r\n })\r\n }\r\n // console.log('evalContext', ast, context, evalContext)\r\n\r\n function _innerEvaluate(ast: AST): any {\r\n switch (ast?.type) {\r\n case 0: // Number\r\n case 1: // String\r\n return ast.value\r\n case 5: // Name\r\n if (ast.value in evalContext) {\r\n if (\r\n typeof evalContext[ast.value] === 'object' &&\r\n evalContext[ast.value]?.id\r\n ) {\r\n return evalContext[ast.value]?.id\r\n }\r\n return evalContext[ast.value] ?? false\r\n } else if (ast.value in BUILTINS) {\r\n return BUILTINS[ast.value as never]\r\n } else {\r\n return false\r\n // throw new EvaluationError(`Name '${ast.value}' is not defined`)\r\n }\r\n\r\n case 3: // None\r\n return null\r\n case 2: // Boolean\r\n return ast.value\r\n case 6: // UnaryOperator\r\n return applyUnaryOp(ast, evalContext)\r\n case 7: // BinaryOperator\r\n return applyBinaryOp(ast, evalContext)\r\n case 14: // BooleanOperator\r\n const left = _evaluate(ast.left!)\r\n if (ast.op === 'and') {\r\n return isTrue(left) ? _evaluate(ast.right!) : left\r\n } else {\r\n return isTrue(left) ? left : _evaluate(ast.right!)\r\n }\r\n case 4: // List\r\n case 10: // Tuple\r\n return ast.value.map(_evaluate)\r\n case 11: // Dictionary\r\n const dict: any = {}\r\n for (const key in ast.value) {\r\n dict[key] = _evaluate(ast.value[key])\r\n }\r\n dicts.add(dict)\r\n return dict\r\n case 8: // FunctionCall\r\n const fnValue = _evaluate(ast.fn!)\r\n const args = ast.args!.map(_evaluate)\r\n const kwargs: any = {}\r\n for (const kwarg in ast.kwargs) {\r\n kwargs[kwarg] = _evaluate(ast?.kwargs[kwarg])\r\n }\r\n if (\r\n fnValue === PyDate ||\r\n fnValue === PyDateTime ||\r\n fnValue === PyTime ||\r\n fnValue === PyRelativeDelta ||\r\n fnValue === PyTimeDelta\r\n ) {\r\n return fnValue.create(...args, kwargs)\r\n }\r\n return fnValue(...args, kwargs)\r\n case 12: // Lookup\r\n const dictVal = _evaluate(ast.target!)\r\n const key = _evaluate(ast.key! as AST)\r\n return dictVal[key]\r\n case 13: // If\r\n if (isTrue(_evaluate(ast.condition!))) {\r\n return _evaluate(ast.ifTrue!)\r\n } else {\r\n return _evaluate(ast.ifFalse!)\r\n }\r\n case 15: // ObjLookup\r\n let leftVal = _evaluate(ast.obj!)\r\n let result: any\r\n if (dicts.has(leftVal) || Object.isPrototypeOf.call(PY_DICT, leftVal)) {\r\n result = DICT[ast.key as keyof typeof DICT]\r\n } else if (typeof leftVal === 'string') {\r\n result = STRING[ast.key as keyof typeof STRING]\r\n } else if (leftVal instanceof Set) {\r\n result = SET[ast.key as keyof typeof SET]\r\n } else if (ast.key === 'get' && typeof leftVal === 'object') {\r\n result = DICT[ast.key as keyof typeof DICT]\r\n leftVal = toPyDict(leftVal)\r\n } else {\r\n result = leftVal[ast.key as string]\r\n }\r\n if (typeof result === 'function') {\r\n const bound = result.bind(leftVal)\r\n ;(bound as any)[unboundFn] = result\r\n // console.log(\"bound 15\", bound)\r\n\r\n return bound\r\n // if (!isConstructor(result)) {\r\n // }\r\n }\r\n return result\r\n default:\r\n throw new EvaluationError(`AST of type ${ast.type} cannot be evaluated`)\r\n }\r\n }\r\n\r\n function _evaluate(ast: AST): any {\r\n const val = _innerEvaluate(ast)\r\n if (\r\n typeof val === 'function' &&\r\n !allowedFns.has(val) &&\r\n !allowedFns.has((val as any)[unboundFn])\r\n ) {\r\n throw new Error('Invalid Function Call')\r\n }\r\n return val\r\n }\r\n return _evaluate(ast)\r\n}\r\n","// src/utils/py.ts\r\n\r\n// Import từ các module phụ trợ\r\nimport { evaluate } from './py_interpreter'\r\nimport { AST, parse } from './py_parser'\r\nimport { tokenize } from './py_tokenizer'\r\n\r\n// Export lại các hàm từ module phụ trợ\r\nexport { evaluate } from './py_interpreter'\r\nexport { parse } from './py_parser'\r\nexport { tokenize } from './py_tokenizer'\r\nexport { formatAST } from './py_utils'\r\n\r\n// Định nghĩa kiểu dữ liệu từ các module phụ trợ\r\nexport type { AST } from './py_parser'\r\nexport type { Token } from './py_tokenizer'\r\n\r\n/**\r\n * Parses an expression into a valid AST representation\r\n *\r\n * @param expr - Chuỗi biểu thức cần parse\r\n * @returns AST - Cây cú pháp trừu tượng\r\n */\r\nexport function parseExpr(expr: string): AST {\r\n const tokens = tokenize(expr)\r\n return parse(tokens)\r\n}\r\n\r\n/**\r\n * Evaluates a python expression\r\n *\r\n * @param expr - Chuỗi biểu thức Python\r\n * @param context - Context để đánh giá (mặc định là rỗng)\r\n * @returns Kết quả đánh giá\r\n * @throws EvalError nếu không thể parse hoặc evaluate\r\n */\r\nexport function evaluateExpr(\r\n expr: string,\r\n context: { [key: string]: any } = {},\r\n): any {\r\n let ast: AST\r\n try {\r\n ast = parseExpr(expr)\r\n // console.log('parseExpr', ast, expr)\r\n } catch (error) {\r\n // console.log('error11', error)\r\n\r\n throw new EvalError(\r\n `Can not parse python expression: (${expr})\\nError: ${(error as Error).message}`,\r\n )\r\n }\r\n try {\r\n // console.log('evaluate', expr)\r\n\r\n return evaluate(ast, context)\r\n } catch (error) {\r\n // console.log('error2222', error)\r\n throw new EvalError(\r\n `Can not evaluate python expression: (${expr})\\nError: ${(error as Error).message}`,\r\n )\r\n }\r\n}\r\n\r\n/**\r\n * Evaluates a python expression to return a boolean.\r\n *\r\n * @param expr - Chuỗi biểu thức Python\r\n * @param context - Context để đánh giá (mặc định là rỗng)\r\n * @returns Giá trị boolean\r\n */\r\nexport function evaluateBooleanExpr(\r\n expr: string,\r\n context: { [key: string]: any } = {},\r\n): boolean {\r\n if (!expr || expr === 'False' || expr === '0') {\r\n return false\r\n }\r\n if (expr === 'True' || expr === '1') {\r\n return true\r\n }\r\n return evaluateExpr(`bool(${expr})`, context)\r\n}\r\n","// src/utils/context.ts\r\n\r\n// Định nghĩa các kiểu dữ liệu\r\ninterface Context {\r\n [key: string]: any\r\n}\r\n\r\ntype ContextDescription = Context | string | undefined\r\n\r\n// Import từ các module phụ trợ\r\nimport { evaluateExpr, parseExpr } from './py'\r\nimport { evaluate } from './py_interpreter'\r\n\r\n/**\r\n * Create an evaluated context from an arbitrary list of context representations.\r\n * The evaluated context in construction is used along the way to evaluate further parts.\r\n *\r\n * @param contexts - Danh sách các context representations\r\n * @param initialEvaluationContext - Context ban đầu để bắt đầu đánh giá (tùy chọn)\r\n * @returns Context đã được đánh giá\r\n */\r\nexport function makeContext(\r\n contexts: ContextDescription[],\r\n initialEvaluationContext?: Context,\r\n): Context {\r\n const evaluationContext: Context = Object.assign({}, initialEvaluationContext)\r\n const context: Context = {}\r\n\r\n for (let ctx of contexts) {\r\n if (ctx !== '') {\r\n ctx =\r\n typeof ctx === 'string'\r\n ? evaluateExpr(ctx, evaluationContext)\r\n : ctx || {}\r\n Object.assign(context, ctx)\r\n Object.assign(evaluationContext, context) // Hành vi này có thực sự mong muốn không?\r\n }\r\n }\r\n\r\n return context\r\n}\r\n\r\n/**\r\n * Allow to evaluate a context with an incomplete evaluation context. The evaluated context only\r\n * contains keys whose values are static or can be evaluated with the given evaluation context.\r\n *\r\n * @param context - Chuỗi context cần đánh giá\r\n * @param evaluationContext - Context dùng để đánh giá (mặc định là rỗng)\r\n * @returns Context đã được đánh giá một phần\r\n */\r\nexport function evalPartialContext(\r\n _context: string,\r\n evaluationContext: Context = {},\r\n): Context {\r\n const ast: any = parseExpr(_context)\r\n const context: Context = {}\r\n\r\n for (const key in ast.value) {\r\n const value = ast.value[key]\r\n try {\r\n context[key] = evaluate(value, evaluationContext)\r\n } catch {\r\n // Bỏ qua key này nếu không thể đánh giá giá trị của nó\r\n }\r\n }\r\n\r\n return context\r\n}\r\n","/** @odoo-module **/\r\n\r\n/**\r\n * Shallow compares two objects.\r\n *\r\n * @template T\r\n * @param {T} obj1\r\n * @param {T} obj2\r\n * @param {(a: T[keyof T], b: T[keyof T]) => boolean} [comparisonFn]\r\n */\r\nexport function shallowEqual<T>(\r\n obj1: T,\r\n obj2: T,\r\n comparisonFn: (a: T[keyof T], b: T[keyof T]) => boolean = (a, b) => a === b,\r\n): boolean {\r\n if (!obj1 || !obj2 || typeof obj1 !== 'object' || typeof obj2 !== 'object') {\r\n return obj1 === obj2\r\n }\r\n const obj1Keys = Object.keys(obj1) as Array<keyof T>\r\n return (\r\n obj1Keys.length === Object.keys(obj2).length &&\r\n obj1Keys.every((key) => comparisonFn(obj1[key], obj2[key]))\r\n )\r\n}\r\n\r\n/**\r\n * Deeply compares two objects.\r\n *\r\n * @template T\r\n * @param {T} obj1\r\n * @param {T} obj2\r\n */\r\nexport const deepEqual = <T>(obj1: T, obj2: T): boolean =>\r\n shallowEqual(obj1, obj2, deepEqual)\r\n\r\n/**\r\n * Deep copies an object. As it relies on JSON this function has some limitations:\r\n * - No support for circular objects\r\n * - No support for specific classes, which will at best be lost and at worst crash (Map, Set, etc.)\r\n *\r\n * @template T\r\n * @param {T} obj An object that is fully JSON stringifiable\r\n * @return {T}\r\n */\r\nexport function deepCopy<T>(obj: T): T {\r\n return JSON.parse(JSON.stringify(obj))\r\n}\r\n\r\n/**\r\n * Returns a shallow copy of an object with specified properties removed.\r\n *\r\n * @template T\r\n * @template K extends keyof T\r\n * @param {T} object\r\n * @param {K[]} properties\r\n * @returns {Omit<T, K>}\r\n */\r\nexport function omit<T, K extends keyof T>(\r\n object: T,\r\n ...properties: K[]\r\n): Omit<T, K> {\r\n const result = {} as Omit<T, K>\r\n const propertiesSet = new Set(properties)\r\n\r\n for (const key in object) {\r\n if (!propertiesSet.has(key as unknown as K)) {\r\n ;(result as T)[key] = object[key] // Explicitly cast result\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Picks specified properties from an object.\r\n *\r\n * @template T\r\n * @template K extends keyof T\r\n * @param {T} object\r\n * @param {K[]} properties\r\n * @returns {Pick<T, K>}\r\n */\r\nexport function pick<T extends object, K extends keyof T>(\r\n object: T,\r\n ...properties: K[]\r\n): Pick<T, K> {\r\n return Object.fromEntries(\r\n properties\r\n .filter((prop) => prop in object)\r\n .map((prop) => [prop, object[prop]]),\r\n ) as Pick<T, K>\r\n}\r\n","/** @odoo-module **/\r\n\r\nimport { shallowEqual as _shallowEqual } from './objects'\r\n\r\n/**\r\n * Same values returned as those returned by cartesian function for case n = 0\r\n * and n > 1. For n = 1, brackets are put around the unique parameter elements.\r\n */\r\nfunction _cartesian<T>(...args: T[][]): (T | undefined)[][] {\r\n if (args.length === 0) {\r\n return [[undefined]]\r\n }\r\n const firstArray = args[0].map((elem) => [elem])\r\n if (args.length === 1) {\r\n return firstArray\r\n }\r\n const productOfOtherArrays = _cartesian(...args.slice(1))\r\n return firstArray.flatMap((elem) =>\r\n productOfOtherArrays.map((tuple) => [...elem, ...tuple]),\r\n )\r\n}\r\n\r\nfunction _getExtractorFrom<T>(\r\n criterion?: string | ((element: T) => any),\r\n): (element: T) => any {\r\n if (criterion) {\r\n switch (typeof criterion) {\r\n case 'string':\r\n return (element: T) => (element as any)[criterion]\r\n case 'function':\r\n return criterion\r\n default:\r\n throw new Error(\r\n `Expected criterion of type 'string' or 'function' and got '${typeof criterion}'`,\r\n )\r\n }\r\n } else {\r\n return (element: T) => element\r\n }\r\n}\r\n\r\nexport function ensureArray<T>(value: T | Iterable<T>): T[] {\r\n return value &&\r\n typeof value === 'object' &&\r\n typeof (value as any)[Symbol.iterator] === 'function'\r\n ? [...(value as Iterable<T>)]\r\n : [value as T]\r\n}\r\n\r\nexport function intersection<T>(array1: T[], array2: T[]): T[] {\r\n return array1.filter((v) => array2.includes(v))\r\n}\r\n\r\nexport function groupBy<T>(\r\n array: T[],\r\n criterion?: string | ((element: T) => any),\r\n): Record<string, T[]> {\r\n const extract = _getExtractorFrom(criterion)\r\n const groups: Record<string, T[]> = {}\r\n for (const element of array) {\r\n const group = String(extract(element))\r\n if (!(group in groups)) {\r\n groups[group] = []\r\n }\r\n groups[group].push(element)\r\n }\r\n return groups\r\n}\r\n\r\nexport function sortBy<T>(\r\n array: T[],\r\n criterion?: string | ((element: T) => any),\r\n order: 'asc' | 'desc' = 'asc',\r\n): T[] {\r\n const extract = _getExtractorFrom(criterion)\r\n return [...array].sort((elA, elB) => {\r\n const a = extract(elA)\r\n const b = extract(elB)\r\n const result = isNaN(a) && isNaN(b) ? (a > b ? 1 : a < b ? -1 : 0) : a - b\r\n return order === 'asc' ? result : -result\r\n })\r\n}\r\n\r\nexport function symmetricalDifference<T>(arrayA: T[], arrayB: T[]): T[] {\r\n return arrayA\r\n .filter((id) => !arrayB.includes(id))\r\n .concat(arrayB.filter((id) => !arrayA.includes(id)))\r\n}\r\n\r\nexport function cartesian<T>(...args: T[][]): (T | undefined)[][] {\r\n if (args.length === 0) {\r\n return [[undefined]]\r\n } else if (args.length === 1) {\r\n return args[0].map((elem) => [elem])\r\n } else {\r\n return _cartesian(...args)\r\n }\r\n}\r\n\r\nexport const shallowEqual = _shallowEqual\r\n\r\nexport function sections<T>(array: T[]): T[][] {\r\n return Array.from({ length: array.length + 1 }, (_, i) => array.slice(0, i))\r\n}\r\n\r\nexport function unique<T>(array: T[]): T[] {\r\n return Array.from(new Set(array))\r\n}\r\n\r\nexport function zip<T1, T2>(\r\n array1: T1[],\r\n array2: T2[],\r\n fill = false,\r\n): [T1 | undefined, T2 | undefined][] {\r\n const length = fill\r\n ? Math.max(array1.length, array2.length)\r\n : Math.min(array1.length, array2.length)\r\n return Array.from({ length }, (_, i) => [array1[i], array2[i]])\r\n}\r\n\r\nexport function zipWith<T1, T2, T>(\r\n array1: T1[],\r\n array2: T2[],\r\n func: (e1: T1, e2: T2) => T,\r\n): T[] {\r\n return zip(array1, array2).map(([e1, e2]) => func(e1 as T1, e2 as T2))\r\n}\r\n","/* eslint-disable no-useless-escape */\r\n/* eslint-disable no-control-regex */\r\n// markup.ts\r\n\r\nexport const nbsp: string = '\\u00a0'\r\n\r\nexport const escapeMethod: unique symbol = Symbol('html')\r\n\r\nexport function escape(\r\n str?: string | number | { [escapeMethod]: () => string },\r\n): string {\r\n if (typeof str === 'object' && str && escapeMethod in str) {\r\n return str[escapeMethod]()\r\n } else {\r\n if (str === undefined) {\r\n return ''\r\n }\r\n if (typeof str === 'number') {\r\n return String(str)\r\n }\r\n let result = String(str)\r\n ;[\r\n ['&', '&amp;'],\r\n ['<', '&lt;'],\r\n ['>', '&gt;'],\r\n [\"'\", '&#x27;'],\r\n ['\"', '&quot;'],\r\n ['`', '&#x60;'],\r\n ].forEach(([char, replacement]) => {\r\n result = result.replaceAll(char, replacement)\r\n })\r\n return result\r\n }\r\n}\r\n\r\nexport function escapeRegExp(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\r\n}\r\n\r\nexport function intersperse(\r\n str: string,\r\n indices: number[],\r\n separator: string = '',\r\n): string {\r\n const result: string[] = []\r\n let last = str.length\r\n for (let i = 0; i < indices.length; ++i) {\r\n const section = indices[i]\r\n if (section === -1 || last <= 0) {\r\n break\r\n } else if (section === 0 && i === 0) {\r\n break\r\n } else if (section === 0) {\r\n i--\r\n const prevSection = indices[i]\r\n result.push(str.substring(last - prevSection, last) || '')\r\n last -= prevSection\r\n } else {\r\n result.push(str.substring(last - section, last) || '')\r\n last -= section\r\n }\r\n }\r\n const remaining = str.substring(0, last)\r\n if (remaining) {\r\n result.push(remaining)\r\n }\r\n return result.reverse().join(separator)\r\n}\r\n\r\nexport function sprintf(s: string, ...values: any[]): string {\r\n if (\r\n values.length === 1 &&\r\n Object.prototype.toString.call(values[0]) === '[object Object]'\r\n ) {\r\n const valuesDict = values[0] as Record<string, any>\r\n return s.replace(/%\\(([^)]+)\\)s/g, (match, key) => String(valuesDict[key]))\r\n } else if (values.length > 0) {\r\n let index = 0\r\n return s.replace(/%s/g, () => String(values[index++]))\r\n }\r\n return s\r\n}\r\n\r\nexport function capitalize(s: string): string {\r\n return s ? s[0].toUpperCase() + s.slice(1) : ''\r\n}\r\n\r\nconst diacriticsMap: { [key: string]: string } = {\r\n '\\u0041': 'A',\r\n '\\u24B6': 'A',\r\n '\\uFF21': 'A',\r\n '\\u00C0': 'A',\r\n '\\u00C1': 'A',\r\n '\\u00C2': 'A',\r\n '\\u1EA6': 'A',\r\n '\\u1EA4': 'A',\r\n '\\u1EAA': 'A',\r\n '\\u1EA8': 'A',\r\n '\\u00C3': 'A',\r\n '\\u0100': 'A',\r\n '\\u0102': 'A',\r\n '\\u1EB0': 'A',\r\n '\\u1EAE': 'A',\r\n '\\u1EB4': 'A',\r\n '\\u1EB2': 'A',\r\n '\\u0226': 'A',\r\n '\\u01E0': 'A',\r\n '\\u00C4': 'A',\r\n '\\u01DE': 'A',\r\n '\\u1EA2': 'A',\r\n '\\u00C5': 'A',\r\n '\\u01FA': 'A',\r\n '\\u01CD': 'A',\r\n '\\u0200': 'A',\r\n '\\u0202': 'A',\r\n '\\u1EA0': 'A',\r\n '\\u1EAC': 'A',\r\n '\\u1EB6': 'A',\r\n '\\u1E00': 'A',\r\n '\\u0104': 'A',\r\n '\\u023A': 'A',\r\n '\\u2C6F': 'A',\r\n '\\uA732': 'AA',\r\n '\\u00C6': 'AE',\r\n '\\u01FC': 'AE',\r\n '\\u01E2': 'AE',\r\n '\\uA734': 'AO',\r\n '\\uA736': 'AU',\r\n '\\uA738': 'AV',\r\n '\\uA73A': 'AV',\r\n '\\uA73C': 'AY',\r\n '\\u0042': 'B',\r\n '\\u24B7': 'B',\r\n '\\uFF22': 'B',\r\n '\\u1E02': 'B',\r\n '\\u1E04': 'B',\r\n '\\u1E06': 'B',\r\n '\\u0243': 'B',\r\n '\\u0182': 'B',\r\n '\\u0181': 'B',\r\n '\\u0043': 'C',\r\n '\\u24B8': 'C',\r\n '\\uFF23': 'C',\r\n '\\u0106': 'C',\r\n '\\u0108': 'C',\r\n '\\u010A': 'C',\r\n '\\u010C': 'C',\r\n '\\u00C7': 'C',\r\n '\\u1E08': 'C',\r\n '\\u0187': 'C',\r\n '\\u023B': 'C',\r\n '\\uA73E': 'C',\r\n '\\u0044': 'D',\r\n '\\u24B9': 'D',\r\n '\\uFF24': 'D',\r\n '\\u1E0A': 'D',\r\n '\\u010E': 'D',\r\n '\\u1E0C': 'D',\r\n '\\u1E10': 'D',\r\n '\\u1E12': 'D',\r\n '\\u1E0E': 'D',\r\n '\\u0110': 'D',\r\n '\\u018B': 'D',\r\n '\\u018A': 'D',\r\n '\\u0189': 'D',\r\n '\\uA779': 'D',\r\n '\\u01F1': 'DZ',\r\n '\\u01C4': 'DZ',\r\n '\\u01F2': 'Dz',\r\n '\\u01C5': 'Dz',\r\n '\\u0045': 'E',\r\n '\\u24BA': 'E',\r\n '\\uFF25': 'E',\r\n '\\u00C8': 'E',\r\n '\\u00C9': 'E',\r\n '\\u00CA': 'E',\r\n '\\u1EC0': 'E',\r\n '\\u1EBE': 'E',\r\n '\\u1EC4': 'E',\r\n '\\u1EC2': 'E',\r\n '\\u1EBC': 'E',\r\n '\\u0112': 'E',\r\n '\\u1E14': 'E',\r\n '\\u1E16': 'E',\r\n '\\u0114': 'E',\r\n '\\u0116': 'E',\r\n '\\u00CB': 'E',\r\n '\\u1EBA': 'E',\r\n '\\u011A': 'E',\r\n '\\u0204': 'E',\r\n '\\u0206': 'E',\r\n '\\u1EB8': 'E',\r\n '\\u1EC6': 'E',\r\n '\\u0228': 'E',\r\n '\\u1E1C': 'E',\r\n '\\u0118': 'E',\r\n '\\u1E18': 'E',\r\n '\\u1E1A': 'E',\r\n '\\u0190': 'E',\r\n '\\u018E': 'E',\r\n '\\u0046': 'F',\r\n '\\u24BB': 'F',\r\n '\\uFF26': 'F',\r\n '\\u1E1E': 'F',\r\n '\\u0191': 'F',\r\n '\\uA77B': 'F',\r\n '\\u0047': 'G',\r\n '\\u24BC': 'G',\r\n '\\uFF27': 'G',\r\n '\\u01F4': 'G',\r\n '\\u011C': 'G',\r\n '\\u1E20': 'G',\r\n '\\u011E': 'G',\r\n '\\u0120': 'G',\r\n '\\u01E6': 'G',\r\n '\\u0122': 'G',\r\n '\\u01E4': 'G',\r\n '\\u0193': 'G',\r\n '\\uA7A0': 'G',\r\n '\\uA77D': 'G',\r\n '\\uA77E': 'G',\r\n '\\u0048': 'H',\r\n '\\u24BD': 'H',\r\n '\\uFF28': 'H',\r\n '\\u0124': 'H',\r\n '\\u1E22': 'H',\r\n '\\u1E26': 'H',\r\n '\\u021E': 'H',\r\n '\\u1E24': 'H',\r\n '\\u1E28': 'H',\r\n '\\u1E2A': 'H',\r\n '\\u0126': 'H',\r\n '\\u2C67': 'H',\r\n '\\u2C75': 'H',\r\n '\\uA78D': 'H',\r\n '\\u0049': 'I',\r\n '\\u24BE': 'I',\r\n '\\uFF29': 'I',\r\n '\\u00CC': 'I',\r\n '\\u00CD': 'I',\r\n '\\u00CE': 'I',\r\n '\\u0128': 'I',\r\n '\\u012A': 'I',\r\n '\\u012C': 'I',\r\n '\\u0130': 'I',\r\n '\\u00CF': 'I',\r\n '\\u1E2E': 'I',\r\n '\\u1EC8': 'I',\r\n '\\u01CF': 'I',\r\n '\\u0208': 'I',\r\n '\\u020A': 'I',\r\n '\\u1ECA': 'I',\r\n '\\u012E': 'I',\r\n '\\u1E2C': 'I',\r\n '\\u0197': 'I',\r\n '\\u004A': 'J',\r\n '\\u24BF': 'J',\r\n '\\uFF2A': 'J',\r\n '\\u0134': 'J',\r\n '\\u0248': 'J',\r\n '\\u004B': 'K',\r\n '\\u24C0': 'K',\r\n '\\uFF2B': 'K',\r\n '\\u1E30': 'K',\r\n '\\u01E8': 'K',\r\n '\\u1E32': 'K',\r\n '\\u0136': 'K',\r\n '\\u1E34': 'K',\r\n '\\u0198': 'K',\r\n '\\u2C69': 'K',\r\n '\\uA740': 'K',\r\n '\\uA742': 'K',\r\n '\\uA744': 'K',\r\n '\\uA7A2': 'K',\r\n '\\u004C': 'L',\r\n '\\u24C1': 'L',\r\n '\\uFF2C': 'L',\r\n '\\u013F': 'L',\r\n '\\u0139': 'L',\r\n '\\u013D': 'L',\r\n '\\u1E36': 'L',\r\n '\\u1E38': 'L',\r\n '\\u013B': 'L',\r\n '\\u1E3C': 'L',\r\n '\\u1E3A': 'L',\r\n '\\u0141': 'L',\r\n '\\u023D': 'L',\r\n '\\u2C62': 'L',\r\n '\\u2C60': 'L',\r\n '\\uA748': 'L',\r\n '\\uA746': 'L',\r\n '\\uA780': 'L',\r\n '\\u01C7': 'LJ',\r\n '\\u01C8': 'Lj',\r\n '\\u004D': 'M',\r\n '\\u24C2': 'M',\r\n '\\uFF2D': 'M',\r\n '\\u1E3E': 'M',\r\n '\\u1E40': 'M',\r\n '\\u1E42': 'M',\r\n '\\u2C6E': 'M',\r\n '\\u019C': 'M',\r\n '\\u004E': 'N',\r\n '\\u24C3': 'N',\r\n '\\uFF2E': 'N',\r\n '\\u01F8': 'N',\r\n '\\u0143': 'N',\r\n '\\u00D1': 'N',\r\n '\\u1E44': 'N',\r\n '\\u0147': 'N',\r\n '\\u1E46': 'N',\r\n '\\u0145': 'N',\r\n '\\u1E4A': 'N',\r\n '\\u1E48': 'N',\r\n '\\u0220': 'N',\r\n '\\u019D': 'N',\r\n '\\uA790': 'N',\r\n '\\uA7A4': 'N',\r\n '\\u01CA': 'NJ',\r\n '\\u01CB': 'Nj',\r\n '\\u004F': 'O',\r\n '\\u24C4': 'O',\r\n '\\uFF2F': 'O',\r\n '\\u00D2': 'O',\r\n '\\u00D3': 'O',\r\n '\\u00D4': 'O',\r\n '\\u1ED2': 'O',\r\n '\\u1ED0': 'O',\r\n '\\u1ED6': 'O',\r\n '\\u1ED4': 'O',\r\n '\\u00D5': 'O',\r\n '\\u1E4C': 'O',\r\n '\\u022C': 'O',\r\n '\\u1E4E': 'O',\r\n '\\u014C': 'O',\r\n '\\u1E50': 'O',\r\n '\\u1E52': 'O',\r\n '\\u014E': 'O',\r\n '\\u022E': 'O',\r\n '\\u0230': 'O',\r\n '\\u00D6': 'O',\r\n '\\u022A': 'O',\r\n '\\u1ECE': 'O',\r\n '\\u0150': 'O',\r\n '\\u01D1': 'O',\r\n '\\u020C': 'O',\r\n '\\u020E': 'O',\r\n '\\u01A0': 'O',\r\n '\\u1EDC': 'O',\r\n '\\u1EDA': 'O',\r\n '\\u1EE0': 'O',\r\n '\\u1EDE': 'O',\r\n '\\u1EE2': 'O',\r\n '\\u1ECC': 'O',\r\n '\\u1ED8': 'O',\r\n '\\u01EA': 'O',\r\n '\\u01EC': 'O',\r\n '\\u00D8': 'O',\r\n '\\u01FE': 'O',\r\n '\\u0186': 'O',\r\n '\\u019F': 'O',\r\n '\\uA74A': 'O',\r\n '\\uA74C': 'O',\r\n '\\u01A2': 'OI',\r\n '\\uA74E': 'OO',\r\n '\\u0222': 'OU',\r\n '\\u0050': 'P',\r\n '\\u24C5': 'P',\r\n '\\uFF30': 'P',\r\n '\\u1E54': 'P',\r\n '\\u1E56': 'P',\r\n '\\u01A4': 'P',\r\n '\\u2C63': 'P',\r\n '\\uA750': 'P',\r\n '\\uA752': 'P',\r\n '\\uA754': 'P',\r\n '\\u0051': 'Q',\r\n '\\u24C6': 'Q',\r\n '\\uFF31': 'Q',\r\n '\\uA756': 'Q',\r\n '\\uA758': 'Q',\r\n '\\u024A': 'Q',\r\n '\\u0052': 'R',\r\n '\\u24C7': 'R',\r\n '\\uFF32': 'R',\r\n '\\u0154': 'R',\r\n '\\u1E58': 'R',\r\n '\\u0158': 'R',\r\n '\\u0210': 'R',\r\n '\\u0212': 'R',\r\n '\\u1E5A': 'R',\r\n '\\u1E5C': 'R',\r\n '\\u0156': 'R',\r\n '\\u1E5E': 'R',\r\n '\\u024C': 'R',\r\n '\\u2C64': 'R',\r\n '\\uA75A': 'R',\r\n '\\uA7A6': 'R',\r\n '\\uA782': 'R',\r\n '\\u0053': 'S',\r\n '\\u24C8': 'S',\r\n '\\uFF33': 'S',\r\n '\\u1E9E': 'S',\r\n '\\u015A': 'S',\r\n '\\u1E64': 'S',\r\n '\\u015C': 'S',\r\n '\\u1E60': 'S',\r\n '\\u0160': 'S',\r\n '\\u1E66': 'S',\r\n '\\u1E62': 'S',\r\n '\\u1E68': 'S',\r\n '\\u0218': 'S',\r\n '\\u015E': 'S',\r\n '\\u2C7E': 'S',\r\n '\\uA7A8': 'S',\r\n '\\uA784': 'S',\r\n '\\u0054': 'T',\r\n '\\u24C9': 'T',\r\n '\\uFF34': 'T',\r\n '\\u1E6A': 'T',\r\n '\\u0164': 'T',\r\n '\\u1E6C': 'T',\r\n '\\u021A': 'T',\r\n '\\u0162': 'T',\r\n '\\u1E70': 'T',\r\n '\\u1E6E': 'T',\r\n '\\u0166': 'T',\r\n '\\u01AC': 'T',\r\n '\\u01AE': 'T',\r\n '\\u023E': 'T',\r\n '\\uA786': 'T',\r\n '\\uA728': 'TZ',\r\n '\\u0055': 'U',\r\n '\\u24CA': 'U',\r\n '\\uFF35': 'U',\r\n '\\u00D9': 'U',\r\n '\\u00DA': 'U',\r\n '\\u00DB': 'U',\r\n '\\u0168': 'U',\r\n '\\u1E78': 'U',\r\n '\\u016A': 'U',\r\n '\\u1E7A': 'U',\r\n '\\u016C': 'U',\r\n '\\u00DC': 'U',\r\n '\\u01DB': 'U',\r\n '\\u01D7': 'U',\r\n '\\u01D5': 'U',\r\n '\\u01D9': 'U',\r\n '\\u1EE6': 'U',\r\n '\\u016E': 'U',\r\n '\\u0170': 'U',\r\n '\\u01D3': 'U',\r\n '\\u0214': 'U',\r\n '\\u0216': 'U',\r\n '\\u01AF': 'U',\r\n '\\u1EEA': 'U',\r\n '\\u1EE8': 'U',\r\n '\\u1EEE': 'U',\r\n '\\u1EEC': 'U',\r\n '\\u1EF0': 'U',\r\n '\\u1EE4': 'U',\r\n '\\u1E72': 'U',\r\n '\\u0172': 'U',\r\n '\\u1E76': 'U',\r\n '\\u1E74': 'U',\r\n '\\u0244': 'U',\r\n '\\u0056': 'V',\r\n '\\u24CB': 'V',\r\n '\\uFF36': 'V',\r\n '\\u1E7C': 'V',\r\n '\\u1E7E': 'V',\r\n '\\u01B2': 'V',\r\n '\\uA75E': 'V',\r\n '\\u0245': 'V',\r\n '\\uA760': 'VY',\r\n '\\u0057': 'W',\r\n '\\u24CC': 'W',\r\n '\\uFF37': 'W',\r\n '\\u1E80': 'W',\r\n '\\u1E82': 'W',\r\n '\\u0174': 'W',\r\n '\\u1E86': 'W',\r\n '\\u1E84': 'W',\r\n '\\u1E88': 'W',\r\n '\\u2C72': 'W',\r\n '\\u0058': 'X',\r\n '\\u24CD': 'X',\r\n '\\uFF38': 'X',\r\n '\\u1E8A': 'X',\r\n '\\u1E8C': 'X',\r\n '\\u0059': 'Y',\r\n '\\u24CE': 'Y',\r\n '\\uFF39': 'Y',\r\n '\\u1EF2': 'Y',\r\n '\\u00DD': 'Y',\r\n '\\u0176': 'Y',\r\n '\\u1EF8': 'Y',\r\n '\\u0232': 'Y',\r\n '\\u1E8E': 'Y',\r\n '\\u0178': 'Y',\r\n '\\u1EF6': 'Y',\r\n '\\u1EF4': 'Y',\r\n '\\u01B3': 'Y',\r\n '\\u024E': 'Y',\r\n '\\u1EFE': 'Y',\r\n '\\u005A': 'Z',\r\n '\\u24CF': 'Z',\r\n '\\uFF3A': 'Z',\r\n '\\u0179': 'Z',\r\n '\\u1E90': 'Z',\r\n '\\u017B': 'Z',\r\n '\\u017D': 'Z',\r\n '\\u1E92': 'Z',\r\n '\\u1E94': 'Z',\r\n '\\u01B5': 'Z',\r\n '\\u0224': 'Z',\r\n '\\u2C7F': 'Z',\r\n '\\u2C6B': 'Z',\r\n '\\uA762': 'Z',\r\n '\\u0061': 'a',\r\n '\\u24D0': 'a',\r\n '\\uFF41': 'a',\r\n '\\u1E9A': 'a',\r\n '\\u00E0': 'a',\r\n '\\u00E1': 'a',\r\n '\\u00E2': 'a',\r\n '\\u1EA7': 'a',\r\n '\\u1EA5': 'a',\r\n '\\u1EAB': 'a',\r\n '\\u1EA9': 'a',\r\n '\\u00E3': 'a',\r\n '\\u0101': 'a',\r\n '\\u0103': 'a',\r\n '\\u1EB1': 'a',\r\n '\\u1EAF': 'a',\r\n '\\u1EB5': 'a',\r\n '\\u1EB3': 'a',\r\n '\\u0227': 'a',\r\n '\\u01E1': 'a',\r\n '\\u00E4': 'a',\r\n '\\u01DF': 'a',\r\n '\\u1EA3': 'a',\r\n '\\u00E5': 'a',\r\n '\\u01FB': 'a',\r\n '\\u01CE': 'a',\r\n '\\u0201': 'a',\r\n '\\u0203': 'a',\r\n '\\u1EA1': 'a',\r\n '\\u1EAD': 'a',\r\n '\\u1EB7': 'a',\r\n '\\u1E01': 'a',\r\n '\\u0105': 'a',\r\n '\\u2C65': 'a',\r\n '\\u0250': 'a',\r\n '\\uA733': 'aa',\r\n '\\u00E6': 'ae',\r\n '\\u01FD': 'ae',\r\n '\\u01E3': 'ae',\r\n '\\uA735': 'ao',\r\n '\\uA737': 'au',\r\n '\\uA739': 'av',\r\n '\\uA73B': 'av',\r\n '\\uA73D': 'ay',\r\n '\\u0062': 'b',\r\n '\\u24D1': 'b',\r\n '\\uFF42': 'b',\r\n '\\u1E03': 'b',\r\n '\\u1E05': 'b',\r\n '\\u1E07': 'b',\r\n '\\u0180': 'b',\r\n '\\u0183': 'b',\r\n '\\u0253': 'b',\r\n '\\u0063': 'c',\r\n '\\u24D2': 'c',\r\n '\\uFF43': 'c',\r\n '\\u0107': 'c',\r\n '\\u0109': 'c',\r\n '\\u010B': 'c',\r\n '\\u010D': 'c',\r\n '\\u00E7': 'c',\r\n '\\u1E09': 'c',\r\n '\\u0188': 'c',\r\n '\\u023C': 'c',\r\n '\\uA73F': 'c',\r\n '\\u2184': 'c',\r\n '\\u0064': 'd',\r\n '\\u24D3': 'd',\r\n '\\uFF44': 'd',\r\n '\\u1E0B': 'd',\r\n '\\u010F': 'd',\r\n '\\u1E0D': 'd',\r\n '\\u1E11': 'd',\r\n '\\u1E13': 'd',\r\n '\\u1E0F': 'd',\r\n '\\u0111': 'd',\r\n '\\u018C': 'd',\r\n '\\u0256': 'd',\r\n '\\u0257': 'd',\r\n '\\uA77A': 'd',\r\n '\\u01F3': 'dz',\r\n '\\u01C6': 'dz',\r\n '\\u0065': 'e',\r\n '\\u24D4': 'e',\r\n '\\uFF45': 'e',\r\n '\\u00E8': 'e',\r\n '\\u00E9': 'e',\r\n '\\u00EA': 'e',\r\n '\\u1EC1': 'e',\r\n '\\u1EBF': 'e',\r\n '\\u1EC5': 'e',\r\n '\\u1EC3': 'e',\r\n '\\u1EBD': 'e',\r\n '\\u0113': 'e',\r\n '\\u1E15': 'e',\r\n '\\u1E17': 'e',\r\n '\\u0115': 'e',\r\n '\\u0117': 'e',\r\n '\\u00EB': 'e',\r\n '\\u1EBB': 'e',\r\n '\\u011B': 'e',\r\n '\\u0205': 'e',\r\n '\\u0207': 'e',\r\n '\\u1EB9': 'e',\r\n '\\u1EC7': 'e',\r\n '\\u0229': 'e',\r\n '\\u1E1D': 'e',\r\n '\\u0119': 'e',\r\n '\\u1E19': 'e',\r\n '\\u1E1B': 'e',\r\n '\\u0247': 'e',\r\n '\\u025B': 'e',\r\n '\\u01DD': 'e',\r\n '\\u0066': 'f',\r\n '\\u24D5': 'f',\r\n '\\uFF46': 'f',\r\n '\\u1E1F': 'f',\r\n '\\u0192': 'f',\r\n '\\uA77C': 'f',\r\n '\\u0067': 'g',\r\n '\\u24D6': 'g',\r\n '\\uFF47': 'g',\r\n '\\u01F5': 'g',\r\n '\\u011D': 'g',\r\n '\\u1E21': 'g',\r\n '\\u011F': 'g',\r\n '\\u0121': 'g',\r\n '\\u01E7': 'g',\r\n '\\u0123': 'g',\r\n '\\u01E5': 'g',\r\n '\\u0260': 'g',\r\n '\\uA7A1': 'g',\r\n '\\u1D79': 'g',\r\n '\\uA77F': 'g',\r\n '\\u0068': 'h',\r\n '\\u24D7': 'h',\r\n '\\uFF48': 'h',\r\n '\\u0125': 'h',\r\n '\\u1E23': 'h',\r\n '\\u1E27': 'h',\r\n '\\u021F': 'h',\r\n '\\u1E25': 'h',\r\n '\\u1E29': 'h',\r\n '\\u1E2B': 'h',\r\n '\\u1E96': 'h',\r\n '\\u0127': 'h',\r\n '\\u2C68': 'h',\r\n '\\u2C76': 'h',\r\n '\\u0265': 'h',\r\n '\\u0195': 'hv',\r\n '\\u0069': 'i',\r\n '\\u24D8': 'i',\r\n '\\uFF49': 'i',\r\n '\\u00EC': 'i',\r\n '\\u00ED': 'i',\r\n '\\u00EE': 'i',\r\n '\\u0129': 'i',\r\n '\\u012B': 'i',\r\n '\\u012D': 'i',\r\n '\\u00EF': 'i',\r\n '\\u1E2F': 'i',\r\n '\\u1EC9': 'i',\r\n '\\u01D0': 'i',\r\n '\\u0209': 'i',\r\n '\\u020B': 'i',\r\n '\\u1ECB': 'i',\r\n '\\u012F': 'i',\r\n '\\u1E2D': 'i',\r\n '\\u0268': 'i',\r\n '\\u0131': 'i',\r\n '\\u006A': 'j',\r\n '\\u24D9': 'j',\r\n '\\uFF4A': 'j',\r\n '\\u0135': 'j',\r\n '\\u01F0': 'j',\r\n '\\u0249': 'j',\r\n '\\u006B': 'k',\r\n '\\u24DA': 'k',\r\n '\\uFF4B': 'k',\r\n '\\u1E31': 'k',\r\n '\\u01E9': 'k',\r\n '\\u1E33': 'k',\r\n '\\u0137': 'k',\r\n '\\u1E35': 'k',\r\n '\\u0199': 'k',\r\n '\\u2C6A': 'k',\r\n '\\uA741': 'k',\r\n '\\uA743': 'k',\r\n '\\uA745': 'k',\r\n '\\uA7A3': 'k',\r\n '\\u006C': 'l',\r\n '\\u24DB': 'l',\r\n '\\uFF4C': 'l',\r\n '\\u0140': 'l',\r\n '\\u013A': 'l',\r\n '\\u013E': 'l',\r\n '\\u1E37': 'l',\r\n '\\u1E39': 'l',\r\n '\\u013C': 'l',\r\n '\\u1E3D': 'l',\r\n '\\u1E3B': 'l',\r\n '\\u017F': 'l',\r\n '\\u0142': 'l',\r\n '\\u019A': 'l',\r\n '\\u026B': 'l',\r\n '\\u2C61': 'l',\r\n '\\uA749': 'l',\r\n '\\uA781': 'l',\r\n '\\uA747': 'l',\r\n '\\u01C9': 'lj',\r\n '\\u006D': 'm',\r\n '\\u24DC': 'm',\r\n '\\uFF4D': 'm',\r\n '\\u1E3F': 'm',\r\n '\\u1E41': 'm',\r\n '\\u1E43': 'm',\r\n '\\u0271': 'm',\r\n '\\u026F': 'm',\r\n '\\u006E': 'n',\r\n '\\u24DD': 'n',\r\n '\\uFF4E': 'n',\r\n '\\u01F9': 'n',\r\n '\\u0144': 'n',\r\n '\\u00F1': 'n',\r\n '\\u1E45': 'n',\r\n '\\u0148': 'n',\r\n '\\u1E47': 'n',\r\n '\\u0146': 'n',\r\n '\\u1E4B': 'n',\r\n '\\u1E49': 'n',\r\n '\\u019E': 'n',\r\n '\\u0272': 'n',\r\n '\\u0149': 'n',\r\n '\\uA791': 'n',\r\n '\\uA7A5': 'n',\r\n '\\u01CC': 'nj',\r\n '\\u006F': 'o',\r\n '\\u24DE': 'o',\r\n '\\uFF4F': 'o',\r\n '\\u00F2': 'o',\r\n '\\u00F3': 'o',\r\n '\\u00F4': 'o',\r\n '\\u1ED3': 'o',\r\n '\\u1ED1': 'o',\r\n '\\u1ED7': 'o',\r\n '\\u1ED5': 'o',\r\n '\\u00F5': 'o',\r\n '\\u1E4D': 'o',\r\n '\\u022D': 'o',\r\n '\\u1E4F': 'o',\r\n '\\u014D': 'o',\r\n '\\u1E51': 'o',\r\n '\\u1E53': 'o',\r\n '\\u014F': 'o',\r\n '\\u022F': 'o',\r\n '\\u0231': 'o',\r\n '\\u00F6': 'o',\r\n '\\u022B': 'o',\r\n '\\u1ECF': 'o',\r\n '\\u0151': 'o',\r\n '\\u01D2': 'o',\r\n '\\u020D': 'o',\r\n '\\u020F': 'o',\r\n '\\u01A1': 'o',\r\n '\\u1EDD': 'o',\r\n '\\u1EDB': 'o',\r\n '\\u1EE1': 'o',\r\n '\\u1EDF': 'o',\r\n '\\u1EE3': 'o',\r\n '\\u1ECD': 'o',\r\n '\\u1ED9': 'o',\r\n '\\u01EB': 'o',\r\n '\\u01ED': 'o',\r\n '\\u00F8': 'o',\r\n '\\u01FF': 'o',\r\n '\\u0254': 'o',\r\n '\\uA74B': 'o',\r\n '\\uA74D': 'o',\r\n '\\u0275': 'o',\r\n '\\u01A3': 'oi',\r\n '\\u0223': 'ou',\r\n '\\uA74F': 'oo',\r\n '\\u0070': 'p',\r\n '\\u24DF': 'p',\r\n '\\uFF50': 'p',\r\n '\\u1E55': 'p',\r\n '\\u1E57': 'p',\r\n '\\u01A5': 'p',\r\n '\\u1D7D': 'p',\r\n '\\uA751': 'p',\r\n '\\uA753': 'p',\r\n '\\uA755': 'p',\r\n '\\u0071': 'q',\r\n '\\u24E0': 'q',\r\n '\\uFF51': 'q',\r\n '\\u024B': 'q',\r\n '\\uA757': 'q',\r\n '\\uA759': 'q',\r\n '\\u0072': 'r',\r\n '\\u24E1': 'r',\r\n '\\uFF52': 'r',\r\n '\\u0155': 'r',\r\n '\\u1E59': 'r',\r\n '\\u0159': 'r',\r\n '\\u0211': 'r',\r\n '\\u0213': 'r',\r\n '\\u1E5B': 'r',\r\n '\\u1E5D': 'r',\r\n '\\u0157': 'r',\r\n '\\u1E5F': 'r',\r\n '\\u024D': 'r',\r\n '\\u027D': 'r',\r\n '\\uA75B': 'r',\r\n '\\uA7A7': 'r',\r\n '\\uA783': 'r',\r\n '\\u0073': 's',\r\n '\\u24E2': 's',\r\n '\\uFF53': 's',\r\n '\\u00DF': 's',\r\n '\\u015B': 's',\r\n '\\u1E65': 's',\r\n '\\u015D': 's',\r\n '\\u1E61': 's',\r\n '\\u0161': 's',\r\n '\\u1E67': 's',\r\n '\\u1E63': 's',\r\n '\\u1E69': 's',\r\n '\\u0219': 's',\r\n '\\u015F': 's',\r\n '\\u023F': 's',\r\n '\\uA7A9': 's',\r\n '\\uA785': 's',\r\n '\\u1E9B': 's',\r\n '\\u0074': 't',\r\n '\\u24E3': 't',\r\n '\\uFF54': 't',\r\n '\\u1E6B': 't',\r\n '\\u1E97': 't',\r\n '\\u0165': 't',\r\n '\\u1E6D': 't',\r\n '\\u021B': 't',\r\n '\\u0163': 't',\r\n '\\u1E71': 't',\r\n '\\u1E6F': 't',\r\n '\\u0167': 't',\r\n '\\u01AD': 't',\r\n '\\u0288': 't',\r\n '\\u2C66': 't',\r\n '\\uA787': 't',\r\n '\\uA729': 'tz',\r\n '\\u0075': 'u',\r\n '\\u24E4': 'u',\r\n '\\uFF55': 'u',\r\n '\\u00F9': 'u',\r\n '\\u00FA': 'u',\r\n '\\u00FB': 'u',\r\n '\\u0169': 'u',\r\n '\\u1E79': 'u',\r\n '\\u016B': 'u',\r\n '\\u1E7B': 'u',\r\n '\\u016D': 'u',\r\n '\\u00FC': 'u',\r\n '\\u01DC': 'u',\r\n '\\u01D8': 'u',\r\n '\\u01D6': 'u',\r\n '\\u01DA': 'u',\r\n '\\u1EE7': 'u',\r\n '\\u016F': 'u',\r\n '\\u0171': 'u',\r\n '\\u01D4': 'u',\r\n '\\u0215': 'u',\r\n '\\u0217': 'u',\r\n '\\u01B0': 'u',\r\n '\\u1EEB': 'u',\r\n '\\u1EE9': 'u',\r\n '\\u1EEF': 'u',\r\n '\\u1EED': 'u',\r\n '\\u1EF1': 'u',\r\n '\\u1EE5': 'u',\r\n '\\u1E73': 'u',\r\n '\\u0173': 'u',\r\n '\\u1E77': 'u',\r\n '\\u1E75': 'u',\r\n '\\u0289': 'u',\r\n '\\u0076': 'v',\r\n '\\u24E5': 'v',\r\n '\\uFF56': 'v',\r\n '\\u1E7D': 'v',\r\n '\\u1E7F': 'v',\r\n '\\u028B': 'v',\r\n '\\uA75F': 'v',\r\n '\\u028C': 'v',\r\n '\\uA761': 'vy',\r\n '\\u0077': 'w',\r\n '\\u24E6': 'w',\r\n '\\uFF57': 'w',\r\n '\\u1E81': 'w',\r\n '\\u1E83': 'w',\r\n '\\u0175': 'w',\r\n '\\u1E87': 'w',\r\n '\\u1E85': 'w',\r\n '\\u1E98': 'w',\r\n '\\u1E89': 'w',\r\n '\\u2C73': 'w',\r\n '\\u0078': 'x',\r\n '\\u24E7': 'x',\r\n '\\uFF58': 'x',\r\n '\\u1E8B': 'x',\r\n '\\u1E8D': 'x',\r\n '\\u0079': 'y',\r\n '\\u24E8': 'y',\r\n '\\uFF59': 'y',\r\n '\\u1EF3': 'y',\r\n '\\u00FD': 'y',\r\n '\\u0177': 'y',\r\n '\\u1EF9': 'y',\r\n '\\u0233': 'y',\r\n '\\u1E8F': 'y',\r\n '\\u00FF': 'y',\r\n '\\u1EF7': 'y',\r\n '\\u1E99': 'y',\r\n '\\u1EF5': 'y',\r\n '\\u01B4': 'y',\r\n '\\u024F': 'y',\r\n '\\u1EFF': 'y',\r\n '\\u007A': 'z',\r\n '\\u24E9': 'z',\r\n '\\uFF5A': 'z',\r\n '\\u017A': 'z',\r\n '\\u1E91': 'z',\r\n '\\u017C': 'z',\r\n '\\u017E': 'z',\r\n '\\u1E93': 'z',\r\n '\\u1E95': 'z',\r\n '\\u01B6': 'z',\r\n '\\u0225': 'z',\r\n '\\u0240': 'z',\r\n '\\u2C6C': 'z',\r\n '\\uA763': 'z',\r\n}\r\n\r\nexport function unaccent(str: string, caseSensitive: boolean = false): string {\r\n const result = str.replace(\r\n /[^\\u0000-\\u007E]/g,\r\n (accented) => diacriticsMap[accented] || accented,\r\n )\r\n return caseSensitive ? result : result.toLowerCase()\r\n}\r\n\r\nexport function isEmail(value: string): boolean {\r\n const re =\r\n /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i\r\n return re.test(value)\r\n}\r\n","import { shallowEqual } from './arrays'\r\n// Import các module phụ trợ\r\nimport { evaluate, evaluateBooleanExpr, formatAST, parseExpr } from './py'\r\nimport { ASTNone, ASTUnaryOperator } from './py_parser'\r\nimport { toPyValue } from './py_utils'\r\nimport { escapeRegExp } from './strings'\r\n\r\n// Định nghĩa các kiểu cần thiết\r\ntype AST = { type: number; value: any }\r\ntype Condition = [string | 0 | 1, string, any]\r\ntype DomainListRepr = ('&' | '|' | '!' | Condition)[]\r\ntype DomainRepr = DomainListRepr | string | Domain\r\n\r\nexport class InvalidDomainError extends Error {}\r\n\r\nexport class Domain {\r\n ast: AST = { type: -1, value: null }\r\n static TRUE: Domain\r\n static FALSE: Domain\r\n\r\n static combine(domains: DomainRepr[], operator: 'AND' | 'OR'): Domain {\r\n if (domains.length === 0) {\r\n return new Domain([])\r\n }\r\n const domain1 =\r\n domains[0] instanceof Domain ? domains[0] : new Domain(domains[0])\r\n if (domains.length === 1) {\r\n return domain1\r\n }\r\n const domain2 = Domain.combine(domains.slice(1), operator)\r\n const result = new Domain([])\r\n const astValues1 = domain1.ast.value\r\n const astValues2 = domain2.ast.value\r\n const op = operator === 'AND' ? '&' : '|'\r\n const combinedAST = {\r\n type: 4 /* List */,\r\n value: astValues1.concat(astValues2),\r\n }\r\n result.ast = normalizeDomainAST(combinedAST, op)\r\n return result\r\n }\r\n\r\n static and(domains: DomainRepr[]): Domain {\r\n return Domain.combine(domains, 'AND')\r\n }\r\n\r\n static or(domains: DomainRepr[]): Domain {\r\n return Domain.combine(domains, 'OR')\r\n }\r\n\r\n static not(domain: DomainRepr): Domain {\r\n const result = new Domain(domain)\r\n result.ast.value.unshift({ type: 1, value: '!' })\r\n return result\r\n }\r\n\r\n static removeDomainLeaves(\r\n domain: DomainRepr,\r\n keysToRemove: string[],\r\n ): Domain {\r\n function processLeaf(\r\n elements: any[],\r\n idx: number,\r\n operatorCtx: '&' | '|',\r\n newDomain: Domain,\r\n ): number {\r\n const leaf = elements[idx]\r\n if (leaf.type === 10) {\r\n if (keysToRemove.includes(leaf.value[0].value)) {\r\n if (operatorCtx === '&') {\r\n newDomain.ast.value.push(...Domain.TRUE.ast.value)\r\n } else if (operatorCtx === '|') {\r\n newDomain.ast.value.push(...Domain.FALSE.ast.value)\r\n }\r\n } else {\r\n newDomain.ast.value.push(leaf)\r\n }\r\n return 1\r\n } else if (leaf.type === 1) {\r\n if (\r\n leaf.value === '|' &&\r\n elements[idx + 1].type === 10 &&\r\n elements[idx + 2].type === 10 &&\r\n keysToRemove.includes(elements[idx + 1].value[0].value) &&\r\n keysToRemove.includes(elements[idx + 2].value[0].value)\r\n ) {\r\n newDomain.ast.value.push(...Domain.TRUE.ast.value)\r\n return 3\r\n }\r\n newDomain.ast.value.push(leaf)\r\n if (leaf.value === '!') {\r\n return 1 + processLeaf(elements, idx + 1, '&', newDomain)\r\n }\r\n const firstLeafSkip = processLeaf(\r\n elements,\r\n idx + 1,\r\n leaf.value,\r\n newDomain,\r\n )\r\n const secondLeafSkip = processLeaf(\r\n elements,\r\n idx + 1 + firstLeafSkip,\r\n leaf.value,\r\n newDomain,\r\n )\r\n return 1 + firstLeafSkip + secondLeafSkip\r\n }\r\n return 0\r\n }\r\n\r\n const d = new Domain(domain)\r\n if (d.ast.value.length === 0) {\r\n return d\r\n }\r\n const newDomain = new Domain([])\r\n processLeaf(d.ast.value, 0, '&', newDomain)\r\n return newDomain\r\n }\r\n\r\n constructor(descr: DomainRepr = []) {\r\n if (descr instanceof Domain) {\r\n return new Domain(descr.toString())\r\n } else {\r\n let rawAST: any\r\n try {\r\n rawAST =\r\n typeof descr === 'string' ? parseExpr(descr) : toAST(descr as any)\r\n } catch (error) {\r\n throw new InvalidDomainError(\r\n `Invalid domain representation: ${descr}`,\r\n {\r\n cause: error,\r\n },\r\n )\r\n }\r\n this.ast = normalizeDomainAST(rawAST)\r\n }\r\n }\r\n\r\n contains(record: any): boolean {\r\n const expr = evaluate(this.ast, record)\r\n return matchDomain(record, expr)\r\n }\r\n\r\n toString(): string {\r\n return formatAST(this.ast as any)\r\n }\r\n\r\n toList(context: Record<string, any>): DomainListRepr {\r\n return evaluate(this.ast, context)\r\n }\r\n\r\n toJson(): DomainListRepr | string {\r\n try {\r\n const evaluatedAsList = this.toList({})\r\n const evaluatedDomain = new Domain(evaluatedAsList)\r\n if (evaluatedDomain.toString() === this.toString()) {\r\n return evaluatedAsList\r\n }\r\n return this.toString()\r\n } catch {\r\n return this.toString()\r\n }\r\n }\r\n}\r\n\r\nexport function evalDomain(\r\n modifier: any[] | boolean,\r\n evalContext: Record<string, any>,\r\n): boolean {\r\n if (modifier && typeof modifier !== 'boolean') {\r\n modifier = new Domain(modifier).contains(evalContext)\r\n }\r\n return Boolean(modifier)\r\n}\r\n\r\nconst TRUE_LEAF: Condition = [1, '=', 1]\r\nconst FALSE_LEAF: Condition = [0, '=', 1]\r\nconst TRUE_DOMAIN = new Domain([TRUE_LEAF])\r\nconst FALSE_DOMAIN = new Domain([FALSE_LEAF])\r\n\r\nDomain.TRUE = TRUE_DOMAIN\r\nDomain.FALSE = FALSE_DOMAIN\r\n\r\n// Helpers\r\nfunction toAST(domain: DomainListRepr): AST {\r\n const elems = domain.map((elem) => {\r\n switch (elem) {\r\n case '!':\r\n case '&':\r\n case '|':\r\n return { type: 1 /* String */, value: elem }\r\n default:\r\n return {\r\n type: 10 /* Tuple */,\r\n value: (elem as Condition).map(toPyValue),\r\n }\r\n }\r\n })\r\n return { type: 4 /* List */, value: elems }\r\n}\r\n\r\nfunction normalizeDomainAST(\r\n domain: AST | ASTNone | ASTUnaryOperator,\r\n op: '&' | '|' = '&',\r\n): AST {\r\n if (domain.type !== 4) {\r\n if (domain.type === 10) {\r\n const value = domain.value\r\n if (\r\n value.findIndex((e: any) => e.type === 10) === -1 ||\r\n !value.every((e: any) => e.type === 10 || e.type === 1)\r\n ) {\r\n throw new InvalidDomainError('Invalid domain AST')\r\n }\r\n } else {\r\n throw new InvalidDomainError('Invalid domain AST')\r\n }\r\n }\r\n if (domain.value.length === 0) {\r\n return domain\r\n }\r\n let expected = 1\r\n for (const child of domain.value) {\r\n switch (child.type) {\r\n case 1 /* String */:\r\n if (child.value === '&' || child.value === '|') {\r\n expected++\r\n } else if (child.value !== '!') {\r\n throw new InvalidDomainError('Invalid domain AST')\r\n }\r\n break\r\n case 4: /* list */\r\n case 10 /* tuple */:\r\n if (child.value.length === 3) {\r\n expected--\r\n break\r\n }\r\n throw new InvalidDomainError('Invalid domain AST')\r\n default:\r\n throw new InvalidDomainError('Invalid domain AST')\r\n }\r\n }\r\n const values = domain.value.slice()\r\n while (expected < 0) {\r\n expected++\r\n values.unshift({ type: 1 /* String */, value: op })\r\n }\r\n if (expected > 0) {\r\n throw new InvalidDomainError(\r\n `invalid domain ${formatAST(domain as any)} (missing ${expected} segment(s))`,\r\n )\r\n }\r\n return { type: 4 /* List */, value: values }\r\n}\r\n\r\nfunction matchCondition(record: any, condition: Condition | boolean): boolean {\r\n if (typeof condition === 'boolean') {\r\n return condition\r\n }\r\n const [field, operator, value] = condition\r\n if (typeof field === 'string') {\r\n const names = field.split('.')\r\n if (names.length >= 2) {\r\n return matchCondition(record[names[0]], [\r\n names.slice(1).join('.'),\r\n operator,\r\n value,\r\n ])\r\n }\r\n }\r\n let likeRegexp, ilikeRegexp\r\n if (['like', 'not like', 'ilike', 'not ilike'].includes(operator)) {\r\n likeRegexp = new RegExp(\r\n `(.*)${escapeRegExp(value).replaceAll('%', '(.*)')}(.*)`,\r\n 'g',\r\n )\r\n ilikeRegexp = new RegExp(\r\n `(.*)${escapeRegExp(value).replaceAll('%', '(.*)')}(.*)`,\r\n 'gi',\r\n )\r\n }\r\n const fieldValue = typeof field === 'number' ? field : record[field]\r\n switch (operator) {\r\n case '=?':\r\n if ([false, null].includes(value)) {\r\n return true\r\n }\r\n // eslint-disable-next-line no-fallthrough\r\n case '=':\r\n case '==':\r\n if (Array.isArray(fieldValue) && Array.isArray(value)) {\r\n return shallowEqual(fieldValue, value)\r\n }\r\n return fieldValue === value\r\n case '!=':\r\n case '<>':\r\n return !matchCondition(record, [field, '==', value])\r\n case '<':\r\n return fieldValue < value\r\n case '<=':\r\n return fieldValue <= value\r\n case '>':\r\n return fieldValue > value\r\n case '>=':\r\n return fieldValue >= value\r\n case 'in': {\r\n const val = Array.isArray(value) ? value : [value]\r\n const fieldVal = Array.isArray(fieldValue) ? fieldValue : [fieldValue]\r\n return fieldVal.some((fv) => val.includes(fv))\r\n }\r\n case 'not in': {\r\n const val = Array.isArray(value) ? value : [value]\r\n const fieldVal = Array.isArray(fieldValue) ? fieldValue : [fieldValue]\r\n return !fieldVal.some((fv) => val.includes(fv))\r\n }\r\n case 'like':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return Boolean(fieldValue.match(likeRegexp))\r\n case 'not like':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return Boolean(!fieldValue.match(likeRegexp))\r\n case '=like':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return new RegExp(escapeRegExp(value).replace(/%/g, '.*')).test(\r\n fieldValue,\r\n )\r\n case 'ilike':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return Boolean(fieldValue.match(ilikeRegexp))\r\n case 'not ilike':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return Boolean(!fieldValue.match(ilikeRegexp))\r\n case '=ilike':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return new RegExp(escapeRegExp(value).replace(/%/g, '.*'), 'i').test(\r\n fieldValue,\r\n )\r\n }\r\n throw new InvalidDomainError('could not match domain')\r\n}\r\n\r\nfunction makeOperators(record: Record<string, any>) {\r\n const match = matchCondition.bind(null, record)\r\n return {\r\n '!': (x: any) => !match(x),\r\n '&': (a: any, b: any) => match(a) && match(b),\r\n '|': (a: any, b: any) => match(a) || match(b),\r\n }\r\n}\r\n\r\nfunction matchDomain(record: any, domain: any): boolean {\r\n if (domain.length === 0) {\r\n return true\r\n }\r\n const operators: any = makeOperators(record)\r\n const reversedDomain = Array.from(domain).reverse()\r\n const condStack: any[] = []\r\n for (const item of reversedDomain) {\r\n const operator = typeof item === 'string' && operators[item]\r\n if (operator) {\r\n const operands = condStack.splice(-operator.length)\r\n condStack.push(operator(...operands))\r\n } else {\r\n condStack.push(item)\r\n }\r\n }\r\n return matchCondition(record, condStack.pop())\r\n}\r\n\r\nexport const checkDomain = (context: any, domain: any): boolean => {\r\n try {\r\n if (\r\n domain === undefined ||\r\n domain === '0' ||\r\n domain === 'False' ||\r\n domain === false\r\n ) {\r\n return false\r\n } else if (domain === '1' || domain === 'True' || domain === true) {\r\n return true\r\n }\r\n try {\r\n if (context && domain) {\r\n const d = new Domain(domain)\r\n\r\n return d.contains(context)\r\n }\r\n } catch (error) {\r\n if (context && domain) {\r\n const domainEval = evaluateBooleanExpr(domain, context)\r\n\r\n return domainEval\r\n }\r\n return false\r\n }\r\n return false\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nexport const matchDomains = (context: any, domains: any): boolean => {\r\n if (Array.isArray(domains)) {\r\n if (domains?.length > 0) {\r\n return domains && domains.some((domain) => checkDomain(context, domain))\r\n }\r\n } else return checkDomain(context, domains)\r\n return false\r\n}\r\n","import { FieldTypeConstants, MethodType } from '../constants'\r\n\r\nimport { evaluateExpr } from './domain/py'\r\nimport { checkDomain, Domain, evalPartialContext, matchDomains } from './domain'\r\nimport { useEffect, useState } from 'react'\r\n\r\nexport const evalJSONContext = (_context: any, context = {}) => {\r\n try {\r\n return evalPartialContext(_context, context) as any\r\n } catch (err) {\r\n return null\r\n }\r\n}\r\n\r\nexport const evalJSONDomain = (domain: any, context: any) => {\r\n try {\r\n if (context) {\r\n Object.keys(context)?.forEach((key) => {\r\n if (Array.isArray(context[key])) {\r\n const isTypeObject = context[key]?.every(\r\n (item) =>\r\n typeof item === 'object' &&\r\n item !== null &&\r\n item?.id !== undefined\r\n )\r\n if (isTypeObject) {\r\n context[key] = context[key]?.map((item) => item?.id)\r\n }\r\n }\r\n })\r\n }\r\n const value = evaluateExpr(domain, context)\r\n return value\r\n } catch (err) {\r\n try {\r\n const domainObject = new Domain(domain).toList(context)\r\n return domainObject\r\n } catch (err) {\r\n // console.error(err)\r\n return []\r\n }\r\n }\r\n}\r\n\r\nexport const formatSortingString = (\r\n input: string | null | undefined\r\n): string | null => {\r\n if (!input) return null\r\n return input\r\n .split(',')\r\n .map((field) => {\r\n const [key, order] = field.trim().split(/\\s+/)\r\n const sortOrder = order?.toUpperCase() === 'DESC' ? 'DESC' : 'ASC'\r\n return `${key} ${sortOrder}`\r\n })\r\n .join(', ')\r\n}\r\n\r\nexport const domainHelper = {\r\n checkDomain: checkDomain,\r\n matchDomains: matchDomains,\r\n Domain: Domain,\r\n}\r\n\r\nexport const toQueryString = (\r\n params: Record<string, string | number | boolean>\r\n) => {\r\n return Object.keys(params)\r\n .map(\r\n (key) =>\r\n encodeURIComponent(key) +\r\n '=' +\r\n encodeURIComponent(params[key].toString())\r\n )\r\n .join('&')\r\n}\r\n\r\nexport const convertFloatToTime = (floatValue: number) => {\r\n const hours = Math.floor(floatValue)\r\n const minutes = Math.round((floatValue - hours) * 60)\r\n const formattedHours = String(hours).padStart(2, '0')\r\n const formattedMinutes = String(minutes).padStart(2, '0')\r\n return `${formattedHours}:${formattedMinutes}`\r\n}\r\n\r\nexport const convertTimeToFloat = (timeString: string) => {\r\n const [hours, minutes] = timeString.split(':').map(Number)\r\n return hours + minutes / 60\r\n}\r\n\r\nexport const stringToColor = (name: string, id: number) => {\r\n const combined = name + id / 2\r\n let hash = 0\r\n\r\n for (let i = 0; i < combined.length; i++) {\r\n hash = combined.charCodeAt(i) + ((hash << 5) - hash)\r\n }\r\n\r\n // Convert the hash into an RGB color code within a narrower medium range (120-180)\r\n const r = (hash >> 16) & 0xff\r\n const g = (hash >> 8) & 0xff\r\n const b = hash & 0xff\r\n\r\n // Constrain each RGB component to be between 120 and 180 for a more medium tone\r\n const adjustedR = 120 + (r % 61) // 120 to 180\r\n const adjustedG = 120 + (g % 61) // 120 to 180\r\n const adjustedB = 120 + (b % 61) // 120 to 180\r\n\r\n return `#${adjustedR.toString(16).padStart(2, '0')}${adjustedG\r\n .toString(16)\r\n .padStart(2, '0')}${adjustedB.toString(16).padStart(2, '0')}`\r\n}\r\n\r\nexport const getFieldsOnChange = (fields: any) => {\r\n const result: any = []\r\n\r\n function traverse(items: any) {\r\n for (const item of items) {\r\n if (item) {\r\n if (\r\n item?.type_co === 'field' &&\r\n matchDomains(fields, item?.on_change)\r\n ) {\r\n result.push(item.name)\r\n }\r\n if (item?.fields && Array.isArray(item?.fields)) {\r\n traverse(item?.fields)\r\n }\r\n }\r\n }\r\n }\r\n\r\n traverse(fields)\r\n return result\r\n}\r\n\r\n// filter field change\r\nexport const filterFieldDirty = ({\r\n id,\r\n viewData,\r\n formValues,\r\n dirtyFields,\r\n model,\r\n defaultData,\r\n}: {\r\n id?: any\r\n viewData?: any\r\n formValues?: any\r\n dirtyFields?: any\r\n model?: any\r\n defaultData?: any\r\n}) => {\r\n const data = id ? { ...dirtyFields } : { ...formValues }\r\n\r\n for (const key in data) {\r\n if (\r\n viewData?.models?.[model]?.[key]?.type === FieldTypeConstants.ONE2MANY\r\n ) {\r\n const lineData: any = []\r\n ;(formValues[key] ?? []).forEach((itemData: any, index: number) => {\r\n if (\r\n typeof itemData?.id === 'string' &&\r\n itemData?.id.includes('virtual')\r\n ) {\r\n delete itemData?.id\r\n }\r\n if (!itemData?.id) {\r\n lineData.push([\r\n MethodType.CREATE,\r\n `virtual_${index}`,\r\n filterFieldDirty({\r\n id: itemData?.id,\r\n viewData,\r\n formValues: itemData,\r\n dirtyFields: {},\r\n model: viewData?.models?.[model]?.[key]?.relation,\r\n defaultData: defaultData,\r\n }),\r\n ])\r\n } else if (dirtyFields[key]?.length) {\r\n // Thêm kiểm tra\r\n dirtyFields[key].forEach((itemDirty: any, indexDirty: number) => {\r\n if (\r\n Object.values(itemDirty).includes(true) &&\r\n indexDirty === index\r\n ) {\r\n lineData.push([\r\n MethodType.UPDATE,\r\n itemData?.id,\r\n filterFieldDirty({\r\n id: itemData?.id,\r\n viewData,\r\n formValues: itemData,\r\n dirtyFields: itemDirty,\r\n model: viewData?.models?.[model]?.[key]?.relation,\r\n defaultData: {},\r\n }),\r\n ])\r\n }\r\n })\r\n }\r\n })\r\n ;(defaultData[key] ?? []).forEach((item: any) => {\r\n if (\r\n !(formValues[key] ?? []).find(\r\n (itemData: any) => itemData?.id === item?.id\r\n )\r\n ) {\r\n lineData.push([MethodType.DELETE, item?.id, item])\r\n }\r\n })\r\n\r\n data[key] = lineData\r\n } else if (\r\n viewData?.models?.[model]?.[key]?.type === FieldTypeConstants.MANY2MANY\r\n ) {\r\n const lineData: any = []\r\n\r\n // Xử lý các item hiện tại\r\n ;(formValues[key] || []).forEach((itemData: any) => {\r\n if (itemData?.id) {\r\n lineData.push([MethodType.NO_CHANGE, itemData?.id])\r\n }\r\n })\r\n\r\n // Xử lý các item bị xóa\r\n ;(defaultData[key] ?? []).forEach((item: any) => {\r\n if (\r\n !(formValues[key] ?? []).find(\r\n (itemData: any) => itemData?.id === item?.id\r\n )\r\n ) {\r\n lineData.push([MethodType.UNLINK, item?.id])\r\n }\r\n })\r\n\r\n data[key] = lineData\r\n } else {\r\n if (\r\n id &&\r\n ((typeof dirtyFields?.[key] === 'object' && !dirtyFields?.[key]?.id) ||\r\n (typeof dirtyFields[key] !== 'object' && !dirtyFields[key]))\r\n ) {\r\n delete data[key]\r\n } else {\r\n if (!data[key]) {\r\n delete data[key]\r\n } else {\r\n data[key] = formValues?.[key]?.display_name\r\n ? formValues?.[key]?.id\r\n : formValues?.[key]\r\n }\r\n }\r\n }\r\n }\r\n\r\n return data\r\n}\r\n\r\n// Định nghĩa type generic cho các object\r\ntype MergeableObject = { [key: string]: any } | null | undefined\r\n\r\n// Hàm mergeObjects với type generic\r\nexport const mergeObjects = <\r\n T extends MergeableObject,\r\n U extends MergeableObject\r\n>(\r\n object1: T,\r\n object2: U\r\n): (T & U) | undefined => {\r\n if (!object1 || !object2) return undefined\r\n\r\n const mergedObject = { ...object2 } as any\r\n\r\n Object.keys(object1).forEach((key) => {\r\n if (Array.isArray(object1[key]) && Array.isArray(object2[key])) {\r\n mergedObject[key] = object2[key].map((item: any, index: number) => {\r\n if (object1[key][index]) {\r\n return {\r\n ...item,\r\n ...object1[key][index],\r\n }\r\n }\r\n return item\r\n })\r\n } else if (\r\n typeof object1[key] === 'object' &&\r\n typeof object2[key] === 'object' &&\r\n object1[key] !== null &&\r\n object2[key] !== null\r\n ) {\r\n mergedObject[key] = mergeObjects(object1[key], object2[key])\r\n } else {\r\n mergedObject[key] =\r\n object1[key] !== undefined ? object1[key] : object2[key]\r\n }\r\n })\r\n\r\n if (object2) {\r\n Object.keys(object2).forEach((key) => {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (!mergedObject.hasOwnProperty(key)) {\r\n mergedObject[key] = object2[key]\r\n }\r\n })\r\n }\r\n\r\n return mergedObject\r\n}\r\nexport const formatUrlPath = ({\r\n viewType,\r\n aid,\r\n model,\r\n id,\r\n actionPath,\r\n}: {\r\n viewType: 'list' | 'form' | 'kanban' | any\r\n actionPath: string\r\n aid: string | number\r\n model: string\r\n id?: string | number\r\n}) => {\r\n let _url = `/${viewType}/${actionPath}?aid=${aid}&model=${model}`\r\n if (id) {\r\n _url += `&id=${id}`\r\n }\r\n return _url\r\n}\r\n\r\nexport const removeUndefinedFields = <T extends Record<string, any>>(\r\n obj: T\r\n): Partial<T> => {\r\n const newObj: Partial<T> = {}\r\n for (const key in obj) {\r\n if (obj[key] !== undefined) {\r\n newObj[key] = obj[key]\r\n }\r\n }\r\n return newObj\r\n}\r\n\r\nexport const useTabModel = (viewData: any, onchangeData: any) => {\r\n const tabsData =\r\n viewData?.views?.form?.tabs?.filter((val: any) => {\r\n if (!val) return null\r\n const hide = checkDomain(onchangeData, val.invisible)\r\n if (!hide) {\r\n return val\r\n }\r\n return false\r\n }) || []\r\n\r\n return tabsData\r\n}\r\n\r\nexport const isBase64File = (str: any) => {\r\n try {\r\n // Kiểm tra xem có bắt đầu với `data:` không (data URI)\r\n const dataUriPattern = /^data:([a-zA-Z]+\\/[a-zA-Z0-9-.+]+)?;base64,/\r\n if (dataUriPattern.test(str)) {\r\n return true\r\n }\r\n\r\n // Kiểm tra xem có phải là một chuỗi Base64 hợp lệ không`\r\n const base64Pattern =\r\n // eslint-disable-next-line no-useless-escape\r\n /^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{3}=|[A-Za-z0-9+\\/]{2}==)?$/\r\n return base64Pattern.test(str)\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nexport const isBase64Image = (str: any) => {\r\n const base64Regex = /^data:image\\/(png|jpeg|jpg|gif|webp);base64,/\r\n\r\n if (!base64Regex.test(str)) {\r\n return false\r\n }\r\n\r\n try {\r\n const base64Data = str.split(',')[1]\r\n return !!base64Data && atob(base64Data).length > 0\r\n } catch (error) {\r\n return false\r\n }\r\n}\r\n\r\nexport const checkIsImageLink = (url: any) => {\r\n const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff|ico)$/i\r\n return imageExtensions.test(url) || isBase64Image(url)\r\n}\r\n\r\nexport const formatFileSize = (size: any) => {\r\n if (size < 1024) return `${size} B`\r\n const i = Math.floor(Math.log(size) / Math.log(1024))\r\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB']\r\n return `${(size / Math.pow(1024, i)).toFixed(2)} ${sizes[i]}`\r\n}\r\n\r\nexport const getSubdomain = (\r\n url: string = window.location.href\r\n): string | null => {\r\n const parts = url?.split('.')\r\n if (parts.length > 2) {\r\n return parts[0].replace('https://', '').replace('http://', '')\r\n }\r\n return null\r\n}\r\n\r\nexport const resequence = (arr: any, start: any, end: any) => {\r\n if (start < 0 || start >= arr.length || end < 0 || end >= arr.length) {\r\n return [] // Nếu index không hợp lệ, trả về mảng rỗng\r\n }\r\n\r\n // Lấy phần tử cần di chuyển\r\n const [element] = arr.splice(start, 1)\r\n\r\n // Chèn phần tử vào vị trí mới\r\n arr.splice(end, 0, element)\r\n\r\n // Trả về đoạn mảng đã thay đổi\r\n return arr.slice(Math.min(start, end), Math.max(start, end) + 1)\r\n}\r\n\r\nexport const getOffSet = (arr: any, start: any, end: any) => {\r\n if (start < 0 || start >= arr.length || end < 0 || end >= arr.length) {\r\n return 0 // Nếu start hoặc end không hợp lệ, trả về 0\r\n }\r\n\r\n // Nếu start > end, chỉ lấy từ 0 đến end\r\n if (start > end) {\r\n return end\r\n }\r\n\r\n return arr.slice(0, start).length\r\n}\r\n\r\nexport const copyTextToClipboard = async (text: string) => {\r\n if ('clipboard' in navigator) {\r\n return await navigator.clipboard.writeText(text)\r\n } else {\r\n // Fallback for browsers that do not support navigator.clipboard\r\n const textArea = document.createElement('textarea')\r\n textArea.value = text\r\n textArea.style.position = 'fixed' // Avoid scrolling to the bottom of the page in MS Edge.\r\n document.body.appendChild(textArea)\r\n textArea.focus()\r\n textArea.select()\r\n try {\r\n document.execCommand('copy')\r\n } finally {\r\n document.body.removeChild(textArea)\r\n }\r\n }\r\n}\r\n\r\nexport const updateTokenParamInOriginalRequest = (\r\n originalRequest: { data?: any },\r\n newAccessToken: string\r\n): any => {\r\n if (!originalRequest.data) return originalRequest.data\r\n\r\n if (typeof originalRequest.data === 'string') {\r\n try {\r\n const parsedData = JSON.parse(originalRequest.data)\r\n if (\r\n parsedData.with_context &&\r\n typeof parsedData.with_context === 'object'\r\n ) {\r\n parsedData.with_context.token = newAccessToken\r\n }\r\n return JSON.stringify(parsedData)\r\n } catch (e) {\r\n console.warn('Failed to parse originalRequest.data', e)\r\n return originalRequest.data\r\n }\r\n }\r\n\r\n if (\r\n typeof originalRequest.data === 'object' &&\r\n originalRequest.data.with_context\r\n ) {\r\n originalRequest.data.with_context.token = newAccessToken\r\n }\r\n\r\n return originalRequest.data\r\n}\r\n\r\nexport const isObjectEmpty = (obj: object): boolean => {\r\n return Object.keys(obj).length === 0\r\n}\r\n\r\nexport const useField = (props: any) => {\r\n const [invisible, setInvisible] = useState(true)\r\n const [required, setRequired] = useState(false)\r\n const [readonly, setReadOnly] = useState(false)\r\n const {\r\n invisible: inv,\r\n required: req,\r\n readonly: rea,\r\n onchangeData,\r\n rootField,\r\n index,\r\n name,\r\n } = props\r\n const nameField = rootField ? `${rootField?.name}.${index}.${name}` : null\r\n useEffect(() => {\r\n if (onchangeData && Object.keys(onchangeData).length > 0) {\r\n setRequired(\r\n typeof req === 'object'\r\n ? matchDomains(onchangeData, req)\r\n : checkDomain(onchangeData, req)\r\n )\r\n setInvisible(matchDomains(onchangeData, inv))\r\n setReadOnly(\r\n typeof req === 'object'\r\n ? matchDomains(onchangeData, rea)\r\n : checkDomain(onchangeData, rea)\r\n )\r\n }\r\n }, [onchangeData])\r\n\r\n return {\r\n invisible,\r\n required,\r\n readonly,\r\n nameField,\r\n }\r\n}\r\n","export const localStorageUtils = () => {\r\n const setToken = async (access_token: string) => {\r\n localStorage.setItem('accessToken', access_token)\r\n }\r\n const setRefreshToken = async (refresh_token: string) => {\r\n localStorage.setItem('refreshToken', refresh_token)\r\n }\r\n const getAccessToken = async (): Promise<string | null> => {\r\n return localStorage.getItem('accessToken')\r\n }\r\n const getRefreshToken = async (): Promise<string | null> => {\r\n return localStorage.getItem('refreshToken')\r\n }\r\n\r\n const clearToken = async () => {\r\n localStorage.removeItem('accessToken')\r\n localStorage.removeItem('refreshToken')\r\n }\r\n\r\n return {\r\n setToken,\r\n setRefreshToken,\r\n getAccessToken,\r\n getRefreshToken,\r\n clearToken,\r\n }\r\n}\r\nexport type LocalStorageUtilsType = ReturnType<typeof localStorageUtils>\r\n","export const sessionStorageUtils = () => {\r\n const getBrowserSession = async (): Promise<string | null> => {\r\n return sessionStorage.getItem('browserSession')\r\n }\r\n return {\r\n getBrowserSession,\r\n }\r\n}\r\n\r\nexport type SessionStorageUtilsType = ReturnType<typeof sessionStorageUtils>\r\n","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'\r\n\r\nimport { envStore } from './store'\r\n\r\nexport * from './reducers/breadcrums-slice'\r\nexport * from './reducers/env-slice'\r\nexport * from './reducers/excel-slice'\r\nexport * from './reducers/form-slice'\r\nexport * from './reducers/header-slice'\r\nexport * from './reducers/list-slice'\r\nexport * from './reducers/login-slice'\r\nexport * from './reducers/navbar-slice'\r\nexport * from './reducers/profile-slice'\r\nexport * from './reducers/search-slice'\r\nexport * from './store'\r\n\r\nexport type RootState = ReturnType<typeof envStore.getState>\r\nexport type AppDispatch = typeof envStore.dispatch\r\nexport const useAppDispatch: () => AppDispatch = useDispatch\r\nexport const useAppSelector: TypedUseSelectorHook<RootState> = useSelector\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\ninterface Breadcrumb {\r\n title?: string\r\n path?: string\r\n view: 'list' | 'detail' | 'edit' | 'tree'\r\n aid: string | number\r\n model: string\r\n id: string | number\r\n}\r\n\r\nexport interface BreadcrumbsState {\r\n breadCrumbs: Breadcrumb[]\r\n}\r\n\r\nconst initialState: BreadcrumbsState = {\r\n breadCrumbs: [],\r\n}\r\n\r\n// Type cho Redux slice\r\nexport const breadcrumbsSlice = createSlice({\r\n name: 'breadcrumbs',\r\n initialState,\r\n reducers: {\r\n setBreadCrumbs: (\r\n state: BreadcrumbsState,\r\n action: PayloadAction<Breadcrumb>\r\n ) => {\r\n state.breadCrumbs = [...state.breadCrumbs, action.payload]\r\n },\r\n },\r\n})\r\n\r\nexport const { setBreadCrumbs } = breadcrumbsSlice.actions\r\n\r\nexport const selectBreadCrumbs = (state: RootState) => state.breadcrumbs\r\n\r\nexport default breadcrumbsSlice.reducer\r\n","import { createSlice } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nconst initialState = {\r\n baseUrl: '',\r\n requests: null,\r\n companies: [],\r\n user: {},\r\n config: null,\r\n envFile: null,\r\n defaultCompany: {\r\n id: null,\r\n logo: '',\r\n secondary_color: '',\r\n primary_color: '',\r\n },\r\n context: {\r\n uid: null,\r\n allowed_company_ids: [],\r\n lang: 'vi_VN',\r\n tz: 'Asia/Saigon',\r\n },\r\n}\r\n\r\nexport const envSlice = createSlice({\r\n name: 'env',\r\n initialState: initialState,\r\n reducers: {\r\n setEnv: (state, action) => {\r\n Object.assign(state, action.payload)\r\n },\r\n setUid: (state, action) => {\r\n state.context.uid = action.payload\r\n },\r\n setAllowCompanies: (state, action) => {\r\n state.context.allowed_company_ids = action.payload\r\n },\r\n setCompanies: (state, action) => {\r\n state.companies = action.payload\r\n },\r\n setDefaultCompany: (state, action) => {\r\n state.defaultCompany = action.payload\r\n },\r\n setLang: (state, action) => {\r\n state.context.lang = action.payload\r\n },\r\n setUser: (state, action) => {\r\n state.user = action.payload\r\n },\r\n setConfig: (state, action) => {\r\n state.config = action.payload\r\n },\r\n setEnvFile: (state, action) => {\r\n state.envFile = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const {\r\n setEnv,\r\n setUid,\r\n setLang,\r\n setAllowCompanies,\r\n setCompanies,\r\n setDefaultCompany,\r\n setUser,\r\n setConfig,\r\n setEnvFile,\r\n} = envSlice.actions\r\n\r\nexport const selectEnv = (state: RootState) => state.env\r\n\r\nexport default envSlice.reducer\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface ExcelState {\r\n dataParse: any | null\r\n idFile: any | null\r\n isFileLoaded: boolean\r\n loadingImport: any\r\n selectedFile: any\r\n errorData: any\r\n}\r\n\r\nconst initialState: ExcelState = {\r\n dataParse: null,\r\n idFile: null,\r\n isFileLoaded: false,\r\n loadingImport: false,\r\n selectedFile: null,\r\n errorData: null,\r\n}\r\n\r\n// Tạo slice\r\nexport const excelSlice = createSlice({\r\n name: 'excel',\r\n initialState,\r\n reducers: {\r\n setDataParse: (state, action: PayloadAction<any>) => {\r\n state.dataParse = action.payload\r\n },\r\n setIdFile: (state, action: PayloadAction<any>) => {\r\n state.idFile = action.payload\r\n },\r\n setIsFileLoaded: (state, action: PayloadAction<any>) => {\r\n state.isFileLoaded = action.payload\r\n },\r\n setLoadingImport: (state, action: PayloadAction<any>) => {\r\n state.loadingImport = action.payload\r\n },\r\n setSelectedFile: (state, action: PayloadAction<any>) => {\r\n state.selectedFile = action.payload\r\n },\r\n setErrorData: (state, action: PayloadAction<any>) => {\r\n state.errorData = action.payload\r\n },\r\n },\r\n})\r\n\r\n// Export actions\r\nexport const {\r\n setDataParse,\r\n setIdFile,\r\n setIsFileLoaded,\r\n setLoadingImport,\r\n setSelectedFile,\r\n setErrorData,\r\n} = excelSlice.actions\r\n\r\nexport const selectExcel = (state: RootState) => state.excel\r\n\r\n// Export reducer\r\nexport default excelSlice.reducer\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface ViewDataStore {\r\n [key: string]: any\r\n}\r\n\r\nexport interface FormState {\r\n viewDataStore: ViewDataStore\r\n isShowingModalDetail: boolean\r\n isShowModalTranslate: boolean\r\n formSubmitComponent: Record<string, React.ReactNode>\r\n fieldTranslation: any\r\n listSubject: any\r\n dataUser: any\r\n}\r\n\r\nconst initialState: FormState = {\r\n viewDataStore: {},\r\n isShowingModalDetail: false,\r\n isShowModalTranslate: false,\r\n formSubmitComponent: {},\r\n fieldTranslation: null,\r\n listSubject: {},\r\n dataUser: {},\r\n}\r\n\r\n// Tạo slice\r\nexport const formSlice = createSlice({\r\n name: 'form',\r\n initialState: initialState,\r\n reducers: {\r\n setViewDataStore: (\r\n state: FormState,\r\n action: PayloadAction<ViewDataStore>\r\n ) => {\r\n state.viewDataStore = action.payload\r\n },\r\n setIsShowingModalDetail: (\r\n state: FormState,\r\n action: PayloadAction<boolean>\r\n ) => {\r\n state.isShowingModalDetail = action.payload\r\n },\r\n setIsShowModalTranslate: (\r\n state: FormState,\r\n action: PayloadAction<boolean>\r\n ) => {\r\n state.isShowModalTranslate = action.payload\r\n },\r\n setFormSubmitComponent: (\r\n state,\r\n action: PayloadAction<{ key: string; component: any }>\r\n ) => {\r\n state.formSubmitComponent[action.payload.key] = action.payload.component\r\n },\r\n setFieldTranslate: (state: FormState, action: PayloadAction<any>) => {\r\n state.fieldTranslation = action.payload\r\n },\r\n setListSubject: (state: FormState, action: PayloadAction<any>) => {\r\n state.listSubject = action.payload\r\n },\r\n setDataUser: (state: FormState, action: PayloadAction<any>) => {\r\n state.dataUser = action.payload\r\n },\r\n },\r\n})\r\n\r\n// Export actions\r\nexport const {\r\n setViewDataStore,\r\n setIsShowingModalDetail,\r\n setIsShowModalTranslate,\r\n setFormSubmitComponent,\r\n setFieldTranslate,\r\n setListSubject,\r\n setDataUser,\r\n} = formSlice.actions\r\n\r\nexport const selectForm = (state: RootState) => state.form\r\n\r\n// Export reducer\r\nexport default formSlice.reducer\r\n","import { createSlice } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport const headerSlice = createSlice({\r\n name: 'header',\r\n initialState: {\r\n value: { allowedCompanyIds: [] },\r\n },\r\n reducers: {\r\n setHeader: (state, action) => {\r\n state.value = { ...state.value, ...action.payload }\r\n },\r\n\r\n setAllowedCompanyIds: (state, action) => {\r\n state.value.allowedCompanyIds = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const { setAllowedCompanyIds, setHeader } = headerSlice.actions\r\n\r\nexport const selectHeader = (state: RootState) => state.header\r\n\r\nexport default headerSlice.reducer\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface ListState {\r\n pageLimit: number\r\n fields: Record<string, any>\r\n order: string | null\r\n selectedRowKeys: number[]\r\n selectedRadioKey: any\r\n indexRowTableModal: number\r\n isUpdateTableModal: boolean\r\n footerGroupTable: Record<string, any>\r\n page: number\r\n transferDetail?: any\r\n domainTable?: any\r\n}\r\n\r\nconst initialState: ListState = {\r\n pageLimit: 10,\r\n fields: {},\r\n order: '',\r\n selectedRowKeys: [],\r\n selectedRadioKey: 0,\r\n indexRowTableModal: -2,\r\n isUpdateTableModal: false,\r\n footerGroupTable: {},\r\n transferDetail: null,\r\n page: 0,\r\n domainTable: [],\r\n}\r\n\r\nexport const listSlice = createSlice({\r\n name: 'list',\r\n initialState,\r\n reducers: {\r\n setPageLimit: (state, action: PayloadAction<number>) => {\r\n state.pageLimit = action.payload\r\n },\r\n setFields: (state, action: PayloadAction<Record<string, any>>) => {\r\n state.fields = action.payload\r\n },\r\n setOrder: (state, action: PayloadAction<string | null>) => {\r\n state.order = action.payload\r\n },\r\n setSelectedRowKeys: (state, action: PayloadAction<number[]>) => {\r\n state.selectedRowKeys = action.payload\r\n },\r\n setSelectedRadioKey: (state, action: any) => {\r\n state.selectedRadioKey = action.payload\r\n },\r\n setIndexRowTableModal: (state, action: PayloadAction<number>) => {\r\n state.indexRowTableModal = action.payload\r\n },\r\n setTransferDetail: (state, action: any) => {\r\n state.transferDetail = action.payload\r\n },\r\n setIsUpdateTableModal: (state, action: PayloadAction<boolean>) => {\r\n state.isUpdateTableModal = action.payload\r\n },\r\n setPage: (state, action: PayloadAction<number>) => {\r\n state.page = action.payload\r\n },\r\n\r\n setDomainTable: (state, action: PayloadAction<any[]>) => {\r\n state.domainTable = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const {\r\n setPageLimit,\r\n setFields,\r\n setOrder,\r\n setSelectedRowKeys,\r\n setIndexRowTableModal,\r\n setIsUpdateTableModal,\r\n setPage,\r\n setSelectedRadioKey,\r\n setTransferDetail,\r\n setDomainTable,\r\n} = listSlice.actions\r\n\r\nexport const selectList = (state: RootState) => state.list\r\n\r\nexport default listSlice.reducer\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\nimport { RootState } from '../..'\r\nexport interface LoginStateType {\r\n db: string\r\n redirectTo: string\r\n forgotPasswordUrl: string\r\n}\r\n\r\nconst initialState: LoginStateType = {\r\n db: '',\r\n redirectTo: '/',\r\n forgotPasswordUrl: '/',\r\n}\r\n\r\nexport const loginSlice = createSlice({\r\n name: 'login',\r\n initialState: initialState,\r\n reducers: {\r\n setDb: (state, action: PayloadAction<string>) => {\r\n state.db = action.payload\r\n },\r\n setRedirectTo: (state, action: PayloadAction<string>) => {\r\n state.redirectTo = action.payload\r\n },\r\n setForgotPasswordUrl: (state, action: PayloadAction<string>) => {\r\n state.forgotPasswordUrl = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const { setDb, setRedirectTo, setForgotPasswordUrl } = loginSlice.actions\r\n\r\nexport const selectLogin = (state: RootState) => state.login\r\n\r\nexport default loginSlice.reducer\r\n","import { createSlice } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface NavbarStateType {\r\n menuFocus: any\r\n menuAction: any\r\n navbarWidth: number\r\n menuList: any\r\n}\r\n\r\nconst initialState: NavbarStateType = {\r\n menuFocus: {},\r\n menuAction: {},\r\n navbarWidth: 250,\r\n menuList: [],\r\n}\r\n\r\nexport const navbarSlice = createSlice({\r\n name: 'navbar',\r\n initialState: initialState,\r\n reducers: {\r\n setMenuFocus: (state, action) => {\r\n state.menuFocus = action.payload\r\n },\r\n setMenuFocusAction: (state, action) => {\r\n state.menuAction = action.payload\r\n },\r\n setNavbarWidth: (state, action) => {\r\n state.navbarWidth = action.payload\r\n },\r\n setMenuList: (state, action) => {\r\n state.menuList = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const { setMenuFocus, setMenuFocusAction, setNavbarWidth, setMenuList } =\r\n navbarSlice.actions\r\n\r\nexport const selectNavbar = (state: RootState) => state.navbar\r\n\r\nexport default navbarSlice.reducer\r\n","import { createSlice } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface UserInfor {\r\n address?: {\r\n country?: boolean\r\n formatted?: string\r\n locality?: boolean\r\n postal_code?: boolean\r\n region?: boolean\r\n street_address?: boolean\r\n }\r\n email?: string\r\n locale?: string\r\n name?: string\r\n partner_id?: {\r\n id?: number\r\n stud_id?: boolean\r\n }\r\n phone_number?: boolean\r\n sub?: number\r\n updated_at?: string\r\n username?: string\r\n website?: boolean\r\n zoneinfo?: string\r\n image?: string\r\n}\r\n\r\nexport interface ProfileStateType {\r\n profile: UserInfor\r\n}\r\n\r\nconst initialState: ProfileStateType = {\r\n profile: {},\r\n}\r\n\r\nexport const profileSlice = createSlice({\r\n name: 'profile',\r\n initialState: initialState,\r\n reducers: {\r\n setProfile: (state, action) => {\r\n state.profile = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const { setProfile } = profileSlice.actions\r\n\r\nexport const selectProfile = (state: RootState) => state.profile\r\n\r\nexport default profileSlice.reducer\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface SearchState {\r\n groupByDomain: any\r\n searchBy: any\r\n searchString: string\r\n hoveredIndexSearchList: any\r\n selectedTags: []\r\n firstDomain: any\r\n searchMap: Record<string, any[]>\r\n filterBy: any\r\n groupBy: any\r\n}\r\n\r\nconst initialState: SearchState = {\r\n groupByDomain: null,\r\n searchBy: [],\r\n searchString: '',\r\n hoveredIndexSearchList: null,\r\n selectedTags: [],\r\n firstDomain: null,\r\n searchMap: {},\r\n filterBy: [],\r\n groupBy: [],\r\n}\r\n\r\nexport const searchSlice = createSlice({\r\n name: 'search',\r\n initialState,\r\n reducers: {\r\n setGroupByDomain: (state, action: PayloadAction<string | null>) => {\r\n state.groupByDomain = action.payload\r\n },\r\n setSearchBy: (state, action: any) => {\r\n state.searchBy = action.payload\r\n },\r\n setSearchString: (state, action: PayloadAction<string>) => {\r\n state.searchString = action.payload\r\n },\r\n setHoveredIndexSearchList: (\r\n state,\r\n action: PayloadAction<number | null>\r\n ) => {\r\n state.hoveredIndexSearchList = action.payload\r\n },\r\n setSelectedTags: (state, action: PayloadAction<any>) => {\r\n state.selectedTags = action.payload\r\n },\r\n setFirstDomain: (state, action: PayloadAction<any>) => {\r\n state.firstDomain = action.payload\r\n },\r\n setFilterBy: (state, action: PayloadAction<any>) => {\r\n state.filterBy = action.payload\r\n },\r\n setGroupBy: (state, action: PayloadAction<any>) => {\r\n state.groupBy = action.payload\r\n },\r\n setSearchMap: (state, action: PayloadAction<Record<string, any>>) => {\r\n state.searchMap = action.payload\r\n },\r\n updateSearchMap: (\r\n state,\r\n action: PayloadAction<{ key: string; value: any }>\r\n ) => {\r\n if (!state.searchMap[action.payload.key]) {\r\n state.searchMap[action.payload.key] = [] // Tạo mảng nếu chưa có key\r\n }\r\n state.searchMap[action.payload.key].push(action.payload.value)\r\n },\r\n removeKeyFromSearchMap: (\r\n state,\r\n action: PayloadAction<{ key: string; item?: any }>\r\n ) => {\r\n const { key, item } = action.payload\r\n const values = state.searchMap[key]\r\n\r\n if (!values) return\r\n\r\n if (item) {\r\n const filtered = values.filter((value: any) => value.name !== item.name)\r\n if (filtered.length > 0) {\r\n state.searchMap[key] = filtered\r\n } else {\r\n delete state.searchMap[key]\r\n }\r\n } else {\r\n delete state.searchMap[key]\r\n }\r\n },\r\n clearSearchMap: (state) => {\r\n state.searchMap = {}\r\n },\r\n },\r\n})\r\n\r\nexport const {\r\n setGroupByDomain,\r\n setSelectedTags,\r\n setSearchString,\r\n setHoveredIndexSearchList,\r\n setFirstDomain,\r\n setSearchBy,\r\n setFilterBy,\r\n setSearchMap,\r\n updateSearchMap,\r\n removeKeyFromSearchMap,\r\n setGroupBy,\r\n clearSearchMap,\r\n} = searchSlice.actions\r\n\r\nexport const selectSearch = (state: RootState) => state.search\r\nexport const selectSearchMap = (state: RootState) => state.search.searchMap\r\n\r\nexport default searchSlice.reducer\r\n","import { configureStore } from '@reduxjs/toolkit'\r\nimport { combineReducers } from 'redux'\r\n\r\nimport breadcrumbsReducer from './reducers/breadcrums-slice'\r\nimport envReducer from './reducers/env-slice'\r\nimport excelReducer from './reducers/excel-slice'\r\nimport formReducer from './reducers/form-slice'\r\nimport headerReducer from './reducers/header-slice'\r\nimport listReducer from './reducers/list-slice'\r\nimport loginReducer from './reducers/login-slice'\r\nimport navbarReducer from './reducers/navbar-slice'\r\nimport profileReducer from './reducers/profile-slice'\r\nimport searchReducer from './reducers/search-slice'\r\n\r\nconst rootReducer = combineReducers({\r\n env: envReducer,\r\n header: headerReducer,\r\n navbar: navbarReducer,\r\n list: listReducer,\r\n search: searchReducer,\r\n form: formReducer,\r\n breadcrumbs: breadcrumbsReducer,\r\n login: loginReducer,\r\n excel: excelReducer,\r\n profile: profileReducer,\r\n})\r\n\r\nexport const envStore = configureStore({\r\n reducer: rootReducer,\r\n middleware: (getDefaultMiddleware) =>\r\n getDefaultMiddleware({\r\n serializableCheck: false,\r\n }),\r\n})\r\n","/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nexport function formatProdErrorMessage(code: number) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}","declare global {\n interface SymbolConstructor {\n readonly observable: symbol;\n }\n}\nconst $$observable = /* #__PURE__ */(() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\nexport default $$observable;","/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\nconst randomString = () => Math.random().toString(36).substring(7).split('').join('.');\nconst ActionTypes = {\n INIT: `@@redux/INIT${/* #__PURE__ */randomString()}`,\n REPLACE: `@@redux/REPLACE${/* #__PURE__ */randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nexport default ActionTypes;","/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: any): obj is object {\n if (typeof obj !== 'object' || obj === null) return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}","// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nexport function miniKindOf(val: any): string {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n const type = typeof val;\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n const constructorName = ctorName(val);\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n }\n\n // other\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\nfunction ctorName(val: any): string | null {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\nfunction isError(val: any) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\nfunction isDate(val: any) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\nexport function kindOf(val: any) {\n let typeOfVal: string = typeof val;\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}","import { formatProdErrorMessage as _formatProdErrorMessage13 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage12 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage11 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage10 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage9 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage8 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage7 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport $$observable from './utils/symbol-observable';\nimport { Store, StoreEnhancer, Dispatch, Observer, ListenerCallback, UnknownIfNonSpecific } from './types/store';\nimport { Action } from './types/actions';\nimport { Reducer } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport { kindOf } from './utils/kindOf';\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = (preloadedState as StoreEnhancer<Ext, StateExt>);\n preloadedState = undefined;\n }\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, (preloadedState as PreloadedState | undefined));\n }\n let currentReducer = reducer;\n let currentState: S | PreloadedState | undefined = (preloadedState as PreloadedState | undefined);\n let currentListeners: Map<number, ListenerCallback> | null = new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns The current state tree of your application.\n */\n function getState(): S {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n return (currentState as S);\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param listener A callback to be invoked on every dispatch.\n * @returns A function to remove this change listener.\n */\n function subscribe(listener: () => void) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action: A) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage9(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== 'string') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage10(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage11(9) : 'Reducers may not dispatch actions.');\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach(listener => {\n listener();\n });\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param nextReducer The reducer for the store to use instead.\n */\n function replaceReducer(nextReducer: Reducer<S, A>): void {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage12(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = ((nextReducer as unknown) as Reducer<S, A, PreloadedState>);\n\n // This action has a similar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n dispatch(({\n type: ActionTypes.REPLACE\n } as A));\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer: unknown) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage13(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = (observer as Observer<S>);\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [$$observable]() {\n return this;\n }\n };\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch(({\n type: ActionTypes.INIT\n } as A));\n const store = (({\n dispatch: (dispatch as Dispatch<A>),\n subscribe,\n getState,\n replaceReducer,\n [$$observable]: observable\n } as unknown) as Store<S, A, StateExt> & Ext);\n return store;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n return createStore(reducer, (preloadedState as any), enhancer);\n}","/**\n * Prints a warning in the console if it exists.\n *\n * @param message The warning message.\n */\nexport default function warning(message: string): void {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n}","import { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Action } from './types/actions';\nimport { ActionFromReducersMapObject, PreloadedStateShapeFromReducersMapObject, Reducer, StateFromReducersMapObject } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport warning from './utils/warning';\nimport { kindOf } from './utils/kindOf';\nfunction getUnexpectedStateShapeWarningMessage(inputState: object, reducers: {\n [key: string]: Reducer<any, any, any>;\n}, action: Action, unexpectedKeyCache: {\n [key: string]: true;\n}) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following ` + `keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter(key => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach(key => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? 'keys' : 'key'} ` + `\"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. ` + `Expected to find one of the known reducer keys instead: ` + `\"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers: {\n [key: string]: Reducer<any, any, any>;\n}) {\n Object.keys(reducers).forEach(key => {\n const reducer = reducers[key];\n const initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n }\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. ` + `Don't try to handle '${ActionTypes.INIT}' or other actions in \"redux/*\" ` + `namespace. They are considered private. Instead, you must return the ` + `current state for any unknown actions, unless it is undefined, ` + `in which case you must return the initial state, regardless of the ` + `action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @template S Combined state object type.\n *\n * @param reducers An object whose values correspond to different reducer\n * functions that need to be combined into one. One handy way to obtain it\n * is to use `import * as reducers` syntax. The reducers may never\n * return undefined for any action. Instead, they should return their\n * initial state if the state passed to them was undefined, and the current\n * state for any unrecognized action.\n *\n * @returns A reducer function that invokes every reducer inside the passed\n * object, and builds a state object with the same shape.\n */\nexport default function combineReducers<M>(reducers: M): M[keyof M] extends Reducer<any, any, any> | undefined ? Reducer<StateFromReducersMapObject<M>, ActionFromReducersMapObject<M>, Partial<PreloadedStateShapeFromReducersMapObject<M>>> : never;\nexport default function combineReducers(reducers: {\n [key: string]: Reducer<any, any, any>;\n}) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers: {\n [key: string]: Reducer<any, any, any>;\n } = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n\n // This is used to make sure we don't warn about the same\n // keys multiple times.\n let unexpectedKeyCache: {\n [key: string]: true;\n };\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError: unknown;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state: StateFromReducersMapObject<typeof reducers> = {}, action: Action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== 'production') {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState: StateFromReducersMapObject<typeof reducers> = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === 'undefined') {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : '(unknown type)'}, the slice reducer for key \"${key}\" returned undefined. ` + `To ignore an action, you must explicitly return the previous state. ` + `If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Dispatch } from './types/store';\nimport { ActionCreator, ActionCreatorsMapObject, Action } from './types/actions';\nimport { kindOf } from './utils/kindOf';\nfunction bindActionCreator<A extends Action>(actionCreator: ActionCreator<A>, dispatch: Dispatch<A>) {\n return function (this: any, ...args: any[]) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\n\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use `import * as`\n * syntax. You may also pass a single function.\n *\n * @param dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\nexport default function bindActionCreators<A, C extends ActionCreator<A>>(actionCreator: C, dispatch: Dispatch): C;\nexport default function bindActionCreators<A extends ActionCreator<any>, B extends ActionCreator<any>>(actionCreator: A, dispatch: Dispatch): B;\nexport default function bindActionCreators<A, M extends ActionCreatorsMapObject<A>>(actionCreators: M, dispatch: Dispatch): M;\nexport default function bindActionCreators<M extends ActionCreatorsMapObject, N extends ActionCreatorsMapObject>(actionCreators: M, dispatch: Dispatch): N;\nexport default function bindActionCreators(actionCreators: ActionCreator<any> | ActionCreatorsMapObject, dispatch: Dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. ` + `Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n }\n const boundActionCreators: ActionCreatorsMapObject = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}","type Func<T extends any[], R> = (...a: T) => R;\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for the\n * resulting composite function.\n *\n * @param funcs The functions to compose.\n * @returns A function obtained by composing the argument functions from right\n * to left. For example, `compose(f, g, h)` is identical to doing\n * `(...args) => f(g(h(...args)))`.\n */\nexport default function compose(): <R>(a: R) => R;\nexport default function compose<F extends Function>(f: F): F;\n\n/* two functions */\nexport default function compose<A, T extends any[], R>(f1: (a: A) => R, f2: Func<T, A>): Func<T, R>;\n\n/* three functions */\nexport default function compose<A, B, T extends any[], R>(f1: (b: B) => R, f2: (a: A) => B, f3: Func<T, A>): Func<T, R>;\n\n/* four functions */\nexport default function compose<A, B, C, T extends any[], R>(f1: (c: C) => R, f2: (b: B) => C, f3: (a: A) => B, f4: Func<T, A>): Func<T, R>;\n\n/* rest */\nexport default function compose<R>(f1: (a: any) => R, ...funcs: Function[]): (...args: any[]) => R;\nexport default function compose<R>(...funcs: Function[]): (...args: any[]) => R;\nexport default function compose(...funcs: Function[]) {\n if (funcs.length === 0) {\n // infer the argument type so it is usable in inference down the line\n return <T,>(arg: T) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args: any) => a(b(...args)));\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport compose from './compose';\nimport { Middleware, MiddlewareAPI } from './types/middleware';\nimport { StoreEnhancer, Dispatch } from './types/store';\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param middlewares The middleware chain to be applied.\n * @returns A store enhancer applying the middleware.\n *\n * @template Ext Dispatch signature added by a middleware.\n * @template S The type of the state supported by a middleware.\n */\nexport default function applyMiddleware(): StoreEnhancer;\nexport default function applyMiddleware<Ext1, S>(middleware1: Middleware<Ext1, S, any>): StoreEnhancer<{\n dispatch: Ext1;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3 & Ext4;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, Ext5, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>, middleware5: Middleware<Ext5, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3 & Ext4 & Ext5;\n}>;\nexport default function applyMiddleware<Ext, S = any>(...middlewares: Middleware<any, S, any>[]): StoreEnhancer<{\n dispatch: Ext;\n}>;\nexport default function applyMiddleware(...middlewares: Middleware[]): StoreEnhancer<any> {\n return createStore => (reducer, preloadedState) => {\n const store = createStore(reducer, preloadedState);\n let dispatch: Dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n const middlewareAPI: MiddlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map(middleware => middleware(middlewareAPI));\n dispatch = compose<typeof dispatch>(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}","import { Action } from '../types/actions';\nimport isPlainObject from './isPlainObject';\nexport default function isAction(action: unknown): action is Action<string> {\n return isPlainObject(action) && 'type' in action && typeof (action as Record<'type', unknown>).type === 'string';\n}","import { EnhancedStore } from '@reduxjs/toolkit'\r\n\r\nimport { axiosClient } from '../configs'\r\nimport {\r\n envStore,\r\n setAllowCompanies,\r\n setCompanies,\r\n setDefaultCompany,\r\n setEnv,\r\n setLang,\r\n setUid,\r\n setUser,\r\n} from '../store'\r\nimport {\r\n localStorageUtils,\r\n LocalStorageUtilsType,\r\n sessionStorageUtils,\r\n SessionStorageUtilsType,\r\n} from '../utils/storage'\r\n\r\ndeclare global {\r\n interface Global {\r\n envStore?: EnvStore\r\n }\r\n\r\n interface Window {\r\n envStore?: EnvStore\r\n }\r\n}\r\n\r\nexport class EnvStore {\r\n envStore: EnhancedStore | any\r\n baseUrl?: string\r\n requests?: any\r\n context?: any\r\n defaultCompany?: any\r\n config?: any\r\n companies?: any[]\r\n user?: any\r\n db?: string\r\n localStorageUtils?: any\r\n sessionStorageUtils?: any\r\n refreshTokenEndpoint?: string\r\n\r\n constructor(\r\n envStore: EnhancedStore,\r\n localStorageUtils?: any,\r\n sessionStorageUtils?: any\r\n ) {\r\n this.envStore = envStore\r\n this.localStorageUtils = localStorageUtils\r\n this.sessionStorageUtils = sessionStorageUtils\r\n this.setup()\r\n }\r\n\r\n setup() {\r\n const env = this.envStore.getState().env\r\n this.baseUrl = env?.baseUrl\r\n this.requests = env?.requests\r\n this.context = env?.context\r\n this.defaultCompany = env?.defaultCompany\r\n this.config = env?.config\r\n this.companies = env?.companies || []\r\n this.user = env?.user\r\n this.db = env?.db\r\n this.refreshTokenEndpoint = env?.refreshTokenEndpoint\r\n }\r\n\r\n setupEnv(envConfig: EnvStore) {\r\n const dispatch = this.envStore.dispatch\r\n const env: any = {\r\n ...envConfig,\r\n localStorageUtils: this.localStorageUtils,\r\n sessionStorageUtils: this.sessionStorageUtils,\r\n }\r\n const requests = axiosClient.init(env)\r\n dispatch(setEnv({ ...env, requests }))\r\n this.setup()\r\n }\r\n\r\n setUid(uid: number) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setUid(uid))\r\n this.setup()\r\n }\r\n\r\n setLang(lang: string) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setLang(lang))\r\n this.setup()\r\n }\r\n\r\n setAllowCompanies(allowCompanies: number[]) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setAllowCompanies(allowCompanies))\r\n this.setup()\r\n }\r\n\r\n setCompanies(companies: any[]) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setCompanies(companies))\r\n this.setup()\r\n }\r\n\r\n setDefaultCompany(company: any) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setDefaultCompany(company))\r\n this.setup()\r\n }\r\n\r\n setUserInfo(userInfo: any) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setUser(userInfo))\r\n this.setup()\r\n }\r\n}\r\n\r\nexport let env: EnvStore | null = null\r\n\r\nexport function initEnv({\r\n localStorageUtils,\r\n sessionStorageUtils,\r\n}: {\r\n localStorageUtils?: LocalStorageUtilsType\r\n sessionStorageUtils?: SessionStorageUtilsType\r\n}): EnvStore {\r\n env = new EnvStore(envStore, localStorageUtils, sessionStorageUtils)\r\n return env\r\n}\r\n\r\nexport function getEnv(): EnvStore {\r\n if (!env)\r\n env = new EnvStore(envStore, localStorageUtils(), sessionStorageUtils())\r\n // throw new Error('EnvStore has not been initialized — call initEnv() first')\r\n return env\r\n}\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useForgotPassword = () => {\r\n return useMutation({\r\n mutationFn: (email: string) => {\r\n return AuthService.forgotPassword(email)\r\n },\r\n })\r\n}\r\n\r\nexport default useForgotPassword\r\n","import { UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\nimport { toQueryString } from '../../utils'\r\n\r\nimport { ContextApi } from './../../types/api-type'\r\n\r\nconst ActionService = {\r\n // Load Action\r\n async loadAction({\r\n idAction,\r\n context,\r\n }: {\r\n idAction: number\r\n context: ContextApi\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n action_id: idAction,\r\n with_context: {\r\n ...context,\r\n },\r\n }\r\n return env.requests.post(`${UriConstants.LOAD_ACTION}`, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n // Call Button\r\n async callButton({\r\n model,\r\n ids = [],\r\n context,\r\n method,\r\n }: {\r\n model: string\r\n ids: Record<string, any>[] | any\r\n context: ContextApi\r\n method: any\r\n }) {\r\n try {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: method,\r\n ids: ids,\r\n with_context: context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when calling button action:', error)\r\n throw error\r\n }\r\n },\r\n\r\n // remove Row\r\n async removeRows({\r\n model,\r\n ids,\r\n context,\r\n }: {\r\n model: string\r\n ids: Record<string, any>[] | any\r\n context: ContextApi\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: 'unlink',\r\n ids: ids,\r\n with_context: context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n // Duplicate Model\r\n async duplicateRecord({\r\n model,\r\n id,\r\n context,\r\n }: {\r\n model: string\r\n id: any\r\n context: ContextApi\r\n }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: model,\r\n method: 'copy',\r\n ids: id,\r\n with_context: context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n // Get Print Report\r\n async getPrintReportName({ id }: { id: number }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: 'ir.actions.report',\r\n method: 'web_read',\r\n id: id,\r\n kwargs: {\r\n specification: {\r\n report_name: {},\r\n },\r\n },\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n //Save Print Invoice\r\n async print({ id, report, db }: { id: number; report: any; db: any }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n report: report,\r\n id: id,\r\n type: 'pdf',\r\n file_response: true,\r\n db: db,\r\n }\r\n\r\n const queryString = toQueryString(jsonData)\r\n\r\n const urlWithParams = `${UriConstants.REPORT_PATH}?${queryString}`\r\n\r\n return env.requests.get(urlWithParams, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n responseType: 'arraybuffer',\r\n })\r\n },\r\n\r\n //Run Action\r\n async runAction({\r\n idAction,\r\n context,\r\n }: {\r\n idAction: number\r\n context: ContextApi\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n action_id: idAction,\r\n with_context: {\r\n ...context,\r\n },\r\n // context: {\r\n // lang: 'en_US',\r\n // tz: 'Asia/Saigon',\r\n // uid: 2,\r\n // allowed_company_ids: [1],\r\n // active_id: Array.isArray(idDetail) ? idDetail[0] : idDetail,\r\n // active_ids: Array.isArray(idDetail) ? [...idDetail] : idDetail,\r\n // active_model: model,\r\n // },\r\n }\r\n return env.requests.post(`${UriConstants.RUN_ACTION_PATH}`, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default ActionService\r\n","import {\r\n LoginCredentialBody,\r\n ResetPasswordRequest,\r\n UpdatePasswordRequest,\r\n} from '../../types/auth-type'\r\nimport { UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\n\r\nconst AuthService = {\r\n async login(body: LoginCredentialBody) {\r\n const env = getEnv()\r\n const payload = Object.fromEntries(\r\n Object.entries({\r\n username: body.email,\r\n password: body.password,\r\n grant_type: env?.config?.grantType || '',\r\n client_id: env?.config?.clientId || '',\r\n client_secret: env?.config?.clientSecret || '',\r\n }).filter(([_, value]) => !!value)\r\n )\r\n const encodedData = new URLSearchParams(payload).toString()\r\n\r\n return env?.requests?.post(body.path, encodedData, {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n })\r\n },\r\n async forgotPassword(email: string) {\r\n const env = getEnv()\r\n const bodyData = {\r\n login: email,\r\n url: `${window.location.origin}/reset-password`,\r\n }\r\n return env?.requests?.post(UriConstants.RESET_PASSWORD_PATH, bodyData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async forgotPasswordSSO({\r\n email,\r\n with_context,\r\n method,\r\n }: {\r\n email: string\r\n with_context: any\r\n method: string\r\n }) {\r\n const env = getEnv()\r\n const body = {\r\n method: method,\r\n kwargs: {\r\n vals: {\r\n email: email,\r\n },\r\n },\r\n with_context: with_context,\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, body, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async resetPassword(data: ResetPasswordRequest, token: string | null) {\r\n const env = getEnv()\r\n const bodyData = {\r\n token: token,\r\n password: data.password,\r\n new_password: data.confirmPassword,\r\n }\r\n return env?.requests?.post(UriConstants.CHANGE_PASSWORD_PATH, bodyData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async resetPasswordSSO({\r\n method,\r\n password,\r\n with_context,\r\n }: {\r\n method: any\r\n password: string\r\n with_context: any\r\n }) {\r\n const env = getEnv()\r\n const bodyData = {\r\n method: method,\r\n kwargs: {\r\n vals: {\r\n password: password,\r\n },\r\n },\r\n with_context: with_context,\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, bodyData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async updatePassword(data: UpdatePasswordRequest, token: string | null) {\r\n const env = getEnv()\r\n const bodyData = {\r\n token: token,\r\n old_password: data.oldPassword,\r\n new_password: data.newPassword,\r\n }\r\n return env?.requests?.post(UriConstants.UPDATE_PASSWORD_PATH, bodyData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async isValidToken(token: string | null) {\r\n const env = getEnv()\r\n const bodyData = {\r\n token: token,\r\n }\r\n return env?.requests?.post(UriConstants.TOKEN, bodyData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async isValidActionToken(actionToken: string | null, path: string) {\r\n const env = getEnv()\r\n return env?.requests?.post(\r\n path,\r\n {},\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n useActionToken: true,\r\n actionToken,\r\n }\r\n )\r\n },\r\n async loginSocial({\r\n db,\r\n state,\r\n access_token,\r\n }: {\r\n db: string\r\n state: object\r\n access_token: string\r\n }) {\r\n const env = getEnv()\r\n return env?.requests?.post(\r\n UriConstants.GENTOKEN_SOCIAL,\r\n { state, access_token },\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n }\r\n )\r\n },\r\n async getProviders(db?: string) {\r\n const env = getEnv()\r\n return env?.requests?.get('/oauth/providers', { params: { db } })\r\n },\r\n async getAccessByCode(code: string) {\r\n const env = getEnv()\r\n const data = new URLSearchParams()\r\n data.append('code', code)\r\n data.append('grant_type', 'authorization_code')\r\n data.append('client_id', env?.config?.clientId || '')\r\n data.append('redirect_uri', env?.config?.redirectUri || '')\r\n\r\n return env?.requests?.post(\r\n `${env?.baseUrl?.replace('/mms/', '/id/')}/${UriConstants.TOKEN_BY_CODE}`,\r\n data,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n }\r\n )\r\n },\r\n async logout(data: string) {\r\n const env = getEnv()\r\n console.log(data)\r\n return env?.requests?.post(\r\n UriConstants.LOGOUT,\r\n {},\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n withCredentials: true,\r\n useRefreshToken: true,\r\n }\r\n )\r\n },\r\n}\r\n\r\nexport default AuthService\r\n","import { ModelConstants } from '../../constants'\r\nimport { MethodConstants, UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\n\r\nconst CompanyService = {\r\n async getCurrentCompany() {\r\n const env = getEnv()\r\n return await env.requests.get(UriConstants.COMPANY_PATH, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async getInfoCompany(id: number) {\r\n const env = getEnv()\r\n const jsonData = {\r\n ids: [id],\r\n model: ModelConstants.COMPANY,\r\n method: MethodConstants.WEB_READ,\r\n kwargs: {\r\n specification: {\r\n primary_color: {},\r\n secondary_color: {},\r\n logo: {},\r\n display_name: {},\r\n secondary_logo: {},\r\n },\r\n },\r\n }\r\n return await env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default CompanyService\r\n","import { ModelConstants, UriConstants } from '../../constants'\r\nimport { getEnv } from '../../environment'\r\n\r\nconst ExcelService = {\r\n async uploadFile({ formData }: { formData: any }) {\r\n const env = getEnv()\r\n\r\n return env.requests.post(`${UriConstants.UPLOAD_FILE_PATH}`, formData, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n },\r\n\r\n async uploadIdFile({ formData }: { formData: any }) {\r\n const env = getEnv()\r\n return env.requests.post(`${UriConstants.UPLOAD_FILE_PATH}`, formData, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n },\r\n\r\n async parsePreview({\r\n id,\r\n selectedSheet,\r\n isHeader,\r\n context,\r\n }: {\r\n id: any\r\n selectedSheet: any\r\n isHeader: boolean\r\n context: any\r\n }) {\r\n const env = getEnv()\r\n\r\n // const { context } = useAppSelector(selectEnv)\r\n // const formatLanguage = context.lang === 'vi' ? 'vi_VN' : 'en_US'\r\n const jsonData = {\r\n model: ModelConstants.BASE_IMPORT,\r\n method: 'parse_preview',\r\n ids: [id],\r\n kwargs: {\r\n options: {\r\n import_skip_records: [],\r\n import_set_empty_fields: [],\r\n fallback_values: {},\r\n name_create_enabled_fields: {},\r\n encoding: '',\r\n separator: '',\r\n quoting: '\"',\r\n date_format: '',\r\n datetime_format: '',\r\n float_thousand_separator: ',',\r\n float_decimal_separator: '.',\r\n advanced: true,\r\n has_headers: isHeader,\r\n keep_matches: false,\r\n limit: 2000,\r\n sheets: [],\r\n sheet: selectedSheet,\r\n skip: 0,\r\n tracking_disable: true,\r\n },\r\n },\r\n with_context: context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n },\r\n\r\n async executeImport({\r\n columns,\r\n fields,\r\n idFile,\r\n options,\r\n dryrun,\r\n context,\r\n }: {\r\n columns: any\r\n fields: any\r\n idFile: any\r\n options: any\r\n dryrun: any\r\n context: any\r\n }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: ModelConstants.BASE_IMPORT,\r\n method: 'execute_import',\r\n ids: [idFile],\r\n kwargs: {\r\n fields: fields,\r\n columns: columns,\r\n options: options,\r\n dryrun: dryrun,\r\n },\r\n with_context: context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n },\r\n\r\n async getFileExcel({ model }: { model: string }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: model,\r\n method: ModelConstants.GET_IMPORT,\r\n args: [],\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData)\r\n },\r\n\r\n async getFieldExport({\r\n ids,\r\n model,\r\n isShow,\r\n parentField,\r\n fieldType,\r\n parentName,\r\n prefix,\r\n name,\r\n context,\r\n importCompat,\r\n }: {\r\n ids: any\r\n model: string\r\n isShow?: boolean\r\n parentField?: any\r\n fieldType?: any\r\n parentName?: any\r\n prefix?: any\r\n name?: any\r\n context: any\r\n importCompat?: any\r\n }) {\r\n const env = getEnv()\r\n\r\n const jsonData: any = {\r\n model: model,\r\n import_compat: importCompat,\r\n domain: [['id', 'in', ids]],\r\n with_context: context,\r\n }\r\n if (isShow) {\r\n jsonData.parent_field = parentField\r\n jsonData.parent_field_type = fieldType\r\n jsonData.parent_name = parentName\r\n jsonData.name = name\r\n jsonData.prefix = prefix\r\n jsonData.exclude = [null]\r\n }\r\n return env.requests.post('/export/get_fields', jsonData)\r\n },\r\n\r\n async exportExcel({\r\n model,\r\n domain,\r\n ids,\r\n fields,\r\n type,\r\n importCompat,\r\n context,\r\n groupby,\r\n }: {\r\n model: string\r\n domain: any\r\n ids: any\r\n fields: any\r\n type: any\r\n importCompat: any\r\n context: any\r\n groupby: any\r\n }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: model,\r\n domain: domain,\r\n ids: ids,\r\n import_compat: importCompat,\r\n fields: fields,\r\n with_context: context,\r\n groupby: groupby ?? [],\r\n }\r\n return env.requests.post_excel(`/export/${type}`, jsonData)\r\n },\r\n}\r\nexport default ExcelService\r\n","import { UriConstants } from '../../constants'\r\nimport { getEnv } from '../../environment'\r\ntype TFormView = { model: string; id?: number | null; context?: any }\r\n\r\nconst FormService = {\r\n async getComment({ data }: { data: any }) {\r\n try {\r\n const env = getEnv()\r\n const jsonData = {\r\n thread_id: data.thread_id,\r\n thread_model: data.thread_model,\r\n limit: 100,\r\n with_context: {\r\n lang: data.lang,\r\n },\r\n }\r\n return env.requests.post(UriConstants.GET_MESSAGE, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when sending message:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async sentComment({ data }: any) {\r\n try {\r\n const env = getEnv()\r\n const jsonData = {\r\n context: {\r\n tz: 'Asia/Saigon',\r\n uid: 2,\r\n allowed_company_ids: [1],\r\n mail_post_autofollow: false,\r\n temporary_id: 142183.01,\r\n },\r\n post_data: {\r\n body: data.message,\r\n message_type: 'comment',\r\n attachment_ids: data.attachment_ids,\r\n attachment_tokens: [],\r\n subtype_xmlid: data.subtype,\r\n },\r\n thread_id: Number(data.thread_id),\r\n thread_model: data.thread_model,\r\n }\r\n return env.requests.post(UriConstants.SENT_MESSAGE, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when sent message:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async deleteComment({ data }: { data: any }) {\r\n try {\r\n const env = getEnv()\r\n const jsonData = {\r\n attachment_ids: [],\r\n attachment_tokens: [],\r\n body: '',\r\n message_id: data.message_id,\r\n }\r\n return env.requests.post(UriConstants.DELETE_MESSAGE, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when sent message:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async getImage({ data }: { data: any }) {\r\n try {\r\n const env = getEnv()\r\n\r\n return env.requests.get(\r\n `${UriConstants.IMAGE_PATH}?filename=${data.filename}&unique=${data.checksum}&width=1920&height=300`,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n }\r\n )\r\n } catch (error) {\r\n console.error('Error when sent message:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async uploadImage({ data }: { data: any }) {\r\n try {\r\n const env = getEnv()\r\n\r\n return env.requests.post(UriConstants.UPLOAD_IMAGE, data, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when sent message:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async getFormView({ data }: { data: TFormView }) {\r\n try {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: data.model,\r\n method: 'get_formview_action',\r\n ids: data.id ? [data.id] : [],\r\n with_context: data.context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when fetching form view:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async changeStatus({ data }: any) {\r\n const env = getEnv()\r\n const vals = {\r\n [data.name]: data.stage_id,\r\n }\r\n const jsonData = {\r\n model: data.model,\r\n method: 'web_save',\r\n with_context: {\r\n lang: data.lang,\r\n allowed_company_ids: [1],\r\n uid: 2,\r\n search_default_my_ticket: true,\r\n search_default_is_open: true,\r\n },\r\n ids: [data.id],\r\n kwargs: {\r\n vals: vals,\r\n specification: {},\r\n },\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default FormService\r\n","import { UriConstants } from '../../constants'\r\nimport { getEnv } from '../../environment'\r\n\r\nconst KanbanServices = {\r\n async getGroups({\r\n model,\r\n width_context,\r\n }: {\r\n model: string\r\n width_context: any\r\n }) {\r\n const env = getEnv()\r\n\r\n const jsonDataView = {\r\n model: model,\r\n method: 'web_read_group',\r\n kwargs: {\r\n domain: [['stage_id.fold', '=', false]],\r\n fields: ['color:sum'],\r\n groupby: ['stage_id'],\r\n },\r\n width_context: width_context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonDataView, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getProgressBar({\r\n field,\r\n color,\r\n model,\r\n width_context,\r\n }: {\r\n field: any\r\n color: any\r\n model: string\r\n width_context: string\r\n }) {\r\n const env = getEnv()\r\n const jsonDataView = {\r\n model: model,\r\n method: 'read_progress_bar',\r\n kwargs: {\r\n domain: [],\r\n group_by: 'stage_id',\r\n progress_bar: {\r\n colors: color,\r\n field: field,\r\n },\r\n },\r\n width_context: width_context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonDataView, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default KanbanServices\r\n","import { FieldTypeConstants } from '../../constants'\r\nimport { MethodConstants, UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\nimport {\r\n DeleteParams,\r\n GetDetailParams,\r\n GetListParams,\r\n OnChangeParams,\r\n SaveParams,\r\n ViewData,\r\n} from '../../types/api-type'\r\n\r\nexport const OBJECT_POSITION = 2\r\n\r\nconst ModelService = {\r\n async getListMyBankAccount({\r\n domain,\r\n spectification,\r\n model,\r\n }: {\r\n domain: any\r\n spectification: any\r\n model: string\r\n }): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: 'web_search_read',\r\n kwargs: {\r\n specification: spectification,\r\n domain: domain,\r\n limit: 100,\r\n offset: 0,\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getCurrency(): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: 'res.currency',\r\n method: 'web_search_read',\r\n kwargs: {\r\n specification: {\r\n icon_url: {},\r\n name: {},\r\n },\r\n domain: [['active', '=', true]],\r\n limit: 100,\r\n offset: 0,\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async getConversionRate(): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: 'res.currency',\r\n method: 'web_search_read',\r\n kwargs: {\r\n specification: {\r\n name: {},\r\n icon_url: {},\r\n rate_ids: {\r\n fields: {\r\n company_rate: {},\r\n sell: {},\r\n },\r\n },\r\n },\r\n domain: [['active', '=', true]],\r\n limit: 100,\r\n offset: 0,\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getAll({ data }: { data: any }): Promise<any> {\r\n const env = getEnv()\r\n const jsonReadGroup =\r\n data.type == 'calendar'\r\n ? { fields: data?.fields }\r\n : data.fields &&\r\n data.fields.length > 0 &&\r\n data.groupby &&\r\n data.groupby.length > 0 &&\r\n data.groupby[0]\r\n ? {\r\n fields: data.fields,\r\n groupby: data.groupby,\r\n }\r\n : {\r\n count_limit: 10001,\r\n order: data.sort,\r\n specification: data.specification,\r\n }\r\n\r\n const jsonData = {\r\n model: String(data.model),\r\n method:\r\n data.type == 'calendar'\r\n ? 'search_read'\r\n : jsonReadGroup.fields && jsonReadGroup.groupby\r\n ? 'web_read_group'\r\n : 'web_search_read',\r\n ids: data.ids,\r\n with_context: data.context,\r\n kwargs: {\r\n domain: data.domain,\r\n limit: data.limit,\r\n offset: data.offset,\r\n ...jsonReadGroup,\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getListCalendar({ data }: { data: any }): Promise<any> {\r\n const env = getEnv()\r\n const jsonReadGroup =\r\n data.type == 'calendar'\r\n ? data?.fields\r\n : data.fields &&\r\n data.fields.length > 0 &&\r\n data.groupby &&\r\n data.groupby.length > 0 &&\r\n data.groupby[0]\r\n ? {\r\n fields: data.fields,\r\n groupby: data.groupby,\r\n }\r\n : {\r\n count_limit: 10001,\r\n order: data.sort,\r\n specification: data.specification,\r\n }\r\n\r\n const jsonData = {\r\n model: String(data.model),\r\n method:\r\n data.type == 'calendar'\r\n ? 'search_read'\r\n : jsonReadGroup.fields && jsonReadGroup.groupby\r\n ? 'web_read_group'\r\n : 'web_search_read',\r\n ids: data.ids,\r\n with_context: data.context,\r\n kwargs: {\r\n domain: data.domain,\r\n limit: data.limit,\r\n offset: data.offset,\r\n fields: data.fields,\r\n ...jsonReadGroup,\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async getList({\r\n model,\r\n ids = [],\r\n specification = {},\r\n domain = [],\r\n offset,\r\n order,\r\n context = {},\r\n limit = 10,\r\n }: GetListParams): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.WEB_SEARCH_READ,\r\n ids: ids,\r\n with_context: context,\r\n kwargs: {\r\n specification: specification,\r\n domain: domain,\r\n limit: limit,\r\n offset: offset,\r\n order: order,\r\n },\r\n }\r\n\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async getDetail({\r\n ids = [],\r\n model,\r\n specification,\r\n context,\r\n }: GetDetailParams): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.WEB_READ,\r\n ids: ids,\r\n with_context: context,\r\n kwargs: {\r\n specification: specification,\r\n },\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async save({\r\n model,\r\n ids = [],\r\n data = {},\r\n specification = {},\r\n context = {},\r\n path,\r\n }: SaveParams): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.WEB_SAVE,\r\n with_context: context,\r\n ids: ids,\r\n kwargs: {\r\n vals: data,\r\n specification: specification,\r\n },\r\n }\r\n return env?.requests?.post(path ?? UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async delete({ ids = [], model }: DeleteParams): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.UNLINK,\r\n ids: ids,\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async onChange({\r\n ids = [],\r\n model,\r\n object,\r\n specification,\r\n context,\r\n fieldChange,\r\n }: OnChangeParams): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.ONCHANGE,\r\n ids: ids,\r\n with_context: context,\r\n args: [\r\n object ? object : {},\r\n fieldChange ? fieldChange : [],\r\n specification,\r\n ],\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async getListFieldsOnchange({ model }: { model: string }): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.GET_ONCHANGE_FIELDS,\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n parseORMOdoo(data: Record<string, any>): Record<string, any> {\r\n for (const key in data) {\r\n if (key === 'display_name') {\r\n delete data[key]\r\n }\r\n if (!data[key] && data[key] !== 0) {\r\n data[key] = false\r\n } else if (data[key] === 'Draft') {\r\n data[key] = '/'\r\n }\r\n }\r\n return { ...data }\r\n },\r\n\r\n toDataJS(\r\n data: Record<string, any>,\r\n viewData?: ViewData,\r\n model?: string\r\n ): Record<string, any> {\r\n for (const key in data) {\r\n if (data[key] === false) {\r\n if (viewData && model) {\r\n if (\r\n viewData?.models?.[model]?.[key]?.type !==\r\n FieldTypeConstants.BOOLEAN\r\n ) {\r\n data[key] = null\r\n }\r\n } else {\r\n data[key] = null\r\n }\r\n } else if (data[key] === '/') {\r\n data[key] = 'Draft'\r\n } else if (data[key] !== false) {\r\n if (model !== undefined) {\r\n if (\r\n viewData?.models?.[model]?.[key]?.type ===\r\n FieldTypeConstants.ONE2MANY ||\r\n viewData?.models?.[model]?.[key]?.type ===\r\n FieldTypeConstants.MANY2MANY\r\n ) {\r\n data[key] = (data[key] ??= [])?.map((item: any) => {\r\n const relation = viewData?.models?.[model]?.[key]?.relation\r\n if (relation !== undefined) {\r\n if (viewData?.models?.[relation]) {\r\n if (item?.length >= 3) {\r\n return ModelService.toDataJS(\r\n item[OBJECT_POSITION],\r\n viewData,\r\n relation\r\n )\r\n } else {\r\n return ModelService.toDataJS(item, viewData, relation)\r\n }\r\n } else {\r\n if (item?.length >= 3) {\r\n return item[OBJECT_POSITION]\r\n } else {\r\n return item\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n }\r\n }\r\n return { ...data }\r\n },\r\n}\r\n\r\nexport default ModelService\r\n","import { UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\n\r\nconst UserService = {\r\n async getProfile(path?: string) {\r\n const env = getEnv()\r\n return env?.requests?.get(path ?? UriConstants.PROFILE_PATH, {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n })\r\n },\r\n async getUser({ context, id }: { context: any; id: any }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: 'res.users',\r\n method: 'web_read',\r\n ids: [id],\r\n with_context: context,\r\n kwargs: {\r\n specification: {\r\n display_name: {},\r\n image_1920: {},\r\n name: {},\r\n login: {},\r\n email: {},\r\n password: {},\r\n visible_group_id: {\r\n fields: {\r\n id: {},\r\n display_name: {},\r\n },\r\n },\r\n company_id: {\r\n fields: {\r\n id: {},\r\n display_name: {},\r\n },\r\n },\r\n },\r\n },\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n switchUserLocale: async ({ id, values }: any) => {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: 'res.users',\r\n domain: [['id', '=', id]],\r\n values: values,\r\n }\r\n return env?.requests.post(UriConstants?.CREATE_UPDATE_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default UserService\r\n","import { GetSelectionType } from '../../types/api-type'\r\nimport { ModelConstants } from '../../constants'\r\nimport { MethodConstants, UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\nimport { GetViewParams } from '../../types/view-type'\r\n\r\nconst ViewService = {\r\n async getView({\r\n model,\r\n views,\r\n context = {},\r\n options = {},\r\n aid,\r\n }: GetViewParams) {\r\n const env = getEnv()\r\n const defaultOptions = {\r\n load_filters: true,\r\n toolbar: true,\r\n action_id: aid,\r\n }\r\n\r\n const jsonDataView = {\r\n model: model,\r\n method: MethodConstants.GET_FIELD_VIEW,\r\n kwargs: {\r\n views: views,\r\n options: { ...options, ...defaultOptions },\r\n },\r\n with_context: context,\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonDataView, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getMenu(context: any) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: ModelConstants.MENU,\r\n method: MethodConstants.WEB_SEARCH_READ,\r\n ids: [],\r\n with_context: context,\r\n kwargs: {\r\n specification: {\r\n active: {},\r\n name: {},\r\n is_display: {},\r\n sequence: {},\r\n complete_name: {},\r\n action: {\r\n fields: {\r\n display_name: {},\r\n type: {},\r\n binding_view_types: {},\r\n // res_model: {},\r\n },\r\n },\r\n url_icon: {},\r\n web_icon: {},\r\n web_icon_data: {},\r\n groups_id: {\r\n fields: {\r\n full_name: {},\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n display_name: {},\r\n child_id: {\r\n fields: {\r\n active: {},\r\n name: {},\r\n is_display: {},\r\n sequence: {},\r\n complete_name: {},\r\n action: {\r\n fields: {\r\n display_name: {},\r\n type: {},\r\n binding_view_types: {},\r\n // res_model: {},\r\n },\r\n },\r\n url_icon: {},\r\n web_icon: {},\r\n web_icon_data: {},\r\n groups_id: {\r\n fields: {\r\n full_name: {},\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n display_name: {},\r\n child_id: {\r\n fields: {\r\n active: {},\r\n name: {},\r\n is_display: {},\r\n sequence: {},\r\n complete_name: {},\r\n action: {\r\n fields: {\r\n display_name: {},\r\n type: {},\r\n binding_view_types: {},\r\n // res_model: {},\r\n },\r\n },\r\n url_icon: {},\r\n web_icon: {},\r\n web_icon_data: {},\r\n groups_id: {\r\n fields: {\r\n full_name: {},\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n display_name: {},\r\n child_id: {\r\n fields: {\r\n active: {},\r\n name: {},\r\n is_display: {},\r\n sequence: {},\r\n complete_name: {},\r\n action: {\r\n fields: {\r\n display_name: {},\r\n type: {},\r\n binding_view_types: {},\r\n // res_model: {},\r\n },\r\n },\r\n url_icon: {},\r\n web_icon: {},\r\n web_icon_data: {},\r\n groups_id: {\r\n fields: {\r\n full_name: {},\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n display_name: {},\r\n child_id: {\r\n fields: {},\r\n limit: 40,\r\n order: '',\r\n },\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n },\r\n domain: [\r\n '&',\r\n ['is_display', '=', true],\r\n '&',\r\n ['active', '=', true],\r\n ['parent_id', '=', false],\r\n ],\r\n },\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getActionDetail(aid: number, context: any) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: ModelConstants.WINDOW_ACTION,\r\n method: MethodConstants.WEB_READ,\r\n ids: [aid],\r\n with_context: context,\r\n kwargs: {\r\n specification: {\r\n id: {},\r\n name: {},\r\n res_model: {},\r\n views: {},\r\n view_mode: {},\r\n mobile_view_mode: {},\r\n domain: {},\r\n context: {},\r\n groups_id: {},\r\n search_view_id: {},\r\n },\r\n },\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getResequence({\r\n model,\r\n ids,\r\n context,\r\n offset,\r\n }: {\r\n model: string\r\n ids: any\r\n context: any\r\n offset: any\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n with_context: context,\r\n ids: ids,\r\n field: 'sequence',\r\n ...(offset > 0 ? { offset: offset } : {}),\r\n }\r\n return env?.requests.post('/web/dataset/resequence', jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getSelectionItem({ data }: { data: GetSelectionType }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: data.model,\r\n ids: [],\r\n method: 'get_data_select',\r\n with_context: data.context,\r\n kwargs: {\r\n count_limit: 10001,\r\n domain: data.domain ? data.domain : [],\r\n offset: 0,\r\n order: '',\r\n specification: data?.specification ?? {\r\n id: {},\r\n name: {},\r\n display_name: {},\r\n },\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async loadMessages() {\r\n const env = getEnv()\r\n return env.requests.post(\r\n UriConstants.LOAD_MESSAGE,\r\n {},\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n }\r\n )\r\n },\r\n async getVersion() {\r\n const env = getEnv()\r\n return env?.requests.get('', {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async get2FAMethods({\r\n method,\r\n with_context,\r\n }: {\r\n method: string\r\n with_context: any\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n with_context: with_context,\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async verify2FA({\r\n method,\r\n with_context,\r\n code,\r\n device,\r\n location,\r\n }: {\r\n method: string\r\n with_context: any\r\n code: string\r\n device: string\r\n location: string\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n kwargs: {\r\n vals: {\r\n code: code,\r\n device: device,\r\n location: location,\r\n },\r\n },\r\n with_context: with_context,\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n withCredentials: true,\r\n })\r\n },\r\n\r\n async signInSSO({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n response_type,\r\n path,\r\n }: {\r\n redirect_uri: string\r\n state: string\r\n client_id: string\r\n response_type: string\r\n path: string\r\n }) {\r\n const env = getEnv()\r\n\r\n const params = new URLSearchParams({\r\n response_type,\r\n client_id,\r\n redirect_uri,\r\n state,\r\n })\r\n\r\n const url = `${path}?${params.toString()}`\r\n\r\n return env?.requests.get(url, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n withCredentials: true,\r\n })\r\n },\r\n async grantAccess({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n scopes,\r\n }: {\r\n redirect_uri: string\r\n state: string\r\n client_id: string\r\n scopes: string[]\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n redirect_uri,\r\n state,\r\n client_id,\r\n scopes,\r\n }\r\n\r\n return env?.requests.post(UriConstants.GRANT_ACCESS, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n withCredentials: true,\r\n })\r\n },\r\n\r\n async getFieldsViewSecurity({\r\n method,\r\n token,\r\n views,\r\n }: {\r\n method: string\r\n token: string\r\n views: any\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n kwargs: {\r\n views: views,\r\n },\r\n with_context: {\r\n token,\r\n },\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async settingsWebRead2fa({\r\n method,\r\n model,\r\n kwargs,\r\n token,\r\n }: {\r\n method: string\r\n token: string\r\n kwargs: any\r\n model: string\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n model: model,\r\n kwargs: kwargs,\r\n with_context: {\r\n token,\r\n },\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async requestSetupTotp({ method, token }: { method: string; token: string }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n with_context: {\r\n token,\r\n },\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async verifyTotp({\r\n method,\r\n action_token,\r\n code,\r\n }: {\r\n method: string\r\n action_token: string\r\n code: string\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n kwargs: {\r\n vals: {\r\n code: code,\r\n },\r\n },\r\n with_context: {\r\n action_token,\r\n },\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async removeTotpSetUp({ method, token }: { method: string; token: string }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n with_context: {\r\n token,\r\n },\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default ViewService\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useForgotPasswordSSO = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n email,\r\n with_context,\r\n method,\r\n }: {\r\n email: string\r\n with_context: any\r\n method: string\r\n }) => {\r\n return AuthService.forgotPasswordSSO({ email, with_context, method })\r\n },\r\n })\r\n}\r\n\r\nexport default useForgotPasswordSSO\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\ntype ProviderPropsType = {\r\n db: string\r\n}\r\n\r\nconst useGetProvider = () => {\r\n return useMutation({\r\n mutationFn: (data: ProviderPropsType) => {\r\n return AuthService.getProviders(data?.db)\r\n },\r\n })\r\n}\r\n\r\nexport default useGetProvider\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useIsValidToken = () => {\r\n return useMutation({\r\n mutationFn: (token: string) => {\r\n return AuthService.isValidToken(token)\r\n },\r\n })\r\n}\r\n\r\nexport default useIsValidToken\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\nimport { LoginCredentialBody } from '../../types/auth-type'\r\n\r\nconst useLoginCredential = () => {\r\n return useMutation({\r\n mutationFn: (data: LoginCredentialBody) => {\r\n return AuthService.login(data)\r\n },\r\n })\r\n}\r\n\r\nexport default useLoginCredential\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\nimport { SocialTokenBody } from '../../types/auth-type'\r\n\r\nconst useLoginSocial = () => {\r\n return useMutation({\r\n mutationFn: (data: SocialTokenBody) => {\r\n return AuthService.loginSocial(data)\r\n },\r\n })\r\n}\r\n\r\nexport default useLoginSocial\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\nimport { ForgotPasswordBody } from '../../types/auth-type'\r\n\r\nconst useResetPassword = () => {\r\n return useMutation({\r\n mutationFn: (request: ForgotPasswordBody) => {\r\n return AuthService.resetPassword(request.data, request.token)\r\n },\r\n })\r\n}\r\n\r\nexport default useResetPassword\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useResetPasswordSSO = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n password,\r\n with_context,\r\n }: {\r\n method: any\r\n password: string\r\n with_context: any\r\n }) => {\r\n return AuthService.resetPasswordSSO({\r\n method,\r\n password,\r\n with_context,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useResetPasswordSSO\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\nimport { updatePasswordBody } from '../../types/auth-type'\r\n\r\nconst useUpdatePassword = () => {\r\n return useMutation({\r\n mutationFn: (request: updatePasswordBody) => {\r\n return AuthService.updatePassword(request.data, request.token)\r\n },\r\n })\r\n}\r\n\r\nexport default useUpdatePassword\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useLogout = () => {\r\n return useMutation({\r\n mutationFn: (data: string) => {\r\n return AuthService.logout(data)\r\n },\r\n })\r\n}\r\n\r\nexport default useLogout\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useGetAccessByCode = () => {\r\n return useMutation({\r\n mutationFn: ({ code }: { code: string }) => {\r\n return AuthService.getAccessByCode(code)\r\n },\r\n })\r\n}\r\n\r\nexport default useGetAccessByCode\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useValidateActionToken = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n actionToken,\r\n path,\r\n }: {\r\n actionToken: string\r\n path: string\r\n }) => {\r\n return AuthService.isValidActionToken(actionToken, path)\r\n },\r\n })\r\n}\r\n\r\nexport default useValidateActionToken\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { CompanyService } from '../../services'\r\n\r\nconst useGetCompanyInfo = () => {\r\n return useMutation({\r\n mutationFn: (id: number) => CompanyService.getInfoCompany(id),\r\n })\r\n}\r\n\r\nexport default useGetCompanyInfo\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { CompanyService } from '../../services'\r\n\r\nconst useGetCurrentCompany = () => {\r\n return useMutation({\r\n mutationFn: () => CompanyService.getCurrentCompany(),\r\n })\r\n}\r\n\r\nexport default useGetCurrentCompany\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelConstants } from '../../constants'\r\nimport { KeyConstants } from '../../constants/api'\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetListCompany = (companyIDs: number[] = []) => {\r\n const companySpec = {\r\n id: {},\r\n name: {},\r\n }\r\n\r\n const getListParams = {\r\n model: ModelConstants.COMPANY,\r\n ids: companyIDs,\r\n specification: companySpec,\r\n }\r\n\r\n return useQuery({\r\n queryKey: [KeyConstants.LIST_COMPANY, companyIDs],\r\n queryFn: () => ModelService.getList(getListParams),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetListCompany\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useExportExcel = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n model,\r\n domain,\r\n ids,\r\n fields,\r\n type,\r\n importCompat,\r\n context,\r\n groupby,\r\n }: {\r\n model: string\r\n domain: any\r\n ids: any\r\n fields: any\r\n type: any\r\n importCompat: any\r\n context: any\r\n groupby: any\r\n }) =>\r\n ExcelService.exportExcel({\r\n model,\r\n domain,\r\n ids,\r\n fields,\r\n type,\r\n importCompat,\r\n context: context,\r\n groupby: groupby,\r\n }),\r\n })\r\n}\r\n\r\nexport default useExportExcel\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useGetFieldExport = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n ids,\r\n model,\r\n isShow,\r\n parentField,\r\n fieldType,\r\n parentName,\r\n prefix,\r\n name,\r\n context,\r\n importCompat,\r\n }: {\r\n ids: any\r\n model: string\r\n isShow?: boolean\r\n parentField?: any\r\n fieldType?: any\r\n parentName?: any\r\n prefix?: any\r\n name?: any\r\n context: any\r\n importCompat?: any\r\n }) =>\r\n ExcelService.getFieldExport({\r\n ids,\r\n model,\r\n isShow,\r\n parentField,\r\n fieldType,\r\n parentName,\r\n prefix,\r\n name,\r\n context,\r\n importCompat,\r\n }),\r\n })\r\n}\r\n\r\nexport default useGetFieldExport\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useGetFileExcel = ({ model }: { model: string }) => {\r\n return useQuery({\r\n queryKey: [],\r\n queryFn: () =>\r\n ExcelService.getFileExcel({\r\n model: model,\r\n }).then((res: any) => {\r\n if (res) {\r\n return res\r\n }\r\n return []\r\n }),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetFileExcel\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useParsePreview = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n id,\r\n selectedSheet,\r\n isHeader,\r\n context,\r\n }: {\r\n id: any\r\n selectedSheet: any\r\n isHeader: boolean\r\n context: any\r\n }) =>\r\n ExcelService.parsePreview({\r\n id,\r\n selectedSheet,\r\n isHeader,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useParsePreview\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useUploadFile = () => {\r\n return useMutation({\r\n mutationFn: ({ formData }: { formData: any }) =>\r\n ExcelService.uploadFile({\r\n formData,\r\n }),\r\n })\r\n}\r\n\r\nexport default useUploadFile\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useUploadIdFile = () => {\r\n return useMutation({\r\n mutationFn: ({ formData }: { formData: any }) =>\r\n ExcelService.uploadIdFile({\r\n formData,\r\n }),\r\n })\r\n}\r\n\r\nexport default useUploadIdFile\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useExecuteImport = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n fields,\r\n columns,\r\n idFile,\r\n options,\r\n dryrun,\r\n context,\r\n }: {\r\n fields: any\r\n columns: any\r\n idFile: any\r\n options: any\r\n dryrun: any\r\n context: any\r\n }) =>\r\n ExcelService.executeImport({\r\n fields,\r\n columns,\r\n idFile,\r\n options,\r\n dryrun,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useExecuteImport\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nconst useChangeStatus = () => {\r\n return useMutation({\r\n mutationFn: ({ data }: { data: any }) => {\r\n return FormService.changeStatus({\r\n data,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useChangeStatus\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nconst useDeleteComment = () => {\r\n return useMutation({\r\n mutationFn: ({ data }: { data: any }) =>\r\n FormService.deleteComment({\r\n data,\r\n }),\r\n })\r\n}\r\n\r\nexport default useDeleteComment\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nconst useGetComment = ({ data, queryKey }: { data: any; queryKey: any }) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n FormService.getComment({ data }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: !!data.thread_id && !isNaN(data.thread_id),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetComment\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nexport type TFormView = { model: string; id?: number | null; context?: any }\r\n\r\nconst useGetFormView = ({\r\n data,\r\n queryKey,\r\n enabled,\r\n}: {\r\n data: TFormView\r\n queryKey?: any\r\n enabled?: any\r\n}) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n FormService.getFormView({ data }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetFormView\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\nimport { isBase64File } from '../../utils'\r\n\r\nconst useGetImage = ({\r\n data,\r\n queryKey,\r\n src,\r\n}: {\r\n data: any\r\n queryKey: any\r\n src: any\r\n}) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n FormService.getImage({ data }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: !src && !isBase64File(src),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetImage\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nconst useSendComment = () => {\r\n return useMutation({\r\n mutationFn: ({ data }: { data: any }) =>\r\n FormService.sentComment({\r\n data,\r\n }),\r\n })\r\n}\r\n\r\nexport default useSendComment\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nconst useUploadImage = () => {\r\n return useMutation({\r\n mutationFn: ({ data }: { data: any }) =>\r\n FormService.uploadImage({\r\n data,\r\n }),\r\n })\r\n}\r\n\r\nexport default useUploadImage\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useDelete = () => {\r\n return useMutation({\r\n mutationFn: ({ ids, model }: { ids: any; model: string }) =>\r\n ModelService.delete({ ids, model }),\r\n })\r\n}\r\n\r\nexport default useDelete\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetAll = ({ data, queryKey, viewResponse }: any) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n ModelService.getAll({ data: data }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled:\r\n !!data.specification && !!data.model && !!data.domain && !!viewResponse,\r\n refetchOnWindowFocus: false,\r\n // placeholderData: keepPreviousData,\r\n })\r\n}\r\n\r\nexport default useGetAll\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetConversionRate = () => {\r\n return useQuery({\r\n queryKey: ['currency-rate'],\r\n queryFn: () =>\r\n ModelService.getConversionRate().then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: true,\r\n })\r\n}\r\n\r\nexport default useGetConversionRate\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetCurrency = () => {\r\n return useQuery({\r\n queryKey: ['currency'],\r\n queryFn: () =>\r\n ModelService.getCurrency().then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: true,\r\n })\r\n}\r\n\r\nexport default useGetCurrency\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetDetail = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n model,\r\n ids,\r\n specification,\r\n context,\r\n }: {\r\n model?: string\r\n ids: any\r\n specification?: any\r\n context?: any\r\n }) =>\r\n ModelService.getDetail({\r\n model,\r\n ids,\r\n specification,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useGetDetail\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetFieldOnChange = ({ model }: { model: string }) => {\r\n return useQuery({\r\n queryKey: [`field-onchange-${model}`, model],\r\n queryFn: () =>\r\n ModelService.getListFieldsOnchange({\r\n model,\r\n }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n refetchOnWindowFocus: false,\r\n staleTime: Infinity,\r\n })\r\n}\r\n\r\nexport default useGetFieldOnChange\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetListMyBankAccount = ({\r\n domain,\r\n spectification,\r\n model,\r\n}: {\r\n domain: any\r\n spectification: any\r\n model: string\r\n}) => {\r\n return useQuery({\r\n queryKey: ['bank-account', model, domain],\r\n queryFn: () =>\r\n ModelService.getListMyBankAccount({\r\n domain,\r\n spectification,\r\n model,\r\n }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: true,\r\n })\r\n}\r\n\r\nexport default useGetListMyBankAccount\r\n","import { BaseModelInit } from '../../types/base-model-type'\r\nimport {\r\n ComponentType,\r\n FieldTypeConstants,\r\n WIDGETAVATAR,\r\n} from '../../constants'\r\n\r\nexport class BaseModel {\r\n name: string\r\n view: Record<string, any>\r\n actContext?: Record<string, any>\r\n fields?: any\r\n\r\n constructor(init: BaseModelInit) {\r\n this.name = init.name\r\n this.view = init.view\r\n this.actContext = init.actContext\r\n this.fields = init.fields\r\n }\r\n\r\n private getSpecificationByFields({\r\n fields = [],\r\n specification = {},\r\n modelsData,\r\n model,\r\n modelRoot,\r\n }: {\r\n fields: any[]\r\n specification: any\r\n modelsData: any\r\n model: string\r\n modelRoot?: string\r\n }) {\r\n if (Array.isArray(fields)) {\r\n let spec = { ...specification }\r\n fields.forEach((field) => {\r\n if (\r\n !field?.type_co ||\r\n (field?.name && field?.type_co === ComponentType.FIELD)\r\n ) {\r\n if (modelsData?.[model]?.[field?.name]) {\r\n if (\r\n modelsData?.[model]?.[field?.name]?.type ===\r\n FieldTypeConstants.ONE2MANY ||\r\n modelsData?.[model]?.[field?.name]?.type ===\r\n FieldTypeConstants.MANY2MANY\r\n ) {\r\n const relation = modelsData?.[model]?.[field?.name]?.relation\r\n const modelRelation = modelsData?.[relation]\r\n\r\n if (modelRelation) {\r\n spec[field?.name] = {\r\n fields: {},\r\n }\r\n\r\n if (modelRoot && modelRoot === relation) {\r\n spec[field?.name].fields = { id: {} }\r\n } else {\r\n spec[field?.name].fields = this.getSpecificationByFields({\r\n fields: Object.values(modelRelation),\r\n specification: {},\r\n modelsData: modelsData,\r\n model: relation,\r\n modelRoot: model,\r\n })\r\n }\r\n } else {\r\n spec[field?.name] = {\r\n fields: {\r\n id: {},\r\n display_name: {},\r\n },\r\n }\r\n }\r\n } else if (\r\n modelsData?.[model]?.[field?.name]?.type ===\r\n FieldTypeConstants.MANY2ONE\r\n ) {\r\n spec[field?.name] = {\r\n fields: {\r\n id: {},\r\n display_name: {},\r\n ...(WIDGETAVATAR[field?.widget as keyof typeof WIDGETAVATAR]\r\n ? { image_256: {} }\r\n : {}),\r\n ...(field?.name === 'currency_id' &&\r\n fields?.find((item: any) => item?.widget === 'monetary')\r\n ? { symbol: {} }\r\n : {}),\r\n ...(field?.widget === 'many2many_binary'\r\n ? { mimetype: {} }\r\n : {}),\r\n },\r\n }\r\n } else {\r\n spec[field?.name] = {}\r\n }\r\n }\r\n } else if (\r\n field?.type_co === ComponentType.GROUP ||\r\n field?.type_co === ComponentType.DIV ||\r\n field?.type_co === ComponentType.SPAN\r\n ) {\r\n const specGroup = this.getSpecificationByFields({\r\n fields: field?.fields,\r\n specification: spec,\r\n modelsData: modelsData,\r\n model: model,\r\n })\r\n spec = { ...spec, ...specGroup }\r\n } else if (\r\n field?.type_co === ComponentType.TREE ||\r\n field?.type_co === ComponentType.LIST\r\n ) {\r\n const relation = modelsData?.[model]?.[field?.name]?.relation\r\n const specTreee = this.getSpecificationByFields({\r\n fields: field?.fields,\r\n specification: {},\r\n modelsData: modelsData,\r\n model: relation,\r\n modelRoot: model,\r\n })\r\n spec = { ...spec, [field?.name]: { fields: specTreee } }\r\n }\r\n })\r\n\r\n return spec\r\n } else {\r\n console.warn('fields is not array')\r\n }\r\n }\r\n\r\n getTreeProps(): Record<string, any> {\r\n const props = this.view?.views?.list || {}\r\n return props\r\n }\r\n\r\n getTreeFields(): Record<string, any>[] {\r\n const fields = this.view?.views?.list?.fields || []\r\n return fields\r\n }\r\n\r\n getSpecification(): Record<string, any> {\r\n const specInit = {}\r\n const modelData = this.view?.models || {}\r\n const specification = this.getSpecificationByFields({\r\n fields: this.fields,\r\n specification: specInit,\r\n modelsData: modelData,\r\n model: this.name,\r\n modelRoot: '',\r\n })\r\n return specification\r\n }\r\n}\r\n\r\nexport default BaseModel\r\n","import { BaseModelInit } from '../../types/base-model-type'\r\nimport BaseModel from '../../models/base-model'\r\n\r\nconst useModel = () => {\r\n const initModel = (modelData: BaseModelInit) => {\r\n switch (modelData?.name) {\r\n default:\r\n return new BaseModel(modelData)\r\n }\r\n }\r\n\r\n return {\r\n initModel,\r\n }\r\n}\r\n\r\nexport default useModel\r\n","import { ModelService } from '../../services'\r\n\r\nconst useOdooDataTransform = () => {\r\n return {\r\n toDataJS: ModelService.toDataJS,\r\n parseORM: ModelService.parseORMOdoo,\r\n }\r\n}\r\n\r\nexport default useOdooDataTransform\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useOnChangeForm = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n ids,\r\n model,\r\n specification,\r\n context,\r\n object,\r\n fieldChange,\r\n }: {\r\n ids: any\r\n model: string\r\n specification: any\r\n context: any\r\n object: any\r\n fieldChange?: any\r\n }) =>\r\n ModelService.onChange({\r\n ids,\r\n model,\r\n specification,\r\n context,\r\n object,\r\n fieldChange,\r\n }),\r\n })\r\n}\r\n\r\nexport default useOnChangeForm\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useSave = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n ids,\r\n model,\r\n data,\r\n specification,\r\n context,\r\n path,\r\n }: {\r\n ids: any\r\n model: string\r\n data: any\r\n specification?: any\r\n context: any\r\n path?: string\r\n }) => ModelService.save({ ids, model, data, specification, context, path }),\r\n })\r\n}\r\n\r\nexport default useSave\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { UserService } from '../../services'\r\n\r\nconst useGetProfile = (path?: string) => {\r\n return useMutation({\r\n mutationFn: () => UserService.getProfile(path),\r\n })\r\n}\r\n\r\nexport default useGetProfile\r\n","import { useMutation } from '@tanstack/react-query'\r\nimport { UserService } from '../../services'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nconst useGetUser = () => {\r\n return useMutation({\r\n mutationFn: ({ id, context }: { id: any; context: ContextApi }) =>\r\n UserService.getUser({\r\n id,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useGetUser\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { UserService } from '../../services'\r\n\r\ntype SwitchUserLocaleParams = {\r\n data: {\r\n id: number\r\n values: any\r\n }\r\n}\r\n\r\nconst useSwitchLocale = () => {\r\n return useMutation({\r\n mutationFn: ({ data }: SwitchUserLocaleParams) => {\r\n return UserService.switchUserLocale({\r\n id: data.id,\r\n values: data.values,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useSwitchLocale\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ActionService } from '../../services'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nconst useButton = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n model,\r\n ids,\r\n context,\r\n method,\r\n }: {\r\n model: string\r\n ids: Record<string, any>[] | any\r\n context: ContextApi\r\n method: any\r\n }) =>\r\n ActionService.callButton({\r\n model,\r\n ids,\r\n context,\r\n method,\r\n }),\r\n onSuccess: (response) => {\r\n return response\r\n },\r\n })\r\n}\r\n\r\nexport default useButton\r\n","import { useMutation } from '@tanstack/react-query'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nimport { ActionService } from '../../services'\r\n\r\nconst useDuplicateRecord = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n id,\r\n model,\r\n context,\r\n }: {\r\n id: any\r\n model: string\r\n context: ContextApi\r\n }) =>\r\n ActionService.duplicateRecord({\r\n id,\r\n model,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useDuplicateRecord\r\n","import { useQuery } from '@tanstack/react-query'\r\nimport { FormService, ViewService } from '../../services'\r\n\r\nconst useGetActionDetail = ({\r\n aid,\r\n context,\r\n enabled,\r\n id,\r\n model,\r\n queryKey,\r\n}: {\r\n aid: number\r\n context: any\r\n enabled: boolean\r\n id?: number\r\n model?: string\r\n queryKey?: any\r\n}) => {\r\n const data = {\r\n id: id,\r\n model: model ?? '',\r\n context: context,\r\n }\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: async () => {\r\n if (aid) {\r\n const res = await ViewService.getActionDetail(aid, context)\r\n if (res && res.length > 0) {\r\n return res[0]\r\n }\r\n } else {\r\n const res = await FormService.getFormView({ data })\r\n return res\r\n }\r\n },\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n staleTime: Infinity,\r\n })\r\n}\r\n\r\nexport default useGetActionDetail\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetCalendar = (listDataProps: any, queryKey?: any, enabled?: any) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n ModelService.getListCalendar({ data: listDataProps }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n return []\r\n }),\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n staleTime: 0,\r\n })\r\n}\r\n\r\nexport default useGetCalendar\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { KanbanService } from '../../services'\r\nconst useGetGroups = ({\r\n model,\r\n width_context,\r\n}: {\r\n model: string\r\n width_context: any\r\n}) => {\r\n return useQuery({\r\n queryKey: [model, width_context],\r\n queryFn: () =>\r\n KanbanService.getGroups({\r\n model: model,\r\n width_context: width_context,\r\n }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n return []\r\n }),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetGroups\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetListData = (listDataProps: any, queryKey?: any, enabled?: any) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n ModelService.getAll({ data: listDataProps }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n return []\r\n }),\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n staleTime: 0,\r\n })\r\n}\r\n\r\nexport default useGetListData\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { KeyConstants } from '../../constants/api'\r\nimport { ViewService } from '../../services'\r\n\r\nconst useGetMenu = (context: any, enabled?: boolean) => {\r\n return useQuery({\r\n queryKey: [KeyConstants.MENU, context],\r\n queryFn: () =>\r\n ViewService.getMenu(context).then((res) => {\r\n if (res && res?.records && res?.records?.length > 0) {\r\n return res?.records\r\n }\r\n return []\r\n }),\r\n refetchOnWindowFocus: false,\r\n staleTime: Infinity,\r\n enabled: enabled,\r\n })\r\n}\r\n\r\nexport default useGetMenu\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ActionService } from '../../services'\r\n\r\nconst useGetPrintReport = () => {\r\n return useMutation({\r\n mutationFn: ({ id }: { id: number }) =>\r\n ActionService.getPrintReportName({\r\n id,\r\n }),\r\n })\r\n}\r\n\r\nexport default useGetPrintReport\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { KanbanService } from '../../services'\r\n\r\nconst useGetProGressBar = ({\r\n field,\r\n color,\r\n model,\r\n width_context,\r\n}: {\r\n field: any\r\n color: any\r\n model: string\r\n width_context: string\r\n}) => {\r\n return useQuery({\r\n queryKey: [],\r\n queryFn: () =>\r\n KanbanService.getProgressBar({\r\n field: field,\r\n color: color,\r\n model: model,\r\n width_context: width_context,\r\n }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n return []\r\n }),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetProGressBar\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\nimport { GetSelectionType } from '../../types/api-type'\r\n\r\nconst useGetSelection = ({\r\n data,\r\n queryKey,\r\n enabled,\r\n}: {\r\n data: GetSelectionType\r\n queryKey: any[]\r\n enabled?: boolean\r\n}) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () => ViewService.getSelectionItem({ data }),\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetSelection\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { KeyConstants } from '../../constants/api'\r\nimport { ViewService } from '../../services'\r\nimport { GetViewParams } from '../../types/view-type'\r\n\r\nconst useGetView = (viewParams: GetViewParams, actData?: any) => {\r\n return useQuery({\r\n queryKey: [KeyConstants.GET_VIEW_BY_ACTION, viewParams],\r\n queryFn: () => ViewService.getView(viewParams),\r\n enabled: !!actData,\r\n refetchOnWindowFocus: false,\r\n staleTime: Infinity,\r\n })\r\n}\r\n\r\nexport default useGetView\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ActionService } from '../../services'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nconst useLoadAction = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n idAction,\r\n context,\r\n }: {\r\n idAction: any\r\n context: ContextApi\r\n }) => {\r\n return ActionService.loadAction({\r\n idAction: idAction,\r\n context: context,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useLoadAction\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useLoadMessage = () => {\r\n return useQuery({\r\n queryKey: [`load-message-failure`],\r\n queryFn: () => ViewService.loadMessages(),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useLoadMessage\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ActionService } from '../../services'\r\n\r\nconst usePrint = () => {\r\n return useMutation({\r\n mutationFn: ({ id, report, db }: { id: number; report: any; db: any }) =>\r\n ActionService.print({\r\n id,\r\n report,\r\n db,\r\n }),\r\n })\r\n}\r\n\r\nexport default usePrint\r\n","import { useMutation } from '@tanstack/react-query'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nimport { ActionService } from '../../services'\r\n\r\nconst useRemoveRow = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n model,\r\n ids,\r\n context,\r\n }: {\r\n model: string\r\n ids: Record<string, any>[] | any\r\n context: ContextApi\r\n }) =>\r\n ActionService.removeRows({\r\n model,\r\n ids,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useRemoveRow\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useGetResequence = (\r\n model: string,\r\n resIds: any,\r\n context: any,\r\n offset: any\r\n) => {\r\n return useQuery({\r\n queryKey: [],\r\n queryFn: () =>\r\n ViewService.getResequence({\r\n model: model,\r\n ids: resIds,\r\n context: context,\r\n offset: offset,\r\n }),\r\n enabled: false,\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetResequence\r\n","import { useMutation } from '@tanstack/react-query'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nimport { ActionService } from '../../services'\r\n\r\nconst useRunAction = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n idAction,\r\n context,\r\n }: {\r\n idAction: any\r\n context: ContextApi\r\n }) =>\r\n ActionService.runAction({\r\n idAction,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useRunAction\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useSignInSSO = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n response_type,\r\n path,\r\n }: {\r\n redirect_uri: string\r\n state: string\r\n client_id: string\r\n response_type: string\r\n path: string\r\n }) => {\r\n return ViewService.signInSSO({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n response_type,\r\n path,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useSignInSSO\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useVerify2FA = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n with_context,\r\n code,\r\n device,\r\n location,\r\n }: {\r\n method: string\r\n with_context: any\r\n code: string\r\n device: string\r\n location: string\r\n }) => {\r\n return ViewService.verify2FA({\r\n method: method,\r\n with_context: with_context,\r\n code: code,\r\n device: device,\r\n location: location,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useVerify2FA\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useGet2FAMethods = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n with_context,\r\n }: {\r\n method: string\r\n with_context: any\r\n }) => {\r\n return ViewService.get2FAMethods({\r\n method: method,\r\n with_context: with_context,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useGet2FAMethods\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useGetFieldsViewSecurity = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n token,\r\n views,\r\n }: {\r\n method: string\r\n token: string\r\n views: any\r\n }) => {\r\n return ViewService.getFieldsViewSecurity({\r\n method,\r\n token,\r\n views,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useGetFieldsViewSecurity\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useGrantAccess = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n scopes,\r\n }: {\r\n redirect_uri: string\r\n state: string\r\n client_id: string\r\n scopes: string[]\r\n }) => {\r\n return ViewService.grantAccess({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n scopes,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useGrantAccess\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useRemoveTotpSetup = () => {\r\n return useMutation({\r\n mutationFn: ({ method, token }: { method: string; token: string }) => {\r\n return ViewService.removeTotpSetUp({\r\n method,\r\n token,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useRemoveTotpSetup\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useRequestSetupTotp = () => {\r\n return useMutation({\r\n mutationFn: ({ method, token }: { method: string; token: string }) => {\r\n return ViewService.requestSetupTotp({\r\n method,\r\n token,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useRequestSetupTotp\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useSettingsWebRead2fa = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n token,\r\n kwargs,\r\n model,\r\n }: {\r\n method: string\r\n model: string\r\n kwargs: any\r\n token: string\r\n }) => {\r\n return ViewService.settingsWebRead2fa({\r\n method: method,\r\n model: model,\r\n kwargs: kwargs,\r\n token: token,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useSettingsWebRead2fa\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useVerifyTotp = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n action_token,\r\n code,\r\n }: {\r\n method: string\r\n action_token: string\r\n code: string\r\n }) => {\r\n return ViewService.verifyTotp({\r\n method,\r\n action_token,\r\n code,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useVerifyTotp\r\n","import { ReactNode } from 'react'\r\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\r\n\r\nexport const ReactQueryProvider = ({ children }: { children: ReactNode }) => {\r\n const queryClient = new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n // placeholderData: keepPreviousData,\r\n refetchOnWindowFocus: false,\r\n refetchOnMount: false,\r\n refetchOnReconnect: false,\r\n retry: false,\r\n },\r\n },\r\n })\r\n\r\n // const localStoragePersister = createSyncStoragePersister({\r\n // storage: window.localStorage,\r\n // })\r\n\r\n // persistQueryClient({\r\n // queryClient,\r\n // persister: localStoragePersister,\r\n // maxAge: Infinity,\r\n // })\r\n return (\r\n <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\r\n )\r\n}\r\n","import { ReactNode } from 'react'\r\nimport { Provider } from 'react-redux'\r\n\r\nimport { envStore } from '../store'\r\n\r\nexport const ReduxProvider = ({ children }: { children: ReactNode }) => {\r\n return <Provider store={envStore}>{children}</Provider>\r\n}\r\n","import { ReactNode } from 'react'\r\n\r\nimport { ReactQueryProvider } from './react-query-provider'\r\nimport { ReduxProvider } from './redux-provider'\r\n\r\nexport const MainProvider = ({ children }: { children: ReactNode }) => {\r\n return (\r\n <ReduxProvider>\r\n <ReactQueryProvider>{children}</ReactQueryProvider>\r\n </ReduxProvider>\r\n )\r\n}\r\n","import { ReactNode, useEffect, useState } from 'react'\r\nimport { useQueryClient } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../services'\r\n\r\nexport const VersionGate = ({ children }: { children: ReactNode }) => {\r\n const queryClient = useQueryClient()\r\n const [ready, setReady] = useState(false)\r\n\r\n useEffect(() => {\r\n const clearVersion = () => {\r\n queryClient.clear()\r\n localStorage.removeItem('__api_version__')\r\n }\r\n\r\n const validateVersion = async () => {\r\n const serverVersion = await ViewService.getVersion()\r\n const cached = localStorage.getItem('__api_version__')\r\n if (cached !== serverVersion?.api_version) {\r\n clearVersion()\r\n localStorage.setItem('__api_version__', serverVersion?.api_version)\r\n } else {\r\n console.log('Api version:', serverVersion?.api_version)\r\n }\r\n setReady(true)\r\n }\r\n validateVersion()\r\n\r\n if (typeof window !== 'undefined') {\r\n const onKey = (e: KeyboardEvent) => {\r\n const key = e.key.toLowerCase()\r\n\r\n const isHardRefresh =\r\n ((key === 'f5' || key === 'r') &&\r\n e.ctrlKey &&\r\n (key !== 'r' || e.shiftKey)) ||\r\n (key === 'r' && e.metaKey && e.shiftKey) ||\r\n (key === 'r' && e.metaKey && e.altKey)\r\n\r\n if (isHardRefresh) clearVersion()\r\n }\r\n\r\n window.addEventListener('keydown', onKey)\r\n return () => window.removeEventListener('keydown', onKey)\r\n }\r\n }, [queryClient])\r\n\r\n return ready ? <>{children}</> : null\r\n}\r\n"],"mappings":"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","names":["KeyConstants","MethodConstants","UriConstants","env","moment","FieldTypeConstants","MethodType","ModelConstants","ComponentType","WIDGETAVATAR","WIDGETCURRENCY","WIDGETCOLOR","WIDGETSTATUS","WIDGETNOSTRING","Number","bp","n","days","seconds","microseconds","iterable","ast","key","shallowEqual","newDomain","shallowEqual","err","localStorage","sessionStorage","axios","config","handleError","error","db","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","initialState","envStore","localStorageUtils","sessionStorageUtils","env","env","env","env","env","env","env","env","env","env","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_redux","import_jsx_runtime","import_jsx_runtime","import_react","import_react_query","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/configs/axios-client.ts","../src/constants/api/key-constant.ts","../src/constants/api/method-constant.ts","../src/constants/api/uri-constant.ts","../src/utils/error-handler.ts","../src/utils/format.ts","../src/constants/field/field-type-constant.ts","../src/constants/method/method-type-constant.ts","../src/constants/model/model-constant.ts","../src/constants/type/index.ts","../src/constants/widget/widget-avatar-constant.ts","../src/constants/widget/widget-color-constant.ts","../src/constants/widget/widget-status-constant.ts","../src/utils/domain/py_tokenizer.ts","../src/utils/domain/py_parser.ts","../src/utils/domain/py_date.ts","../src/utils/domain/py_builtin.ts","../src/utils/domain/py_utils.ts","../src/utils/domain/py_interpreter.ts","../src/utils/domain/py.ts","../src/utils/domain/context.ts","../src/utils/domain/objects.ts","../src/utils/domain/arrays.ts","../src/utils/domain/strings.ts","../src/utils/domain/domain.ts","../src/utils/function.ts","../src/utils/storage/local-storage.ts","../src/utils/storage/session-storage.ts","../src/store/index.ts","../src/store/reducers/breadcrums-slice/index.ts","../src/store/reducers/env-slice/index.ts","../src/store/reducers/excel-slice/index.ts","../src/store/reducers/form-slice/index.ts","../src/store/reducers/header-slice/index.ts","../src/store/reducers/list-slice/index.ts","../src/store/reducers/login-slice/index.ts","../src/store/reducers/navbar-slice/index.ts","../src/store/reducers/profile-slice/index.ts","../src/store/reducers/search-slice/index.ts","../src/store/store.ts","../node_modules/redux/src/utils/formatProdErrorMessage.ts","../node_modules/redux/src/utils/symbol-observable.ts","../node_modules/redux/src/utils/actionTypes.ts","../node_modules/redux/src/utils/isPlainObject.ts","../node_modules/redux/src/utils/kindOf.ts","../node_modules/redux/src/createStore.ts","../node_modules/redux/src/utils/warning.ts","../node_modules/redux/src/combineReducers.ts","../node_modules/redux/src/bindActionCreators.ts","../node_modules/redux/src/compose.ts","../node_modules/redux/src/applyMiddleware.ts","../node_modules/redux/src/utils/isAction.ts","../src/environment/EnvStore.ts","../src/hooks/auth/use-forgot-password.ts","../src/services/action-service/index.ts","../src/services/auth-service/index.ts","../src/services/company-service/index.ts","../src/services/excel-service/index.ts","../src/services/form-service/index.ts","../src/services/kanban-service/index.ts","../src/services/model-service/index.ts","../src/services/user-service/index.ts","../src/services/view-service/index.ts","../src/hooks/auth/use-forgotpassword-sso.ts","../src/hooks/auth/use-get-provider.ts","../src/hooks/auth/use-isvalid-token.ts","../src/hooks/auth/use-login-credential.ts","../src/hooks/auth/use-login-socical.ts","../src/hooks/auth/use-reset-password.ts","../src/hooks/auth/use-reset-password-sso.ts","../src/hooks/auth/use-update-password.ts","../src/hooks/auth/use-logout.ts","../src/hooks/auth/use-get-access-by-code.ts","../src/hooks/auth/use-validate-action-token.ts","../src/hooks/company/use-get-company-info.ts","../src/hooks/company/use-get-current-company.ts","../src/hooks/company/use-get-list-company.ts","../src/hooks/excel/use-export-excel.ts","../src/hooks/excel/use-get-field-export.ts","../src/hooks/excel/use-get-file-excel.ts","../src/hooks/excel/use-parse-preview.ts","../src/hooks/excel/use-upload-file.ts","../src/hooks/excel/use-upload-id-file.ts","../src/hooks/excel/uss-execute-import.ts","../src/hooks/form/use-change-status.ts","../src/hooks/form/use-delete-comment.ts","../src/hooks/form/use-get-comment.ts","../src/hooks/form/use-get-form-view.ts","../src/hooks/form/use-get-image.ts","../src/hooks/form/use-send-comment.ts","../src/hooks/form/use-upload-image.ts","../src/hooks/model/use-delete.ts","../src/hooks/model/use-get-all.ts","../src/hooks/model/use-get-conversion-rate.ts","../src/hooks/model/use-get-currency.ts","../src/hooks/model/use-get-detail.ts","../src/hooks/model/use-get-field-onchange.ts","../src/hooks/model/use-get-list-my-bank-account.ts","../src/models/base-model/index.ts","../src/hooks/model/use-model.ts","../src/hooks/model/use-odoo-data-transform.ts","../src/hooks/model/use-onchange-form.ts","../src/hooks/model/use-save.ts","../src/hooks/user/use-get-profile.ts","../src/hooks/user/use-get-user.ts","../src/hooks/user/use-switch-locale.ts","../src/hooks/view/use-button.ts","../src/hooks/view/use-duplicate-record.ts","../src/hooks/view/use-get-action-detail.ts","../src/hooks/view/use-get-calendar.ts","../src/hooks/view/use-get-groups.ts","../src/hooks/view/use-get-list-data.ts","../src/hooks/view/use-get-menu.ts","../src/hooks/view/use-get-print-report.ts","../src/hooks/view/use-get-progress-bar.ts","../src/hooks/view/use-get-selection.ts","../src/hooks/view/use-get-view.ts","../src/hooks/view/use-load-action.ts","../src/hooks/view/use-load-message.ts","../src/hooks/view/use-print.ts","../src/hooks/view/use-remove-row.ts","../src/hooks/view/use-resequence.ts","../src/hooks/view/use-run-action.ts","../src/hooks/view/use-signin-sso.ts","../src/hooks/view/use-verify-2FA.ts","../src/hooks/view/uset-get-2FA-method.ts","../src/hooks/view/use-get-fields-view-security.ts","../src/hooks/view/use-grant-access.ts","../src/hooks/view/use-remove-totp-setup.ts","../src/hooks/view/use-request-setup-totp.ts","../src/hooks/view/use-settings-web-read-2fa.ts","../src/hooks/view/use-verify-totp.ts","../src/provider/react-query-provider.tsx","../src/provider/redux-provider.tsx","../src/provider/main-provider.tsx","../src/provider/version-gate-provider.tsx"],"sourcesContent":["export * from './configs'\r\nexport * from './constants'\r\nexport * from './environment'\r\nexport * from './hooks'\r\nexport * from './provider'\r\nexport * from './services'\r\nexport * from './store'\r\nexport * from './utils'\r\nexport * from './types'\r\n","/* eslint-disable unused-imports/no-unused-vars */\r\nimport axios from 'axios'\r\n\r\nimport { UriConstants } from '../constants/api'\r\nimport { EnvStore } from '../environment'\r\nimport { updateTokenParamInOriginalRequest } from '../utils'\r\nimport { localStorageUtils, sessionStorageUtils } from '../utils/storage'\r\n\r\nexport const axiosClient = {\r\n init(config: EnvStore) {\r\n const localStorage = config.localStorageUtils ?? localStorageUtils()\r\n const sessionStorage = config.sessionStorageUtils ?? sessionStorageUtils()\r\n const db = config.db\r\n let isRefreshing: boolean = false\r\n let failedQueue: any[] = []\r\n\r\n const processQueue = (error: any, token: string | null = null) => {\r\n failedQueue?.forEach((prom) => {\r\n if (error) {\r\n prom.reject(error)\r\n } else {\r\n prom.resolve(token)\r\n }\r\n })\r\n\r\n failedQueue = []\r\n }\r\n\r\n const instance = axios.create({\r\n adapter: axios.defaults.adapter,\r\n baseURL: config.baseUrl,\r\n timeout: 50000,\r\n paramsSerializer: (params) => new URLSearchParams(params).toString(),\r\n })\r\n\r\n // Add a request interceptor\r\n instance.interceptors.request.use(async (config) => {\r\n const { useRefreshToken, useActionToken, actionToken } = config as any\r\n\r\n if (useActionToken && actionToken) {\r\n config.headers['Action-Token'] = actionToken\r\n }\r\n\r\n const getToken = useRefreshToken\r\n ? localStorage.getRefreshToken\r\n : localStorage.getAccessToken\r\n\r\n const token = await getToken?.()\r\n if (token) config.headers['Authorization'] = `Bearer ${token}`\r\n\r\n return config\r\n }, Promise.reject)\r\n\r\n //Add a response interceptor\r\n instance.interceptors.response.use(\r\n (response) => {\r\n return handleResponse(response)\r\n },\r\n async (error) => {\r\n const handleError = async (error: any) => {\r\n if (!error.response) {\r\n return error\r\n }\r\n const { data } = error.response\r\n if (\r\n data &&\r\n data.code === 400 &&\r\n ['invalid_grant'].includes(data.data?.error)\r\n ) {\r\n await clearAuthToken()\r\n }\r\n return data\r\n }\r\n const originalRequest = error.config\r\n if (\r\n (error.response?.status === 403 ||\r\n error.response?.status === 401 ||\r\n error.response?.status === 404) &&\r\n ['TOKEN_EXPIRED', 'AUTHEN_FAIL', 401, 'ERR_2FA_006'].includes(\r\n error.response.data.code\r\n )\r\n ) {\r\n if (isRefreshing) {\r\n return new Promise(function (resolve, reject) {\r\n failedQueue.push({ resolve, reject })\r\n })\r\n .then((token) => {\r\n originalRequest.headers['Authorization'] = 'Bearer ' + token\r\n\r\n // Update data with token is param (if any)\r\n originalRequest.data = updateTokenParamInOriginalRequest(\r\n originalRequest,\r\n token as string\r\n )\r\n\r\n return instance.request(originalRequest)\r\n })\r\n .catch(async (err) => {\r\n if (\r\n (err.response?.status === 400 ||\r\n err.response?.status === 401) &&\r\n ['invalid_grant'].includes(err.response.data.error)\r\n ) {\r\n await clearAuthToken()\r\n }\r\n // reject(err)\r\n // processQueue(err, null)\r\n })\r\n }\r\n const browserSession = await sessionStorage.getBrowserSession()\r\n const refreshToken = await localStorage.getRefreshToken()\r\n const accessTokenExp = await localStorage.getAccessToken()\r\n isRefreshing = true\r\n\r\n if (\r\n !refreshToken &&\r\n (!browserSession || browserSession == 'unActive')\r\n ) {\r\n await clearAuthToken()\r\n } else {\r\n const payload = Object.fromEntries(\r\n Object.entries({\r\n refresh_token: refreshToken,\r\n grant_type: 'refresh_token',\r\n client_id: config.config.clientId,\r\n client_secret: config.config.clientSecret,\r\n }).filter(([_, value]) => !!value)\r\n )\r\n\r\n return new Promise(function (resolve) {\r\n axios\r\n .post(\r\n `${config.baseUrl}${\r\n config.refreshTokenEndpoint ?? UriConstants.AUTH_TOKEN_PATH\r\n }`,\r\n payload,\r\n {\r\n headers: {\r\n 'Content-Type': config.refreshTokenEndpoint\r\n ? 'application/x-www-form-urlencoded'\r\n : 'multipart/form-data',\r\n Authorization: `Bearer ${accessTokenExp}`,\r\n },\r\n }\r\n )\r\n .then(async (res) => {\r\n const data = res.data\r\n // 1) put token to LocalStorage\r\n await localStorage.setToken(data.access_token)\r\n await localStorage.setRefreshToken(data.refresh_token)\r\n // get information\r\n\r\n // 2) Change Authorization header\r\n axios.defaults.headers.common['Authorization'] =\r\n 'Bearer ' + data.access_token\r\n originalRequest.headers['Authorization'] =\r\n 'Bearer ' + data.access_token\r\n\r\n // 3) Update data with token is param (if any)\r\n originalRequest.data = updateTokenParamInOriginalRequest(\r\n originalRequest,\r\n data.access_token\r\n )\r\n\r\n processQueue(null, data.access_token)\r\n\r\n // 4) return originalRequest object with Axios\r\n resolve(instance.request(originalRequest))\r\n })\r\n .catch(async (err) => {\r\n if (\r\n (err &&\r\n (err?.error_code === 'AUTHEN_FAIL' ||\r\n err?.error_code === 'TOKEN_EXPIRED' ||\r\n err?.error_code === 'TOKEN_INCORRECT' ||\r\n err?.code === 'ERR_BAD_REQUEST')) ||\r\n err?.error_code === 'ERR_2FA_006'\r\n ) {\r\n await clearAuthToken()\r\n }\r\n\r\n if (err && err.response) {\r\n const { error_code } = err.response?.data || {}\r\n if (error_code === 'AUTHEN_FAIL') {\r\n await clearAuthToken()\r\n }\r\n }\r\n processQueue(err, null)\r\n // reject(err)\r\n })\r\n .finally(() => {\r\n isRefreshing = false\r\n })\r\n })\r\n }\r\n }\r\n\r\n return Promise.reject(await handleError(error))\r\n }\r\n )\r\n\r\n const handleResponse = (res: any) => {\r\n if (res && res.data) {\r\n return res.data\r\n }\r\n\r\n return res\r\n }\r\n\r\n const handleError = (error: any) => {\r\n // Check if it's an Axios error and if it's a network error\r\n if (error.isAxiosError && error.code === 'ECONNABORTED') {\r\n console.error('Request Timeout Error:', error)\r\n // Handle timeout error\r\n // You can return a custom message or perform any action you want\r\n return 'Request Timeout Error'\r\n } else if (error.isAxiosError && !error.response) {\r\n console.error('Network Error:', error)\r\n // Handle network error\r\n // You can return a custom message or perform any action you want\r\n return 'Network Error'\r\n } else {\r\n // For other errors, log and return the error\r\n console.error('Other Error:', error?.response)\r\n const errorMessage =\r\n error?.response?.data?.message || 'An error occurred'\r\n return { message: errorMessage, status: error?.response?.status }\r\n }\r\n }\r\n const clearAuthToken = async () => {\r\n await localStorage.clearToken()\r\n if (typeof window !== 'undefined') {\r\n window.location.href = `/login`\r\n }\r\n }\r\n\r\n function formatUrl(url: string, db?: string) {\r\n return url + (db ? '?db=' + db : '')\r\n }\r\n\r\n const responseBody = (response: any) => response\r\n const requests = {\r\n get: (url: string, headers: any) =>\r\n instance.get(formatUrl(url, db), headers).then(responseBody),\r\n\r\n post: (url: string, body: any, headers: any) =>\r\n instance.post(formatUrl(url, db), body, headers).then(responseBody),\r\n\r\n post_excel: (url: string, body: any, headers: any) =>\r\n instance\r\n .post(formatUrl(url, db), body, {\r\n responseType: 'arraybuffer',\r\n headers: {\r\n 'Content-Type':\r\n typeof window !== 'undefined'\r\n ? 'application/json'\r\n : 'application/javascript',\r\n Accept:\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n },\r\n })\r\n .then(responseBody),\r\n\r\n put: (url: string, body: any, headers: any) =>\r\n instance.put(formatUrl(url, db), body, headers).then(responseBody),\r\n\r\n patch: (url: string, body: any) =>\r\n instance.patch(formatUrl(url, db), body).then(responseBody),\r\n\r\n delete: (url: string, body: any) =>\r\n instance.delete(formatUrl(url, db), body).then(responseBody),\r\n }\r\n\r\n return requests\r\n },\r\n}\r\n","export enum KeyConstants {\r\n PROFILE = 'userinfo',\r\n CURRENT_COMPANY = 'current_company',\r\n LIST_COMPANY = 'list_company',\r\n COMPANY_INFO = 'company_info',\r\n MENU = 'menus',\r\n GET_VIEW_BY_ACTION = 'get_view_by_action',\r\n ACTION_DETAIL = 'action_detail',\r\n GET_DATA_SELECTION = 'get_data_select',\r\n WEB_SAVE = 'web_save',\r\n WEB_READ = 'web_read',\r\n GET_PROVIDER = 'get_provider',\r\n}\r\n","export enum MethodConstants {\r\n WEB_SEARCH_READ = 'web_search_read',\r\n WEB_READ_GROUP = 'web_read_group',\r\n WEB_READ = 'web_read',\r\n WEB_SAVE = 'web_save',\r\n UNLINK = 'unlink',\r\n ONCHANGE = 'onchange',\r\n GET_ONCHANGE_FIELDS = 'get_fields_onchange',\r\n GET_FIELD_VIEW = 'get_fields_view_v2',\r\n}\r\n","export enum UriConstants {\r\n AUTH_TOKEN_PATH = '/authentication/oauth2/token',\r\n GENTOKEN_SOCIAL = '/token/generate',\r\n CALL_PATH = '/call',\r\n COMPANY_PATH = '/company',\r\n PROFILE_PATH = '/userinfo',\r\n RESET_PASSWORD_PATH = '/reset_password',\r\n CHANGE_PASSWORD_PATH = '/change_password',\r\n UPDATE_PASSWORD_PATH = '/change_password_parent',\r\n LOAD_ACTION = `/load_action`,\r\n REPORT_PATH = `/report`,\r\n RUN_ACTION_PATH = `/run_action`,\r\n UPLOAD_FILE_PATH = `/upload/file`,\r\n GET_MESSAGE = `/chatter/thread/messages`,\r\n SENT_MESSAGE = `/chatter/message/post`,\r\n UPLOAD_IMAGE = `/mail/attachment/upload`,\r\n DELETE_MESSAGE = `/chatter/message/update_content`,\r\n IMAGE_PATH = `/web/image`,\r\n LOAD_MESSAGE = `/load_message_failures`,\r\n TOKEN = `/check_token`,\r\n CREATE_UPDATE_PATH = `/create_update`,\r\n TWOFA_METHOD_PATH = `/id/api/v2/call`,\r\n SIGNIN_SSO = `/signin-sso/oauth`,\r\n GRANT_ACCESS = '/grant-access',\r\n TOKEN_BY_CODE = '/token',\r\n LOGOUT = '/logout',\r\n}\r\n","export class WesapError extends Error {\r\n code: number\r\n\r\n constructor(message: string, code: number) {\r\n super(message)\r\n this.code = code\r\n }\r\n}\r\n\r\nexport function handleError(\r\n error: Error,\r\n env: { services: { notification: { error: (message: string) => void } } },\r\n) {\r\n if (error instanceof WesapError) {\r\n env.services.notification.error(error.message)\r\n } else {\r\n env.services.notification.error('An unexpected error occurred')\r\n }\r\n}\r\n","/* eslint-disable no-useless-escape */\r\n// export const formatCurrency = (amount: number, currency = 'USD') => {\r\n// const formatter = new Intl.NumberFormat('vi-VN', {\r\n// style: 'currency',\r\n// currency: currency,\r\n// minimumFractionDigits: 0,\r\n// })\r\n\r\nimport moment from 'moment'\r\n\r\n// return formatter.format(amount).replaceAll(',', '.')\r\n// }\r\nexport const formatCurrency = (amount: number, currency = 'USD') => {\r\n const formatter = new Intl.NumberFormat('vi-VN', {\r\n style: 'currency',\r\n currency: currency,\r\n minimumFractionDigits: 0,\r\n })\r\n\r\n return formatter.format(amount).replaceAll('.', ',')\r\n}\r\n\r\nexport const formatDate = (\r\n date: string | Date,\r\n locale: string = 'en-US',\r\n): string => {\r\n return new Intl.DateTimeFormat(locale).format(new Date(date))\r\n}\r\n\r\nexport const validateAndParseDate = (\r\n input: string,\r\n isDateTime: boolean = false,\r\n) => {\r\n if (!input || typeof input !== 'string') return null\r\n\r\n // Xóa các ký tự đặc biệt (trừ số, dấu trừ, dấu /, dấu :, và khoảng trắng) để xử lý các case số\r\n const cleanInput = input.replace(/[^0-9-\\/:\\s]/g, '')\r\n\r\n // Định dạng đầu ra\r\n const dateFormat = 'YYYY-MM-DD'\r\n const dateTimeFormat = 'YYYY-MM-DD HH:mm:ss' // Định dạng 24 giờ\r\n\r\n // Lấy ngày, tháng, năm hiện tại\r\n const currentDay = moment().format('DD')\r\n const currentMonth = moment().format('MM')\r\n const currentYear = moment().format('YYYY')\r\n const defaultTime = '00:00:00' // Thời gian mặc định: 00:00:00\r\n const maxYear = parseInt(currentYear) + 10 // Năm hiện tại + 10\r\n\r\n // Hàm kiểm tra ngày hợp lệ, bao gồm năm nhuận\r\n const isValidDate = (day: string, month: string, year: string) => {\r\n const date = moment(`${day}-${month}-${year}`, 'DD-MM-YYYY', true)\r\n return date.isValid()\r\n }\r\n\r\n // Hàm kiểm tra giờ, phút, giây hợp lệ\r\n const isValidTime = (\r\n hour: string,\r\n minute: string = '00',\r\n second: string = '00',\r\n ) => {\r\n const h = parseInt(hour, 10)\r\n const m = parseInt(minute, 10)\r\n const s = parseInt(second, 10)\r\n return h >= 0 && h <= 23 && m >= 0 && m <= 59 && s >= 0 && s <= 59\r\n }\r\n\r\n // Hàm trả về định dạng phù hợp (date hoặc datetime) và trừ 7 giờ nếu isDateTime = true\r\n const formatOutput = (\r\n day: string,\r\n month: string,\r\n year: string,\r\n time: string = defaultTime,\r\n ) => {\r\n let result = moment(\r\n `${day}-${month}-${year} ${time}`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n if (isDateTime) {\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return result.format(dateFormat)\r\n }\r\n\r\n // Case 0: Định dạng datetime DD/MM/YYYY HH[:mm[:ss]] hoặc DD-MM-YYYY HH[:mm[:ss]] (VD: 16/09/2002 16:09:03, 16-09-2002 16, 16/09/2002 3:9)\r\n if (\r\n isDateTime &&\r\n input.match(\r\n /^\\d{1,2}[\\/-]\\d{1,2}[\\/-]\\d{2,4}\\s+\\d{1,2}(:\\d{1,2}(:\\d{1,2})?)?$/,\r\n )\r\n ) {\r\n const [datePart, timePart] = input.split(/\\s+/)\r\n const dateParts = datePart.split(/[\\/-]/)\r\n const timeParts = timePart.split(':')\r\n const day = dateParts[0].padStart(2, '0')\r\n const month = dateParts[1].padStart(2, '0')\r\n const year =\r\n dateParts[2].length <= 2\r\n ? `20${dateParts[2].padStart(2, '0')}`\r\n : dateParts[2].padStart(4, '0')\r\n const hour = timeParts[0].padStart(2, '0')\r\n const minute = timeParts[1] ? timeParts[1].padStart(2, '0') : '00'\r\n const second = timeParts[2] ? timeParts[2].padStart(2, '0') : '00'\r\n if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:${minute}:${second}`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // Case 1: Định dạng YYYY-MM-DD (VD: 2025-12-09)\r\n if (cleanInput.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\r\n const [year, month, day] = cleanInput.split('-')\r\n if (isValidDate(day, month, year)) {\r\n return formatOutput(day, month, year)\r\n }\r\n return null\r\n }\r\n\r\n // Case 2: Định dạng DD/MM/YYYY hoặc DD/MM/YY (VD: 09/12/2025, 09/12/25)\r\n if (cleanInput.match(/^\\d{1,2}\\/\\d{1,2}\\/\\d{2,4}$/)) {\r\n const [day, month, year] = cleanInput.split('/')\r\n const paddedDay = day.padStart(2, '0')\r\n const paddedMonth = month.padStart(2, '0')\r\n const fullYear =\r\n year.length <= 2 ? `20${year.padStart(2, '0')}` : year.padStart(4, '0')\r\n if (isValidDate(paddedDay, paddedMonth, fullYear)) {\r\n return formatOutput(paddedDay, paddedMonth, fullYear)\r\n }\r\n return null\r\n }\r\n\r\n // Case 3: Định dạng DD-MM-YYYY hoặc DD-MM-YY (VD: 16-09-2002, 16-09-02)\r\n if (cleanInput.match(/^\\d{1,2}-\\d{1,2}-\\d{2,4}$/)) {\r\n const [day, month, year] = cleanInput.split('-')\r\n const paddedDay = day.padStart(2, '0')\r\n const paddedMonth = month.padStart(2, '0')\r\n const fullYear =\r\n year.length <= 2 ? `20${year.padStart(2, '0')}` : year.padStart(4, '0')\r\n if (isValidDate(paddedDay, paddedMonth, fullYear)) {\r\n return formatOutput(paddedDay, paddedMonth, fullYear)\r\n }\r\n return null\r\n }\r\n\r\n // Case 4: Định dạng DD/MM hoặc DD-MM (VD: 16/09, 16-09)\r\n if (cleanInput.match(/^\\d{1,2}[\\/-]\\d{1,2}$/)) {\r\n const [day, month] = cleanInput.split(/[\\/-]/)\r\n const paddedDay = day.padStart(2, '0')\r\n const paddedMonth = month.padStart(2, '0')\r\n if (isValidDate(paddedDay, paddedMonth, currentYear)) {\r\n return formatOutput(paddedDay, paddedMonth, currentYear)\r\n }\r\n return null\r\n }\r\n\r\n // Case 5: Input là 4 chữ số, ưu tiên năm nếu trong khoảng 2000 đến năm hiện tại + 10\r\n if (cleanInput.match(/^\\d{4}$/)) {\r\n const num = parseInt(cleanInput, 10)\r\n if (num >= 2000 && num <= maxYear) {\r\n // Parse là năm, lấy ngày/tháng hiện tại\r\n if (isValidDate(currentDay, currentMonth, num.toString())) {\r\n return formatOutput(currentDay, currentMonth, num.toString())\r\n }\r\n return null\r\n }\r\n // Nếu không phải năm, xử lý như case DDMM\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n if (isValidDate(day, month, currentYear)) {\r\n return formatOutput(day, month, currentYear)\r\n }\r\n return null\r\n }\r\n\r\n // Case 6: Số âm (trừ ngày từ hiện tại)\r\n if (cleanInput.startsWith('-') && /^\\-\\d+$/.test(cleanInput)) {\r\n const daysToSubtract = Math.abs(parseInt(cleanInput, 10))\r\n let result = moment().subtract(daysToSubtract, 'days')\r\n if (isDateTime) {\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n }\r\n if (result.isValid()) {\r\n return isDateTime\r\n ? result.format(dateTimeFormat)\r\n : result.format(dateFormat)\r\n }\r\n return null\r\n }\r\n\r\n // Case 7: Các định dạng có ký tự đặc biệt (VD: 10&&&&1&&&20, 1&&&1&&&2020)\r\n if (input.match(/^\\d{1,2}[^0-9-\\/]+\\d{1,2}[^0-9-\\/]+\\d{2,4}.*$/)) {\r\n const parts = input.split(/[^0-9-\\/]+/).filter(Boolean)\r\n const day = parts[0].padStart(2, '0')\r\n const month = parts[1].padStart(2, '0')\r\n let year = parts[2]\r\n year = year.length === 2 ? `20${year}` : year.padStart(4, '0')\r\n if (isValidDate(day, month, year)) {\r\n return formatOutput(day, month, year)\r\n }\r\n return null\r\n }\r\n\r\n // Case 8: Datetime cases dạng số (only when isDateTime = true)\r\n if (isDateTime) {\r\n // 9 chữ số: DDMMYYYYH (VD: 160920023 -> 2002-09-16 03:00:00 - 7h -> 2002-09-15 20:00:00)\r\n if (cleanInput.length === 9) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 9).padStart(2, '0')\r\n if (isValidDate(day, month, year) && isValidTime(hour)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:00:00`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // 10 chữ số: DDMMYYYYHH (VD: 1609200216 -> 2002-09-16 16:00:00 - 7h -> 2002-09-16 09:00:00)\r\n if (cleanInput.length === 10) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 10)\r\n if (isValidDate(day, month, year) && isValidTime(hour)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:00:00`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // 11 chữ số: DDMMYYYYHmm (VD: 16092002133 -> 2002-09-16 13:03:00 - 7h -> 2002-09-16 06:03:00)\r\n if (cleanInput.length === 11) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 10)\r\n const minute = cleanInput.slice(10, 11).padStart(2, '0')\r\n if (isValidDate(day, month, year) && isValidTime(hour, minute)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:${minute}:00`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // 12 chữ số: DDMMYYYYHHmm (VD: 160920021609 -> 2002-09-16 16:09:00 - 7h -> 2002-09-16 09:09:00)\r\n if (cleanInput.length === 12) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 10)\r\n const minute = cleanInput.slice(10, 12)\r\n if (isValidDate(day, month, year) && isValidTime(hour, minute)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:${minute}:00`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // 13 chữ số: DDMMYYYYHHmms (VD: 1609200213333 -> 2002-09-16 13:33:03 - 7h -> 2002-09-16 06:33:03)\r\n if (cleanInput.length === 13) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 10)\r\n const minute = cleanInput.slice(10, 12)\r\n const second = cleanInput.slice(12, 13).padStart(2, '0')\r\n if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:${minute}:${second}`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n\r\n // 14 chữ số: DDMMYYYYHHmmss (VD: 16092002160959 -> 2002-09-16 16:09:59 - 7h -> 2002-09-16 09:09:59)\r\n if (cleanInput.length === 14) {\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n const hour = cleanInput.slice(8, 10)\r\n const minute = cleanInput.slice(10, 12)\r\n const second = cleanInput.slice(12, 14)\r\n if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {\r\n let result = moment(\r\n `${day}-${month}-${year} ${hour}:${minute}:${second}`,\r\n 'DD-MM-YYYY HH:mm:ss',\r\n )\r\n if (!result.isValid()) return null\r\n result = result.subtract(7, 'hours') // Trừ 7 giờ\r\n return result.format(dateTimeFormat)\r\n }\r\n return null\r\n }\r\n }\r\n\r\n // Các case số thuần\r\n const len = cleanInput.length\r\n\r\n if (len === 1 || len === 2) {\r\n // Case: 16 -> 2025-06-16 00:00:00 - 7h -> 2025-06-15 17:00:00 (if isDateTime = true)\r\n const paddedDay = cleanInput.padStart(2, '0')\r\n if (isValidDate(paddedDay, currentMonth, currentYear)) {\r\n return formatOutput(paddedDay, currentMonth, currentYear)\r\n }\r\n return null // VD: 32 -> null\r\n }\r\n\r\n if (len === 3) {\r\n // Case: 129 -> 2025-09-12 00:00:00 - 7h -> 2025-09-11 17:00:00 (if isDateTime = true)\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 3).padStart(2, '0')\r\n if (isValidDate(day, month, currentYear)) {\r\n return formatOutput(day, month, currentYear)\r\n }\r\n return null\r\n }\r\n\r\n if (len === 6) {\r\n // Case: 120522 -> 2022-05-12 00:00:00 - 7h -> 2022-05-11 17:00:00 (if isDateTime = true)\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n let year = cleanInput.slice(4, 6)\r\n year = `20${year}` // Giả định năm 20xx\r\n if (parseInt(month) > 12) {\r\n // Nếu tháng không hợp lệ, lấy tháng/năm hiện tại\r\n if (isValidDate(day, currentMonth, currentYear)) {\r\n return formatOutput(day, currentMonth, currentYear)\r\n }\r\n return null\r\n }\r\n if (isValidDate(day, month, year)) {\r\n return formatOutput(day, month, year)\r\n }\r\n return null\r\n }\r\n\r\n if (len === 7) {\r\n // Case: 3002222 -> null\r\n return null\r\n }\r\n\r\n if (len === 8) {\r\n // Case: 12052021 -> 2021-05-12 00:00:00 - 7h -> 2021-05-11 17:00:00 (if isDateTime = true)\r\n const day = cleanInput.slice(0, 2)\r\n const month = cleanInput.slice(2, 4)\r\n const year = cleanInput.slice(4, 8)\r\n if (isValidDate(day, month, year)) {\r\n return formatOutput(day, month, year)\r\n }\r\n return null // VD: 3002222 -> null\r\n }\r\n\r\n if (len > 8 && !isDateTime) {\r\n // Case: 120520212 -> null (only when not in datetime mode)\r\n return null\r\n }\r\n\r\n return null // Các trường hợp không khớp\r\n}\r\n","export enum FieldTypeConstants {\r\n CHAR = 'char',\r\n TEXT = 'text',\r\n INTEGER = 'integer',\r\n FLOAT = 'float',\r\n BOOLEAN = 'boolean',\r\n DATE = 'date',\r\n DATETIME = 'datetime',\r\n BINARY = 'binary',\r\n SELECTION = 'selection',\r\n HTML = 'html',\r\n MANY2ONE = 'many2one',\r\n ONE2MANY = 'one2many',\r\n MANY2MANY = 'many2many',\r\n MONETARY = 'monetary',\r\n REFERENCE = 'reference',\r\n FUNCTION = 'function',\r\n PROPERTY = 'property',\r\n}\r\n","export enum MethodType {\r\n CREATE = 0,\r\n UPDATE = 1,\r\n DELETE = 2,\r\n UNLINK = 3,\r\n NO_CHANGE = 4,\r\n}\r\n","export enum ModelConstants {\r\n MENU = 'ir.ui.menu',\r\n USER = 'res.users',\r\n COMPANY = 'res.company',\r\n WINDOW_ACTION = 'ir.actions.act_window',\r\n BASE_IMPORT = 'base_import.import',\r\n GET_IMPORT = 'get_import_templates',\r\n}\r\n","export enum ComponentType {\r\n GROUP = 'group',\r\n FIELD = 'field',\r\n TREE = 'tree',\r\n DIV = 'div',\r\n LIST = 'list',\r\n FORM = 'form',\r\n SETTINGS = 'setting',\r\n SPAN = 'span',\r\n KANBAN = 'kanban',\r\n CALENDAR = 'calendar',\r\n TYPE = 'view-type',\r\n}\r\n\r\nexport const SearchType = {\r\n FILTER: 'filter_by',\r\n SEARCH: 'search_by',\r\n GROUP: 'group_by',\r\n}\r\n","export enum WIDGETAVATAR {\r\n many2one_avatar_user = 'many2one_avatar_user',\r\n many2many_avatar_user = 'many2many_avatar_user',\r\n}\r\n\r\nexport enum WIDGETCURRENCY {\r\n many2one_avatar_user = 'many2one_avatar_user',\r\n many2many_avatar_user = 'many2many_avatar_user',\r\n}\r\n","export enum WIDGETCOLOR {\r\n many2many_tags = 'many2many_tags',\r\n helpdesk_sla_many2many_tags = 'helpdesk_sla_many2many_tags',\r\n}\r\n","export enum WIDGETSTATUS {\r\n sla_status_ids = 'sla_status_ids',\r\n}\r\n\r\nexport enum WIDGETNOSTRING {\r\n sla_status_ids = 'sla_status_ids',\r\n}\r\n","/** @odoo-module **/\r\n\r\n// -----------------------------------------------------------------------------\r\n// Types\r\n// -----------------------------------------------------------------------------\r\n\r\nexport interface TokenNumber {\r\n type: 0\r\n value: number\r\n}\r\n\r\nexport interface TokenString {\r\n type: 1\r\n value: string\r\n}\r\n\r\nexport interface TokenSymbol {\r\n type: 2\r\n value: string\r\n}\r\n\r\nexport interface TokenName {\r\n type: 3\r\n value: string\r\n}\r\n\r\nexport interface TokenConstant {\r\n type: 4\r\n value: string\r\n}\r\n\r\nexport type Token =\r\n | TokenNumber\r\n | TokenString\r\n | TokenSymbol\r\n | TokenName\r\n | TokenConstant\r\n\r\nexport class TokenizerError extends Error {}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Helpers and Constants\r\n// -----------------------------------------------------------------------------\r\n\r\nconst directMap: Record<string, string> = {\r\n '\\\\': '\\\\',\r\n '\"': '\"',\r\n \"'\": \"'\",\r\n a: '\\x07',\r\n b: '\\x08',\r\n f: '\\x0c',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t',\r\n v: '\\v',\r\n}\r\n\r\nfunction decodeStringLiteral(str: string, unicode: boolean): string {\r\n const out: string[] = []\r\n let code: number\r\n for (let i = 0; i < str.length; ++i) {\r\n if (str[i] !== '\\\\') {\r\n out.push(str[i])\r\n continue\r\n }\r\n const escape = str[i + 1]\r\n if (escape in directMap) {\r\n out.push(directMap[escape])\r\n ++i\r\n continue\r\n }\r\n switch (escape) {\r\n case '\\n':\r\n ++i\r\n continue\r\n case 'N':\r\n if (!unicode) {\r\n break\r\n }\r\n throw new TokenizerError('SyntaxError: \\\\N{} escape not implemented')\r\n case 'u':\r\n if (!unicode) {\r\n break\r\n }\r\n const uni = str.slice(i + 2, i + 6)\r\n if (!/[0-9a-f]{4}/i.test(uni)) {\r\n throw new TokenizerError(\r\n [\r\n \"SyntaxError: (unicode error) 'unicodeescape' codec\",\r\n \" can't decode bytes in position \",\r\n i,\r\n '-',\r\n i + 4,\r\n ': truncated \\\\uXXXX escape',\r\n ].join(''),\r\n )\r\n }\r\n code = parseInt(uni, 16)\r\n out.push(String.fromCharCode(code))\r\n i += 5\r\n continue\r\n case 'U':\r\n if (!unicode) {\r\n break\r\n }\r\n throw new TokenizerError('SyntaxError: \\\\U escape not implemented')\r\n case 'x':\r\n const hex = str.slice(i + 2, i + 4)\r\n if (!/[0-9a-f]{2}/i.test(hex)) {\r\n if (!unicode) {\r\n throw new TokenizerError('ValueError: invalid \\\\x escape')\r\n }\r\n throw new TokenizerError(\r\n [\r\n \"SyntaxError: (unicode error) 'unicodeescape'\",\r\n \" codec can't decode bytes in position \",\r\n i,\r\n '-',\r\n i + 2,\r\n ': truncated \\\\xXX escape',\r\n ].join(''),\r\n )\r\n }\r\n code = parseInt(hex, 16)\r\n out.push(String.fromCharCode(code))\r\n i += 3\r\n continue\r\n default:\r\n if (!/[0-8]/.test(escape)) {\r\n break\r\n }\r\n const r = /[0-8]{1,3}/g\r\n r.lastIndex = i + 1\r\n const m = r.exec(str)\r\n if (!m) break\r\n const oct = m[0]\r\n code = parseInt(oct, 8)\r\n out.push(String.fromCharCode(code))\r\n i += oct.length\r\n continue\r\n }\r\n out.push('\\\\')\r\n }\r\n return out.join('')\r\n}\r\n\r\nconst constants: Set<string> = new Set(['None', 'False', 'True'])\r\n\r\nexport const comparators: string[] = [\r\n 'in',\r\n 'not',\r\n 'not in',\r\n 'is',\r\n 'is not',\r\n '<',\r\n '<=',\r\n '>',\r\n '>=',\r\n '<>',\r\n '!=',\r\n '==',\r\n]\r\n\r\nexport const binaryOperators: string[] = [\r\n 'or',\r\n 'and',\r\n '|',\r\n '^',\r\n '&',\r\n '<<',\r\n '>>',\r\n '+',\r\n '-',\r\n '*',\r\n '/',\r\n '//',\r\n '%',\r\n '~',\r\n '**',\r\n '.',\r\n]\r\n\r\nexport const unaryOperators: string[] = ['-']\r\n\r\nconst symbols: Set<string> = new Set([\r\n ...['(', ')', '[', ']', '{', '}', ':', ','],\r\n ...['if', 'else', 'lambda', '='],\r\n ...comparators,\r\n ...binaryOperators,\r\n ...unaryOperators,\r\n])\r\n\r\nfunction group(...args: string[]): string {\r\n return '(' + args.join('|') + ')'\r\n}\r\n\r\nconst Name = '[a-zA-Z_]\\\\w*'\r\nconst Whitespace = '[ \\\\f\\\\t]*'\r\nconst DecNumber = '\\\\d+(L|l)?'\r\nconst IntNumber = DecNumber\r\n\r\nconst Exponent = '[eE][+-]?\\\\d+'\r\nconst PointFloat = group(`\\\\d+\\\\.\\\\d*(${Exponent})?`, `\\\\.\\\\d+(${Exponent})?`)\r\nconst FloatNumber = group(PointFloat, `\\\\d+${Exponent}`)\r\n\r\nconst Number = group(FloatNumber, IntNumber)\r\nconst Operator = group(\r\n '\\\\*\\\\*=?',\r\n '>>=?',\r\n '<<=?',\r\n '<>',\r\n '!=',\r\n '//=?',\r\n '[+\\\\-*/%&|^=<>]=?',\r\n '~',\r\n)\r\nconst Bracket = '[\\\\[\\\\]\\\\(\\\\)\\\\{\\\\}]'\r\nconst Special = '[:;.,`@]'\r\nconst Funny = group(Operator, Bracket, Special)\r\nconst ContStr = group(\r\n \"([uU])?'([^\\\\n'\\\\\\\\]*(?:\\\\\\\\.[^\\\\n'\\\\\\\\]*)*)'\",\r\n '([uU])?\"([^\\\\n\"\\\\\\\\]*(?:\\\\\\\\.[^\\\\n\"\\\\\\\\]*)*)\"',\r\n)\r\nconst PseudoToken = Whitespace + group(Number, Funny, ContStr, Name)\r\nconst NumberPattern = new RegExp('^' + Number + '$')\r\nconst StringPattern = new RegExp('^' + ContStr + '$')\r\nconst NamePattern = new RegExp('^' + Name + '$')\r\nconst strip = new RegExp('^' + Whitespace)\r\n\r\n// -----------------------------------------------------------------------------\r\n// Tokenize function\r\n// -----------------------------------------------------------------------------\r\n\r\nexport function tokenize(str: string): Token[] {\r\n const tokens: Token[] = []\r\n const max = str.length\r\n let start = 0\r\n let end = 0\r\n const pseudoprog = new RegExp(PseudoToken, 'g')\r\n\r\n while (pseudoprog.lastIndex < max) {\r\n const pseudomatch = pseudoprog.exec(str)\r\n if (!pseudomatch) {\r\n if (/^\\s+$/.test(str.slice(end))) {\r\n break\r\n }\r\n throw new TokenizerError(\r\n 'Failed to tokenize <<' +\r\n str +\r\n '>> at index ' +\r\n (end || 0) +\r\n '; parsed so far: ' +\r\n tokens,\r\n )\r\n }\r\n\r\n if (pseudomatch.index > end) {\r\n if (str.slice(end, pseudomatch.index).trim()) {\r\n throw new TokenizerError('Invalid expression')\r\n }\r\n }\r\n\r\n start = pseudomatch.index\r\n end = pseudoprog.lastIndex\r\n let token = str.slice(start, end).replace(strip, '')\r\n\r\n if (NumberPattern.test(token)) {\r\n tokens.push({\r\n type: 0,\r\n value: parseFloat(token),\r\n })\r\n } else if (StringPattern.test(token)) {\r\n const m = StringPattern.exec(token)\r\n if (!m) throw new TokenizerError('Invalid string match')\r\n tokens.push({\r\n type: 1,\r\n value: decodeStringLiteral(\r\n m[3] !== undefined ? m[3] : m[5],\r\n !!(m[2] || m[4]),\r\n ),\r\n })\r\n } else if (symbols.has(token)) {\r\n if (\r\n token === 'in' &&\r\n tokens.length > 0 &&\r\n tokens[tokens.length - 1].value === 'not'\r\n ) {\r\n token = 'not in'\r\n tokens.pop()\r\n } else if (\r\n token === 'not' &&\r\n tokens.length > 0 &&\r\n tokens[tokens.length - 1].value === 'is'\r\n ) {\r\n token = 'is not'\r\n tokens.pop()\r\n }\r\n tokens.push({\r\n type: 2,\r\n value: token,\r\n })\r\n } else if (constants.has(token)) {\r\n tokens.push({\r\n type: 4,\r\n value: token,\r\n })\r\n } else if (NamePattern.test(token)) {\r\n tokens.push({\r\n type: 3,\r\n value: token,\r\n })\r\n } else {\r\n throw new TokenizerError('Invalid expression')\r\n }\r\n }\r\n\r\n return tokens\r\n}\r\n","// py_parser.ts\r\n\r\nimport { binaryOperators, comparators, Token } from './py_tokenizer'\r\n\r\n// -----------------------------------------------------------------------------\r\n// Types\r\n// -----------------------------------------------------------------------------\r\n\r\nexport interface ASTNumber {\r\n type: 0\r\n value: number\r\n}\r\nexport interface ASTString {\r\n type: 1\r\n value: string\r\n}\r\nexport interface ASTBoolean {\r\n type: 2\r\n value: boolean\r\n}\r\nexport interface ASTNone {\r\n type: 3\r\n}\r\nexport interface ASTList {\r\n type: 4\r\n value: AST[]\r\n}\r\nexport interface ASTName {\r\n type: 5\r\n value: string\r\n}\r\nexport interface ASTUnaryOperator {\r\n type: 6\r\n op: string\r\n right: AST\r\n}\r\nexport interface ASTBinaryOperator {\r\n type: 7\r\n op: string\r\n left: AST\r\n right: AST\r\n}\r\nexport interface ASTFunctionCall {\r\n type: 8\r\n fn: AST\r\n args: AST[]\r\n kwargs: { [key: string]: AST }\r\n}\r\nexport interface ASTAssignment {\r\n type: 9\r\n name: ASTName\r\n value: AST\r\n}\r\nexport interface ASTTuple {\r\n type: 10\r\n value: AST[]\r\n}\r\nexport interface ASTDictionary {\r\n type: 11\r\n value: { [key: string]: AST }\r\n}\r\nexport interface ASTLookup {\r\n type: 12\r\n target: AST\r\n key: AST\r\n}\r\nexport interface ASTIf {\r\n type: 13\r\n condition: AST\r\n ifTrue: AST\r\n ifFalse: AST\r\n}\r\nexport interface ASTBooleanOperator {\r\n type: 14\r\n op: string\r\n left: AST\r\n right: AST\r\n}\r\nexport interface ASTObjLookup {\r\n type: 15\r\n obj: AST\r\n key: string\r\n}\r\n\r\nexport type AST =\r\n | ASTNumber\r\n | ASTString\r\n | ASTBoolean\r\n | ASTNone\r\n | ASTList\r\n | ASTName\r\n | ASTUnaryOperator\r\n | ASTBinaryOperator\r\n | ASTFunctionCall\r\n | ASTAssignment\r\n | ASTTuple\r\n | ASTDictionary\r\n | ASTLookup\r\n | ASTIf\r\n | ASTBooleanOperator\r\n | ASTObjLookup\r\n\r\nexport class ParserError extends Error {}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Constants and helpers\r\n// -----------------------------------------------------------------------------\r\n\r\nconst chainedOperators = new Set<string>(comparators)\r\nconst infixOperators = new Set<string>([...binaryOperators, ...comparators])\r\n\r\nexport function bp(symbol: string): number {\r\n switch (symbol) {\r\n case '=':\r\n return 10\r\n case 'if':\r\n return 20\r\n case 'in':\r\n case 'not in':\r\n case 'is':\r\n case 'is not':\r\n case '<':\r\n case '<=':\r\n case '>':\r\n case '>=':\r\n case '<>':\r\n case '==':\r\n case '!=':\r\n return 60\r\n case 'or':\r\n return 30\r\n case 'and':\r\n return 40\r\n case 'not':\r\n return 50\r\n case '|':\r\n return 70\r\n case '^':\r\n return 80\r\n case '&':\r\n return 90\r\n case '<<':\r\n case '>>':\r\n return 100\r\n case '+':\r\n case '-':\r\n return 110\r\n case '*':\r\n case '/':\r\n case '//':\r\n case '%':\r\n return 120\r\n case '**':\r\n return 140\r\n case '.':\r\n case '(':\r\n case '[':\r\n return 150\r\n default:\r\n return 0\r\n }\r\n}\r\n\r\nfunction bindingPower(token: Token): number {\r\n return token.type === 2 /* Symbol */ ? bp(token.value) : 0\r\n}\r\n\r\nfunction isSymbol(token: Token, value: string): boolean {\r\n return token.type === 2 /* Symbol */ && token.value === value\r\n}\r\n\r\nfunction parsePrefix(current: Token, tokens: Token[]): AST {\r\n switch (current.type) {\r\n case 0 /* Number */:\r\n return { type: 0 /* Number */, value: current.value as number }\r\n case 1 /* String */:\r\n return { type: 1 /* String */, value: current.value as string }\r\n case 4 /* Constant */:\r\n if (current.value === 'None') {\r\n return { type: 3 /* None */ }\r\n } else {\r\n return { type: 2 /* Boolean */, value: current.value === 'True' }\r\n }\r\n case 3 /* Name */:\r\n return { type: 5 /* Name */, value: current.value as string }\r\n case 2 /* Symbol */:\r\n switch (current.value) {\r\n case '-':\r\n case '+':\r\n case '~':\r\n return {\r\n type: 6 /* UnaryOperator */,\r\n op: current.value,\r\n right: _parse(tokens, 130),\r\n }\r\n case 'not':\r\n return {\r\n type: 6 /* UnaryOperator */,\r\n op: current.value,\r\n right: _parse(tokens, 50),\r\n }\r\n case '(':\r\n const content: AST[] = []\r\n let isTuple = false\r\n while (tokens[0] && !isSymbol(tokens[0], ')')) {\r\n content.push(_parse(tokens, 0))\r\n if (tokens[0]) {\r\n if (tokens[0] && isSymbol(tokens[0], ',')) {\r\n isTuple = true\r\n tokens.shift()\r\n } else if (!isSymbol(tokens[0], ')')) {\r\n throw new ParserError('parsing error')\r\n }\r\n } else {\r\n throw new ParserError('parsing error')\r\n }\r\n }\r\n if (!tokens[0] || !isSymbol(tokens[0], ')')) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n isTuple = isTuple || content.length === 0\r\n return isTuple ? { type: 10 /* Tuple */, value: content } : content[0]\r\n case '[':\r\n const value: AST[] = []\r\n while (tokens[0] && !isSymbol(tokens[0], ']')) {\r\n value.push(_parse(tokens, 0))\r\n if (tokens[0]) {\r\n if (isSymbol(tokens[0], ',')) {\r\n tokens.shift()\r\n } else if (!isSymbol(tokens[0], ']')) {\r\n throw new ParserError('parsing error')\r\n }\r\n }\r\n }\r\n if (!tokens[0] || !isSymbol(tokens[0], ']')) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n return { type: 4 /* List */, value }\r\n case '{':\r\n const dict: { [key: string]: AST } = {}\r\n while (tokens[0] && !isSymbol(tokens[0], '}')) {\r\n const key = _parse(tokens, 0)\r\n if (\r\n (key.type !== 1 /* String */ && key.type !== 0) /* Number */ ||\r\n !tokens[0] ||\r\n !isSymbol(tokens[0], ':')\r\n ) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n const val = _parse(tokens, 0)\r\n dict[key.value as string] = val\r\n if (isSymbol(tokens[0], ',')) {\r\n tokens.shift()\r\n }\r\n }\r\n if (!tokens.shift()) {\r\n throw new ParserError('parsing error')\r\n }\r\n return { type: 11 /* Dictionary */, value: dict }\r\n default:\r\n throw new ParserError('Token cannot be parsed')\r\n }\r\n default:\r\n throw new ParserError('Token cannot be parsed')\r\n }\r\n}\r\n\r\nfunction parseInfix(left: AST, current: Token, tokens: Token[]): AST {\r\n switch (current.type) {\r\n case 2 /* Symbol */:\r\n if (infixOperators.has(current.value)) {\r\n let right = _parse(tokens, bindingPower(current))\r\n if (current.value === 'and' || current.value === 'or') {\r\n return {\r\n type: 14 /* BooleanOperator */,\r\n op: current.value,\r\n left,\r\n right,\r\n }\r\n } else if (current.value === '.') {\r\n if (right.type === 5 /* Name */) {\r\n return {\r\n type: 15 /* ObjLookup */,\r\n obj: left,\r\n key: right.value as string,\r\n }\r\n } else {\r\n throw new ParserError('invalid obj lookup')\r\n }\r\n }\r\n let op: AST = {\r\n type: 7 /* BinaryOperator */,\r\n op: current.value,\r\n left,\r\n right,\r\n }\r\n while (\r\n chainedOperators.has(current.value) &&\r\n tokens[0] &&\r\n tokens[0].type === 2 /* Symbol */ &&\r\n chainedOperators.has(tokens[0].value)\r\n ) {\r\n const nextToken = tokens.shift()!\r\n op = {\r\n type: 14 /* BooleanOperator */,\r\n op: 'and',\r\n left: op,\r\n right: {\r\n type: 7 /* BinaryOperator */,\r\n op: nextToken.value as any,\r\n left: right,\r\n right: _parse(tokens, bindingPower(nextToken)),\r\n },\r\n }\r\n right = (op as ASTBooleanOperator).right\r\n }\r\n return op\r\n }\r\n switch (current.value) {\r\n case '(':\r\n const args: AST[] = []\r\n const kwargs: { [key: string]: AST } = {}\r\n while (tokens[0] && !isSymbol(tokens[0], ')')) {\r\n const arg = _parse(tokens, 0)\r\n if (arg.type === 9 /* Assignment */) {\r\n kwargs[arg.name.value] = arg.value\r\n } else {\r\n args.push(arg)\r\n }\r\n if (tokens[0] && isSymbol(tokens[0], ',')) {\r\n tokens.shift()\r\n }\r\n }\r\n if (!tokens[0] || !isSymbol(tokens[0], ')')) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n return { type: 8 /* FunctionCall */, fn: left, args, kwargs }\r\n case '=':\r\n if (left.type === 5 /* Name */) {\r\n return {\r\n type: 9 /* Assignment */,\r\n name: left as ASTName,\r\n value: _parse(tokens, 10),\r\n }\r\n }\r\n break\r\n case '[':\r\n const key = _parse(tokens)\r\n if (!tokens[0] || !isSymbol(tokens[0], ']')) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n return {\r\n type: 12 /* Lookup */,\r\n target: left,\r\n key: key,\r\n }\r\n case 'if':\r\n const condition = _parse(tokens)\r\n if (!tokens[0] || !isSymbol(tokens[0], 'else')) {\r\n throw new ParserError('parsing error')\r\n }\r\n tokens.shift()\r\n const ifFalse = _parse(tokens)\r\n return {\r\n type: 13 /* If */,\r\n condition,\r\n ifTrue: left,\r\n ifFalse,\r\n }\r\n default:\r\n break\r\n }\r\n }\r\n throw new ParserError('Token cannot be parsed')\r\n}\r\n\r\nfunction _parse(tokens: Token[], bp: number = 0): AST {\r\n const token = tokens.shift()\r\n // console.log('token', token, tokens)\r\n\r\n if (!token) {\r\n throw new ParserError('Unexpected end of input')\r\n }\r\n let expr = parsePrefix(token, tokens)\r\n while (tokens[0] && bindingPower(tokens[0]) > bp) {\r\n expr = parseInfix(expr, tokens.shift()!, tokens)\r\n }\r\n\r\n // console.log('expr', expr)\r\n\r\n return expr\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Parse function\r\n// -----------------------------------------------------------------------------\r\n\r\nexport function parse(tokens: Token[]): AST {\r\n if (tokens.length) {\r\n return _parse(tokens, 0)\r\n }\r\n throw new ParserError('Missing token')\r\n}\r\n\r\nexport function parseArgs<T extends string[]>(\r\n args: any[],\r\n spec: T,\r\n): Record<T[number], any> {\r\n const last = args[args.length - 1]\r\n const unnamedArgs = typeof last === 'object' ? args.slice(0, -1) : args\r\n const kwargs: Record<string, any> = typeof last === 'object' ? last : {}\r\n for (const [index, val] of unnamedArgs.entries()) {\r\n kwargs[spec[index]] = val\r\n }\r\n return kwargs as Record<T[number], any>\r\n}\r\n","// datetime.ts\r\n\r\nimport { parseArgs } from './py_parser'\r\n\r\n// -----------------------------------------------------------------------------\r\n// Errors\r\n// -----------------------------------------------------------------------------\r\n\r\nexport class AssertionError extends Error {}\r\nexport class ValueError extends Error {}\r\nexport class NotSupportedError extends Error {}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Helpers\r\n// -----------------------------------------------------------------------------\r\n\r\nfunction fmt2(n: number): string {\r\n return String(n).padStart(2, '0')\r\n}\r\n\r\nfunction fmt4(n: number): string {\r\n return String(n).padStart(4, '0')\r\n}\r\n\r\n/**\r\n * Computes (Math.floor(a/b), a%b) and passes that to the callback.\r\n * Returns the callback's result.\r\n */\r\nfunction divmod(\r\n a: number,\r\n b: number,\r\n fn: (quotient: number, remainder: number) => any,\r\n): any {\r\n let mod = a % b\r\n if ((mod > 0 && b < 0) || (mod < 0 && b > 0)) {\r\n mod += b\r\n }\r\n return fn(Math.floor(a / b), mod)\r\n}\r\n\r\nfunction assert(bool: boolean, message: string = 'AssertionError'): void {\r\n if (!bool) {\r\n throw new AssertionError(message)\r\n }\r\n}\r\n\r\nconst DAYS_IN_MONTH: (number | null)[] = [\r\n null,\r\n 31,\r\n 28,\r\n 31,\r\n 30,\r\n 31,\r\n 30,\r\n 31,\r\n 31,\r\n 30,\r\n 31,\r\n 30,\r\n 31,\r\n]\r\nconst DAYS_BEFORE_MONTH: (number | null)[] = [null]\r\n\r\nfor (let dbm = 0, i = 1; i < DAYS_IN_MONTH.length; ++i) {\r\n DAYS_BEFORE_MONTH.push(dbm)\r\n dbm += DAYS_IN_MONTH[i] as number\r\n}\r\n\r\nfunction daysInMonth(year: number, month: number): number {\r\n if (month === 2 && isLeap(year)) {\r\n return 29\r\n }\r\n return DAYS_IN_MONTH[month] as number\r\n}\r\n\r\nfunction isLeap(year: number): boolean {\r\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\r\n}\r\n\r\nfunction daysBeforeYear(year: number): number {\r\n const y = year - 1\r\n return y * 365 + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400)\r\n}\r\n\r\nfunction daysBeforeMonth(year: number, month: number): number {\r\n const postLeapFeb = month > 2 && isLeap(year)\r\n return (DAYS_BEFORE_MONTH[month] as number) + (postLeapFeb ? 1 : 0)\r\n}\r\n\r\nfunction ymd2ord(year: number, month: number, day: number): number {\r\n const dim = daysInMonth(year, month)\r\n if (!(1 <= day && day <= dim)) {\r\n throw new ValueError(`day must be in 1..${dim}`)\r\n }\r\n return daysBeforeYear(year) + daysBeforeMonth(year, month) + day\r\n}\r\n\r\nconst DI400Y = daysBeforeYear(401)\r\nconst DI100Y = daysBeforeYear(101)\r\nconst DI4Y = daysBeforeYear(5)\r\n\r\nfunction ord2ymd(n: number): { year: number; month: number; day: number } {\r\n --n\r\n let n400 = 0,\r\n n100 = 0,\r\n n4 = 0,\r\n n1 = 0,\r\n n0 = 0\r\n divmod(n, DI400Y, (_n400: number, n: number) => {\r\n n400 = _n400\r\n divmod(n, DI100Y, (_n100: number, n: number) => {\r\n n100 = _n100\r\n divmod(n, DI4Y, (_n4: number, n: number) => {\r\n n4 = _n4\r\n divmod(n, 365, (_n1: number, n: number) => {\r\n n1 = _n1\r\n n0 = n\r\n })\r\n })\r\n })\r\n })\r\n\r\n n = n0\r\n const year = n400 * 400 + 1 + n100 * 100 + n4 * 4 + n1\r\n if (n1 === 4 || n100 === 100) {\r\n assert(n0 === 0)\r\n return {\r\n year: year - 1,\r\n month: 12,\r\n day: 31,\r\n }\r\n }\r\n\r\n const leapyear = n1 === 3 && (n4 !== 24 || n100 === 3)\r\n assert(leapyear === isLeap(year))\r\n let month = (n + 50) >> 5\r\n let preceding = DAYS_BEFORE_MONTH[month]! + (month > 2 && leapyear ? 1 : 0)\r\n if (preceding > n) {\r\n --month\r\n preceding -= DAYS_IN_MONTH[month]! + (month === 2 && leapyear ? 1 : 0)\r\n }\r\n n -= preceding\r\n return {\r\n year: year,\r\n month: month,\r\n day: n + 1,\r\n }\r\n}\r\n\r\n/**\r\n * Converts the input into a valid date, applying overflows as needed.\r\n */\r\nfunction tmxxx(\r\n year: number,\r\n month: number,\r\n day: number,\r\n hour: number,\r\n minute: number | 0,\r\n second: number | 0,\r\n microsecond?: number,\r\n): {\r\n year: number\r\n month: number\r\n day: number\r\n hour: number\r\n minute: number\r\n second: number\r\n microsecond: number\r\n} {\r\n hour = hour || 0\r\n minute = minute || 0\r\n second = second || 0\r\n microsecond = microsecond || 0\r\n\r\n if (microsecond < 0 || microsecond > 999999) {\r\n divmod(microsecond, 1000000, (carry: number, ms: number) => {\r\n microsecond = ms\r\n second += carry\r\n })\r\n }\r\n if (second < 0 || second > 59) {\r\n divmod(second, 60, (carry: number, s: number) => {\r\n second = s\r\n minute += carry\r\n })\r\n }\r\n if (minute < 0 || minute > 59) {\r\n divmod(minute, 60, (carry: number, m: number) => {\r\n minute = m\r\n hour += carry\r\n })\r\n }\r\n if (hour < 0 || hour > 23) {\r\n divmod(hour, 24, (carry: number, h: number) => {\r\n hour = h\r\n day += carry\r\n })\r\n }\r\n if (month < 1 || month > 12) {\r\n divmod(month - 1, 12, (carry: number, m: number) => {\r\n month = m + 1\r\n year += carry\r\n })\r\n }\r\n const dim = daysInMonth(year, month)\r\n if (day < 1 || day > dim) {\r\n if (day === 0) {\r\n --month\r\n if (month > 0) {\r\n day = daysInMonth(year, month)\r\n } else {\r\n --year\r\n month = 12\r\n day = 31\r\n }\r\n } else if (day === dim + 1) {\r\n ++month\r\n day = 1\r\n if (month > 12) {\r\n month = 1\r\n ++year\r\n }\r\n } else {\r\n const r = ord2ymd(ymd2ord(year, month, 1) + (day - 1))\r\n year = r.year\r\n month = r.month\r\n day = r.day\r\n }\r\n }\r\n return {\r\n year,\r\n month,\r\n day,\r\n hour,\r\n minute,\r\n second,\r\n microsecond,\r\n }\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Date/Time and related classes\r\n// -----------------------------------------------------------------------------\r\n\r\nexport class PyDate {\r\n static today(): PyDate {\r\n return this.convertDate(new Date())\r\n }\r\n\r\n static convertDate(date: Date): PyDate {\r\n const year = date.getFullYear()\r\n const month = date.getMonth() + 1\r\n const day = date.getDate()\r\n return new PyDate(year, month, day)\r\n }\r\n\r\n constructor(\r\n public year: number,\r\n public month: number, // 1-indexed => 1 = january, 2 = february, ...\r\n public day: number, // 1-indexed => 1 = first day of month, ...\r\n ) {}\r\n\r\n static create(...args: any[]): PyDate {\r\n const { year, month, day } = parseArgs(args, ['year', 'month', 'day'])\r\n return new PyDate(year, month, day)\r\n }\r\n\r\n add(timedelta: PyTimeDelta): PyDate {\r\n const s = tmxxx(this.year, this.month, this.day + timedelta.days, 0, 0, 0)\r\n return new PyDate(s.year, s.month, s.day)\r\n }\r\n\r\n isEqual(other: any): boolean {\r\n if (!(other instanceof PyDate)) {\r\n return false\r\n }\r\n return (\r\n this.year === other.year &&\r\n this.month === other.month &&\r\n this.day === other.day\r\n )\r\n }\r\n\r\n strftime(format: string): string {\r\n return format.replace(/%([A-Za-z])/g, (m: string, c: string) => {\r\n switch (c) {\r\n case 'Y':\r\n return fmt4(this.year)\r\n case 'm':\r\n return fmt2(this.month)\r\n case 'd':\r\n return fmt2(this.day)\r\n default:\r\n throw new ValueError(`No known conversion for ${m}`)\r\n }\r\n })\r\n }\r\n\r\n substract(other: PyTimeDelta | PyDate): PyDate | PyTimeDelta {\r\n if (other instanceof PyTimeDelta) {\r\n return this.add(other.negate())\r\n }\r\n if (other instanceof PyDate) {\r\n return PyTimeDelta.create(this.toordinal() - other.toordinal())\r\n }\r\n throw new NotSupportedError()\r\n }\r\n\r\n toJSON(): string {\r\n return this.strftime('%Y-%m-%d')\r\n }\r\n\r\n toordinal(): number {\r\n return ymd2ord(this.year, this.month, this.day)\r\n }\r\n}\r\n\r\nexport class PyDateTime {\r\n static now(): PyDateTime {\r\n return this.convertDate(new Date())\r\n }\r\n\r\n static convertDate(date: Date): PyDateTime {\r\n const year = date.getFullYear()\r\n const month = date.getMonth() + 1\r\n const day = date.getDate()\r\n const hour = date.getHours()\r\n const minute = date.getMinutes()\r\n const second = date.getSeconds()\r\n return new PyDateTime(year, month, day, hour, minute, second, 0)\r\n }\r\n\r\n static create(...args: any[]): PyDateTime {\r\n const namedArgs = parseArgs(args, [\r\n 'year',\r\n 'month',\r\n 'day',\r\n 'hour',\r\n 'minute',\r\n 'second',\r\n 'microsecond',\r\n ])\r\n const year = namedArgs.year\r\n const month = namedArgs.month\r\n const day = namedArgs.day\r\n const hour = namedArgs.hour || 0\r\n const minute = namedArgs.minute || 0\r\n const second = namedArgs.second || 0\r\n const ms = namedArgs.microsecond / 1000 || 0\r\n return new PyDateTime(year, month, day, hour, minute, second, ms)\r\n }\r\n\r\n static combine(...args: any[]): PyDateTime {\r\n const { date, time } = parseArgs(args, ['date', 'time'])\r\n return PyDateTime.create(\r\n date.year,\r\n date.month,\r\n date.day,\r\n time.hour,\r\n time.minute,\r\n time.second,\r\n )\r\n }\r\n\r\n constructor(\r\n public year: number,\r\n public month: number, // 1-indexed => 1 = january, 2 = february, ...\r\n public day: number, // 1-indexed => 1 = first day of month, ...\r\n public hour: number,\r\n public minute: number,\r\n public second: number,\r\n public microsecond: number,\r\n ) {}\r\n\r\n add(timedelta: PyTimeDelta): PyDateTime {\r\n const s = tmxxx(\r\n this.year,\r\n this.month,\r\n this.day + timedelta.days,\r\n this.hour,\r\n this.minute,\r\n this.second + timedelta.seconds,\r\n this.microsecond + timedelta.microseconds,\r\n )\r\n return new PyDateTime(\r\n s.year,\r\n s.month,\r\n s.day,\r\n s.hour,\r\n s.minute,\r\n s.second,\r\n s.microsecond,\r\n )\r\n }\r\n\r\n isEqual(other: any): boolean {\r\n if (!(other instanceof PyDateTime)) {\r\n return false\r\n }\r\n return (\r\n this.year === other.year &&\r\n this.month === other.month &&\r\n this.day === other.day &&\r\n this.hour === other.hour &&\r\n this.minute === other.minute &&\r\n this.second === other.second &&\r\n this.microsecond === other.microsecond\r\n )\r\n }\r\n\r\n strftime(format: string): string {\r\n return format.replace(/%([A-Za-z])/g, (m: string, c: string) => {\r\n switch (c) {\r\n case 'Y':\r\n return fmt4(this.year)\r\n case 'm':\r\n return fmt2(this.month)\r\n case 'd':\r\n return fmt2(this.day)\r\n case 'H':\r\n return fmt2(this.hour)\r\n case 'M':\r\n return fmt2(this.minute)\r\n case 'S':\r\n return fmt2(this.second)\r\n default:\r\n throw new ValueError(`No known conversion for ${m}`)\r\n }\r\n })\r\n }\r\n\r\n substract(timedelta: PyTimeDelta): PyDateTime {\r\n return this.add(timedelta.negate())\r\n }\r\n\r\n toJSON(): string {\r\n return this.strftime('%Y-%m-%d %H:%M:%S')\r\n }\r\n\r\n to_utc(): PyDateTime {\r\n const d = new Date(\r\n this.year,\r\n this.month - 1,\r\n this.day,\r\n this.hour,\r\n this.minute,\r\n this.second,\r\n )\r\n const timedelta = PyTimeDelta.create({ minutes: d.getTimezoneOffset() })\r\n return this.add(timedelta)\r\n }\r\n}\r\n\r\nexport class PyTime extends PyDate {\r\n static create(...args: any[]): PyTime {\r\n const namedArgs = parseArgs(args, ['hour', 'minute', 'second'])\r\n const hour = namedArgs.hour || 0\r\n const minute = namedArgs.minute || 0\r\n const second = namedArgs.second || 0\r\n return new PyTime(hour, minute, second)\r\n }\r\n\r\n constructor(\r\n public hour: number,\r\n public minute: number,\r\n public second: number,\r\n ) {\r\n const now = new Date()\r\n const year = now.getFullYear()\r\n const month = now.getMonth() + 1\r\n const day = now.getDate()\r\n super(year, month, day)\r\n this.hour = hour\r\n this.minute = minute\r\n this.second = second\r\n }\r\n\r\n strftime(format: string): string {\r\n return format.replace(/%([A-Za-z])/g, (m: string, c: string) => {\r\n switch (c) {\r\n case 'Y':\r\n return fmt4(this.year)\r\n case 'm':\r\n return fmt2(this.month)\r\n case 'd':\r\n return fmt2(this.day)\r\n case 'H':\r\n return fmt2(this.hour)\r\n case 'M':\r\n return fmt2(this.minute)\r\n case 'S':\r\n return fmt2(this.second)\r\n default:\r\n throw new ValueError(`No known conversion for ${m}`)\r\n }\r\n })\r\n }\r\n\r\n toJSON(): string {\r\n return this.strftime('%H:%M:%S')\r\n }\r\n}\r\n\r\nconst DAYS_IN_YEAR: number[] = [\r\n 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 366,\r\n]\r\nconst TIME_PERIODS: string[] = ['hour', 'minute', 'second']\r\nconst PERIODS: string[] = ['year', 'month', 'day', ...TIME_PERIODS]\r\nconst RELATIVE_KEYS: string[] =\r\n 'years months weeks days hours minutes seconds microseconds leapdays'.split(\r\n ' ',\r\n )\r\nconst ABSOLUTE_KEYS: string[] =\r\n 'year month day hour minute second microsecond weekday nlyearday yearday'.split(\r\n ' ',\r\n )\r\nconst argsSpec: string[] = ['dt1', 'dt2']\r\n\r\nexport class PyRelativeDelta {\r\n static create(...args: any[]): PyRelativeDelta {\r\n const params = parseArgs(args, argsSpec)\r\n if ('dt1' in params) {\r\n throw new Error('relativedelta(dt1, dt2) is not supported for now')\r\n }\r\n for (const period of PERIODS) {\r\n if (period in params) {\r\n const val = params[period]\r\n assert(val >= 0, `${period} ${val} is out of range`)\r\n }\r\n }\r\n\r\n for (const key of RELATIVE_KEYS) {\r\n params[key] = params[key] || 0\r\n }\r\n for (const key of ABSOLUTE_KEYS) {\r\n params[key] = key in params ? params[key] : null\r\n }\r\n params.days += 7 * params.weeks\r\n\r\n let yearDay = 0\r\n if (params.nlyearday) {\r\n yearDay = params.nlyearday\r\n } else if (params.yearday) {\r\n yearDay = params.yearday\r\n if (yearDay > 59) {\r\n params.leapDays = -1\r\n }\r\n }\r\n\r\n if (yearDay) {\r\n for (let monthIndex = 0; monthIndex < DAYS_IN_YEAR.length; monthIndex++) {\r\n if (yearDay <= DAYS_IN_YEAR[monthIndex]) {\r\n params.month = monthIndex + 1\r\n if (monthIndex === 0) {\r\n params.day = yearDay\r\n } else {\r\n params.day = yearDay - DAYS_IN_YEAR[monthIndex - 1]\r\n }\r\n break\r\n }\r\n }\r\n }\r\n\r\n return new PyRelativeDelta(params)\r\n }\r\n\r\n static add(\r\n date: PyDateTime | PyDate,\r\n delta: PyRelativeDelta,\r\n ): PyDateTime | PyDate {\r\n if (!(date instanceof PyDate || date instanceof PyDateTime)) {\r\n throw new NotSupportedError()\r\n }\r\n\r\n const s = tmxxx(\r\n (delta.year || date.year) + delta.years,\r\n (delta.month || date.month) + delta.months,\r\n delta.day || date.day,\r\n delta.hour || (date instanceof PyDateTime ? date.hour : 0),\r\n delta.minute || (date instanceof PyDateTime ? date.minute : 0),\r\n delta.second || (date instanceof PyDateTime ? date.second : 0),\r\n delta.microseconds || (date instanceof PyDateTime ? date.microsecond : 0),\r\n )\r\n\r\n const newDateTime = new PyDateTime(\r\n s.year,\r\n s.month,\r\n s.day,\r\n s.hour,\r\n s.minute,\r\n s.second,\r\n s.microsecond,\r\n )\r\n\r\n let leapDays = 0\r\n if (delta.leapDays && newDateTime.month > 2 && isLeap(newDateTime.year)) {\r\n leapDays = delta.leapDays\r\n }\r\n\r\n const temp = newDateTime.add(\r\n PyTimeDelta.create({\r\n days: delta.days + leapDays,\r\n hours: delta.hours,\r\n minutes: delta.minutes,\r\n seconds: delta.seconds,\r\n microseconds: delta.microseconds,\r\n }),\r\n )\r\n\r\n const hasTime = Boolean(\r\n temp.hour || temp.minute || temp.second || temp.microsecond,\r\n )\r\n const returnDate =\r\n !hasTime && date instanceof PyDate\r\n ? new PyDate(temp.year, temp.month, temp.day)\r\n : temp\r\n\r\n if (delta.weekday !== null) {\r\n const wantedDow = delta.weekday + 1 // python: Monday is 0; JS: Monday is 1\r\n const _date = new Date(\r\n returnDate.year,\r\n returnDate.month - 1,\r\n returnDate.day,\r\n )\r\n const days = (7 - _date.getDay() + wantedDow) % 7\r\n return returnDate.add(new PyTimeDelta(days, 0, 0))\r\n }\r\n return returnDate\r\n }\r\n\r\n static substract(\r\n date: PyDateTime | PyDate,\r\n delta: PyRelativeDelta,\r\n ): PyDateTime | PyDate {\r\n return PyRelativeDelta.add(date, delta.negate())\r\n }\r\n\r\n constructor(params: Record<string, any> = {}, sign: 1 | -1 = 1) {\r\n this.years = sign * params.years\r\n this.months = sign * params.months\r\n this.days = sign * params.days\r\n this.hours = sign * params.hours\r\n this.minutes = sign * params.minutes\r\n this.seconds = sign * params.seconds\r\n this.microseconds = sign * params.microseconds\r\n this.leapDays = params.leapDays\r\n this.year = params.year\r\n this.month = params.month\r\n this.day = params.day\r\n this.hour = params.hour\r\n this.minute = params.minute\r\n this.second = params.second\r\n this.microsecond = params.microsecond\r\n this.weekday = params.weekday\r\n }\r\n\r\n years: number\r\n months: number\r\n days: number\r\n hours: number\r\n minutes: number\r\n seconds: number\r\n microseconds: number\r\n leapDays: number | undefined\r\n year: number | null\r\n month: number | null\r\n day: number | null\r\n hour: number | null\r\n minute: number | null\r\n second: number | null\r\n microsecond: number | null\r\n weekday: number | null\r\n\r\n negate(): PyRelativeDelta {\r\n return new PyRelativeDelta(this, -1)\r\n }\r\n\r\n isEqual(): never {\r\n throw new NotSupportedError()\r\n }\r\n}\r\n\r\nconst TIME_DELTA_KEYS: string[] =\r\n 'weeks days hours minutes seconds milliseconds microseconds'.split(' ')\r\n\r\nfunction modf(x: number): [number, number] {\r\n const mod = x % 1\r\n return [mod < 0 ? mod + 1 : mod, Math.floor(x)]\r\n}\r\n\r\nexport class PyTimeDelta {\r\n static create(...args: any[]): PyTimeDelta {\r\n const namedArgs = parseArgs(args, ['days', 'seconds', 'microseconds'])\r\n for (const key of TIME_DELTA_KEYS) {\r\n namedArgs[key] = namedArgs[key] || 0\r\n }\r\n\r\n let d = 0\r\n let s = 0\r\n let us = 0\r\n\r\n const days = namedArgs.days + namedArgs.weeks * 7\r\n let seconds =\r\n namedArgs.seconds + 60 * namedArgs.minutes + 3600 * namedArgs.hours\r\n let microseconds = namedArgs.microseconds + 1000 * namedArgs.milliseconds\r\n\r\n const [dFrac, dInt] = modf(days)\r\n d = dInt\r\n let daysecondsfrac = 0\r\n if (dFrac) {\r\n const [dsFrac, dsInt] = modf(dFrac * 24 * 3600)\r\n s = dsInt\r\n daysecondsfrac = dsFrac\r\n }\r\n\r\n const [sFrac, sInt] = modf(seconds)\r\n seconds = sInt\r\n const secondsfrac = sFrac + daysecondsfrac\r\n\r\n divmod(seconds, 24 * 3600, (days: number, seconds: number) => {\r\n d += days\r\n s += seconds\r\n })\r\n\r\n microseconds += secondsfrac * 1e6\r\n divmod(microseconds, 1000000, (seconds: number, microseconds: number) => {\r\n divmod(seconds, 24 * 3600, (days: number, seconds: number) => {\r\n d += days\r\n s += seconds\r\n us += Math.round(microseconds)\r\n })\r\n })\r\n\r\n return new PyTimeDelta(d, s, us)\r\n }\r\n\r\n constructor(\r\n public days: number,\r\n public seconds: number,\r\n public microseconds: number,\r\n ) {}\r\n\r\n add(other: PyTimeDelta): PyTimeDelta {\r\n return PyTimeDelta.create({\r\n days: this.days + other.days,\r\n seconds: this.seconds + other.seconds,\r\n microseconds: this.microseconds + other.microseconds,\r\n })\r\n }\r\n\r\n divide(n: number): PyTimeDelta {\r\n const us = (this.days * 24 * 3600 + this.seconds) * 1e6 + this.microseconds\r\n return PyTimeDelta.create({ microseconds: Math.floor(us / n) })\r\n }\r\n\r\n isEqual(other: any): boolean {\r\n if (!(other instanceof PyTimeDelta)) {\r\n return false\r\n }\r\n return (\r\n this.days === other.days &&\r\n this.seconds === other.seconds &&\r\n this.microseconds === other.microseconds\r\n )\r\n }\r\n\r\n isTrue(): boolean {\r\n return this.days !== 0 || this.seconds !== 0 || this.microseconds !== 0\r\n }\r\n\r\n multiply(n: number): PyTimeDelta {\r\n return PyTimeDelta.create({\r\n days: n * this.days,\r\n seconds: n * this.seconds,\r\n microseconds: n * this.microseconds,\r\n })\r\n }\r\n\r\n negate(): PyTimeDelta {\r\n return PyTimeDelta.create({\r\n days: -this.days,\r\n seconds: -this.seconds,\r\n microseconds: -this.microseconds,\r\n })\r\n }\r\n\r\n substract(other: PyTimeDelta): PyTimeDelta {\r\n return PyTimeDelta.create({\r\n days: this.days - other.days,\r\n seconds: this.seconds - other.seconds,\r\n microseconds: this.microseconds - other.microseconds,\r\n })\r\n }\r\n\r\n total_seconds(): number {\r\n return this.days * 86400 + this.seconds + this.microseconds / 1000000\r\n }\r\n}\r\n","// py_utils.ts\r\n\r\nimport {\r\n PyDate,\r\n PyDateTime,\r\n PyRelativeDelta,\r\n PyTime,\r\n PyTimeDelta,\r\n} from './py_date'\r\n\r\nexport class EvaluationError extends Error {\r\n constructor(message?: string) {\r\n super(message)\r\n this.name = 'EvaluationError'\r\n }\r\n}\r\n\r\nexport function execOnIterable<T>(\r\n iterable: any,\r\n func: (iterable: Iterable<T>) => any,\r\n): any {\r\n if (iterable === null) {\r\n throw new EvaluationError('value not iterable')\r\n }\r\n if (\r\n typeof iterable === 'object' &&\r\n !Array.isArray(iterable) &&\r\n !(iterable instanceof Set)\r\n ) {\r\n iterable = Object.keys(iterable)\r\n }\r\n if (typeof iterable?.[Symbol.iterator] !== 'function') {\r\n throw new EvaluationError('value not iterable')\r\n }\r\n return func(iterable as Iterable<T>)\r\n}\r\n\r\nexport const BUILTINS = {\r\n /**\r\n * @param {any} value\r\n * @returns {boolean}\r\n */\r\n bool(value: any): boolean {\r\n // console.log('value', value)\r\n\r\n switch (typeof value) {\r\n case 'number':\r\n return value !== 0\r\n case 'string':\r\n return value !== ''\r\n case 'boolean':\r\n return value\r\n case 'object':\r\n if (value === null || value === undefined) {\r\n return false\r\n }\r\n if ('isTrue' in value && typeof value.isTrue === 'function') {\r\n return value.isTrue()\r\n }\r\n if (value instanceof Array) {\r\n return !!value.length\r\n }\r\n if (value instanceof Set) {\r\n return !!value.size\r\n }\r\n return Object.keys(value).length !== 0\r\n default:\r\n return true\r\n }\r\n },\r\n\r\n set<T>(iterable?: Iterable<T>): Set<T> {\r\n if (arguments.length > 2) {\r\n throw new EvaluationError(\r\n `set expected at most 1 argument, got (${arguments.length - 1})`,\r\n )\r\n }\r\n return execOnIterable(\r\n iterable,\r\n (iterable: Iterable<T>) => new Set(iterable),\r\n )\r\n },\r\n\r\n time: {\r\n strftime(format: string): string {\r\n return PyDateTime.now().strftime(format)\r\n },\r\n },\r\n\r\n context_today(): PyDate {\r\n return PyDate.today()\r\n },\r\n\r\n get current_date(): string {\r\n return this.today\r\n },\r\n\r\n get today(): string {\r\n return PyDate.today().strftime('%Y-%m-%d')\r\n },\r\n\r\n get now(): string {\r\n return PyDateTime.now().strftime('%Y-%m-%d %H:%M:%S')\r\n },\r\n\r\n datetime: {\r\n time: PyTime,\r\n timedelta: PyTimeDelta,\r\n datetime: PyDateTime,\r\n date: PyDate,\r\n },\r\n\r\n relativedelta: PyRelativeDelta,\r\n\r\n true: true,\r\n false: false,\r\n}\r\n","// py_utils.ts\r\n\r\nimport { PyDate, PyDateTime } from './py_date'\r\nimport { AST, bp } from './py_parser'\r\n\r\n// -----------------------------------------------------------------------------\r\n// Utils\r\n// -----------------------------------------------------------------------------\r\n\r\nexport function toPyValue(value: any): AST {\r\n switch (typeof value) {\r\n case 'string':\r\n return { type: 1 /* String */, value }\r\n case 'number':\r\n return { type: 0 /* Number */, value }\r\n case 'boolean':\r\n return { type: 2 /* Boolean */, value }\r\n case 'object':\r\n if (Array.isArray(value)) {\r\n return { type: 4 /* List */, value: value.map(toPyValue) }\r\n } else if (value === null) {\r\n return { type: 3 /* None */ }\r\n } else if (value instanceof Date) {\r\n return {\r\n type: 1 /* String */,\r\n value: String(PyDateTime.convertDate(value)),\r\n }\r\n } else if (value instanceof PyDate || value instanceof PyDateTime) {\r\n return { type: 1 /* String */, value: value as any }\r\n } else {\r\n const content: { [key: string]: AST } = {}\r\n for (const key in value) {\r\n content[key] = toPyValue(value[key])\r\n }\r\n return { type: 11 /* Dictionary */, value: content }\r\n }\r\n default:\r\n throw new Error('Invalid type')\r\n }\r\n}\r\n\r\nexport function formatAST(ast: AST, lbp: number = 0): string {\r\n switch (ast.type) {\r\n case 3 /* None */:\r\n return 'None'\r\n case 1 /* String */:\r\n return JSON.stringify(ast.value)\r\n case 0 /* Number */:\r\n return String(ast.value)\r\n case 2 /* Boolean */:\r\n return ast.value ? 'True' : 'False'\r\n case 4 /* List */:\r\n return `[${ast.value.map(formatAST).join(', ')}]`\r\n case 6 /* UnaryOperator */:\r\n if (ast.op === 'not') {\r\n return `not ${formatAST(ast.right, 50)}`\r\n }\r\n return `${ast.op}${formatAST(ast.right, 130)}`\r\n case 7 /* BinaryOperator */:\r\n const abp = bp(ast.op)\r\n const binaryStr = `${formatAST(ast.left, abp)} ${ast.op} ${formatAST(ast.right, abp)}`\r\n return abp < lbp ? `(${binaryStr})` : binaryStr\r\n case 11 /* Dictionary */:\r\n const pairs: string[] = []\r\n for (const k in ast.value) {\r\n pairs.push(`\"${k}\": ${formatAST(ast.value[k])}`)\r\n }\r\n return `{${pairs.join(', ')}}`\r\n case 10 /* Tuple */:\r\n return `(${ast.value.map(formatAST).join(', ')})`\r\n case 5 /* Name */:\r\n return ast.value\r\n case 12 /* Lookup */:\r\n return `${formatAST(ast.target)}[${formatAST(ast.key)}]`\r\n case 13 /* If */:\r\n const { ifTrue, condition, ifFalse } = ast\r\n return `${formatAST(ifTrue)} if ${formatAST(condition)} else ${formatAST(ifFalse)}`\r\n case 14 /* BooleanOperator */:\r\n const boolAbp = bp(ast.op)\r\n const boolStr = `${formatAST(ast.left, boolAbp)} ${ast.op} ${formatAST(ast.right, boolAbp)}`\r\n return boolAbp < lbp ? `(${boolStr})` : boolStr\r\n case 15 /* ObjLookup */:\r\n return `${formatAST(ast.obj, 150)}.${ast.key}`\r\n case 8 /* FunctionCall */:\r\n const args = ast.args.map(formatAST)\r\n const kwargs: string[] = []\r\n for (const kwarg in ast.kwargs) {\r\n kwargs.push(`${kwarg} = ${formatAST(ast.kwargs[kwarg])}`)\r\n }\r\n const argStr = args.concat(kwargs).join(', ')\r\n return `${formatAST(ast.fn)}(${argStr})`\r\n default:\r\n throw new Error('invalid expression: ' + JSON.stringify(ast))\r\n }\r\n}\r\n\r\nexport const PY_DICT = Object.create(null)\r\n\r\nexport function toPyDict(obj: Record<string, any>): any {\r\n return new Proxy(obj, {\r\n getPrototypeOf() {\r\n return PY_DICT\r\n },\r\n })\r\n}\r\n","// py_evaluate.ts\r\n\r\n// Giả lập các import từ các file khác\r\nimport { BUILTINS, EvaluationError, execOnIterable } from './py_builtin'\r\nimport {\r\n NotSupportedError,\r\n PyDate,\r\n PyDateTime,\r\n PyRelativeDelta,\r\n PyTime,\r\n PyTimeDelta,\r\n} from './py_date'\r\nimport { parseArgs } from './py_parser'\r\nimport { PY_DICT, toPyDict } from './py_utils'\r\n\r\n// -----------------------------------------------------------------------------\r\n// Types\r\n// -----------------------------------------------------------------------------\r\n\r\nexport interface AST {\r\n type: number\r\n value?: any\r\n op?: string\r\n left?: AST\r\n right?: AST\r\n fn?: AST\r\n args?: AST[]\r\n kwargs?: Record<string, AST>\r\n target?: AST\r\n key?: AST | string\r\n condition?: AST\r\n ifTrue?: AST\r\n ifFalse?: AST\r\n obj?: AST\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Constants and helpers\r\n// -----------------------------------------------------------------------------\r\n\r\nconst isTrue: (value: any) => boolean = BUILTINS.bool\r\n\r\nfunction applyUnaryOp(ast: AST, context: any): any {\r\n const value = evaluate(ast.right!, context)\r\n switch (ast.op) {\r\n case '-':\r\n if (value instanceof Object && 'negate' in value) {\r\n return (value as PyTimeDelta | PyRelativeDelta).negate()\r\n }\r\n return -value\r\n case '+':\r\n return value\r\n case 'not':\r\n return !isTrue(value)\r\n default:\r\n throw new EvaluationError(`Unknown unary operator: ${ast.op}`)\r\n }\r\n}\r\n\r\nfunction pytypeIndex(val: any): number {\r\n switch (typeof val) {\r\n case 'object':\r\n return val === null ? 1 : Array.isArray(val) ? 5 : 3\r\n case 'number':\r\n return 2\r\n case 'string':\r\n return 4\r\n default:\r\n throw new EvaluationError(`Unknown type: ${typeof val}`)\r\n }\r\n}\r\n\r\nfunction isConstructor(obj: any): boolean {\r\n return !!obj.prototype && !!obj.prototype.constructor.name\r\n}\r\n\r\nfunction isLess(left: any, right: any): boolean {\r\n if (typeof left === 'number' && typeof right === 'number') {\r\n return left < right\r\n }\r\n if (typeof left === 'boolean') {\r\n left = left ? 1 : 0\r\n }\r\n if (typeof right === 'boolean') {\r\n right = right ? 1 : 0\r\n }\r\n const leftIndex = pytypeIndex(left)\r\n const rightIndex = pytypeIndex(right)\r\n if (leftIndex === rightIndex) {\r\n return left < right\r\n }\r\n return leftIndex < rightIndex\r\n}\r\n\r\nfunction isEqual(left: any, right: any): boolean {\r\n if (typeof left !== typeof right) {\r\n if (typeof left === 'boolean' && typeof right === 'number') {\r\n return right === (left ? 1 : 0)\r\n }\r\n if (typeof left === 'number' && typeof right === 'boolean') {\r\n return left === (right ? 1 : 0)\r\n }\r\n return false\r\n }\r\n if (left instanceof Object && 'isEqual' in left) {\r\n return (left as PyDate | PyDateTime | PyTimeDelta).isEqual(right)\r\n }\r\n return left === right\r\n}\r\n\r\nfunction isIn(left: any, right: any): boolean {\r\n if (Array.isArray(right)) {\r\n return right.includes(left)\r\n }\r\n if (typeof right === 'string' && typeof left === 'string') {\r\n return right.includes(left)\r\n }\r\n if (typeof right === 'object') {\r\n return left in right\r\n }\r\n return false\r\n}\r\n\r\nfunction applyBinaryOp(ast: AST, context: any): any {\r\n const left = evaluate(ast.left!, context)\r\n const right = evaluate(ast.right!, context)\r\n // console.log(\"left\", left, ast.left)\r\n // console.log(\"right\", right, ast.right)\r\n switch (ast.op) {\r\n case '+': {\r\n const relativeDeltaOnLeft = left instanceof PyRelativeDelta\r\n const relativeDeltaOnRight = right instanceof PyRelativeDelta\r\n if (relativeDeltaOnLeft || relativeDeltaOnRight) {\r\n const date = relativeDeltaOnLeft ? right : left\r\n const delta = relativeDeltaOnLeft ? left : right\r\n return PyRelativeDelta.add(date, delta)\r\n }\r\n\r\n const timeDeltaOnLeft = left instanceof PyTimeDelta\r\n const timeDeltaOnRight = right instanceof PyTimeDelta\r\n if (timeDeltaOnLeft && timeDeltaOnRight) {\r\n return left.add(right)\r\n }\r\n if (timeDeltaOnLeft) {\r\n if (right instanceof PyDate || right instanceof PyDateTime) {\r\n return right.add(left)\r\n } else {\r\n throw new NotSupportedError()\r\n }\r\n }\r\n if (timeDeltaOnRight) {\r\n if (left instanceof PyDate || left instanceof PyDateTime) {\r\n return left.add(right)\r\n } else {\r\n throw new NotSupportedError()\r\n }\r\n }\r\n if (left instanceof Array && right instanceof Array) {\r\n return [...left, ...right]\r\n }\r\n return left + right\r\n }\r\n case '-': {\r\n const isRightDelta = right instanceof PyRelativeDelta\r\n if (isRightDelta) {\r\n return PyRelativeDelta.substract(left, right)\r\n }\r\n\r\n const timeDeltaOnRight = right instanceof PyTimeDelta\r\n if (timeDeltaOnRight) {\r\n if (left instanceof PyTimeDelta) {\r\n return left.substract(right)\r\n } else if (left instanceof PyDate || left instanceof PyDateTime) {\r\n return left.substract(right)\r\n } else {\r\n throw new NotSupportedError()\r\n }\r\n }\r\n\r\n if (left instanceof PyDate) {\r\n return left.substract(right)\r\n }\r\n return left - right\r\n }\r\n case '*': {\r\n const timeDeltaOnLeft = left instanceof PyTimeDelta\r\n const timeDeltaOnRight = right instanceof PyTimeDelta\r\n if (timeDeltaOnLeft || timeDeltaOnRight) {\r\n const number = timeDeltaOnLeft ? right : left\r\n const delta = timeDeltaOnLeft ? left : right\r\n return delta.multiply(number)\r\n }\r\n return left * right\r\n }\r\n case '/':\r\n return left / right\r\n case '%':\r\n return left % right\r\n case '//':\r\n if (left instanceof PyTimeDelta) {\r\n return left.divide(right)\r\n }\r\n return Math.floor(left / right)\r\n case '**':\r\n return left ** right\r\n case '==':\r\n return isEqual(left, right)\r\n case '<>':\r\n case '!=':\r\n return !isEqual(left, right)\r\n case '<':\r\n return isLess(left, right)\r\n case '>':\r\n return isLess(right, left)\r\n case '>=':\r\n return isEqual(left, right) || isLess(right, left)\r\n case '<=':\r\n return isEqual(left, right) || isLess(left, right)\r\n case 'in':\r\n return isIn(left, right)\r\n case 'not in':\r\n return !isIn(left, right)\r\n default:\r\n throw new EvaluationError(`Unknown binary operator: ${ast.op}`)\r\n }\r\n}\r\ninterface DictType {\r\n [key: string]: any\r\n get(key: string, defValue?: any): any\r\n}\r\nconst DICT = {\r\n get(...args: any[]): any {\r\n // console.log(\"get from dict\", args)\r\n // console.log(\"get from dict\", this)\r\n\r\n const { key, defValue } = parseArgs(args, ['key', 'defValue'])\r\n const self = this as DictType\r\n\r\n if (key in self) {\r\n return self[key]\r\n } else if (defValue !== undefined) {\r\n return defValue\r\n }\r\n return null\r\n },\r\n}\r\n\r\nconst STRING = {\r\n lower(this: string): string {\r\n return this.toLowerCase()\r\n },\r\n upper(this: string): string {\r\n return this.toUpperCase()\r\n },\r\n}\r\n\r\nfunction applyFunc(\r\n key: string,\r\n func: (iterable: Iterable<any>) => Set<any>,\r\n set: Set<any>,\r\n ...args: any[]\r\n): Set<any> {\r\n if (args.length === 1) {\r\n return new Set(set)\r\n }\r\n if (args.length > 2) {\r\n throw new EvaluationError(\r\n `${key}: py_js supports at most 1 argument, got (${args.length - 1})`,\r\n )\r\n }\r\n return execOnIterable(args[0], func)\r\n}\r\n\r\nconst SET = {\r\n intersection(this: Set<any>, ...args: any[]): Set<any> {\r\n return applyFunc(\r\n 'intersection',\r\n (iterable: Iterable<any>) => {\r\n const intersection = new Set()\r\n for (const i of iterable) {\r\n if (this.has(i)) {\r\n intersection.add(i)\r\n }\r\n }\r\n return intersection\r\n },\r\n this,\r\n ...args,\r\n )\r\n },\r\n difference(this: Set<any>, ...args: any[]): Set<any> {\r\n return applyFunc(\r\n 'difference',\r\n (iterable: Iterable<any>) => {\r\n iterable = new Set(iterable)\r\n const difference = new Set()\r\n for (const e of this) {\r\n if (!(iterable as Set<any>).has(e)) {\r\n difference.add(e)\r\n }\r\n }\r\n return difference\r\n },\r\n this,\r\n ...args,\r\n )\r\n },\r\n union(this: Set<any>, ...args: any[]): Set<any> {\r\n return applyFunc(\r\n 'union',\r\n (iterable: Iterable<any>) => {\r\n return new Set([...this, ...iterable])\r\n },\r\n this,\r\n ...args,\r\n )\r\n },\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Evaluate function\r\n// -----------------------------------------------------------------------------\r\n\r\nfunction methods(_class: any): Function[] {\r\n return Object.getOwnPropertyNames(_class.prototype).map(\r\n (prop) => _class.prototype[prop],\r\n )\r\n}\r\n\r\nconst allowedFns = new Set<Function>([\r\n BUILTINS.time.strftime,\r\n BUILTINS.set,\r\n BUILTINS.bool,\r\n BUILTINS.context_today,\r\n BUILTINS.datetime.datetime.now,\r\n BUILTINS.datetime.datetime.combine,\r\n BUILTINS.datetime.date.today,\r\n ...methods(BUILTINS.relativedelta),\r\n ...Object.values(BUILTINS.datetime).flatMap((obj: any) => methods(obj)),\r\n ...Object.values(SET),\r\n ...Object.values(DICT),\r\n ...Object.values(STRING),\r\n])\r\n\r\nconst unboundFn = Symbol('unbound function')\r\n\r\nexport function evaluate(ast: AST, context: any = {}): any {\r\n const dicts = new Set<any>()\r\n let pyContext: any\r\n // console.log(\"context\", context)\r\n const evalContext = Object.create(context)\r\n if (!evalContext?.context) {\r\n Object.defineProperty(evalContext, 'context', {\r\n get() {\r\n if (!pyContext) {\r\n pyContext = toPyDict(context)\r\n }\r\n return pyContext\r\n },\r\n })\r\n }\r\n // console.log('evalContext', ast, context, evalContext)\r\n\r\n function _innerEvaluate(ast: AST): any {\r\n switch (ast?.type) {\r\n case 0: // Number\r\n case 1: // String\r\n return ast.value\r\n case 5: // Name\r\n if (ast.value in evalContext) {\r\n if (\r\n typeof evalContext[ast.value] === 'object' &&\r\n evalContext[ast.value]?.id\r\n ) {\r\n return evalContext[ast.value]?.id\r\n }\r\n return evalContext[ast.value] ?? false\r\n } else if (ast.value in BUILTINS) {\r\n return BUILTINS[ast.value as never]\r\n } else {\r\n return false\r\n // throw new EvaluationError(`Name '${ast.value}' is not defined`)\r\n }\r\n\r\n case 3: // None\r\n return null\r\n case 2: // Boolean\r\n return ast.value\r\n case 6: // UnaryOperator\r\n return applyUnaryOp(ast, evalContext)\r\n case 7: // BinaryOperator\r\n return applyBinaryOp(ast, evalContext)\r\n case 14: // BooleanOperator\r\n const left = _evaluate(ast.left!)\r\n if (ast.op === 'and') {\r\n return isTrue(left) ? _evaluate(ast.right!) : left\r\n } else {\r\n return isTrue(left) ? left : _evaluate(ast.right!)\r\n }\r\n case 4: // List\r\n case 10: // Tuple\r\n return ast.value.map(_evaluate)\r\n case 11: // Dictionary\r\n const dict: any = {}\r\n for (const key in ast.value) {\r\n dict[key] = _evaluate(ast.value[key])\r\n }\r\n dicts.add(dict)\r\n return dict\r\n case 8: // FunctionCall\r\n const fnValue = _evaluate(ast.fn!)\r\n const args = ast.args!.map(_evaluate)\r\n const kwargs: any = {}\r\n for (const kwarg in ast.kwargs) {\r\n kwargs[kwarg] = _evaluate(ast?.kwargs[kwarg])\r\n }\r\n if (\r\n fnValue === PyDate ||\r\n fnValue === PyDateTime ||\r\n fnValue === PyTime ||\r\n fnValue === PyRelativeDelta ||\r\n fnValue === PyTimeDelta\r\n ) {\r\n return fnValue.create(...args, kwargs)\r\n }\r\n return fnValue(...args, kwargs)\r\n case 12: // Lookup\r\n const dictVal = _evaluate(ast.target!)\r\n const key = _evaluate(ast.key! as AST)\r\n return dictVal[key]\r\n case 13: // If\r\n if (isTrue(_evaluate(ast.condition!))) {\r\n return _evaluate(ast.ifTrue!)\r\n } else {\r\n return _evaluate(ast.ifFalse!)\r\n }\r\n case 15: // ObjLookup\r\n let leftVal = _evaluate(ast.obj!)\r\n let result: any\r\n if (dicts.has(leftVal) || Object.isPrototypeOf.call(PY_DICT, leftVal)) {\r\n result = DICT[ast.key as keyof typeof DICT]\r\n } else if (typeof leftVal === 'string') {\r\n result = STRING[ast.key as keyof typeof STRING]\r\n } else if (leftVal instanceof Set) {\r\n result = SET[ast.key as keyof typeof SET]\r\n } else if (ast.key === 'get' && typeof leftVal === 'object') {\r\n result = DICT[ast.key as keyof typeof DICT]\r\n leftVal = toPyDict(leftVal)\r\n } else {\r\n result = leftVal[ast.key as string]\r\n }\r\n if (typeof result === 'function') {\r\n const bound = result.bind(leftVal)\r\n ;(bound as any)[unboundFn] = result\r\n // console.log(\"bound 15\", bound)\r\n\r\n return bound\r\n // if (!isConstructor(result)) {\r\n // }\r\n }\r\n return result\r\n default:\r\n throw new EvaluationError(`AST of type ${ast.type} cannot be evaluated`)\r\n }\r\n }\r\n\r\n function _evaluate(ast: AST): any {\r\n const val = _innerEvaluate(ast)\r\n if (\r\n typeof val === 'function' &&\r\n !allowedFns.has(val) &&\r\n !allowedFns.has((val as any)[unboundFn])\r\n ) {\r\n throw new Error('Invalid Function Call')\r\n }\r\n return val\r\n }\r\n return _evaluate(ast)\r\n}\r\n","// src/utils/py.ts\r\n\r\n// Import từ các module phụ trợ\r\nimport { evaluate } from './py_interpreter'\r\nimport { AST, parse } from './py_parser'\r\nimport { tokenize } from './py_tokenizer'\r\n\r\n// Export lại các hàm từ module phụ trợ\r\nexport { evaluate } from './py_interpreter'\r\nexport { parse } from './py_parser'\r\nexport { tokenize } from './py_tokenizer'\r\nexport { formatAST } from './py_utils'\r\n\r\n// Định nghĩa kiểu dữ liệu từ các module phụ trợ\r\nexport type { AST } from './py_parser'\r\nexport type { Token } from './py_tokenizer'\r\n\r\n/**\r\n * Parses an expression into a valid AST representation\r\n *\r\n * @param expr - Chuỗi biểu thức cần parse\r\n * @returns AST - Cây cú pháp trừu tượng\r\n */\r\nexport function parseExpr(expr: string): AST {\r\n const tokens = tokenize(expr)\r\n return parse(tokens)\r\n}\r\n\r\n/**\r\n * Evaluates a python expression\r\n *\r\n * @param expr - Chuỗi biểu thức Python\r\n * @param context - Context để đánh giá (mặc định là rỗng)\r\n * @returns Kết quả đánh giá\r\n * @throws EvalError nếu không thể parse hoặc evaluate\r\n */\r\nexport function evaluateExpr(\r\n expr: string,\r\n context: { [key: string]: any } = {},\r\n): any {\r\n let ast: AST\r\n try {\r\n ast = parseExpr(expr)\r\n // console.log('parseExpr', ast, expr)\r\n } catch (error) {\r\n // console.log('error11', error)\r\n\r\n throw new EvalError(\r\n `Can not parse python expression: (${expr})\\nError: ${(error as Error).message}`,\r\n )\r\n }\r\n try {\r\n // console.log('evaluate', expr)\r\n\r\n return evaluate(ast, context)\r\n } catch (error) {\r\n // console.log('error2222', error)\r\n throw new EvalError(\r\n `Can not evaluate python expression: (${expr})\\nError: ${(error as Error).message}`,\r\n )\r\n }\r\n}\r\n\r\n/**\r\n * Evaluates a python expression to return a boolean.\r\n *\r\n * @param expr - Chuỗi biểu thức Python\r\n * @param context - Context để đánh giá (mặc định là rỗng)\r\n * @returns Giá trị boolean\r\n */\r\nexport function evaluateBooleanExpr(\r\n expr: string,\r\n context: { [key: string]: any } = {},\r\n): boolean {\r\n if (!expr || expr === 'False' || expr === '0') {\r\n return false\r\n }\r\n if (expr === 'True' || expr === '1') {\r\n return true\r\n }\r\n return evaluateExpr(`bool(${expr})`, context)\r\n}\r\n","// src/utils/context.ts\r\n\r\n// Định nghĩa các kiểu dữ liệu\r\ninterface Context {\r\n [key: string]: any\r\n}\r\n\r\ntype ContextDescription = Context | string | undefined\r\n\r\n// Import từ các module phụ trợ\r\nimport { evaluateExpr, parseExpr } from './py'\r\nimport { evaluate } from './py_interpreter'\r\n\r\n/**\r\n * Create an evaluated context from an arbitrary list of context representations.\r\n * The evaluated context in construction is used along the way to evaluate further parts.\r\n *\r\n * @param contexts - Danh sách các context representations\r\n * @param initialEvaluationContext - Context ban đầu để bắt đầu đánh giá (tùy chọn)\r\n * @returns Context đã được đánh giá\r\n */\r\nexport function makeContext(\r\n contexts: ContextDescription[],\r\n initialEvaluationContext?: Context,\r\n): Context {\r\n const evaluationContext: Context = Object.assign({}, initialEvaluationContext)\r\n const context: Context = {}\r\n\r\n for (let ctx of contexts) {\r\n if (ctx !== '') {\r\n ctx =\r\n typeof ctx === 'string'\r\n ? evaluateExpr(ctx, evaluationContext)\r\n : ctx || {}\r\n Object.assign(context, ctx)\r\n Object.assign(evaluationContext, context) // Hành vi này có thực sự mong muốn không?\r\n }\r\n }\r\n\r\n return context\r\n}\r\n\r\n/**\r\n * Allow to evaluate a context with an incomplete evaluation context. The evaluated context only\r\n * contains keys whose values are static or can be evaluated with the given evaluation context.\r\n *\r\n * @param context - Chuỗi context cần đánh giá\r\n * @param evaluationContext - Context dùng để đánh giá (mặc định là rỗng)\r\n * @returns Context đã được đánh giá một phần\r\n */\r\nexport function evalPartialContext(\r\n _context: string,\r\n evaluationContext: Context = {},\r\n): Context {\r\n const ast: any = parseExpr(_context)\r\n const context: Context = {}\r\n\r\n for (const key in ast.value) {\r\n const value = ast.value[key]\r\n try {\r\n context[key] = evaluate(value, evaluationContext)\r\n } catch {\r\n // Bỏ qua key này nếu không thể đánh giá giá trị của nó\r\n }\r\n }\r\n\r\n return context\r\n}\r\n","/** @odoo-module **/\r\n\r\n/**\r\n * Shallow compares two objects.\r\n *\r\n * @template T\r\n * @param {T} obj1\r\n * @param {T} obj2\r\n * @param {(a: T[keyof T], b: T[keyof T]) => boolean} [comparisonFn]\r\n */\r\nexport function shallowEqual<T>(\r\n obj1: T,\r\n obj2: T,\r\n comparisonFn: (a: T[keyof T], b: T[keyof T]) => boolean = (a, b) => a === b,\r\n): boolean {\r\n if (!obj1 || !obj2 || typeof obj1 !== 'object' || typeof obj2 !== 'object') {\r\n return obj1 === obj2\r\n }\r\n const obj1Keys = Object.keys(obj1) as Array<keyof T>\r\n return (\r\n obj1Keys.length === Object.keys(obj2).length &&\r\n obj1Keys.every((key) => comparisonFn(obj1[key], obj2[key]))\r\n )\r\n}\r\n\r\n/**\r\n * Deeply compares two objects.\r\n *\r\n * @template T\r\n * @param {T} obj1\r\n * @param {T} obj2\r\n */\r\nexport const deepEqual = <T>(obj1: T, obj2: T): boolean =>\r\n shallowEqual(obj1, obj2, deepEqual)\r\n\r\n/**\r\n * Deep copies an object. As it relies on JSON this function has some limitations:\r\n * - No support for circular objects\r\n * - No support for specific classes, which will at best be lost and at worst crash (Map, Set, etc.)\r\n *\r\n * @template T\r\n * @param {T} obj An object that is fully JSON stringifiable\r\n * @return {T}\r\n */\r\nexport function deepCopy<T>(obj: T): T {\r\n return JSON.parse(JSON.stringify(obj))\r\n}\r\n\r\n/**\r\n * Returns a shallow copy of an object with specified properties removed.\r\n *\r\n * @template T\r\n * @template K extends keyof T\r\n * @param {T} object\r\n * @param {K[]} properties\r\n * @returns {Omit<T, K>}\r\n */\r\nexport function omit<T, K extends keyof T>(\r\n object: T,\r\n ...properties: K[]\r\n): Omit<T, K> {\r\n const result = {} as Omit<T, K>\r\n const propertiesSet = new Set(properties)\r\n\r\n for (const key in object) {\r\n if (!propertiesSet.has(key as unknown as K)) {\r\n ;(result as T)[key] = object[key] // Explicitly cast result\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Picks specified properties from an object.\r\n *\r\n * @template T\r\n * @template K extends keyof T\r\n * @param {T} object\r\n * @param {K[]} properties\r\n * @returns {Pick<T, K>}\r\n */\r\nexport function pick<T extends object, K extends keyof T>(\r\n object: T,\r\n ...properties: K[]\r\n): Pick<T, K> {\r\n return Object.fromEntries(\r\n properties\r\n .filter((prop) => prop in object)\r\n .map((prop) => [prop, object[prop]]),\r\n ) as Pick<T, K>\r\n}\r\n","/** @odoo-module **/\r\n\r\nimport { shallowEqual as _shallowEqual } from './objects'\r\n\r\n/**\r\n * Same values returned as those returned by cartesian function for case n = 0\r\n * and n > 1. For n = 1, brackets are put around the unique parameter elements.\r\n */\r\nfunction _cartesian<T>(...args: T[][]): (T | undefined)[][] {\r\n if (args.length === 0) {\r\n return [[undefined]]\r\n }\r\n const firstArray = args[0].map((elem) => [elem])\r\n if (args.length === 1) {\r\n return firstArray\r\n }\r\n const productOfOtherArrays = _cartesian(...args.slice(1))\r\n return firstArray.flatMap((elem) =>\r\n productOfOtherArrays.map((tuple) => [...elem, ...tuple]),\r\n )\r\n}\r\n\r\nfunction _getExtractorFrom<T>(\r\n criterion?: string | ((element: T) => any),\r\n): (element: T) => any {\r\n if (criterion) {\r\n switch (typeof criterion) {\r\n case 'string':\r\n return (element: T) => (element as any)[criterion]\r\n case 'function':\r\n return criterion\r\n default:\r\n throw new Error(\r\n `Expected criterion of type 'string' or 'function' and got '${typeof criterion}'`,\r\n )\r\n }\r\n } else {\r\n return (element: T) => element\r\n }\r\n}\r\n\r\nexport function ensureArray<T>(value: T | Iterable<T>): T[] {\r\n return value &&\r\n typeof value === 'object' &&\r\n typeof (value as any)[Symbol.iterator] === 'function'\r\n ? [...(value as Iterable<T>)]\r\n : [value as T]\r\n}\r\n\r\nexport function intersection<T>(array1: T[], array2: T[]): T[] {\r\n return array1.filter((v) => array2.includes(v))\r\n}\r\n\r\nexport function groupBy<T>(\r\n array: T[],\r\n criterion?: string | ((element: T) => any),\r\n): Record<string, T[]> {\r\n const extract = _getExtractorFrom(criterion)\r\n const groups: Record<string, T[]> = {}\r\n for (const element of array) {\r\n const group = String(extract(element))\r\n if (!(group in groups)) {\r\n groups[group] = []\r\n }\r\n groups[group].push(element)\r\n }\r\n return groups\r\n}\r\n\r\nexport function sortBy<T>(\r\n array: T[],\r\n criterion?: string | ((element: T) => any),\r\n order: 'asc' | 'desc' = 'asc',\r\n): T[] {\r\n const extract = _getExtractorFrom(criterion)\r\n return [...array].sort((elA, elB) => {\r\n const a = extract(elA)\r\n const b = extract(elB)\r\n const result = isNaN(a) && isNaN(b) ? (a > b ? 1 : a < b ? -1 : 0) : a - b\r\n return order === 'asc' ? result : -result\r\n })\r\n}\r\n\r\nexport function symmetricalDifference<T>(arrayA: T[], arrayB: T[]): T[] {\r\n return arrayA\r\n .filter((id) => !arrayB.includes(id))\r\n .concat(arrayB.filter((id) => !arrayA.includes(id)))\r\n}\r\n\r\nexport function cartesian<T>(...args: T[][]): (T | undefined)[][] {\r\n if (args.length === 0) {\r\n return [[undefined]]\r\n } else if (args.length === 1) {\r\n return args[0].map((elem) => [elem])\r\n } else {\r\n return _cartesian(...args)\r\n }\r\n}\r\n\r\nexport const shallowEqual = _shallowEqual\r\n\r\nexport function sections<T>(array: T[]): T[][] {\r\n return Array.from({ length: array.length + 1 }, (_, i) => array.slice(0, i))\r\n}\r\n\r\nexport function unique<T>(array: T[]): T[] {\r\n return Array.from(new Set(array))\r\n}\r\n\r\nexport function zip<T1, T2>(\r\n array1: T1[],\r\n array2: T2[],\r\n fill = false,\r\n): [T1 | undefined, T2 | undefined][] {\r\n const length = fill\r\n ? Math.max(array1.length, array2.length)\r\n : Math.min(array1.length, array2.length)\r\n return Array.from({ length }, (_, i) => [array1[i], array2[i]])\r\n}\r\n\r\nexport function zipWith<T1, T2, T>(\r\n array1: T1[],\r\n array2: T2[],\r\n func: (e1: T1, e2: T2) => T,\r\n): T[] {\r\n return zip(array1, array2).map(([e1, e2]) => func(e1 as T1, e2 as T2))\r\n}\r\n","/* eslint-disable no-useless-escape */\r\n/* eslint-disable no-control-regex */\r\n// markup.ts\r\n\r\nexport const nbsp: string = '\\u00a0'\r\n\r\nexport const escapeMethod: unique symbol = Symbol('html')\r\n\r\nexport function escape(\r\n str?: string | number | { [escapeMethod]: () => string },\r\n): string {\r\n if (typeof str === 'object' && str && escapeMethod in str) {\r\n return str[escapeMethod]()\r\n } else {\r\n if (str === undefined) {\r\n return ''\r\n }\r\n if (typeof str === 'number') {\r\n return String(str)\r\n }\r\n let result = String(str)\r\n ;[\r\n ['&', '&amp;'],\r\n ['<', '&lt;'],\r\n ['>', '&gt;'],\r\n [\"'\", '&#x27;'],\r\n ['\"', '&quot;'],\r\n ['`', '&#x60;'],\r\n ].forEach(([char, replacement]) => {\r\n result = result.replaceAll(char, replacement)\r\n })\r\n return result\r\n }\r\n}\r\n\r\nexport function escapeRegExp(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\r\n}\r\n\r\nexport function intersperse(\r\n str: string,\r\n indices: number[],\r\n separator: string = '',\r\n): string {\r\n const result: string[] = []\r\n let last = str.length\r\n for (let i = 0; i < indices.length; ++i) {\r\n const section = indices[i]\r\n if (section === -1 || last <= 0) {\r\n break\r\n } else if (section === 0 && i === 0) {\r\n break\r\n } else if (section === 0) {\r\n i--\r\n const prevSection = indices[i]\r\n result.push(str.substring(last - prevSection, last) || '')\r\n last -= prevSection\r\n } else {\r\n result.push(str.substring(last - section, last) || '')\r\n last -= section\r\n }\r\n }\r\n const remaining = str.substring(0, last)\r\n if (remaining) {\r\n result.push(remaining)\r\n }\r\n return result.reverse().join(separator)\r\n}\r\n\r\nexport function sprintf(s: string, ...values: any[]): string {\r\n if (\r\n values.length === 1 &&\r\n Object.prototype.toString.call(values[0]) === '[object Object]'\r\n ) {\r\n const valuesDict = values[0] as Record<string, any>\r\n return s.replace(/%\\(([^)]+)\\)s/g, (match, key) => String(valuesDict[key]))\r\n } else if (values.length > 0) {\r\n let index = 0\r\n return s.replace(/%s/g, () => String(values[index++]))\r\n }\r\n return s\r\n}\r\n\r\nexport function capitalize(s: string): string {\r\n return s ? s[0].toUpperCase() + s.slice(1) : ''\r\n}\r\n\r\nconst diacriticsMap: { [key: string]: string } = {\r\n '\\u0041': 'A',\r\n '\\u24B6': 'A',\r\n '\\uFF21': 'A',\r\n '\\u00C0': 'A',\r\n '\\u00C1': 'A',\r\n '\\u00C2': 'A',\r\n '\\u1EA6': 'A',\r\n '\\u1EA4': 'A',\r\n '\\u1EAA': 'A',\r\n '\\u1EA8': 'A',\r\n '\\u00C3': 'A',\r\n '\\u0100': 'A',\r\n '\\u0102': 'A',\r\n '\\u1EB0': 'A',\r\n '\\u1EAE': 'A',\r\n '\\u1EB4': 'A',\r\n '\\u1EB2': 'A',\r\n '\\u0226': 'A',\r\n '\\u01E0': 'A',\r\n '\\u00C4': 'A',\r\n '\\u01DE': 'A',\r\n '\\u1EA2': 'A',\r\n '\\u00C5': 'A',\r\n '\\u01FA': 'A',\r\n '\\u01CD': 'A',\r\n '\\u0200': 'A',\r\n '\\u0202': 'A',\r\n '\\u1EA0': 'A',\r\n '\\u1EAC': 'A',\r\n '\\u1EB6': 'A',\r\n '\\u1E00': 'A',\r\n '\\u0104': 'A',\r\n '\\u023A': 'A',\r\n '\\u2C6F': 'A',\r\n '\\uA732': 'AA',\r\n '\\u00C6': 'AE',\r\n '\\u01FC': 'AE',\r\n '\\u01E2': 'AE',\r\n '\\uA734': 'AO',\r\n '\\uA736': 'AU',\r\n '\\uA738': 'AV',\r\n '\\uA73A': 'AV',\r\n '\\uA73C': 'AY',\r\n '\\u0042': 'B',\r\n '\\u24B7': 'B',\r\n '\\uFF22': 'B',\r\n '\\u1E02': 'B',\r\n '\\u1E04': 'B',\r\n '\\u1E06': 'B',\r\n '\\u0243': 'B',\r\n '\\u0182': 'B',\r\n '\\u0181': 'B',\r\n '\\u0043': 'C',\r\n '\\u24B8': 'C',\r\n '\\uFF23': 'C',\r\n '\\u0106': 'C',\r\n '\\u0108': 'C',\r\n '\\u010A': 'C',\r\n '\\u010C': 'C',\r\n '\\u00C7': 'C',\r\n '\\u1E08': 'C',\r\n '\\u0187': 'C',\r\n '\\u023B': 'C',\r\n '\\uA73E': 'C',\r\n '\\u0044': 'D',\r\n '\\u24B9': 'D',\r\n '\\uFF24': 'D',\r\n '\\u1E0A': 'D',\r\n '\\u010E': 'D',\r\n '\\u1E0C': 'D',\r\n '\\u1E10': 'D',\r\n '\\u1E12': 'D',\r\n '\\u1E0E': 'D',\r\n '\\u0110': 'D',\r\n '\\u018B': 'D',\r\n '\\u018A': 'D',\r\n '\\u0189': 'D',\r\n '\\uA779': 'D',\r\n '\\u01F1': 'DZ',\r\n '\\u01C4': 'DZ',\r\n '\\u01F2': 'Dz',\r\n '\\u01C5': 'Dz',\r\n '\\u0045': 'E',\r\n '\\u24BA': 'E',\r\n '\\uFF25': 'E',\r\n '\\u00C8': 'E',\r\n '\\u00C9': 'E',\r\n '\\u00CA': 'E',\r\n '\\u1EC0': 'E',\r\n '\\u1EBE': 'E',\r\n '\\u1EC4': 'E',\r\n '\\u1EC2': 'E',\r\n '\\u1EBC': 'E',\r\n '\\u0112': 'E',\r\n '\\u1E14': 'E',\r\n '\\u1E16': 'E',\r\n '\\u0114': 'E',\r\n '\\u0116': 'E',\r\n '\\u00CB': 'E',\r\n '\\u1EBA': 'E',\r\n '\\u011A': 'E',\r\n '\\u0204': 'E',\r\n '\\u0206': 'E',\r\n '\\u1EB8': 'E',\r\n '\\u1EC6': 'E',\r\n '\\u0228': 'E',\r\n '\\u1E1C': 'E',\r\n '\\u0118': 'E',\r\n '\\u1E18': 'E',\r\n '\\u1E1A': 'E',\r\n '\\u0190': 'E',\r\n '\\u018E': 'E',\r\n '\\u0046': 'F',\r\n '\\u24BB': 'F',\r\n '\\uFF26': 'F',\r\n '\\u1E1E': 'F',\r\n '\\u0191': 'F',\r\n '\\uA77B': 'F',\r\n '\\u0047': 'G',\r\n '\\u24BC': 'G',\r\n '\\uFF27': 'G',\r\n '\\u01F4': 'G',\r\n '\\u011C': 'G',\r\n '\\u1E20': 'G',\r\n '\\u011E': 'G',\r\n '\\u0120': 'G',\r\n '\\u01E6': 'G',\r\n '\\u0122': 'G',\r\n '\\u01E4': 'G',\r\n '\\u0193': 'G',\r\n '\\uA7A0': 'G',\r\n '\\uA77D': 'G',\r\n '\\uA77E': 'G',\r\n '\\u0048': 'H',\r\n '\\u24BD': 'H',\r\n '\\uFF28': 'H',\r\n '\\u0124': 'H',\r\n '\\u1E22': 'H',\r\n '\\u1E26': 'H',\r\n '\\u021E': 'H',\r\n '\\u1E24': 'H',\r\n '\\u1E28': 'H',\r\n '\\u1E2A': 'H',\r\n '\\u0126': 'H',\r\n '\\u2C67': 'H',\r\n '\\u2C75': 'H',\r\n '\\uA78D': 'H',\r\n '\\u0049': 'I',\r\n '\\u24BE': 'I',\r\n '\\uFF29': 'I',\r\n '\\u00CC': 'I',\r\n '\\u00CD': 'I',\r\n '\\u00CE': 'I',\r\n '\\u0128': 'I',\r\n '\\u012A': 'I',\r\n '\\u012C': 'I',\r\n '\\u0130': 'I',\r\n '\\u00CF': 'I',\r\n '\\u1E2E': 'I',\r\n '\\u1EC8': 'I',\r\n '\\u01CF': 'I',\r\n '\\u0208': 'I',\r\n '\\u020A': 'I',\r\n '\\u1ECA': 'I',\r\n '\\u012E': 'I',\r\n '\\u1E2C': 'I',\r\n '\\u0197': 'I',\r\n '\\u004A': 'J',\r\n '\\u24BF': 'J',\r\n '\\uFF2A': 'J',\r\n '\\u0134': 'J',\r\n '\\u0248': 'J',\r\n '\\u004B': 'K',\r\n '\\u24C0': 'K',\r\n '\\uFF2B': 'K',\r\n '\\u1E30': 'K',\r\n '\\u01E8': 'K',\r\n '\\u1E32': 'K',\r\n '\\u0136': 'K',\r\n '\\u1E34': 'K',\r\n '\\u0198': 'K',\r\n '\\u2C69': 'K',\r\n '\\uA740': 'K',\r\n '\\uA742': 'K',\r\n '\\uA744': 'K',\r\n '\\uA7A2': 'K',\r\n '\\u004C': 'L',\r\n '\\u24C1': 'L',\r\n '\\uFF2C': 'L',\r\n '\\u013F': 'L',\r\n '\\u0139': 'L',\r\n '\\u013D': 'L',\r\n '\\u1E36': 'L',\r\n '\\u1E38': 'L',\r\n '\\u013B': 'L',\r\n '\\u1E3C': 'L',\r\n '\\u1E3A': 'L',\r\n '\\u0141': 'L',\r\n '\\u023D': 'L',\r\n '\\u2C62': 'L',\r\n '\\u2C60': 'L',\r\n '\\uA748': 'L',\r\n '\\uA746': 'L',\r\n '\\uA780': 'L',\r\n '\\u01C7': 'LJ',\r\n '\\u01C8': 'Lj',\r\n '\\u004D': 'M',\r\n '\\u24C2': 'M',\r\n '\\uFF2D': 'M',\r\n '\\u1E3E': 'M',\r\n '\\u1E40': 'M',\r\n '\\u1E42': 'M',\r\n '\\u2C6E': 'M',\r\n '\\u019C': 'M',\r\n '\\u004E': 'N',\r\n '\\u24C3': 'N',\r\n '\\uFF2E': 'N',\r\n '\\u01F8': 'N',\r\n '\\u0143': 'N',\r\n '\\u00D1': 'N',\r\n '\\u1E44': 'N',\r\n '\\u0147': 'N',\r\n '\\u1E46': 'N',\r\n '\\u0145': 'N',\r\n '\\u1E4A': 'N',\r\n '\\u1E48': 'N',\r\n '\\u0220': 'N',\r\n '\\u019D': 'N',\r\n '\\uA790': 'N',\r\n '\\uA7A4': 'N',\r\n '\\u01CA': 'NJ',\r\n '\\u01CB': 'Nj',\r\n '\\u004F': 'O',\r\n '\\u24C4': 'O',\r\n '\\uFF2F': 'O',\r\n '\\u00D2': 'O',\r\n '\\u00D3': 'O',\r\n '\\u00D4': 'O',\r\n '\\u1ED2': 'O',\r\n '\\u1ED0': 'O',\r\n '\\u1ED6': 'O',\r\n '\\u1ED4': 'O',\r\n '\\u00D5': 'O',\r\n '\\u1E4C': 'O',\r\n '\\u022C': 'O',\r\n '\\u1E4E': 'O',\r\n '\\u014C': 'O',\r\n '\\u1E50': 'O',\r\n '\\u1E52': 'O',\r\n '\\u014E': 'O',\r\n '\\u022E': 'O',\r\n '\\u0230': 'O',\r\n '\\u00D6': 'O',\r\n '\\u022A': 'O',\r\n '\\u1ECE': 'O',\r\n '\\u0150': 'O',\r\n '\\u01D1': 'O',\r\n '\\u020C': 'O',\r\n '\\u020E': 'O',\r\n '\\u01A0': 'O',\r\n '\\u1EDC': 'O',\r\n '\\u1EDA': 'O',\r\n '\\u1EE0': 'O',\r\n '\\u1EDE': 'O',\r\n '\\u1EE2': 'O',\r\n '\\u1ECC': 'O',\r\n '\\u1ED8': 'O',\r\n '\\u01EA': 'O',\r\n '\\u01EC': 'O',\r\n '\\u00D8': 'O',\r\n '\\u01FE': 'O',\r\n '\\u0186': 'O',\r\n '\\u019F': 'O',\r\n '\\uA74A': 'O',\r\n '\\uA74C': 'O',\r\n '\\u01A2': 'OI',\r\n '\\uA74E': 'OO',\r\n '\\u0222': 'OU',\r\n '\\u0050': 'P',\r\n '\\u24C5': 'P',\r\n '\\uFF30': 'P',\r\n '\\u1E54': 'P',\r\n '\\u1E56': 'P',\r\n '\\u01A4': 'P',\r\n '\\u2C63': 'P',\r\n '\\uA750': 'P',\r\n '\\uA752': 'P',\r\n '\\uA754': 'P',\r\n '\\u0051': 'Q',\r\n '\\u24C6': 'Q',\r\n '\\uFF31': 'Q',\r\n '\\uA756': 'Q',\r\n '\\uA758': 'Q',\r\n '\\u024A': 'Q',\r\n '\\u0052': 'R',\r\n '\\u24C7': 'R',\r\n '\\uFF32': 'R',\r\n '\\u0154': 'R',\r\n '\\u1E58': 'R',\r\n '\\u0158': 'R',\r\n '\\u0210': 'R',\r\n '\\u0212': 'R',\r\n '\\u1E5A': 'R',\r\n '\\u1E5C': 'R',\r\n '\\u0156': 'R',\r\n '\\u1E5E': 'R',\r\n '\\u024C': 'R',\r\n '\\u2C64': 'R',\r\n '\\uA75A': 'R',\r\n '\\uA7A6': 'R',\r\n '\\uA782': 'R',\r\n '\\u0053': 'S',\r\n '\\u24C8': 'S',\r\n '\\uFF33': 'S',\r\n '\\u1E9E': 'S',\r\n '\\u015A': 'S',\r\n '\\u1E64': 'S',\r\n '\\u015C': 'S',\r\n '\\u1E60': 'S',\r\n '\\u0160': 'S',\r\n '\\u1E66': 'S',\r\n '\\u1E62': 'S',\r\n '\\u1E68': 'S',\r\n '\\u0218': 'S',\r\n '\\u015E': 'S',\r\n '\\u2C7E': 'S',\r\n '\\uA7A8': 'S',\r\n '\\uA784': 'S',\r\n '\\u0054': 'T',\r\n '\\u24C9': 'T',\r\n '\\uFF34': 'T',\r\n '\\u1E6A': 'T',\r\n '\\u0164': 'T',\r\n '\\u1E6C': 'T',\r\n '\\u021A': 'T',\r\n '\\u0162': 'T',\r\n '\\u1E70': 'T',\r\n '\\u1E6E': 'T',\r\n '\\u0166': 'T',\r\n '\\u01AC': 'T',\r\n '\\u01AE': 'T',\r\n '\\u023E': 'T',\r\n '\\uA786': 'T',\r\n '\\uA728': 'TZ',\r\n '\\u0055': 'U',\r\n '\\u24CA': 'U',\r\n '\\uFF35': 'U',\r\n '\\u00D9': 'U',\r\n '\\u00DA': 'U',\r\n '\\u00DB': 'U',\r\n '\\u0168': 'U',\r\n '\\u1E78': 'U',\r\n '\\u016A': 'U',\r\n '\\u1E7A': 'U',\r\n '\\u016C': 'U',\r\n '\\u00DC': 'U',\r\n '\\u01DB': 'U',\r\n '\\u01D7': 'U',\r\n '\\u01D5': 'U',\r\n '\\u01D9': 'U',\r\n '\\u1EE6': 'U',\r\n '\\u016E': 'U',\r\n '\\u0170': 'U',\r\n '\\u01D3': 'U',\r\n '\\u0214': 'U',\r\n '\\u0216': 'U',\r\n '\\u01AF': 'U',\r\n '\\u1EEA': 'U',\r\n '\\u1EE8': 'U',\r\n '\\u1EEE': 'U',\r\n '\\u1EEC': 'U',\r\n '\\u1EF0': 'U',\r\n '\\u1EE4': 'U',\r\n '\\u1E72': 'U',\r\n '\\u0172': 'U',\r\n '\\u1E76': 'U',\r\n '\\u1E74': 'U',\r\n '\\u0244': 'U',\r\n '\\u0056': 'V',\r\n '\\u24CB': 'V',\r\n '\\uFF36': 'V',\r\n '\\u1E7C': 'V',\r\n '\\u1E7E': 'V',\r\n '\\u01B2': 'V',\r\n '\\uA75E': 'V',\r\n '\\u0245': 'V',\r\n '\\uA760': 'VY',\r\n '\\u0057': 'W',\r\n '\\u24CC': 'W',\r\n '\\uFF37': 'W',\r\n '\\u1E80': 'W',\r\n '\\u1E82': 'W',\r\n '\\u0174': 'W',\r\n '\\u1E86': 'W',\r\n '\\u1E84': 'W',\r\n '\\u1E88': 'W',\r\n '\\u2C72': 'W',\r\n '\\u0058': 'X',\r\n '\\u24CD': 'X',\r\n '\\uFF38': 'X',\r\n '\\u1E8A': 'X',\r\n '\\u1E8C': 'X',\r\n '\\u0059': 'Y',\r\n '\\u24CE': 'Y',\r\n '\\uFF39': 'Y',\r\n '\\u1EF2': 'Y',\r\n '\\u00DD': 'Y',\r\n '\\u0176': 'Y',\r\n '\\u1EF8': 'Y',\r\n '\\u0232': 'Y',\r\n '\\u1E8E': 'Y',\r\n '\\u0178': 'Y',\r\n '\\u1EF6': 'Y',\r\n '\\u1EF4': 'Y',\r\n '\\u01B3': 'Y',\r\n '\\u024E': 'Y',\r\n '\\u1EFE': 'Y',\r\n '\\u005A': 'Z',\r\n '\\u24CF': 'Z',\r\n '\\uFF3A': 'Z',\r\n '\\u0179': 'Z',\r\n '\\u1E90': 'Z',\r\n '\\u017B': 'Z',\r\n '\\u017D': 'Z',\r\n '\\u1E92': 'Z',\r\n '\\u1E94': 'Z',\r\n '\\u01B5': 'Z',\r\n '\\u0224': 'Z',\r\n '\\u2C7F': 'Z',\r\n '\\u2C6B': 'Z',\r\n '\\uA762': 'Z',\r\n '\\u0061': 'a',\r\n '\\u24D0': 'a',\r\n '\\uFF41': 'a',\r\n '\\u1E9A': 'a',\r\n '\\u00E0': 'a',\r\n '\\u00E1': 'a',\r\n '\\u00E2': 'a',\r\n '\\u1EA7': 'a',\r\n '\\u1EA5': 'a',\r\n '\\u1EAB': 'a',\r\n '\\u1EA9': 'a',\r\n '\\u00E3': 'a',\r\n '\\u0101': 'a',\r\n '\\u0103': 'a',\r\n '\\u1EB1': 'a',\r\n '\\u1EAF': 'a',\r\n '\\u1EB5': 'a',\r\n '\\u1EB3': 'a',\r\n '\\u0227': 'a',\r\n '\\u01E1': 'a',\r\n '\\u00E4': 'a',\r\n '\\u01DF': 'a',\r\n '\\u1EA3': 'a',\r\n '\\u00E5': 'a',\r\n '\\u01FB': 'a',\r\n '\\u01CE': 'a',\r\n '\\u0201': 'a',\r\n '\\u0203': 'a',\r\n '\\u1EA1': 'a',\r\n '\\u1EAD': 'a',\r\n '\\u1EB7': 'a',\r\n '\\u1E01': 'a',\r\n '\\u0105': 'a',\r\n '\\u2C65': 'a',\r\n '\\u0250': 'a',\r\n '\\uA733': 'aa',\r\n '\\u00E6': 'ae',\r\n '\\u01FD': 'ae',\r\n '\\u01E3': 'ae',\r\n '\\uA735': 'ao',\r\n '\\uA737': 'au',\r\n '\\uA739': 'av',\r\n '\\uA73B': 'av',\r\n '\\uA73D': 'ay',\r\n '\\u0062': 'b',\r\n '\\u24D1': 'b',\r\n '\\uFF42': 'b',\r\n '\\u1E03': 'b',\r\n '\\u1E05': 'b',\r\n '\\u1E07': 'b',\r\n '\\u0180': 'b',\r\n '\\u0183': 'b',\r\n '\\u0253': 'b',\r\n '\\u0063': 'c',\r\n '\\u24D2': 'c',\r\n '\\uFF43': 'c',\r\n '\\u0107': 'c',\r\n '\\u0109': 'c',\r\n '\\u010B': 'c',\r\n '\\u010D': 'c',\r\n '\\u00E7': 'c',\r\n '\\u1E09': 'c',\r\n '\\u0188': 'c',\r\n '\\u023C': 'c',\r\n '\\uA73F': 'c',\r\n '\\u2184': 'c',\r\n '\\u0064': 'd',\r\n '\\u24D3': 'd',\r\n '\\uFF44': 'd',\r\n '\\u1E0B': 'd',\r\n '\\u010F': 'd',\r\n '\\u1E0D': 'd',\r\n '\\u1E11': 'd',\r\n '\\u1E13': 'd',\r\n '\\u1E0F': 'd',\r\n '\\u0111': 'd',\r\n '\\u018C': 'd',\r\n '\\u0256': 'd',\r\n '\\u0257': 'd',\r\n '\\uA77A': 'd',\r\n '\\u01F3': 'dz',\r\n '\\u01C6': 'dz',\r\n '\\u0065': 'e',\r\n '\\u24D4': 'e',\r\n '\\uFF45': 'e',\r\n '\\u00E8': 'e',\r\n '\\u00E9': 'e',\r\n '\\u00EA': 'e',\r\n '\\u1EC1': 'e',\r\n '\\u1EBF': 'e',\r\n '\\u1EC5': 'e',\r\n '\\u1EC3': 'e',\r\n '\\u1EBD': 'e',\r\n '\\u0113': 'e',\r\n '\\u1E15': 'e',\r\n '\\u1E17': 'e',\r\n '\\u0115': 'e',\r\n '\\u0117': 'e',\r\n '\\u00EB': 'e',\r\n '\\u1EBB': 'e',\r\n '\\u011B': 'e',\r\n '\\u0205': 'e',\r\n '\\u0207': 'e',\r\n '\\u1EB9': 'e',\r\n '\\u1EC7': 'e',\r\n '\\u0229': 'e',\r\n '\\u1E1D': 'e',\r\n '\\u0119': 'e',\r\n '\\u1E19': 'e',\r\n '\\u1E1B': 'e',\r\n '\\u0247': 'e',\r\n '\\u025B': 'e',\r\n '\\u01DD': 'e',\r\n '\\u0066': 'f',\r\n '\\u24D5': 'f',\r\n '\\uFF46': 'f',\r\n '\\u1E1F': 'f',\r\n '\\u0192': 'f',\r\n '\\uA77C': 'f',\r\n '\\u0067': 'g',\r\n '\\u24D6': 'g',\r\n '\\uFF47': 'g',\r\n '\\u01F5': 'g',\r\n '\\u011D': 'g',\r\n '\\u1E21': 'g',\r\n '\\u011F': 'g',\r\n '\\u0121': 'g',\r\n '\\u01E7': 'g',\r\n '\\u0123': 'g',\r\n '\\u01E5': 'g',\r\n '\\u0260': 'g',\r\n '\\uA7A1': 'g',\r\n '\\u1D79': 'g',\r\n '\\uA77F': 'g',\r\n '\\u0068': 'h',\r\n '\\u24D7': 'h',\r\n '\\uFF48': 'h',\r\n '\\u0125': 'h',\r\n '\\u1E23': 'h',\r\n '\\u1E27': 'h',\r\n '\\u021F': 'h',\r\n '\\u1E25': 'h',\r\n '\\u1E29': 'h',\r\n '\\u1E2B': 'h',\r\n '\\u1E96': 'h',\r\n '\\u0127': 'h',\r\n '\\u2C68': 'h',\r\n '\\u2C76': 'h',\r\n '\\u0265': 'h',\r\n '\\u0195': 'hv',\r\n '\\u0069': 'i',\r\n '\\u24D8': 'i',\r\n '\\uFF49': 'i',\r\n '\\u00EC': 'i',\r\n '\\u00ED': 'i',\r\n '\\u00EE': 'i',\r\n '\\u0129': 'i',\r\n '\\u012B': 'i',\r\n '\\u012D': 'i',\r\n '\\u00EF': 'i',\r\n '\\u1E2F': 'i',\r\n '\\u1EC9': 'i',\r\n '\\u01D0': 'i',\r\n '\\u0209': 'i',\r\n '\\u020B': 'i',\r\n '\\u1ECB': 'i',\r\n '\\u012F': 'i',\r\n '\\u1E2D': 'i',\r\n '\\u0268': 'i',\r\n '\\u0131': 'i',\r\n '\\u006A': 'j',\r\n '\\u24D9': 'j',\r\n '\\uFF4A': 'j',\r\n '\\u0135': 'j',\r\n '\\u01F0': 'j',\r\n '\\u0249': 'j',\r\n '\\u006B': 'k',\r\n '\\u24DA': 'k',\r\n '\\uFF4B': 'k',\r\n '\\u1E31': 'k',\r\n '\\u01E9': 'k',\r\n '\\u1E33': 'k',\r\n '\\u0137': 'k',\r\n '\\u1E35': 'k',\r\n '\\u0199': 'k',\r\n '\\u2C6A': 'k',\r\n '\\uA741': 'k',\r\n '\\uA743': 'k',\r\n '\\uA745': 'k',\r\n '\\uA7A3': 'k',\r\n '\\u006C': 'l',\r\n '\\u24DB': 'l',\r\n '\\uFF4C': 'l',\r\n '\\u0140': 'l',\r\n '\\u013A': 'l',\r\n '\\u013E': 'l',\r\n '\\u1E37': 'l',\r\n '\\u1E39': 'l',\r\n '\\u013C': 'l',\r\n '\\u1E3D': 'l',\r\n '\\u1E3B': 'l',\r\n '\\u017F': 'l',\r\n '\\u0142': 'l',\r\n '\\u019A': 'l',\r\n '\\u026B': 'l',\r\n '\\u2C61': 'l',\r\n '\\uA749': 'l',\r\n '\\uA781': 'l',\r\n '\\uA747': 'l',\r\n '\\u01C9': 'lj',\r\n '\\u006D': 'm',\r\n '\\u24DC': 'm',\r\n '\\uFF4D': 'm',\r\n '\\u1E3F': 'm',\r\n '\\u1E41': 'm',\r\n '\\u1E43': 'm',\r\n '\\u0271': 'm',\r\n '\\u026F': 'm',\r\n '\\u006E': 'n',\r\n '\\u24DD': 'n',\r\n '\\uFF4E': 'n',\r\n '\\u01F9': 'n',\r\n '\\u0144': 'n',\r\n '\\u00F1': 'n',\r\n '\\u1E45': 'n',\r\n '\\u0148': 'n',\r\n '\\u1E47': 'n',\r\n '\\u0146': 'n',\r\n '\\u1E4B': 'n',\r\n '\\u1E49': 'n',\r\n '\\u019E': 'n',\r\n '\\u0272': 'n',\r\n '\\u0149': 'n',\r\n '\\uA791': 'n',\r\n '\\uA7A5': 'n',\r\n '\\u01CC': 'nj',\r\n '\\u006F': 'o',\r\n '\\u24DE': 'o',\r\n '\\uFF4F': 'o',\r\n '\\u00F2': 'o',\r\n '\\u00F3': 'o',\r\n '\\u00F4': 'o',\r\n '\\u1ED3': 'o',\r\n '\\u1ED1': 'o',\r\n '\\u1ED7': 'o',\r\n '\\u1ED5': 'o',\r\n '\\u00F5': 'o',\r\n '\\u1E4D': 'o',\r\n '\\u022D': 'o',\r\n '\\u1E4F': 'o',\r\n '\\u014D': 'o',\r\n '\\u1E51': 'o',\r\n '\\u1E53': 'o',\r\n '\\u014F': 'o',\r\n '\\u022F': 'o',\r\n '\\u0231': 'o',\r\n '\\u00F6': 'o',\r\n '\\u022B': 'o',\r\n '\\u1ECF': 'o',\r\n '\\u0151': 'o',\r\n '\\u01D2': 'o',\r\n '\\u020D': 'o',\r\n '\\u020F': 'o',\r\n '\\u01A1': 'o',\r\n '\\u1EDD': 'o',\r\n '\\u1EDB': 'o',\r\n '\\u1EE1': 'o',\r\n '\\u1EDF': 'o',\r\n '\\u1EE3': 'o',\r\n '\\u1ECD': 'o',\r\n '\\u1ED9': 'o',\r\n '\\u01EB': 'o',\r\n '\\u01ED': 'o',\r\n '\\u00F8': 'o',\r\n '\\u01FF': 'o',\r\n '\\u0254': 'o',\r\n '\\uA74B': 'o',\r\n '\\uA74D': 'o',\r\n '\\u0275': 'o',\r\n '\\u01A3': 'oi',\r\n '\\u0223': 'ou',\r\n '\\uA74F': 'oo',\r\n '\\u0070': 'p',\r\n '\\u24DF': 'p',\r\n '\\uFF50': 'p',\r\n '\\u1E55': 'p',\r\n '\\u1E57': 'p',\r\n '\\u01A5': 'p',\r\n '\\u1D7D': 'p',\r\n '\\uA751': 'p',\r\n '\\uA753': 'p',\r\n '\\uA755': 'p',\r\n '\\u0071': 'q',\r\n '\\u24E0': 'q',\r\n '\\uFF51': 'q',\r\n '\\u024B': 'q',\r\n '\\uA757': 'q',\r\n '\\uA759': 'q',\r\n '\\u0072': 'r',\r\n '\\u24E1': 'r',\r\n '\\uFF52': 'r',\r\n '\\u0155': 'r',\r\n '\\u1E59': 'r',\r\n '\\u0159': 'r',\r\n '\\u0211': 'r',\r\n '\\u0213': 'r',\r\n '\\u1E5B': 'r',\r\n '\\u1E5D': 'r',\r\n '\\u0157': 'r',\r\n '\\u1E5F': 'r',\r\n '\\u024D': 'r',\r\n '\\u027D': 'r',\r\n '\\uA75B': 'r',\r\n '\\uA7A7': 'r',\r\n '\\uA783': 'r',\r\n '\\u0073': 's',\r\n '\\u24E2': 's',\r\n '\\uFF53': 's',\r\n '\\u00DF': 's',\r\n '\\u015B': 's',\r\n '\\u1E65': 's',\r\n '\\u015D': 's',\r\n '\\u1E61': 's',\r\n '\\u0161': 's',\r\n '\\u1E67': 's',\r\n '\\u1E63': 's',\r\n '\\u1E69': 's',\r\n '\\u0219': 's',\r\n '\\u015F': 's',\r\n '\\u023F': 's',\r\n '\\uA7A9': 's',\r\n '\\uA785': 's',\r\n '\\u1E9B': 's',\r\n '\\u0074': 't',\r\n '\\u24E3': 't',\r\n '\\uFF54': 't',\r\n '\\u1E6B': 't',\r\n '\\u1E97': 't',\r\n '\\u0165': 't',\r\n '\\u1E6D': 't',\r\n '\\u021B': 't',\r\n '\\u0163': 't',\r\n '\\u1E71': 't',\r\n '\\u1E6F': 't',\r\n '\\u0167': 't',\r\n '\\u01AD': 't',\r\n '\\u0288': 't',\r\n '\\u2C66': 't',\r\n '\\uA787': 't',\r\n '\\uA729': 'tz',\r\n '\\u0075': 'u',\r\n '\\u24E4': 'u',\r\n '\\uFF55': 'u',\r\n '\\u00F9': 'u',\r\n '\\u00FA': 'u',\r\n '\\u00FB': 'u',\r\n '\\u0169': 'u',\r\n '\\u1E79': 'u',\r\n '\\u016B': 'u',\r\n '\\u1E7B': 'u',\r\n '\\u016D': 'u',\r\n '\\u00FC': 'u',\r\n '\\u01DC': 'u',\r\n '\\u01D8': 'u',\r\n '\\u01D6': 'u',\r\n '\\u01DA': 'u',\r\n '\\u1EE7': 'u',\r\n '\\u016F': 'u',\r\n '\\u0171': 'u',\r\n '\\u01D4': 'u',\r\n '\\u0215': 'u',\r\n '\\u0217': 'u',\r\n '\\u01B0': 'u',\r\n '\\u1EEB': 'u',\r\n '\\u1EE9': 'u',\r\n '\\u1EEF': 'u',\r\n '\\u1EED': 'u',\r\n '\\u1EF1': 'u',\r\n '\\u1EE5': 'u',\r\n '\\u1E73': 'u',\r\n '\\u0173': 'u',\r\n '\\u1E77': 'u',\r\n '\\u1E75': 'u',\r\n '\\u0289': 'u',\r\n '\\u0076': 'v',\r\n '\\u24E5': 'v',\r\n '\\uFF56': 'v',\r\n '\\u1E7D': 'v',\r\n '\\u1E7F': 'v',\r\n '\\u028B': 'v',\r\n '\\uA75F': 'v',\r\n '\\u028C': 'v',\r\n '\\uA761': 'vy',\r\n '\\u0077': 'w',\r\n '\\u24E6': 'w',\r\n '\\uFF57': 'w',\r\n '\\u1E81': 'w',\r\n '\\u1E83': 'w',\r\n '\\u0175': 'w',\r\n '\\u1E87': 'w',\r\n '\\u1E85': 'w',\r\n '\\u1E98': 'w',\r\n '\\u1E89': 'w',\r\n '\\u2C73': 'w',\r\n '\\u0078': 'x',\r\n '\\u24E7': 'x',\r\n '\\uFF58': 'x',\r\n '\\u1E8B': 'x',\r\n '\\u1E8D': 'x',\r\n '\\u0079': 'y',\r\n '\\u24E8': 'y',\r\n '\\uFF59': 'y',\r\n '\\u1EF3': 'y',\r\n '\\u00FD': 'y',\r\n '\\u0177': 'y',\r\n '\\u1EF9': 'y',\r\n '\\u0233': 'y',\r\n '\\u1E8F': 'y',\r\n '\\u00FF': 'y',\r\n '\\u1EF7': 'y',\r\n '\\u1E99': 'y',\r\n '\\u1EF5': 'y',\r\n '\\u01B4': 'y',\r\n '\\u024F': 'y',\r\n '\\u1EFF': 'y',\r\n '\\u007A': 'z',\r\n '\\u24E9': 'z',\r\n '\\uFF5A': 'z',\r\n '\\u017A': 'z',\r\n '\\u1E91': 'z',\r\n '\\u017C': 'z',\r\n '\\u017E': 'z',\r\n '\\u1E93': 'z',\r\n '\\u1E95': 'z',\r\n '\\u01B6': 'z',\r\n '\\u0225': 'z',\r\n '\\u0240': 'z',\r\n '\\u2C6C': 'z',\r\n '\\uA763': 'z',\r\n}\r\n\r\nexport function unaccent(str: string, caseSensitive: boolean = false): string {\r\n const result = str.replace(\r\n /[^\\u0000-\\u007E]/g,\r\n (accented) => diacriticsMap[accented] || accented,\r\n )\r\n return caseSensitive ? result : result.toLowerCase()\r\n}\r\n\r\nexport function isEmail(value: string): boolean {\r\n const re =\r\n /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i\r\n return re.test(value)\r\n}\r\n","import { shallowEqual } from './arrays'\r\n// Import các module phụ trợ\r\nimport { evaluate, evaluateBooleanExpr, formatAST, parseExpr } from './py'\r\nimport { ASTNone, ASTUnaryOperator } from './py_parser'\r\nimport { toPyValue } from './py_utils'\r\nimport { escapeRegExp } from './strings'\r\n\r\n// Định nghĩa các kiểu cần thiết\r\ntype AST = { type: number; value: any }\r\ntype Condition = [string | 0 | 1, string, any]\r\ntype DomainListRepr = ('&' | '|' | '!' | Condition)[]\r\ntype DomainRepr = DomainListRepr | string | Domain\r\n\r\nexport class InvalidDomainError extends Error {}\r\n\r\nexport class Domain {\r\n ast: AST = { type: -1, value: null }\r\n static TRUE: Domain\r\n static FALSE: Domain\r\n\r\n static combine(domains: DomainRepr[], operator: 'AND' | 'OR'): Domain {\r\n if (domains.length === 0) {\r\n return new Domain([])\r\n }\r\n const domain1 =\r\n domains[0] instanceof Domain ? domains[0] : new Domain(domains[0])\r\n if (domains.length === 1) {\r\n return domain1\r\n }\r\n const domain2 = Domain.combine(domains.slice(1), operator)\r\n const result = new Domain([])\r\n const astValues1 = domain1.ast.value\r\n const astValues2 = domain2.ast.value\r\n const op = operator === 'AND' ? '&' : '|'\r\n const combinedAST = {\r\n type: 4 /* List */,\r\n value: astValues1.concat(astValues2),\r\n }\r\n result.ast = normalizeDomainAST(combinedAST, op)\r\n return result\r\n }\r\n\r\n static and(domains: DomainRepr[]): Domain {\r\n return Domain.combine(domains, 'AND')\r\n }\r\n\r\n static or(domains: DomainRepr[]): Domain {\r\n return Domain.combine(domains, 'OR')\r\n }\r\n\r\n static not(domain: DomainRepr): Domain {\r\n const result = new Domain(domain)\r\n result.ast.value.unshift({ type: 1, value: '!' })\r\n return result\r\n }\r\n\r\n static removeDomainLeaves(\r\n domain: DomainRepr,\r\n keysToRemove: string[],\r\n ): Domain {\r\n function processLeaf(\r\n elements: any[],\r\n idx: number,\r\n operatorCtx: '&' | '|',\r\n newDomain: Domain,\r\n ): number {\r\n const leaf = elements[idx]\r\n if (leaf.type === 10) {\r\n if (keysToRemove.includes(leaf.value[0].value)) {\r\n if (operatorCtx === '&') {\r\n newDomain.ast.value.push(...Domain.TRUE.ast.value)\r\n } else if (operatorCtx === '|') {\r\n newDomain.ast.value.push(...Domain.FALSE.ast.value)\r\n }\r\n } else {\r\n newDomain.ast.value.push(leaf)\r\n }\r\n return 1\r\n } else if (leaf.type === 1) {\r\n if (\r\n leaf.value === '|' &&\r\n elements[idx + 1].type === 10 &&\r\n elements[idx + 2].type === 10 &&\r\n keysToRemove.includes(elements[idx + 1].value[0].value) &&\r\n keysToRemove.includes(elements[idx + 2].value[0].value)\r\n ) {\r\n newDomain.ast.value.push(...Domain.TRUE.ast.value)\r\n return 3\r\n }\r\n newDomain.ast.value.push(leaf)\r\n if (leaf.value === '!') {\r\n return 1 + processLeaf(elements, idx + 1, '&', newDomain)\r\n }\r\n const firstLeafSkip = processLeaf(\r\n elements,\r\n idx + 1,\r\n leaf.value,\r\n newDomain,\r\n )\r\n const secondLeafSkip = processLeaf(\r\n elements,\r\n idx + 1 + firstLeafSkip,\r\n leaf.value,\r\n newDomain,\r\n )\r\n return 1 + firstLeafSkip + secondLeafSkip\r\n }\r\n return 0\r\n }\r\n\r\n const d = new Domain(domain)\r\n if (d.ast.value.length === 0) {\r\n return d\r\n }\r\n const newDomain = new Domain([])\r\n processLeaf(d.ast.value, 0, '&', newDomain)\r\n return newDomain\r\n }\r\n\r\n constructor(descr: DomainRepr = []) {\r\n if (descr instanceof Domain) {\r\n return new Domain(descr.toString())\r\n } else {\r\n let rawAST: any\r\n try {\r\n rawAST =\r\n typeof descr === 'string' ? parseExpr(descr) : toAST(descr as any)\r\n } catch (error) {\r\n throw new InvalidDomainError(\r\n `Invalid domain representation: ${descr}`,\r\n {\r\n cause: error,\r\n },\r\n )\r\n }\r\n this.ast = normalizeDomainAST(rawAST)\r\n }\r\n }\r\n\r\n contains(record: any): boolean {\r\n const expr = evaluate(this.ast, record)\r\n return matchDomain(record, expr)\r\n }\r\n\r\n toString(): string {\r\n return formatAST(this.ast as any)\r\n }\r\n\r\n toList(context: Record<string, any>): DomainListRepr {\r\n return evaluate(this.ast, context)\r\n }\r\n\r\n toJson(): DomainListRepr | string {\r\n try {\r\n const evaluatedAsList = this.toList({})\r\n const evaluatedDomain = new Domain(evaluatedAsList)\r\n if (evaluatedDomain.toString() === this.toString()) {\r\n return evaluatedAsList\r\n }\r\n return this.toString()\r\n } catch {\r\n return this.toString()\r\n }\r\n }\r\n}\r\n\r\nexport function evalDomain(\r\n modifier: any[] | boolean,\r\n evalContext: Record<string, any>,\r\n): boolean {\r\n if (modifier && typeof modifier !== 'boolean') {\r\n modifier = new Domain(modifier).contains(evalContext)\r\n }\r\n return Boolean(modifier)\r\n}\r\n\r\nconst TRUE_LEAF: Condition = [1, '=', 1]\r\nconst FALSE_LEAF: Condition = [0, '=', 1]\r\nconst TRUE_DOMAIN = new Domain([TRUE_LEAF])\r\nconst FALSE_DOMAIN = new Domain([FALSE_LEAF])\r\n\r\nDomain.TRUE = TRUE_DOMAIN\r\nDomain.FALSE = FALSE_DOMAIN\r\n\r\n// Helpers\r\nfunction toAST(domain: DomainListRepr): AST {\r\n const elems = domain.map((elem) => {\r\n switch (elem) {\r\n case '!':\r\n case '&':\r\n case '|':\r\n return { type: 1 /* String */, value: elem }\r\n default:\r\n return {\r\n type: 10 /* Tuple */,\r\n value: (elem as Condition).map(toPyValue),\r\n }\r\n }\r\n })\r\n return { type: 4 /* List */, value: elems }\r\n}\r\n\r\nfunction normalizeDomainAST(\r\n domain: AST | ASTNone | ASTUnaryOperator,\r\n op: '&' | '|' = '&',\r\n): AST {\r\n if (domain.type !== 4) {\r\n if (domain.type === 10) {\r\n const value = domain.value\r\n if (\r\n value.findIndex((e: any) => e.type === 10) === -1 ||\r\n !value.every((e: any) => e.type === 10 || e.type === 1)\r\n ) {\r\n throw new InvalidDomainError('Invalid domain AST')\r\n }\r\n } else {\r\n throw new InvalidDomainError('Invalid domain AST')\r\n }\r\n }\r\n if (domain.value.length === 0) {\r\n return domain\r\n }\r\n let expected = 1\r\n for (const child of domain.value) {\r\n switch (child.type) {\r\n case 1 /* String */:\r\n if (child.value === '&' || child.value === '|') {\r\n expected++\r\n } else if (child.value !== '!') {\r\n throw new InvalidDomainError('Invalid domain AST')\r\n }\r\n break\r\n case 4: /* list */\r\n case 10 /* tuple */:\r\n if (child.value.length === 3) {\r\n expected--\r\n break\r\n }\r\n throw new InvalidDomainError('Invalid domain AST')\r\n default:\r\n throw new InvalidDomainError('Invalid domain AST')\r\n }\r\n }\r\n const values = domain.value.slice()\r\n while (expected < 0) {\r\n expected++\r\n values.unshift({ type: 1 /* String */, value: op })\r\n }\r\n if (expected > 0) {\r\n throw new InvalidDomainError(\r\n `invalid domain ${formatAST(domain as any)} (missing ${expected} segment(s))`,\r\n )\r\n }\r\n return { type: 4 /* List */, value: values }\r\n}\r\n\r\nfunction matchCondition(record: any, condition: Condition | boolean): boolean {\r\n if (typeof condition === 'boolean') {\r\n return condition\r\n }\r\n const [field, operator, value] = condition\r\n if (typeof field === 'string') {\r\n const names = field.split('.')\r\n if (names.length >= 2) {\r\n return matchCondition(record[names[0]], [\r\n names.slice(1).join('.'),\r\n operator,\r\n value,\r\n ])\r\n }\r\n }\r\n let likeRegexp, ilikeRegexp\r\n if (['like', 'not like', 'ilike', 'not ilike'].includes(operator)) {\r\n likeRegexp = new RegExp(\r\n `(.*)${escapeRegExp(value).replaceAll('%', '(.*)')}(.*)`,\r\n 'g',\r\n )\r\n ilikeRegexp = new RegExp(\r\n `(.*)${escapeRegExp(value).replaceAll('%', '(.*)')}(.*)`,\r\n 'gi',\r\n )\r\n }\r\n const fieldValue = typeof field === 'number' ? field : record[field]\r\n switch (operator) {\r\n case '=?':\r\n if ([false, null].includes(value)) {\r\n return true\r\n }\r\n // eslint-disable-next-line no-fallthrough\r\n case '=':\r\n case '==':\r\n if (Array.isArray(fieldValue) && Array.isArray(value)) {\r\n return shallowEqual(fieldValue, value)\r\n }\r\n return fieldValue === value\r\n case '!=':\r\n case '<>':\r\n return !matchCondition(record, [field, '==', value])\r\n case '<':\r\n return fieldValue < value\r\n case '<=':\r\n return fieldValue <= value\r\n case '>':\r\n return fieldValue > value\r\n case '>=':\r\n return fieldValue >= value\r\n case 'in': {\r\n const val = Array.isArray(value) ? value : [value]\r\n const fieldVal = Array.isArray(fieldValue) ? fieldValue : [fieldValue]\r\n return fieldVal.some((fv) => val.includes(fv))\r\n }\r\n case 'not in': {\r\n const val = Array.isArray(value) ? value : [value]\r\n const fieldVal = Array.isArray(fieldValue) ? fieldValue : [fieldValue]\r\n return !fieldVal.some((fv) => val.includes(fv))\r\n }\r\n case 'like':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return Boolean(fieldValue.match(likeRegexp))\r\n case 'not like':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return Boolean(!fieldValue.match(likeRegexp))\r\n case '=like':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return new RegExp(escapeRegExp(value).replace(/%/g, '.*')).test(\r\n fieldValue,\r\n )\r\n case 'ilike':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return Boolean(fieldValue.match(ilikeRegexp))\r\n case 'not ilike':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return Boolean(!fieldValue.match(ilikeRegexp))\r\n case '=ilike':\r\n if (fieldValue === false) {\r\n return false\r\n }\r\n return new RegExp(escapeRegExp(value).replace(/%/g, '.*'), 'i').test(\r\n fieldValue,\r\n )\r\n }\r\n throw new InvalidDomainError('could not match domain')\r\n}\r\n\r\nfunction makeOperators(record: Record<string, any>) {\r\n const match = matchCondition.bind(null, record)\r\n return {\r\n '!': (x: any) => !match(x),\r\n '&': (a: any, b: any) => match(a) && match(b),\r\n '|': (a: any, b: any) => match(a) || match(b),\r\n }\r\n}\r\n\r\nfunction matchDomain(record: any, domain: any): boolean {\r\n if (domain.length === 0) {\r\n return true\r\n }\r\n const operators: any = makeOperators(record)\r\n const reversedDomain = Array.from(domain).reverse()\r\n const condStack: any[] = []\r\n for (const item of reversedDomain) {\r\n const operator = typeof item === 'string' && operators[item]\r\n if (operator) {\r\n const operands = condStack.splice(-operator.length)\r\n condStack.push(operator(...operands))\r\n } else {\r\n condStack.push(item)\r\n }\r\n }\r\n return matchCondition(record, condStack.pop())\r\n}\r\n\r\nexport const checkDomain = (context: any, domain: any): boolean => {\r\n try {\r\n if (\r\n domain === undefined ||\r\n domain === '0' ||\r\n domain === 'False' ||\r\n domain === false\r\n ) {\r\n return false\r\n } else if (domain === '1' || domain === 'True' || domain === true) {\r\n return true\r\n }\r\n try {\r\n if (context && domain) {\r\n const d = new Domain(domain)\r\n\r\n return d.contains(context)\r\n }\r\n } catch (error) {\r\n if (context && domain) {\r\n const domainEval = evaluateBooleanExpr(domain, context)\r\n\r\n return domainEval\r\n }\r\n return false\r\n }\r\n return false\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nexport const matchDomains = (context: any, domains: any): boolean => {\r\n if (Array.isArray(domains)) {\r\n if (domains?.length > 0) {\r\n return domains && domains.some((domain) => checkDomain(context, domain))\r\n }\r\n } else return checkDomain(context, domains)\r\n return false\r\n}\r\n","import { FieldTypeConstants, MethodType } from '../constants'\r\n\r\nimport { evaluateExpr } from './domain/py'\r\nimport { checkDomain, Domain, evalPartialContext, matchDomains } from './domain'\r\nimport { useEffect, useState } from 'react'\r\n\r\nexport const evalJSONContext = (_context: any, context = {}) => {\r\n try {\r\n return evalPartialContext(_context, context) as any\r\n } catch (err) {\r\n return null\r\n }\r\n}\r\n\r\nexport const evalJSONDomain = (domain: any, context: any) => {\r\n try {\r\n if (context) {\r\n Object.keys(context)?.forEach((key) => {\r\n if (Array.isArray(context[key])) {\r\n const isTypeObject = context[key]?.every(\r\n (item) =>\r\n typeof item === 'object' &&\r\n item !== null &&\r\n item?.id !== undefined\r\n )\r\n if (isTypeObject) {\r\n context[key] = context[key]?.map((item) => item?.id)\r\n }\r\n }\r\n })\r\n }\r\n const value = evaluateExpr(domain, context)\r\n return value\r\n } catch (err) {\r\n try {\r\n const domainObject = new Domain(domain).toList(context)\r\n return domainObject\r\n } catch (err) {\r\n // console.error(err)\r\n return []\r\n }\r\n }\r\n}\r\n\r\nexport const formatSortingString = (\r\n input: string | null | undefined\r\n): string | null => {\r\n if (!input) return null\r\n return input\r\n .split(',')\r\n .map((field) => {\r\n const [key, order] = field.trim().split(/\\s+/)\r\n const sortOrder = order?.toUpperCase() === 'DESC' ? 'DESC' : 'ASC'\r\n return `${key} ${sortOrder}`\r\n })\r\n .join(', ')\r\n}\r\n\r\nexport const domainHelper = {\r\n checkDomain: checkDomain,\r\n matchDomains: matchDomains,\r\n Domain: Domain,\r\n}\r\n\r\nexport const toQueryString = (\r\n params: Record<string, string | number | boolean>\r\n) => {\r\n return Object.keys(params)\r\n .map(\r\n (key) =>\r\n encodeURIComponent(key) +\r\n '=' +\r\n encodeURIComponent(params[key].toString())\r\n )\r\n .join('&')\r\n}\r\n\r\nexport const convertFloatToTime = (floatValue: number) => {\r\n const hours = Math.floor(floatValue)\r\n const minutes = Math.round((floatValue - hours) * 60)\r\n const formattedHours = String(hours).padStart(2, '0')\r\n const formattedMinutes = String(minutes).padStart(2, '0')\r\n return `${formattedHours}:${formattedMinutes}`\r\n}\r\n\r\nexport const convertTimeToFloat = (timeString: string) => {\r\n const [hours, minutes] = timeString.split(':').map(Number)\r\n return hours + minutes / 60\r\n}\r\n\r\nexport const stringToColor = (name: string, id: number) => {\r\n const combined = name + id / 2\r\n let hash = 0\r\n\r\n for (let i = 0; i < combined.length; i++) {\r\n hash = combined.charCodeAt(i) + ((hash << 5) - hash)\r\n }\r\n\r\n // Convert the hash into an RGB color code within a narrower medium range (120-180)\r\n const r = (hash >> 16) & 0xff\r\n const g = (hash >> 8) & 0xff\r\n const b = hash & 0xff\r\n\r\n // Constrain each RGB component to be between 120 and 180 for a more medium tone\r\n const adjustedR = 120 + (r % 61) // 120 to 180\r\n const adjustedG = 120 + (g % 61) // 120 to 180\r\n const adjustedB = 120 + (b % 61) // 120 to 180\r\n\r\n return `#${adjustedR.toString(16).padStart(2, '0')}${adjustedG\r\n .toString(16)\r\n .padStart(2, '0')}${adjustedB.toString(16).padStart(2, '0')}`\r\n}\r\n\r\nexport const getFieldsOnChange = (fields: any) => {\r\n const result: any = []\r\n\r\n function traverse(items: any) {\r\n for (const item of items) {\r\n if (item) {\r\n if (\r\n item?.type_co === 'field' &&\r\n matchDomains(fields, item?.on_change)\r\n ) {\r\n result.push(item.name)\r\n }\r\n if (item?.fields && Array.isArray(item?.fields)) {\r\n traverse(item?.fields)\r\n }\r\n }\r\n }\r\n }\r\n\r\n traverse(fields)\r\n return result\r\n}\r\n\r\n// filter field change\r\nexport const filterFieldDirty = ({\r\n id,\r\n viewData,\r\n formValues,\r\n dirtyFields,\r\n model,\r\n defaultData,\r\n}: {\r\n id?: any\r\n viewData?: any\r\n formValues?: any\r\n dirtyFields?: any\r\n model?: any\r\n defaultData?: any\r\n}) => {\r\n const data = id ? { ...dirtyFields } : { ...formValues }\r\n\r\n for (const key in data) {\r\n if (\r\n viewData?.models?.[model]?.[key]?.type === FieldTypeConstants.ONE2MANY\r\n ) {\r\n const lineData: any = []\r\n ;(formValues[key] ?? []).forEach((itemData: any, index: number) => {\r\n if (\r\n typeof itemData?.id === 'string' &&\r\n itemData?.id.includes('virtual')\r\n ) {\r\n delete itemData?.id\r\n }\r\n if (!itemData?.id) {\r\n lineData.push([\r\n MethodType.CREATE,\r\n `virtual_${index}`,\r\n filterFieldDirty({\r\n id: itemData?.id,\r\n viewData,\r\n formValues: itemData,\r\n dirtyFields: {},\r\n model: viewData?.models?.[model]?.[key]?.relation,\r\n defaultData: defaultData,\r\n }),\r\n ])\r\n } else if (dirtyFields[key]?.length) {\r\n // Thêm kiểm tra\r\n dirtyFields[key].forEach((itemDirty: any, indexDirty: number) => {\r\n if (\r\n Object.values(itemDirty).includes(true) &&\r\n indexDirty === index\r\n ) {\r\n lineData.push([\r\n MethodType.UPDATE,\r\n itemData?.id,\r\n filterFieldDirty({\r\n id: itemData?.id,\r\n viewData,\r\n formValues: itemData,\r\n dirtyFields: itemDirty,\r\n model: viewData?.models?.[model]?.[key]?.relation,\r\n defaultData: {},\r\n }),\r\n ])\r\n }\r\n })\r\n }\r\n })\r\n ;(defaultData[key] ?? []).forEach((item: any) => {\r\n if (\r\n !(formValues[key] ?? []).find(\r\n (itemData: any) => itemData?.id === item?.id\r\n )\r\n ) {\r\n lineData.push([MethodType.DELETE, item?.id, item])\r\n }\r\n })\r\n\r\n data[key] = lineData\r\n } else if (\r\n viewData?.models?.[model]?.[key]?.type === FieldTypeConstants.MANY2MANY\r\n ) {\r\n const lineData: any = []\r\n\r\n // Xử lý các item hiện tại\r\n ;(formValues[key] || []).forEach((itemData: any) => {\r\n if (itemData?.id) {\r\n lineData.push([MethodType.NO_CHANGE, itemData?.id])\r\n }\r\n })\r\n\r\n // Xử lý các item bị xóa\r\n ;(defaultData[key] ?? []).forEach((item: any) => {\r\n if (\r\n !(formValues[key] ?? []).find(\r\n (itemData: any) => itemData?.id === item?.id\r\n )\r\n ) {\r\n lineData.push([MethodType.UNLINK, item?.id])\r\n }\r\n })\r\n\r\n data[key] = lineData\r\n } else {\r\n if (\r\n id &&\r\n ((typeof dirtyFields?.[key] === 'object' && !dirtyFields?.[key]?.id) ||\r\n (typeof dirtyFields[key] !== 'object' && !dirtyFields[key]))\r\n ) {\r\n delete data[key]\r\n } else {\r\n if (!data[key]) {\r\n delete data[key]\r\n } else {\r\n data[key] = formValues?.[key]?.display_name\r\n ? formValues?.[key]?.id\r\n : formValues?.[key]\r\n }\r\n }\r\n }\r\n }\r\n\r\n return data\r\n}\r\n\r\n// Định nghĩa type generic cho các object\r\ntype MergeableObject = { [key: string]: any } | null | undefined\r\n\r\n// Hàm mergeObjects với type generic\r\nexport const mergeObjects = <\r\n T extends MergeableObject,\r\n U extends MergeableObject\r\n>(\r\n object1: T,\r\n object2: U\r\n): (T & U) | undefined => {\r\n if (!object1 || !object2) return undefined\r\n\r\n const mergedObject = { ...object2 } as any\r\n\r\n Object.keys(object1).forEach((key) => {\r\n if (Array.isArray(object1[key]) && Array.isArray(object2[key])) {\r\n mergedObject[key] = object2[key].map((item: any, index: number) => {\r\n if (object1[key][index]) {\r\n return {\r\n ...item,\r\n ...object1[key][index],\r\n }\r\n }\r\n return item\r\n })\r\n } else if (\r\n typeof object1[key] === 'object' &&\r\n typeof object2[key] === 'object' &&\r\n object1[key] !== null &&\r\n object2[key] !== null\r\n ) {\r\n mergedObject[key] = mergeObjects(object1[key], object2[key])\r\n } else {\r\n mergedObject[key] =\r\n object1[key] !== undefined ? object1[key] : object2[key]\r\n }\r\n })\r\n\r\n if (object2) {\r\n Object.keys(object2).forEach((key) => {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (!mergedObject.hasOwnProperty(key)) {\r\n mergedObject[key] = object2[key]\r\n }\r\n })\r\n }\r\n\r\n return mergedObject\r\n}\r\nexport const formatUrlPath = ({\r\n viewType,\r\n aid,\r\n model,\r\n id,\r\n actionPath,\r\n}: {\r\n viewType: 'list' | 'form' | 'kanban' | any\r\n actionPath: string\r\n aid: string | number\r\n model: string\r\n id?: string | number\r\n}) => {\r\n let _url = `/${viewType}/${actionPath}?aid=${aid}&model=${model}`\r\n if (id) {\r\n _url += `&id=${id}`\r\n }\r\n return _url\r\n}\r\n\r\nexport const removeUndefinedFields = <T extends Record<string, any>>(\r\n obj: T\r\n): Partial<T> => {\r\n const newObj: Partial<T> = {}\r\n for (const key in obj) {\r\n if (obj[key] !== undefined) {\r\n newObj[key] = obj[key]\r\n }\r\n }\r\n return newObj\r\n}\r\n\r\nexport const useTabModel = (viewData: any, onchangeData: any) => {\r\n const tabsData =\r\n viewData?.views?.form?.tabs?.filter((val: any) => {\r\n if (!val) return null\r\n const hide = checkDomain(onchangeData, val.invisible)\r\n if (!hide) {\r\n return val\r\n }\r\n return false\r\n }) || []\r\n\r\n return tabsData\r\n}\r\n\r\nexport const isBase64File = (str: any) => {\r\n try {\r\n // Kiểm tra xem có bắt đầu với `data:` không (data URI)\r\n const dataUriPattern = /^data:([a-zA-Z]+\\/[a-zA-Z0-9-.+]+)?;base64,/\r\n if (dataUriPattern.test(str)) {\r\n return true\r\n }\r\n\r\n // Kiểm tra xem có phải là một chuỗi Base64 hợp lệ không`\r\n const base64Pattern =\r\n // eslint-disable-next-line no-useless-escape\r\n /^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{3}=|[A-Za-z0-9+\\/]{2}==)?$/\r\n return base64Pattern.test(str)\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\nexport const isBase64Image = (str: any) => {\r\n const base64Regex = /^data:image\\/(png|jpeg|jpg|gif|webp);base64,/\r\n\r\n if (!base64Regex.test(str)) {\r\n return false\r\n }\r\n\r\n try {\r\n const base64Data = str.split(',')[1]\r\n return !!base64Data && atob(base64Data).length > 0\r\n } catch (error) {\r\n return false\r\n }\r\n}\r\n\r\nexport const checkIsImageLink = (url: any) => {\r\n const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff|ico)$/i\r\n return imageExtensions.test(url) || isBase64Image(url)\r\n}\r\n\r\nexport const formatFileSize = (size: any) => {\r\n if (size < 1024) return `${size} B`\r\n const i = Math.floor(Math.log(size) / Math.log(1024))\r\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB']\r\n return `${(size / Math.pow(1024, i)).toFixed(2)} ${sizes[i]}`\r\n}\r\n\r\nexport const getSubdomain = (\r\n url: string = window.location.href\r\n): string | null => {\r\n const parts = url?.split('.')\r\n if (parts.length > 2) {\r\n return parts[0].replace('https://', '').replace('http://', '')\r\n }\r\n return null\r\n}\r\n\r\nexport const resequence = (arr: any, start: any, end: any) => {\r\n if (start < 0 || start >= arr.length || end < 0 || end >= arr.length) {\r\n return [] // Nếu index không hợp lệ, trả về mảng rỗng\r\n }\r\n\r\n // Lấy phần tử cần di chuyển\r\n const [element] = arr.splice(start, 1)\r\n\r\n // Chèn phần tử vào vị trí mới\r\n arr.splice(end, 0, element)\r\n\r\n // Trả về đoạn mảng đã thay đổi\r\n return arr.slice(Math.min(start, end), Math.max(start, end) + 1)\r\n}\r\n\r\nexport const getOffSet = (arr: any, start: any, end: any) => {\r\n if (start < 0 || start >= arr.length || end < 0 || end >= arr.length) {\r\n return 0 // Nếu start hoặc end không hợp lệ, trả về 0\r\n }\r\n\r\n // Nếu start > end, chỉ lấy từ 0 đến end\r\n if (start > end) {\r\n return end\r\n }\r\n\r\n return arr.slice(0, start).length\r\n}\r\n\r\nexport const copyTextToClipboard = async (text: string) => {\r\n if ('clipboard' in navigator) {\r\n return await navigator.clipboard.writeText(text)\r\n } else {\r\n // Fallback for browsers that do not support navigator.clipboard\r\n const textArea = document.createElement('textarea')\r\n textArea.value = text\r\n textArea.style.position = 'fixed' // Avoid scrolling to the bottom of the page in MS Edge.\r\n document.body.appendChild(textArea)\r\n textArea.focus()\r\n textArea.select()\r\n try {\r\n document.execCommand('copy')\r\n } finally {\r\n document.body.removeChild(textArea)\r\n }\r\n }\r\n}\r\n\r\nexport const updateTokenParamInOriginalRequest = (\r\n originalRequest: { data?: any },\r\n newAccessToken: string\r\n): any => {\r\n if (!originalRequest.data) return originalRequest.data\r\n\r\n if (typeof originalRequest.data === 'string') {\r\n try {\r\n const parsedData = JSON.parse(originalRequest.data)\r\n if (\r\n parsedData.with_context &&\r\n typeof parsedData.with_context === 'object'\r\n ) {\r\n parsedData.with_context.token = newAccessToken\r\n }\r\n return JSON.stringify(parsedData)\r\n } catch (e) {\r\n console.warn('Failed to parse originalRequest.data', e)\r\n return originalRequest.data\r\n }\r\n }\r\n\r\n if (\r\n typeof originalRequest.data === 'object' &&\r\n originalRequest.data.with_context\r\n ) {\r\n originalRequest.data.with_context.token = newAccessToken\r\n }\r\n\r\n return originalRequest.data\r\n}\r\n\r\nexport const isObjectEmpty = (obj: object): boolean => {\r\n return Object.keys(obj).length === 0\r\n}\r\n\r\nexport const useField = (props: any) => {\r\n const [invisible, setInvisible] = useState(true)\r\n const [required, setRequired] = useState(false)\r\n const [readonly, setReadOnly] = useState(false)\r\n const {\r\n invisible: inv,\r\n required: req,\r\n readonly: rea,\r\n onchangeData,\r\n rootField,\r\n index,\r\n name,\r\n } = props\r\n const nameField = rootField ? `${rootField?.name}.${index}.${name}` : null\r\n useEffect(() => {\r\n if (onchangeData && Object.keys(onchangeData).length > 0) {\r\n setRequired(\r\n typeof req === 'object'\r\n ? matchDomains(onchangeData, req)\r\n : checkDomain(onchangeData, req)\r\n )\r\n setInvisible(matchDomains(onchangeData, inv))\r\n setReadOnly(\r\n typeof req === 'object'\r\n ? matchDomains(onchangeData, rea)\r\n : checkDomain(onchangeData, rea)\r\n )\r\n }\r\n }, [onchangeData])\r\n\r\n return {\r\n invisible,\r\n required,\r\n readonly,\r\n nameField,\r\n }\r\n}\r\n","export const localStorageUtils = () => {\r\n const setToken = async (access_token: string) => {\r\n localStorage.setItem('accessToken', access_token)\r\n }\r\n const setRefreshToken = async (refresh_token: string) => {\r\n localStorage.setItem('refreshToken', refresh_token)\r\n }\r\n const getAccessToken = async (): Promise<string | null> => {\r\n return localStorage.getItem('accessToken')\r\n }\r\n const getRefreshToken = async (): Promise<string | null> => {\r\n return localStorage.getItem('refreshToken')\r\n }\r\n\r\n const clearToken = async () => {\r\n localStorage.removeItem('accessToken')\r\n localStorage.removeItem('refreshToken')\r\n }\r\n\r\n return {\r\n setToken,\r\n setRefreshToken,\r\n getAccessToken,\r\n getRefreshToken,\r\n clearToken,\r\n }\r\n}\r\nexport type LocalStorageUtilsType = ReturnType<typeof localStorageUtils>\r\n","export const sessionStorageUtils = () => {\r\n const getBrowserSession = async (): Promise<string | null> => {\r\n return sessionStorage.getItem('browserSession')\r\n }\r\n return {\r\n getBrowserSession,\r\n }\r\n}\r\n\r\nexport type SessionStorageUtilsType = ReturnType<typeof sessionStorageUtils>\r\n","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'\r\n\r\nimport { envStore } from './store'\r\n\r\nexport * from './reducers/breadcrums-slice'\r\nexport * from './reducers/env-slice'\r\nexport * from './reducers/excel-slice'\r\nexport * from './reducers/form-slice'\r\nexport * from './reducers/header-slice'\r\nexport * from './reducers/list-slice'\r\nexport * from './reducers/login-slice'\r\nexport * from './reducers/navbar-slice'\r\nexport * from './reducers/profile-slice'\r\nexport * from './reducers/search-slice'\r\nexport * from './store'\r\n\r\nexport type RootState = ReturnType<typeof envStore.getState>\r\nexport type AppDispatch = typeof envStore.dispatch\r\nexport const useAppDispatch: () => AppDispatch = useDispatch\r\nexport const useAppSelector: TypedUseSelectorHook<RootState> = useSelector\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\ninterface Breadcrumb {\r\n title?: string\r\n path?: string\r\n view: 'list' | 'detail' | 'edit' | 'tree'\r\n aid: string | number\r\n model: string\r\n id: string | number\r\n}\r\n\r\nexport interface BreadcrumbsState {\r\n breadCrumbs: Breadcrumb[]\r\n}\r\n\r\nconst initialState: BreadcrumbsState = {\r\n breadCrumbs: [],\r\n}\r\n\r\n// Type cho Redux slice\r\nexport const breadcrumbsSlice = createSlice({\r\n name: 'breadcrumbs',\r\n initialState,\r\n reducers: {\r\n setBreadCrumbs: (\r\n state: BreadcrumbsState,\r\n action: PayloadAction<Breadcrumb>\r\n ) => {\r\n state.breadCrumbs = [...state.breadCrumbs, action.payload]\r\n },\r\n },\r\n})\r\n\r\nexport const { setBreadCrumbs } = breadcrumbsSlice.actions\r\n\r\nexport const selectBreadCrumbs = (state: RootState) => state.breadcrumbs\r\n\r\nexport default breadcrumbsSlice.reducer\r\n","import { createSlice } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nconst initialState = {\r\n baseUrl: '',\r\n requests: null,\r\n companies: [],\r\n user: {},\r\n config: null,\r\n envFile: null,\r\n defaultCompany: {\r\n id: null,\r\n logo: '',\r\n secondary_color: '',\r\n primary_color: '',\r\n },\r\n context: {\r\n uid: null,\r\n allowed_company_ids: [],\r\n lang: 'vi_VN',\r\n tz: 'Asia/Saigon',\r\n },\r\n}\r\n\r\nexport const envSlice = createSlice({\r\n name: 'env',\r\n initialState: initialState,\r\n reducers: {\r\n setEnv: (state, action) => {\r\n Object.assign(state, action.payload)\r\n },\r\n setUid: (state, action) => {\r\n state.context.uid = action.payload\r\n },\r\n setAllowCompanies: (state, action) => {\r\n state.context.allowed_company_ids = action.payload\r\n },\r\n setCompanies: (state, action) => {\r\n state.companies = action.payload\r\n },\r\n setDefaultCompany: (state, action) => {\r\n state.defaultCompany = action.payload\r\n },\r\n setLang: (state, action) => {\r\n state.context.lang = action.payload\r\n },\r\n setUser: (state, action) => {\r\n state.user = action.payload\r\n },\r\n setConfig: (state, action) => {\r\n state.config = action.payload\r\n },\r\n setEnvFile: (state, action) => {\r\n state.envFile = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const {\r\n setEnv,\r\n setUid,\r\n setLang,\r\n setAllowCompanies,\r\n setCompanies,\r\n setDefaultCompany,\r\n setUser,\r\n setConfig,\r\n setEnvFile,\r\n} = envSlice.actions\r\n\r\nexport const selectEnv = (state: RootState) => state.env\r\n\r\nexport default envSlice.reducer\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface ExcelState {\r\n dataParse: any | null\r\n idFile: any | null\r\n isFileLoaded: boolean\r\n loadingImport: any\r\n selectedFile: any\r\n errorData: any\r\n}\r\n\r\nconst initialState: ExcelState = {\r\n dataParse: null,\r\n idFile: null,\r\n isFileLoaded: false,\r\n loadingImport: false,\r\n selectedFile: null,\r\n errorData: null,\r\n}\r\n\r\n// Tạo slice\r\nexport const excelSlice = createSlice({\r\n name: 'excel',\r\n initialState,\r\n reducers: {\r\n setDataParse: (state, action: PayloadAction<any>) => {\r\n state.dataParse = action.payload\r\n },\r\n setIdFile: (state, action: PayloadAction<any>) => {\r\n state.idFile = action.payload\r\n },\r\n setIsFileLoaded: (state, action: PayloadAction<any>) => {\r\n state.isFileLoaded = action.payload\r\n },\r\n setLoadingImport: (state, action: PayloadAction<any>) => {\r\n state.loadingImport = action.payload\r\n },\r\n setSelectedFile: (state, action: PayloadAction<any>) => {\r\n state.selectedFile = action.payload\r\n },\r\n setErrorData: (state, action: PayloadAction<any>) => {\r\n state.errorData = action.payload\r\n },\r\n },\r\n})\r\n\r\n// Export actions\r\nexport const {\r\n setDataParse,\r\n setIdFile,\r\n setIsFileLoaded,\r\n setLoadingImport,\r\n setSelectedFile,\r\n setErrorData,\r\n} = excelSlice.actions\r\n\r\nexport const selectExcel = (state: RootState) => state.excel\r\n\r\n// Export reducer\r\nexport default excelSlice.reducer\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface ViewDataStore {\r\n [key: string]: any\r\n}\r\n\r\nexport interface FormState {\r\n viewDataStore: ViewDataStore\r\n isShowingModalDetail: boolean\r\n isShowModalTranslate: boolean\r\n formSubmitComponent: Record<string, React.ReactNode>\r\n fieldTranslation: any\r\n listSubject: any\r\n dataUser: any\r\n}\r\n\r\nconst initialState: FormState = {\r\n viewDataStore: {},\r\n isShowingModalDetail: false,\r\n isShowModalTranslate: false,\r\n formSubmitComponent: {},\r\n fieldTranslation: null,\r\n listSubject: {},\r\n dataUser: {},\r\n}\r\n\r\n// Tạo slice\r\nexport const formSlice = createSlice({\r\n name: 'form',\r\n initialState: initialState,\r\n reducers: {\r\n setViewDataStore: (\r\n state: FormState,\r\n action: PayloadAction<ViewDataStore>\r\n ) => {\r\n state.viewDataStore = action.payload\r\n },\r\n setIsShowingModalDetail: (\r\n state: FormState,\r\n action: PayloadAction<boolean>\r\n ) => {\r\n state.isShowingModalDetail = action.payload\r\n },\r\n setIsShowModalTranslate: (\r\n state: FormState,\r\n action: PayloadAction<boolean>\r\n ) => {\r\n state.isShowModalTranslate = action.payload\r\n },\r\n setFormSubmitComponent: (\r\n state,\r\n action: PayloadAction<{ key: string; component: any }>\r\n ) => {\r\n state.formSubmitComponent[action.payload.key] = action.payload.component\r\n },\r\n setFieldTranslate: (state: FormState, action: PayloadAction<any>) => {\r\n state.fieldTranslation = action.payload\r\n },\r\n setListSubject: (state: FormState, action: PayloadAction<any>) => {\r\n state.listSubject = action.payload\r\n },\r\n setDataUser: (state: FormState, action: PayloadAction<any>) => {\r\n state.dataUser = action.payload\r\n },\r\n },\r\n})\r\n\r\n// Export actions\r\nexport const {\r\n setViewDataStore,\r\n setIsShowingModalDetail,\r\n setIsShowModalTranslate,\r\n setFormSubmitComponent,\r\n setFieldTranslate,\r\n setListSubject,\r\n setDataUser,\r\n} = formSlice.actions\r\n\r\nexport const selectForm = (state: RootState) => state.form\r\n\r\n// Export reducer\r\nexport default formSlice.reducer\r\n","import { createSlice } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport const headerSlice = createSlice({\r\n name: 'header',\r\n initialState: {\r\n value: { allowedCompanyIds: [] },\r\n },\r\n reducers: {\r\n setHeader: (state, action) => {\r\n state.value = { ...state.value, ...action.payload }\r\n },\r\n\r\n setAllowedCompanyIds: (state, action) => {\r\n state.value.allowedCompanyIds = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const { setAllowedCompanyIds, setHeader } = headerSlice.actions\r\n\r\nexport const selectHeader = (state: RootState) => state.header\r\n\r\nexport default headerSlice.reducer\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface ListState {\r\n pageLimit: number\r\n fields: Record<string, any>\r\n order: string | null\r\n selectedRowKeys: number[]\r\n selectedRadioKey: any\r\n indexRowTableModal: number\r\n isUpdateTableModal: boolean\r\n footerGroupTable: Record<string, any>\r\n page: number\r\n transferDetail?: any\r\n domainTable?: any\r\n}\r\n\r\nconst initialState: ListState = {\r\n pageLimit: 10,\r\n fields: {},\r\n order: '',\r\n selectedRowKeys: [],\r\n selectedRadioKey: 0,\r\n indexRowTableModal: -2,\r\n isUpdateTableModal: false,\r\n footerGroupTable: {},\r\n transferDetail: null,\r\n page: 0,\r\n domainTable: [],\r\n}\r\n\r\nexport const listSlice = createSlice({\r\n name: 'list',\r\n initialState,\r\n reducers: {\r\n setPageLimit: (state, action: PayloadAction<number>) => {\r\n state.pageLimit = action.payload\r\n },\r\n setFields: (state, action: PayloadAction<Record<string, any>>) => {\r\n state.fields = action.payload\r\n },\r\n setOrder: (state, action: PayloadAction<string | null>) => {\r\n state.order = action.payload\r\n },\r\n setSelectedRowKeys: (state, action: PayloadAction<number[]>) => {\r\n state.selectedRowKeys = action.payload\r\n },\r\n setSelectedRadioKey: (state, action: any) => {\r\n state.selectedRadioKey = action.payload\r\n },\r\n setIndexRowTableModal: (state, action: PayloadAction<number>) => {\r\n state.indexRowTableModal = action.payload\r\n },\r\n setTransferDetail: (state, action: any) => {\r\n state.transferDetail = action.payload\r\n },\r\n setIsUpdateTableModal: (state, action: PayloadAction<boolean>) => {\r\n state.isUpdateTableModal = action.payload\r\n },\r\n setPage: (state, action: PayloadAction<number>) => {\r\n state.page = action.payload\r\n },\r\n\r\n setDomainTable: (state, action: PayloadAction<any[]>) => {\r\n state.domainTable = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const {\r\n setPageLimit,\r\n setFields,\r\n setOrder,\r\n setSelectedRowKeys,\r\n setIndexRowTableModal,\r\n setIsUpdateTableModal,\r\n setPage,\r\n setSelectedRadioKey,\r\n setTransferDetail,\r\n setDomainTable,\r\n} = listSlice.actions\r\n\r\nexport const selectList = (state: RootState) => state.list\r\n\r\nexport default listSlice.reducer\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\nimport { RootState } from '../..'\r\nexport interface LoginStateType {\r\n db: string\r\n redirectTo: string\r\n forgotPasswordUrl: string\r\n}\r\n\r\nconst initialState: LoginStateType = {\r\n db: '',\r\n redirectTo: '/',\r\n forgotPasswordUrl: '/',\r\n}\r\n\r\nexport const loginSlice = createSlice({\r\n name: 'login',\r\n initialState: initialState,\r\n reducers: {\r\n setDb: (state, action: PayloadAction<string>) => {\r\n state.db = action.payload\r\n },\r\n setRedirectTo: (state, action: PayloadAction<string>) => {\r\n state.redirectTo = action.payload\r\n },\r\n setForgotPasswordUrl: (state, action: PayloadAction<string>) => {\r\n state.forgotPasswordUrl = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const { setDb, setRedirectTo, setForgotPasswordUrl } = loginSlice.actions\r\n\r\nexport const selectLogin = (state: RootState) => state.login\r\n\r\nexport default loginSlice.reducer\r\n","import { createSlice } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface NavbarStateType {\r\n menuFocus: any\r\n menuAction: any\r\n navbarWidth: number\r\n menuList: any\r\n}\r\n\r\nconst initialState: NavbarStateType = {\r\n menuFocus: {},\r\n menuAction: {},\r\n navbarWidth: 250,\r\n menuList: [],\r\n}\r\n\r\nexport const navbarSlice = createSlice({\r\n name: 'navbar',\r\n initialState: initialState,\r\n reducers: {\r\n setMenuFocus: (state, action) => {\r\n state.menuFocus = action.payload\r\n },\r\n setMenuFocusAction: (state, action) => {\r\n state.menuAction = action.payload\r\n },\r\n setNavbarWidth: (state, action) => {\r\n state.navbarWidth = action.payload\r\n },\r\n setMenuList: (state, action) => {\r\n state.menuList = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const { setMenuFocus, setMenuFocusAction, setNavbarWidth, setMenuList } =\r\n navbarSlice.actions\r\n\r\nexport const selectNavbar = (state: RootState) => state.navbar\r\n\r\nexport default navbarSlice.reducer\r\n","import { createSlice } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface UserInfor {\r\n address?: {\r\n country?: boolean\r\n formatted?: string\r\n locality?: boolean\r\n postal_code?: boolean\r\n region?: boolean\r\n street_address?: boolean\r\n }\r\n email?: string\r\n locale?: string\r\n name?: string\r\n partner_id?: {\r\n id?: number\r\n stud_id?: boolean\r\n }\r\n phone_number?: boolean\r\n sub?: number\r\n updated_at?: string\r\n username?: string\r\n website?: boolean\r\n zoneinfo?: string\r\n image?: string\r\n}\r\n\r\nexport interface ProfileStateType {\r\n profile: UserInfor\r\n}\r\n\r\nconst initialState: ProfileStateType = {\r\n profile: {},\r\n}\r\n\r\nexport const profileSlice = createSlice({\r\n name: 'profile',\r\n initialState: initialState,\r\n reducers: {\r\n setProfile: (state, action) => {\r\n state.profile = action.payload\r\n },\r\n },\r\n})\r\n\r\nexport const { setProfile } = profileSlice.actions\r\n\r\nexport const selectProfile = (state: RootState) => state.profile\r\n\r\nexport default profileSlice.reducer\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\n\r\nimport { RootState } from '../..'\r\n\r\nexport interface SearchState {\r\n groupByDomain: any\r\n searchBy: any\r\n searchString: string\r\n hoveredIndexSearchList: any\r\n selectedTags: []\r\n firstDomain: any\r\n searchMap: Record<string, any[]>\r\n filterBy: any\r\n groupBy: any\r\n}\r\n\r\nconst initialState: SearchState = {\r\n groupByDomain: null,\r\n searchBy: [],\r\n searchString: '',\r\n hoveredIndexSearchList: null,\r\n selectedTags: [],\r\n firstDomain: null,\r\n searchMap: {},\r\n filterBy: [],\r\n groupBy: [],\r\n}\r\n\r\nexport const searchSlice = createSlice({\r\n name: 'search',\r\n initialState,\r\n reducers: {\r\n setGroupByDomain: (state, action: PayloadAction<string | null>) => {\r\n state.groupByDomain = action.payload\r\n },\r\n setSearchBy: (state, action: any) => {\r\n state.searchBy = action.payload\r\n },\r\n setSearchString: (state, action: PayloadAction<string>) => {\r\n state.searchString = action.payload\r\n },\r\n setHoveredIndexSearchList: (\r\n state,\r\n action: PayloadAction<number | null>\r\n ) => {\r\n state.hoveredIndexSearchList = action.payload\r\n },\r\n setSelectedTags: (state, action: PayloadAction<any>) => {\r\n state.selectedTags = action.payload\r\n },\r\n setFirstDomain: (state, action: PayloadAction<any>) => {\r\n state.firstDomain = action.payload\r\n },\r\n setFilterBy: (state, action: PayloadAction<any>) => {\r\n state.filterBy = action.payload\r\n },\r\n setGroupBy: (state, action: PayloadAction<any>) => {\r\n state.groupBy = action.payload\r\n },\r\n setSearchMap: (state, action: PayloadAction<Record<string, any>>) => {\r\n state.searchMap = action.payload\r\n },\r\n updateSearchMap: (\r\n state,\r\n action: PayloadAction<{ key: string; value: any }>\r\n ) => {\r\n if (!state.searchMap[action.payload.key]) {\r\n state.searchMap[action.payload.key] = [] // Tạo mảng nếu chưa có key\r\n }\r\n state.searchMap[action.payload.key].push(action.payload.value)\r\n },\r\n removeKeyFromSearchMap: (\r\n state,\r\n action: PayloadAction<{ key: string; item?: any }>\r\n ) => {\r\n const { key, item } = action.payload\r\n const values = state.searchMap[key]\r\n\r\n if (!values) return\r\n\r\n if (item) {\r\n const filtered = values.filter((value: any) => value.name !== item.name)\r\n if (filtered.length > 0) {\r\n state.searchMap[key] = filtered\r\n } else {\r\n delete state.searchMap[key]\r\n }\r\n } else {\r\n delete state.searchMap[key]\r\n }\r\n },\r\n clearSearchMap: (state) => {\r\n state.searchMap = {}\r\n },\r\n },\r\n})\r\n\r\nexport const {\r\n setGroupByDomain,\r\n setSelectedTags,\r\n setSearchString,\r\n setHoveredIndexSearchList,\r\n setFirstDomain,\r\n setSearchBy,\r\n setFilterBy,\r\n setSearchMap,\r\n updateSearchMap,\r\n removeKeyFromSearchMap,\r\n setGroupBy,\r\n clearSearchMap,\r\n} = searchSlice.actions\r\n\r\nexport const selectSearch = (state: RootState) => state.search\r\nexport const selectSearchMap = (state: RootState) => state.search.searchMap\r\n\r\nexport default searchSlice.reducer\r\n","import { configureStore } from '@reduxjs/toolkit'\r\nimport { combineReducers } from 'redux'\r\n\r\nimport breadcrumbsReducer from './reducers/breadcrums-slice'\r\nimport envReducer from './reducers/env-slice'\r\nimport excelReducer from './reducers/excel-slice'\r\nimport formReducer from './reducers/form-slice'\r\nimport headerReducer from './reducers/header-slice'\r\nimport listReducer from './reducers/list-slice'\r\nimport loginReducer from './reducers/login-slice'\r\nimport navbarReducer from './reducers/navbar-slice'\r\nimport profileReducer from './reducers/profile-slice'\r\nimport searchReducer from './reducers/search-slice'\r\n\r\nconst rootReducer = combineReducers({\r\n env: envReducer,\r\n header: headerReducer,\r\n navbar: navbarReducer,\r\n list: listReducer,\r\n search: searchReducer,\r\n form: formReducer,\r\n breadcrumbs: breadcrumbsReducer,\r\n login: loginReducer,\r\n excel: excelReducer,\r\n profile: profileReducer,\r\n})\r\n\r\nexport const envStore = configureStore({\r\n reducer: rootReducer,\r\n middleware: (getDefaultMiddleware) =>\r\n getDefaultMiddleware({\r\n serializableCheck: false,\r\n }),\r\n})\r\n","/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nexport function formatProdErrorMessage(code: number) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}","declare global {\n interface SymbolConstructor {\n readonly observable: symbol;\n }\n}\nconst $$observable = /* #__PURE__ */(() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\nexport default $$observable;","/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\nconst randomString = () => Math.random().toString(36).substring(7).split('').join('.');\nconst ActionTypes = {\n INIT: `@@redux/INIT${/* #__PURE__ */randomString()}`,\n REPLACE: `@@redux/REPLACE${/* #__PURE__ */randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nexport default ActionTypes;","/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: any): obj is object {\n if (typeof obj !== 'object' || obj === null) return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}","// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nexport function miniKindOf(val: any): string {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n const type = typeof val;\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n const constructorName = ctorName(val);\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n }\n\n // other\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\nfunction ctorName(val: any): string | null {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\nfunction isError(val: any) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\nfunction isDate(val: any) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\nexport function kindOf(val: any) {\n let typeOfVal: string = typeof val;\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}","import { formatProdErrorMessage as _formatProdErrorMessage13 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage12 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage11 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage10 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage9 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage8 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage7 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport $$observable from './utils/symbol-observable';\nimport { Store, StoreEnhancer, Dispatch, Observer, ListenerCallback, UnknownIfNonSpecific } from './types/store';\nimport { Action } from './types/actions';\nimport { Reducer } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport { kindOf } from './utils/kindOf';\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = (preloadedState as StoreEnhancer<Ext, StateExt>);\n preloadedState = undefined;\n }\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, (preloadedState as PreloadedState | undefined));\n }\n let currentReducer = reducer;\n let currentState: S | PreloadedState | undefined = (preloadedState as PreloadedState | undefined);\n let currentListeners: Map<number, ListenerCallback> | null = new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns The current state tree of your application.\n */\n function getState(): S {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n return (currentState as S);\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param listener A callback to be invoked on every dispatch.\n * @returns A function to remove this change listener.\n */\n function subscribe(listener: () => void) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action: A) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage9(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== 'string') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage10(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage11(9) : 'Reducers may not dispatch actions.');\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach(listener => {\n listener();\n });\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param nextReducer The reducer for the store to use instead.\n */\n function replaceReducer(nextReducer: Reducer<S, A>): void {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage12(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = ((nextReducer as unknown) as Reducer<S, A, PreloadedState>);\n\n // This action has a similar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n dispatch(({\n type: ActionTypes.REPLACE\n } as A));\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer: unknown) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage13(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = (observer as Observer<S>);\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [$$observable]() {\n return this;\n }\n };\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch(({\n type: ActionTypes.INIT\n } as A));\n const store = (({\n dispatch: (dispatch as Dispatch<A>),\n subscribe,\n getState,\n replaceReducer,\n [$$observable]: observable\n } as unknown) as Store<S, A, StateExt> & Ext);\n return store;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n return createStore(reducer, (preloadedState as any), enhancer);\n}","/**\n * Prints a warning in the console if it exists.\n *\n * @param message The warning message.\n */\nexport default function warning(message: string): void {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n}","import { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Action } from './types/actions';\nimport { ActionFromReducersMapObject, PreloadedStateShapeFromReducersMapObject, Reducer, StateFromReducersMapObject } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport warning from './utils/warning';\nimport { kindOf } from './utils/kindOf';\nfunction getUnexpectedStateShapeWarningMessage(inputState: object, reducers: {\n [key: string]: Reducer<any, any, any>;\n}, action: Action, unexpectedKeyCache: {\n [key: string]: true;\n}) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following ` + `keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter(key => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach(key => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? 'keys' : 'key'} ` + `\"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. ` + `Expected to find one of the known reducer keys instead: ` + `\"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers: {\n [key: string]: Reducer<any, any, any>;\n}) {\n Object.keys(reducers).forEach(key => {\n const reducer = reducers[key];\n const initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n }\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. ` + `Don't try to handle '${ActionTypes.INIT}' or other actions in \"redux/*\" ` + `namespace. They are considered private. Instead, you must return the ` + `current state for any unknown actions, unless it is undefined, ` + `in which case you must return the initial state, regardless of the ` + `action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @template S Combined state object type.\n *\n * @param reducers An object whose values correspond to different reducer\n * functions that need to be combined into one. One handy way to obtain it\n * is to use `import * as reducers` syntax. The reducers may never\n * return undefined for any action. Instead, they should return their\n * initial state if the state passed to them was undefined, and the current\n * state for any unrecognized action.\n *\n * @returns A reducer function that invokes every reducer inside the passed\n * object, and builds a state object with the same shape.\n */\nexport default function combineReducers<M>(reducers: M): M[keyof M] extends Reducer<any, any, any> | undefined ? Reducer<StateFromReducersMapObject<M>, ActionFromReducersMapObject<M>, Partial<PreloadedStateShapeFromReducersMapObject<M>>> : never;\nexport default function combineReducers(reducers: {\n [key: string]: Reducer<any, any, any>;\n}) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers: {\n [key: string]: Reducer<any, any, any>;\n } = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n\n // This is used to make sure we don't warn about the same\n // keys multiple times.\n let unexpectedKeyCache: {\n [key: string]: true;\n };\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError: unknown;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state: StateFromReducersMapObject<typeof reducers> = {}, action: Action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== 'production') {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState: StateFromReducersMapObject<typeof reducers> = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === 'undefined') {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : '(unknown type)'}, the slice reducer for key \"${key}\" returned undefined. ` + `To ignore an action, you must explicitly return the previous state. ` + `If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Dispatch } from './types/store';\nimport { ActionCreator, ActionCreatorsMapObject, Action } from './types/actions';\nimport { kindOf } from './utils/kindOf';\nfunction bindActionCreator<A extends Action>(actionCreator: ActionCreator<A>, dispatch: Dispatch<A>) {\n return function (this: any, ...args: any[]) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\n\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use `import * as`\n * syntax. You may also pass a single function.\n *\n * @param dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\nexport default function bindActionCreators<A, C extends ActionCreator<A>>(actionCreator: C, dispatch: Dispatch): C;\nexport default function bindActionCreators<A extends ActionCreator<any>, B extends ActionCreator<any>>(actionCreator: A, dispatch: Dispatch): B;\nexport default function bindActionCreators<A, M extends ActionCreatorsMapObject<A>>(actionCreators: M, dispatch: Dispatch): M;\nexport default function bindActionCreators<M extends ActionCreatorsMapObject, N extends ActionCreatorsMapObject>(actionCreators: M, dispatch: Dispatch): N;\nexport default function bindActionCreators(actionCreators: ActionCreator<any> | ActionCreatorsMapObject, dispatch: Dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. ` + `Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n }\n const boundActionCreators: ActionCreatorsMapObject = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}","type Func<T extends any[], R> = (...a: T) => R;\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for the\n * resulting composite function.\n *\n * @param funcs The functions to compose.\n * @returns A function obtained by composing the argument functions from right\n * to left. For example, `compose(f, g, h)` is identical to doing\n * `(...args) => f(g(h(...args)))`.\n */\nexport default function compose(): <R>(a: R) => R;\nexport default function compose<F extends Function>(f: F): F;\n\n/* two functions */\nexport default function compose<A, T extends any[], R>(f1: (a: A) => R, f2: Func<T, A>): Func<T, R>;\n\n/* three functions */\nexport default function compose<A, B, T extends any[], R>(f1: (b: B) => R, f2: (a: A) => B, f3: Func<T, A>): Func<T, R>;\n\n/* four functions */\nexport default function compose<A, B, C, T extends any[], R>(f1: (c: C) => R, f2: (b: B) => C, f3: (a: A) => B, f4: Func<T, A>): Func<T, R>;\n\n/* rest */\nexport default function compose<R>(f1: (a: any) => R, ...funcs: Function[]): (...args: any[]) => R;\nexport default function compose<R>(...funcs: Function[]): (...args: any[]) => R;\nexport default function compose(...funcs: Function[]) {\n if (funcs.length === 0) {\n // infer the argument type so it is usable in inference down the line\n return <T,>(arg: T) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args: any) => a(b(...args)));\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport compose from './compose';\nimport { Middleware, MiddlewareAPI } from './types/middleware';\nimport { StoreEnhancer, Dispatch } from './types/store';\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param middlewares The middleware chain to be applied.\n * @returns A store enhancer applying the middleware.\n *\n * @template Ext Dispatch signature added by a middleware.\n * @template S The type of the state supported by a middleware.\n */\nexport default function applyMiddleware(): StoreEnhancer;\nexport default function applyMiddleware<Ext1, S>(middleware1: Middleware<Ext1, S, any>): StoreEnhancer<{\n dispatch: Ext1;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3 & Ext4;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, Ext5, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>, middleware5: Middleware<Ext5, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3 & Ext4 & Ext5;\n}>;\nexport default function applyMiddleware<Ext, S = any>(...middlewares: Middleware<any, S, any>[]): StoreEnhancer<{\n dispatch: Ext;\n}>;\nexport default function applyMiddleware(...middlewares: Middleware[]): StoreEnhancer<any> {\n return createStore => (reducer, preloadedState) => {\n const store = createStore(reducer, preloadedState);\n let dispatch: Dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n const middlewareAPI: MiddlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map(middleware => middleware(middlewareAPI));\n dispatch = compose<typeof dispatch>(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}","import { Action } from '../types/actions';\nimport isPlainObject from './isPlainObject';\nexport default function isAction(action: unknown): action is Action<string> {\n return isPlainObject(action) && 'type' in action && typeof (action as Record<'type', unknown>).type === 'string';\n}","import { EnhancedStore } from '@reduxjs/toolkit'\r\n\r\nimport { axiosClient } from '../configs'\r\nimport {\r\n envStore,\r\n setAllowCompanies,\r\n setCompanies,\r\n setDefaultCompany,\r\n setEnv,\r\n setLang,\r\n setUid,\r\n setUser,\r\n} from '../store'\r\nimport {\r\n localStorageUtils,\r\n LocalStorageUtilsType,\r\n sessionStorageUtils,\r\n SessionStorageUtilsType,\r\n} from '../utils/storage'\r\n\r\ndeclare global {\r\n interface Global {\r\n envStore?: EnvStore\r\n }\r\n\r\n interface Window {\r\n envStore?: EnvStore\r\n }\r\n}\r\n\r\nexport class EnvStore {\r\n envStore: EnhancedStore | any\r\n baseUrl?: string\r\n requests?: any\r\n context?: any\r\n defaultCompany?: any\r\n config?: any\r\n companies?: any[]\r\n user?: any\r\n db?: string\r\n localStorageUtils?: any\r\n sessionStorageUtils?: any\r\n refreshTokenEndpoint?: string\r\n\r\n constructor(\r\n envStore: EnhancedStore,\r\n localStorageUtils?: any,\r\n sessionStorageUtils?: any\r\n ) {\r\n this.envStore = envStore\r\n this.localStorageUtils = localStorageUtils\r\n this.sessionStorageUtils = sessionStorageUtils\r\n this.setup()\r\n }\r\n\r\n setup() {\r\n const env = this.envStore.getState().env\r\n this.baseUrl = env?.baseUrl\r\n this.requests = env?.requests\r\n this.context = env?.context\r\n this.defaultCompany = env?.defaultCompany\r\n this.config = env?.config\r\n this.companies = env?.companies || []\r\n this.user = env?.user\r\n this.db = env?.db\r\n this.refreshTokenEndpoint = env?.refreshTokenEndpoint\r\n }\r\n\r\n setupEnv(envConfig: EnvStore) {\r\n const dispatch = this.envStore.dispatch\r\n const env: any = {\r\n ...envConfig,\r\n localStorageUtils: this.localStorageUtils,\r\n sessionStorageUtils: this.sessionStorageUtils,\r\n }\r\n const requests = axiosClient.init(env)\r\n dispatch(setEnv({ ...env, requests }))\r\n this.setup()\r\n }\r\n\r\n setUid(uid: number) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setUid(uid))\r\n this.setup()\r\n }\r\n\r\n setLang(lang: string) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setLang(lang))\r\n this.setup()\r\n }\r\n\r\n setAllowCompanies(allowCompanies: number[]) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setAllowCompanies(allowCompanies))\r\n this.setup()\r\n }\r\n\r\n setCompanies(companies: any[]) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setCompanies(companies))\r\n this.setup()\r\n }\r\n\r\n setDefaultCompany(company: any) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setDefaultCompany(company))\r\n this.setup()\r\n }\r\n\r\n setUserInfo(userInfo: any) {\r\n const dispatch = this.envStore.dispatch\r\n dispatch(setUser(userInfo))\r\n this.setup()\r\n }\r\n}\r\n\r\nexport let env: EnvStore | null = null\r\n\r\nexport function initEnv({\r\n localStorageUtils,\r\n sessionStorageUtils,\r\n}: {\r\n localStorageUtils?: LocalStorageUtilsType\r\n sessionStorageUtils?: SessionStorageUtilsType\r\n}): EnvStore {\r\n env = new EnvStore(envStore, localStorageUtils, sessionStorageUtils)\r\n return env\r\n}\r\n\r\nexport function getEnv(): EnvStore {\r\n if (!env)\r\n env = new EnvStore(envStore, localStorageUtils(), sessionStorageUtils())\r\n // throw new Error('EnvStore has not been initialized — call initEnv() first')\r\n return env\r\n}\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useForgotPassword = () => {\r\n return useMutation({\r\n mutationFn: (email: string) => {\r\n return AuthService.forgotPassword(email)\r\n },\r\n })\r\n}\r\n\r\nexport default useForgotPassword\r\n","import { UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\nimport { toQueryString } from '../../utils'\r\n\r\nimport { ContextApi } from './../../types/api-type'\r\n\r\nconst ActionService = {\r\n // Load Action\r\n async loadAction({\r\n idAction,\r\n context,\r\n }: {\r\n idAction: number\r\n context: ContextApi\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n action_id: idAction,\r\n with_context: {\r\n ...context,\r\n },\r\n }\r\n return env.requests.post(`${UriConstants.LOAD_ACTION}`, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n // Call Button\r\n async callButton({\r\n model,\r\n ids = [],\r\n context,\r\n method,\r\n }: {\r\n model: string\r\n ids: Record<string, any>[] | any\r\n context: ContextApi\r\n method: any\r\n }) {\r\n try {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: method,\r\n ids: ids,\r\n with_context: context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when calling button action:', error)\r\n throw error\r\n }\r\n },\r\n\r\n // remove Row\r\n async removeRows({\r\n model,\r\n ids,\r\n context,\r\n }: {\r\n model: string\r\n ids: Record<string, any>[] | any\r\n context: ContextApi\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: 'unlink',\r\n ids: ids,\r\n with_context: context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n // Duplicate Model\r\n async duplicateRecord({\r\n model,\r\n id,\r\n context,\r\n }: {\r\n model: string\r\n id: any\r\n context: ContextApi\r\n }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: model,\r\n method: 'copy',\r\n ids: id,\r\n with_context: context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n // Get Print Report\r\n async getPrintReportName({ id }: { id: number }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: 'ir.actions.report',\r\n method: 'web_read',\r\n id: id,\r\n kwargs: {\r\n specification: {\r\n report_name: {},\r\n },\r\n },\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n //Save Print Invoice\r\n async print({ id, report, db }: { id: number; report: any; db: any }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n report: report,\r\n id: id,\r\n type: 'pdf',\r\n file_response: true,\r\n db: db,\r\n }\r\n\r\n const queryString = toQueryString(jsonData)\r\n\r\n const urlWithParams = `${UriConstants.REPORT_PATH}?${queryString}`\r\n\r\n return env.requests.get(urlWithParams, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n responseType: 'arraybuffer',\r\n })\r\n },\r\n\r\n //Run Action\r\n async runAction({\r\n idAction,\r\n context,\r\n }: {\r\n idAction: number\r\n context: ContextApi\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n action_id: idAction,\r\n with_context: {\r\n ...context,\r\n },\r\n // context: {\r\n // lang: 'en_US',\r\n // tz: 'Asia/Saigon',\r\n // uid: 2,\r\n // allowed_company_ids: [1],\r\n // active_id: Array.isArray(idDetail) ? idDetail[0] : idDetail,\r\n // active_ids: Array.isArray(idDetail) ? [...idDetail] : idDetail,\r\n // active_model: model,\r\n // },\r\n }\r\n return env.requests.post(`${UriConstants.RUN_ACTION_PATH}`, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default ActionService\r\n","import {\r\n LoginCredentialBody,\r\n ResetPasswordRequest,\r\n UpdatePasswordRequest,\r\n} from '../../types/auth-type'\r\nimport { UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\n\r\nconst AuthService = {\r\n async login(body: LoginCredentialBody) {\r\n const env = getEnv()\r\n const payload = Object.fromEntries(\r\n Object.entries({\r\n username: body.email,\r\n password: body.password,\r\n grant_type: env?.config?.grantType || '',\r\n client_id: env?.config?.clientId || '',\r\n client_secret: env?.config?.clientSecret || '',\r\n }).filter(([_, value]) => !!value)\r\n )\r\n const encodedData = new URLSearchParams(payload).toString()\r\n\r\n return env?.requests?.post(body.path, encodedData, {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n })\r\n },\r\n async forgotPassword(email: string) {\r\n const env = getEnv()\r\n const bodyData = {\r\n login: email,\r\n url: `${window.location.origin}/reset-password`,\r\n }\r\n return env?.requests?.post(UriConstants.RESET_PASSWORD_PATH, bodyData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async forgotPasswordSSO({\r\n email,\r\n with_context,\r\n method,\r\n }: {\r\n email: string\r\n with_context: any\r\n method: string\r\n }) {\r\n const env = getEnv()\r\n const body = {\r\n method: method,\r\n kwargs: {\r\n vals: {\r\n email: email,\r\n },\r\n },\r\n with_context: with_context,\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, body, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async resetPassword(data: ResetPasswordRequest, token: string | null) {\r\n const env = getEnv()\r\n const bodyData = {\r\n token: token,\r\n password: data.password,\r\n new_password: data.confirmPassword,\r\n }\r\n return env?.requests?.post(UriConstants.CHANGE_PASSWORD_PATH, bodyData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async resetPasswordSSO({\r\n method,\r\n password,\r\n with_context,\r\n }: {\r\n method: any\r\n password: string\r\n with_context: any\r\n }) {\r\n const env = getEnv()\r\n const bodyData = {\r\n method: method,\r\n kwargs: {\r\n vals: {\r\n password: password,\r\n },\r\n },\r\n with_context: with_context,\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, bodyData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async updatePassword(data: UpdatePasswordRequest, token: string | null) {\r\n const env = getEnv()\r\n const bodyData = {\r\n token: token,\r\n old_password: data.oldPassword,\r\n new_password: data.newPassword,\r\n }\r\n return env?.requests?.post(UriConstants.UPDATE_PASSWORD_PATH, bodyData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async isValidToken(token: string | null) {\r\n const env = getEnv()\r\n const bodyData = {\r\n token: token,\r\n }\r\n return env?.requests?.post(UriConstants.TOKEN, bodyData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async isValidActionToken(actionToken: string | null, path: string) {\r\n const env = getEnv()\r\n return env?.requests?.post(\r\n path,\r\n {},\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n useActionToken: true,\r\n actionToken,\r\n }\r\n )\r\n },\r\n async loginSocial({\r\n db,\r\n state,\r\n access_token,\r\n }: {\r\n db: string\r\n state: object\r\n access_token: string\r\n }) {\r\n const env = getEnv()\r\n return env?.requests?.post(\r\n UriConstants.GENTOKEN_SOCIAL,\r\n { state, access_token },\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n }\r\n )\r\n },\r\n async getProviders(db?: string) {\r\n const env = getEnv()\r\n return env?.requests?.get('/oauth/providers', { params: { db } })\r\n },\r\n async getAccessByCode(code: string) {\r\n const env = getEnv()\r\n const data = new URLSearchParams()\r\n data.append('code', code)\r\n data.append('grant_type', 'authorization_code')\r\n data.append('client_id', env?.config?.clientId || '')\r\n data.append('redirect_uri', env?.config?.redirectUri || '')\r\n\r\n return env?.requests?.post(\r\n `${env?.baseUrl?.replace('/mms/', '/id/')}/${UriConstants.TOKEN_BY_CODE}`,\r\n data,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n }\r\n )\r\n },\r\n async logout(data: string) {\r\n const env = getEnv()\r\n console.log(data)\r\n return env?.requests?.post(\r\n UriConstants.LOGOUT,\r\n {},\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n withCredentials: true,\r\n useRefreshToken: true,\r\n }\r\n )\r\n },\r\n}\r\n\r\nexport default AuthService\r\n","import { ModelConstants } from '../../constants'\r\nimport { MethodConstants, UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\n\r\nconst CompanyService = {\r\n async getCurrentCompany() {\r\n const env = getEnv()\r\n return await env.requests.get(UriConstants.COMPANY_PATH, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async getInfoCompany(id: number) {\r\n const env = getEnv()\r\n const jsonData = {\r\n ids: [id],\r\n model: ModelConstants.COMPANY,\r\n method: MethodConstants.WEB_READ,\r\n kwargs: {\r\n specification: {\r\n primary_color: {},\r\n secondary_color: {},\r\n logo: {},\r\n display_name: {},\r\n secondary_logo: {},\r\n },\r\n },\r\n }\r\n return await env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default CompanyService\r\n","import { ModelConstants, UriConstants } from '../../constants'\r\nimport { getEnv } from '../../environment'\r\n\r\nconst ExcelService = {\r\n async uploadFile({ formData }: { formData: any }) {\r\n const env = getEnv()\r\n\r\n return env.requests.post(`${UriConstants.UPLOAD_FILE_PATH}`, formData, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n },\r\n\r\n async uploadIdFile({ formData }: { formData: any }) {\r\n const env = getEnv()\r\n return env.requests.post(`${UriConstants.UPLOAD_FILE_PATH}`, formData, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n },\r\n\r\n async parsePreview({\r\n id,\r\n selectedSheet,\r\n isHeader,\r\n context,\r\n }: {\r\n id: any\r\n selectedSheet: any\r\n isHeader: boolean\r\n context: any\r\n }) {\r\n const env = getEnv()\r\n\r\n // const { context } = useAppSelector(selectEnv)\r\n // const formatLanguage = context.lang === 'vi' ? 'vi_VN' : 'en_US'\r\n const jsonData = {\r\n model: ModelConstants.BASE_IMPORT,\r\n method: 'parse_preview',\r\n ids: [id],\r\n kwargs: {\r\n options: {\r\n import_skip_records: [],\r\n import_set_empty_fields: [],\r\n fallback_values: {},\r\n name_create_enabled_fields: {},\r\n encoding: '',\r\n separator: '',\r\n quoting: '\"',\r\n date_format: '',\r\n datetime_format: '',\r\n float_thousand_separator: ',',\r\n float_decimal_separator: '.',\r\n advanced: true,\r\n has_headers: isHeader,\r\n keep_matches: false,\r\n limit: 2000,\r\n sheets: [],\r\n sheet: selectedSheet,\r\n skip: 0,\r\n tracking_disable: true,\r\n },\r\n },\r\n with_context: context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n },\r\n\r\n async executeImport({\r\n columns,\r\n fields,\r\n idFile,\r\n options,\r\n dryrun,\r\n context,\r\n }: {\r\n columns: any\r\n fields: any\r\n idFile: any\r\n options: any\r\n dryrun: any\r\n context: any\r\n }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: ModelConstants.BASE_IMPORT,\r\n method: 'execute_import',\r\n ids: [idFile],\r\n kwargs: {\r\n fields: fields,\r\n columns: columns,\r\n options: options,\r\n dryrun: dryrun,\r\n },\r\n with_context: context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n },\r\n\r\n async getFileExcel({ model }: { model: string }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: model,\r\n method: ModelConstants.GET_IMPORT,\r\n args: [],\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData)\r\n },\r\n\r\n async getFieldExport({\r\n ids,\r\n model,\r\n isShow,\r\n parentField,\r\n fieldType,\r\n parentName,\r\n prefix,\r\n name,\r\n context,\r\n importCompat,\r\n }: {\r\n ids: any\r\n model: string\r\n isShow?: boolean\r\n parentField?: any\r\n fieldType?: any\r\n parentName?: any\r\n prefix?: any\r\n name?: any\r\n context: any\r\n importCompat?: any\r\n }) {\r\n const env = getEnv()\r\n\r\n const jsonData: any = {\r\n model: model,\r\n import_compat: importCompat,\r\n domain: [['id', 'in', ids]],\r\n with_context: context,\r\n }\r\n if (isShow) {\r\n jsonData.parent_field = parentField\r\n jsonData.parent_field_type = fieldType\r\n jsonData.parent_name = parentName\r\n jsonData.name = name\r\n jsonData.prefix = prefix\r\n jsonData.exclude = [null]\r\n }\r\n return env.requests.post('/export/get_fields', jsonData)\r\n },\r\n\r\n async exportExcel({\r\n model,\r\n domain,\r\n ids,\r\n fields,\r\n type,\r\n importCompat,\r\n context,\r\n groupby,\r\n }: {\r\n model: string\r\n domain: any\r\n ids: any\r\n fields: any\r\n type: any\r\n importCompat: any\r\n context: any\r\n groupby: any\r\n }) {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: model,\r\n domain: domain,\r\n ids: ids,\r\n import_compat: importCompat,\r\n fields: fields,\r\n with_context: context,\r\n groupby: groupby ?? [],\r\n }\r\n return env.requests.post_excel(`/export/${type}`, jsonData)\r\n },\r\n}\r\nexport default ExcelService\r\n","import { UriConstants } from '../../constants'\r\nimport { getEnv } from '../../environment'\r\ntype TFormView = { model: string; id?: number | null; context?: any }\r\n\r\nconst FormService = {\r\n async getComment({ data }: { data: any }) {\r\n try {\r\n const env = getEnv()\r\n const jsonData = {\r\n thread_id: data.thread_id,\r\n thread_model: data.thread_model,\r\n limit: 100,\r\n with_context: {\r\n lang: data.lang,\r\n },\r\n }\r\n return env.requests.post(UriConstants.GET_MESSAGE, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when sending message:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async sentComment({ data }: any) {\r\n try {\r\n const env = getEnv()\r\n const jsonData = {\r\n context: {\r\n tz: 'Asia/Saigon',\r\n uid: 2,\r\n allowed_company_ids: [1],\r\n mail_post_autofollow: false,\r\n temporary_id: 142183.01,\r\n },\r\n post_data: {\r\n body: data.message,\r\n message_type: 'comment',\r\n attachment_ids: data.attachment_ids,\r\n attachment_tokens: [],\r\n subtype_xmlid: data.subtype,\r\n },\r\n thread_id: Number(data.thread_id),\r\n thread_model: data.thread_model,\r\n }\r\n return env.requests.post(UriConstants.SENT_MESSAGE, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when sent message:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async deleteComment({ data }: { data: any }) {\r\n try {\r\n const env = getEnv()\r\n const jsonData = {\r\n attachment_ids: [],\r\n attachment_tokens: [],\r\n body: '',\r\n message_id: data.message_id,\r\n }\r\n return env.requests.post(UriConstants.DELETE_MESSAGE, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when sent message:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async getImage({ data }: { data: any }) {\r\n try {\r\n const env = getEnv()\r\n\r\n return env.requests.get(\r\n `${UriConstants.IMAGE_PATH}?filename=${data.filename}&unique=${data.checksum}&width=1920&height=300`,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n }\r\n )\r\n } catch (error) {\r\n console.error('Error when sent message:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async uploadImage({ data }: { data: any }) {\r\n try {\r\n const env = getEnv()\r\n\r\n return env.requests.post(UriConstants.UPLOAD_IMAGE, data, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when sent message:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async getFormView({ data }: { data: TFormView }) {\r\n try {\r\n const env = getEnv()\r\n\r\n const jsonData = {\r\n model: data.model,\r\n method: 'get_formview_action',\r\n ids: data.id ? [data.id] : [],\r\n with_context: data.context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n } catch (error) {\r\n console.error('Error when fetching form view:', error)\r\n throw error\r\n }\r\n },\r\n\r\n async changeStatus({ data }: any) {\r\n const env = getEnv()\r\n const vals = {\r\n [data.name]: data.stage_id,\r\n }\r\n const jsonData = {\r\n model: data.model,\r\n method: 'web_save',\r\n with_context: {\r\n lang: data.lang,\r\n allowed_company_ids: [1],\r\n uid: 2,\r\n search_default_my_ticket: true,\r\n search_default_is_open: true,\r\n },\r\n ids: [data.id],\r\n kwargs: {\r\n vals: vals,\r\n specification: {},\r\n },\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default FormService\r\n","import { UriConstants } from '../../constants'\r\nimport { getEnv } from '../../environment'\r\n\r\nconst KanbanServices = {\r\n async getGroups({\r\n model,\r\n width_context,\r\n }: {\r\n model: string\r\n width_context: any\r\n }) {\r\n const env = getEnv()\r\n\r\n const jsonDataView = {\r\n model: model,\r\n method: 'web_read_group',\r\n kwargs: {\r\n domain: [['stage_id.fold', '=', false]],\r\n fields: ['color:sum'],\r\n groupby: ['stage_id'],\r\n },\r\n width_context: width_context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonDataView, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getProgressBar({\r\n field,\r\n color,\r\n model,\r\n width_context,\r\n }: {\r\n field: any\r\n color: any\r\n model: string\r\n width_context: string\r\n }) {\r\n const env = getEnv()\r\n const jsonDataView = {\r\n model: model,\r\n method: 'read_progress_bar',\r\n kwargs: {\r\n domain: [],\r\n group_by: 'stage_id',\r\n progress_bar: {\r\n colors: color,\r\n field: field,\r\n },\r\n },\r\n width_context: width_context,\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonDataView, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default KanbanServices\r\n","import { FieldTypeConstants } from '../../constants'\r\nimport { MethodConstants, UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\nimport {\r\n DeleteParams,\r\n GetDetailParams,\r\n GetListParams,\r\n OnChangeParams,\r\n SaveParams,\r\n ViewData,\r\n} from '../../types/api-type'\r\n\r\nexport const OBJECT_POSITION = 2\r\n\r\nconst ModelService = {\r\n async getListMyBankAccount({\r\n domain,\r\n spectification,\r\n model,\r\n }: {\r\n domain: any\r\n spectification: any\r\n model: string\r\n }): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: 'web_search_read',\r\n kwargs: {\r\n specification: spectification,\r\n domain: domain,\r\n limit: 100,\r\n offset: 0,\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getCurrency(): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: 'res.currency',\r\n method: 'web_search_read',\r\n kwargs: {\r\n specification: {\r\n icon_url: {},\r\n name: {},\r\n },\r\n domain: [['active', '=', true]],\r\n limit: 100,\r\n offset: 0,\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async getConversionRate(): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: 'res.currency',\r\n method: 'web_search_read',\r\n kwargs: {\r\n specification: {\r\n name: {},\r\n icon_url: {},\r\n rate_ids: {\r\n fields: {\r\n company_rate: {},\r\n sell: {},\r\n },\r\n },\r\n },\r\n domain: [['active', '=', true]],\r\n limit: 100,\r\n offset: 0,\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getAll({ data }: { data: any }): Promise<any> {\r\n const env = getEnv()\r\n const jsonReadGroup =\r\n data.type == 'calendar'\r\n ? { fields: data?.fields }\r\n : data.fields &&\r\n data.fields.length > 0 &&\r\n data.groupby &&\r\n data.groupby.length > 0 &&\r\n data.groupby[0]\r\n ? {\r\n fields: data.fields,\r\n groupby: data.groupby,\r\n }\r\n : {\r\n count_limit: 10001,\r\n order: data.sort,\r\n specification: data.specification,\r\n }\r\n\r\n const jsonData = {\r\n model: String(data.model),\r\n method:\r\n data.type == 'calendar'\r\n ? 'search_read'\r\n : jsonReadGroup.fields && jsonReadGroup.groupby\r\n ? 'web_read_group'\r\n : 'web_search_read',\r\n ids: data.ids,\r\n with_context: data.context,\r\n kwargs: {\r\n domain: data.domain,\r\n limit: data.limit,\r\n offset: data.offset,\r\n ...jsonReadGroup,\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getListCalendar({ data }: { data: any }): Promise<any> {\r\n const env = getEnv()\r\n const jsonReadGroup =\r\n data.type == 'calendar'\r\n ? data?.fields\r\n : data.fields &&\r\n data.fields.length > 0 &&\r\n data.groupby &&\r\n data.groupby.length > 0 &&\r\n data.groupby[0]\r\n ? {\r\n fields: data.fields,\r\n groupby: data.groupby,\r\n }\r\n : {\r\n count_limit: 10001,\r\n order: data.sort,\r\n specification: data.specification,\r\n }\r\n\r\n const jsonData = {\r\n model: String(data.model),\r\n method:\r\n data.type == 'calendar'\r\n ? 'search_read'\r\n : jsonReadGroup.fields && jsonReadGroup.groupby\r\n ? 'web_read_group'\r\n : 'web_search_read',\r\n ids: data.ids,\r\n with_context: data.context,\r\n kwargs: {\r\n domain: data.domain,\r\n limit: data.limit,\r\n offset: data.offset,\r\n fields: data.fields,\r\n ...jsonReadGroup,\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async getList({\r\n model,\r\n ids = [],\r\n specification = {},\r\n domain = [],\r\n offset,\r\n order,\r\n context = {},\r\n limit = 10,\r\n }: GetListParams): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.WEB_SEARCH_READ,\r\n ids: ids,\r\n with_context: context,\r\n kwargs: {\r\n specification: specification,\r\n domain: domain,\r\n limit: limit,\r\n offset: offset,\r\n order: order,\r\n },\r\n }\r\n\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async getDetail({\r\n ids = [],\r\n model,\r\n specification,\r\n context,\r\n }: GetDetailParams): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.WEB_READ,\r\n ids: ids,\r\n with_context: context,\r\n kwargs: {\r\n specification: specification,\r\n },\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async save({\r\n model,\r\n ids = [],\r\n data = {},\r\n specification = {},\r\n context = {},\r\n path,\r\n }: SaveParams): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.WEB_SAVE,\r\n with_context: context,\r\n ids: ids,\r\n kwargs: {\r\n vals: data,\r\n specification: specification,\r\n },\r\n }\r\n return env?.requests?.post(path ?? UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async delete({ ids = [], model }: DeleteParams): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.UNLINK,\r\n ids: ids,\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async onChange({\r\n ids = [],\r\n model,\r\n object,\r\n specification,\r\n context,\r\n fieldChange,\r\n }: OnChangeParams): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.ONCHANGE,\r\n ids: ids,\r\n with_context: context,\r\n args: [\r\n object ? object : {},\r\n fieldChange ? fieldChange : [],\r\n specification,\r\n ],\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async getListFieldsOnchange({ model }: { model: string }): Promise<any> {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n method: MethodConstants.GET_ONCHANGE_FIELDS,\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n parseORMOdoo(data: Record<string, any>): Record<string, any> {\r\n for (const key in data) {\r\n if (key === 'display_name') {\r\n delete data[key]\r\n }\r\n if (!data[key] && data[key] !== 0) {\r\n data[key] = false\r\n } else if (data[key] === 'Draft') {\r\n data[key] = '/'\r\n }\r\n }\r\n return { ...data }\r\n },\r\n\r\n toDataJS(\r\n data: Record<string, any>,\r\n viewData?: ViewData,\r\n model?: string\r\n ): Record<string, any> {\r\n for (const key in data) {\r\n if (data[key] === false) {\r\n if (viewData && model) {\r\n if (\r\n viewData?.models?.[model]?.[key]?.type !==\r\n FieldTypeConstants.BOOLEAN\r\n ) {\r\n data[key] = null\r\n }\r\n } else {\r\n data[key] = null\r\n }\r\n } else if (data[key] === '/') {\r\n data[key] = 'Draft'\r\n } else if (data[key] !== false) {\r\n if (model !== undefined) {\r\n if (\r\n viewData?.models?.[model]?.[key]?.type ===\r\n FieldTypeConstants.ONE2MANY ||\r\n viewData?.models?.[model]?.[key]?.type ===\r\n FieldTypeConstants.MANY2MANY\r\n ) {\r\n data[key] = (data[key] ??= [])?.map((item: any) => {\r\n const relation = viewData?.models?.[model]?.[key]?.relation\r\n if (relation !== undefined) {\r\n if (viewData?.models?.[relation]) {\r\n if (item?.length >= 3) {\r\n return ModelService.toDataJS(\r\n item[OBJECT_POSITION],\r\n viewData,\r\n relation\r\n )\r\n } else {\r\n return ModelService.toDataJS(item, viewData, relation)\r\n }\r\n } else {\r\n if (item?.length >= 3) {\r\n return item[OBJECT_POSITION]\r\n } else {\r\n return item\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n }\r\n }\r\n return { ...data }\r\n },\r\n}\r\n\r\nexport default ModelService\r\n","import { UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\n\r\nconst UserService = {\r\n async getProfile(path?: string) {\r\n const env = getEnv()\r\n return env?.requests?.get(path ?? UriConstants.PROFILE_PATH, {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n })\r\n },\r\n async getUser({ context, id }: { context: any; id: any }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: 'res.users',\r\n method: 'web_read',\r\n ids: [id],\r\n with_context: context,\r\n kwargs: {\r\n specification: {\r\n display_name: {},\r\n image_1920: {},\r\n name: {},\r\n login: {},\r\n email: {},\r\n password: {},\r\n visible_group_id: {\r\n fields: {\r\n id: {},\r\n display_name: {},\r\n },\r\n },\r\n company_id: {\r\n fields: {\r\n id: {},\r\n display_name: {},\r\n },\r\n },\r\n },\r\n },\r\n }\r\n return env.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n switchUserLocale: async ({ id, values }: any) => {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: 'res.users',\r\n domain: [['id', '=', id]],\r\n values: values,\r\n }\r\n return env?.requests.post(UriConstants?.CREATE_UPDATE_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default UserService\r\n","import { GetSelectionType } from '../../types/api-type'\r\nimport { ModelConstants } from '../../constants'\r\nimport { MethodConstants, UriConstants } from '../../constants/api'\r\nimport { getEnv } from '../../environment'\r\nimport { GetViewParams } from '../../types/view-type'\r\n\r\nconst ViewService = {\r\n async getView({\r\n model,\r\n views,\r\n context = {},\r\n options = {},\r\n aid,\r\n }: GetViewParams) {\r\n const env = getEnv()\r\n const defaultOptions = {\r\n load_filters: true,\r\n toolbar: true,\r\n action_id: aid,\r\n }\r\n\r\n const jsonDataView = {\r\n model: model,\r\n method: MethodConstants.GET_FIELD_VIEW,\r\n kwargs: {\r\n views: views,\r\n options: { ...options, ...defaultOptions },\r\n },\r\n with_context: context,\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonDataView, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getMenu(context: any) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: ModelConstants.MENU,\r\n method: MethodConstants.WEB_SEARCH_READ,\r\n ids: [],\r\n with_context: context,\r\n kwargs: {\r\n specification: {\r\n active: {},\r\n name: {},\r\n is_display: {},\r\n sequence: {},\r\n complete_name: {},\r\n action: {\r\n fields: {\r\n display_name: {},\r\n type: {},\r\n binding_view_types: {},\r\n // res_model: {},\r\n },\r\n },\r\n url_icon: {},\r\n web_icon: {},\r\n web_icon_data: {},\r\n groups_id: {\r\n fields: {\r\n full_name: {},\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n display_name: {},\r\n child_id: {\r\n fields: {\r\n active: {},\r\n name: {},\r\n is_display: {},\r\n sequence: {},\r\n complete_name: {},\r\n action: {\r\n fields: {\r\n display_name: {},\r\n type: {},\r\n binding_view_types: {},\r\n // res_model: {},\r\n },\r\n },\r\n url_icon: {},\r\n web_icon: {},\r\n web_icon_data: {},\r\n groups_id: {\r\n fields: {\r\n full_name: {},\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n display_name: {},\r\n child_id: {\r\n fields: {\r\n active: {},\r\n name: {},\r\n is_display: {},\r\n sequence: {},\r\n complete_name: {},\r\n action: {\r\n fields: {\r\n display_name: {},\r\n type: {},\r\n binding_view_types: {},\r\n // res_model: {},\r\n },\r\n },\r\n url_icon: {},\r\n web_icon: {},\r\n web_icon_data: {},\r\n groups_id: {\r\n fields: {\r\n full_name: {},\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n display_name: {},\r\n child_id: {\r\n fields: {\r\n active: {},\r\n name: {},\r\n is_display: {},\r\n sequence: {},\r\n complete_name: {},\r\n action: {\r\n fields: {\r\n display_name: {},\r\n type: {},\r\n binding_view_types: {},\r\n // res_model: {},\r\n },\r\n },\r\n url_icon: {},\r\n web_icon: {},\r\n web_icon_data: {},\r\n groups_id: {\r\n fields: {\r\n full_name: {},\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n display_name: {},\r\n child_id: {\r\n fields: {},\r\n limit: 40,\r\n order: '',\r\n },\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n },\r\n limit: 40,\r\n order: '',\r\n },\r\n },\r\n domain: [\r\n '&',\r\n ['is_display', '=', true],\r\n '&',\r\n ['active', '=', true],\r\n ['parent_id', '=', false],\r\n ],\r\n },\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getActionDetail(aid: number, context: any) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: ModelConstants.WINDOW_ACTION,\r\n method: MethodConstants.WEB_READ,\r\n ids: [aid],\r\n with_context: context,\r\n kwargs: {\r\n specification: {\r\n id: {},\r\n name: {},\r\n res_model: {},\r\n views: {},\r\n view_mode: {},\r\n mobile_view_mode: {},\r\n domain: {},\r\n context: {},\r\n groups_id: {},\r\n search_view_id: {},\r\n },\r\n },\r\n }\r\n return env?.requests?.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getResequence({\r\n model,\r\n ids,\r\n context,\r\n offset,\r\n }: {\r\n model: string\r\n ids: any\r\n context: any\r\n offset: any\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: model,\r\n with_context: context,\r\n ids: ids,\r\n field: 'sequence',\r\n ...(offset > 0 ? { offset: offset } : {}),\r\n }\r\n return env?.requests.post('/web/dataset/resequence', jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async getSelectionItem({ data }: { data: GetSelectionType }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n model: data.model,\r\n ids: [],\r\n method: 'get_data_select',\r\n with_context: data.context,\r\n kwargs: {\r\n count_limit: 10001,\r\n domain: data.domain ? data.domain : [],\r\n offset: 0,\r\n order: '',\r\n specification: data?.specification ?? {\r\n id: {},\r\n name: {},\r\n display_name: {},\r\n },\r\n },\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async loadMessages() {\r\n const env = getEnv()\r\n return env.requests.post(\r\n UriConstants.LOAD_MESSAGE,\r\n {},\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n }\r\n )\r\n },\r\n async getVersion() {\r\n const env = getEnv()\r\n console.log('env', env)\r\n\r\n return env?.requests.get('', {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async get2FAMethods({\r\n method,\r\n with_context,\r\n }: {\r\n method: string\r\n with_context: any\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n with_context: with_context,\r\n }\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n async verify2FA({\r\n method,\r\n with_context,\r\n code,\r\n device,\r\n location,\r\n }: {\r\n method: string\r\n with_context: any\r\n code: string\r\n device: string\r\n location: string\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n kwargs: {\r\n vals: {\r\n code: code,\r\n device: device,\r\n location: location,\r\n },\r\n },\r\n with_context: with_context,\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n withCredentials: true,\r\n })\r\n },\r\n\r\n async signInSSO({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n response_type,\r\n path,\r\n }: {\r\n redirect_uri: string\r\n state: string\r\n client_id: string\r\n response_type: string\r\n path: string\r\n }) {\r\n const env = getEnv()\r\n\r\n const params = new URLSearchParams({\r\n response_type,\r\n client_id,\r\n redirect_uri,\r\n state,\r\n })\r\n\r\n const url = `${path}?${params.toString()}`\r\n\r\n return env?.requests.get(url, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n withCredentials: true,\r\n })\r\n },\r\n async grantAccess({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n scopes,\r\n }: {\r\n redirect_uri: string\r\n state: string\r\n client_id: string\r\n scopes: string[]\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n redirect_uri,\r\n state,\r\n client_id,\r\n scopes,\r\n }\r\n\r\n return env?.requests.post(UriConstants.GRANT_ACCESS, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n withCredentials: true,\r\n })\r\n },\r\n\r\n async getFieldsViewSecurity({\r\n method,\r\n token,\r\n views,\r\n }: {\r\n method: string\r\n token: string\r\n views: any\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n kwargs: {\r\n views: views,\r\n },\r\n with_context: {\r\n token,\r\n },\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async settingsWebRead2fa({\r\n method,\r\n model,\r\n kwargs,\r\n token,\r\n }: {\r\n method: string\r\n token: string\r\n kwargs: any\r\n model: string\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n model: model,\r\n kwargs: kwargs,\r\n with_context: {\r\n token,\r\n },\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async requestSetupTotp({ method, token }: { method: string; token: string }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n with_context: {\r\n token,\r\n },\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async verifyTotp({\r\n method,\r\n action_token,\r\n code,\r\n }: {\r\n method: string\r\n action_token: string\r\n code: string\r\n }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n kwargs: {\r\n vals: {\r\n code: code,\r\n },\r\n },\r\n with_context: {\r\n action_token,\r\n },\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n\r\n async removeTotpSetUp({ method, token }: { method: string; token: string }) {\r\n const env = getEnv()\r\n const jsonData = {\r\n method: method,\r\n with_context: {\r\n token,\r\n },\r\n }\r\n\r\n return env?.requests.post(UriConstants.CALL_PATH, jsonData, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default ViewService\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useForgotPasswordSSO = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n email,\r\n with_context,\r\n method,\r\n }: {\r\n email: string\r\n with_context: any\r\n method: string\r\n }) => {\r\n return AuthService.forgotPasswordSSO({ email, with_context, method })\r\n },\r\n })\r\n}\r\n\r\nexport default useForgotPasswordSSO\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\ntype ProviderPropsType = {\r\n db: string\r\n}\r\n\r\nconst useGetProvider = () => {\r\n return useMutation({\r\n mutationFn: (data: ProviderPropsType) => {\r\n return AuthService.getProviders(data?.db)\r\n },\r\n })\r\n}\r\n\r\nexport default useGetProvider\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useIsValidToken = () => {\r\n return useMutation({\r\n mutationFn: (token: string) => {\r\n return AuthService.isValidToken(token)\r\n },\r\n })\r\n}\r\n\r\nexport default useIsValidToken\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\nimport { LoginCredentialBody } from '../../types/auth-type'\r\n\r\nconst useLoginCredential = () => {\r\n return useMutation({\r\n mutationFn: (data: LoginCredentialBody) => {\r\n return AuthService.login(data)\r\n },\r\n })\r\n}\r\n\r\nexport default useLoginCredential\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\nimport { SocialTokenBody } from '../../types/auth-type'\r\n\r\nconst useLoginSocial = () => {\r\n return useMutation({\r\n mutationFn: (data: SocialTokenBody) => {\r\n return AuthService.loginSocial(data)\r\n },\r\n })\r\n}\r\n\r\nexport default useLoginSocial\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\nimport { ForgotPasswordBody } from '../../types/auth-type'\r\n\r\nconst useResetPassword = () => {\r\n return useMutation({\r\n mutationFn: (request: ForgotPasswordBody) => {\r\n return AuthService.resetPassword(request.data, request.token)\r\n },\r\n })\r\n}\r\n\r\nexport default useResetPassword\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useResetPasswordSSO = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n password,\r\n with_context,\r\n }: {\r\n method: any\r\n password: string\r\n with_context: any\r\n }) => {\r\n return AuthService.resetPasswordSSO({\r\n method,\r\n password,\r\n with_context,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useResetPasswordSSO\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\nimport { updatePasswordBody } from '../../types/auth-type'\r\n\r\nconst useUpdatePassword = () => {\r\n return useMutation({\r\n mutationFn: (request: updatePasswordBody) => {\r\n return AuthService.updatePassword(request.data, request.token)\r\n },\r\n })\r\n}\r\n\r\nexport default useUpdatePassword\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useLogout = () => {\r\n return useMutation({\r\n mutationFn: (data: string) => {\r\n return AuthService.logout(data)\r\n },\r\n })\r\n}\r\n\r\nexport default useLogout\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useGetAccessByCode = () => {\r\n return useMutation({\r\n mutationFn: ({ code }: { code: string }) => {\r\n return AuthService.getAccessByCode(code)\r\n },\r\n })\r\n}\r\n\r\nexport default useGetAccessByCode\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { AuthService } from '../../services'\r\n\r\nconst useValidateActionToken = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n actionToken,\r\n path,\r\n }: {\r\n actionToken: string\r\n path: string\r\n }) => {\r\n return AuthService.isValidActionToken(actionToken, path)\r\n },\r\n })\r\n}\r\n\r\nexport default useValidateActionToken\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { CompanyService } from '../../services'\r\n\r\nconst useGetCompanyInfo = () => {\r\n return useMutation({\r\n mutationFn: (id: number) => CompanyService.getInfoCompany(id),\r\n })\r\n}\r\n\r\nexport default useGetCompanyInfo\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { CompanyService } from '../../services'\r\n\r\nconst useGetCurrentCompany = () => {\r\n return useMutation({\r\n mutationFn: () => CompanyService.getCurrentCompany(),\r\n })\r\n}\r\n\r\nexport default useGetCurrentCompany\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelConstants } from '../../constants'\r\nimport { KeyConstants } from '../../constants/api'\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetListCompany = (companyIDs: number[] = []) => {\r\n const companySpec = {\r\n id: {},\r\n name: {},\r\n }\r\n\r\n const getListParams = {\r\n model: ModelConstants.COMPANY,\r\n ids: companyIDs,\r\n specification: companySpec,\r\n }\r\n\r\n return useQuery({\r\n queryKey: [KeyConstants.LIST_COMPANY, companyIDs],\r\n queryFn: () => ModelService.getList(getListParams),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetListCompany\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useExportExcel = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n model,\r\n domain,\r\n ids,\r\n fields,\r\n type,\r\n importCompat,\r\n context,\r\n groupby,\r\n }: {\r\n model: string\r\n domain: any\r\n ids: any\r\n fields: any\r\n type: any\r\n importCompat: any\r\n context: any\r\n groupby: any\r\n }) =>\r\n ExcelService.exportExcel({\r\n model,\r\n domain,\r\n ids,\r\n fields,\r\n type,\r\n importCompat,\r\n context: context,\r\n groupby: groupby,\r\n }),\r\n })\r\n}\r\n\r\nexport default useExportExcel\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useGetFieldExport = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n ids,\r\n model,\r\n isShow,\r\n parentField,\r\n fieldType,\r\n parentName,\r\n prefix,\r\n name,\r\n context,\r\n importCompat,\r\n }: {\r\n ids: any\r\n model: string\r\n isShow?: boolean\r\n parentField?: any\r\n fieldType?: any\r\n parentName?: any\r\n prefix?: any\r\n name?: any\r\n context: any\r\n importCompat?: any\r\n }) =>\r\n ExcelService.getFieldExport({\r\n ids,\r\n model,\r\n isShow,\r\n parentField,\r\n fieldType,\r\n parentName,\r\n prefix,\r\n name,\r\n context,\r\n importCompat,\r\n }),\r\n })\r\n}\r\n\r\nexport default useGetFieldExport\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useGetFileExcel = ({ model }: { model: string }) => {\r\n return useQuery({\r\n queryKey: [],\r\n queryFn: () =>\r\n ExcelService.getFileExcel({\r\n model: model,\r\n }).then((res: any) => {\r\n if (res) {\r\n return res\r\n }\r\n return []\r\n }),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetFileExcel\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useParsePreview = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n id,\r\n selectedSheet,\r\n isHeader,\r\n context,\r\n }: {\r\n id: any\r\n selectedSheet: any\r\n isHeader: boolean\r\n context: any\r\n }) =>\r\n ExcelService.parsePreview({\r\n id,\r\n selectedSheet,\r\n isHeader,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useParsePreview\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useUploadFile = () => {\r\n return useMutation({\r\n mutationFn: ({ formData }: { formData: any }) =>\r\n ExcelService.uploadFile({\r\n formData,\r\n }),\r\n })\r\n}\r\n\r\nexport default useUploadFile\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useUploadIdFile = () => {\r\n return useMutation({\r\n mutationFn: ({ formData }: { formData: any }) =>\r\n ExcelService.uploadIdFile({\r\n formData,\r\n }),\r\n })\r\n}\r\n\r\nexport default useUploadIdFile\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ExcelService } from '../../services'\r\n\r\nconst useExecuteImport = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n fields,\r\n columns,\r\n idFile,\r\n options,\r\n dryrun,\r\n context,\r\n }: {\r\n fields: any\r\n columns: any\r\n idFile: any\r\n options: any\r\n dryrun: any\r\n context: any\r\n }) =>\r\n ExcelService.executeImport({\r\n fields,\r\n columns,\r\n idFile,\r\n options,\r\n dryrun,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useExecuteImport\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nconst useChangeStatus = () => {\r\n return useMutation({\r\n mutationFn: ({ data }: { data: any }) => {\r\n return FormService.changeStatus({\r\n data,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useChangeStatus\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nconst useDeleteComment = () => {\r\n return useMutation({\r\n mutationFn: ({ data }: { data: any }) =>\r\n FormService.deleteComment({\r\n data,\r\n }),\r\n })\r\n}\r\n\r\nexport default useDeleteComment\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nconst useGetComment = ({ data, queryKey }: { data: any; queryKey: any }) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n FormService.getComment({ data }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: !!data.thread_id && !isNaN(data.thread_id),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetComment\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nexport type TFormView = { model: string; id?: number | null; context?: any }\r\n\r\nconst useGetFormView = ({\r\n data,\r\n queryKey,\r\n enabled,\r\n}: {\r\n data: TFormView\r\n queryKey?: any\r\n enabled?: any\r\n}) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n FormService.getFormView({ data }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetFormView\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\nimport { isBase64File } from '../../utils'\r\n\r\nconst useGetImage = ({\r\n data,\r\n queryKey,\r\n src,\r\n}: {\r\n data: any\r\n queryKey: any\r\n src: any\r\n}) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n FormService.getImage({ data }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: !src && !isBase64File(src),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetImage\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nconst useSendComment = () => {\r\n return useMutation({\r\n mutationFn: ({ data }: { data: any }) =>\r\n FormService.sentComment({\r\n data,\r\n }),\r\n })\r\n}\r\n\r\nexport default useSendComment\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { FormService } from '../../services'\r\n\r\nconst useUploadImage = () => {\r\n return useMutation({\r\n mutationFn: ({ data }: { data: any }) =>\r\n FormService.uploadImage({\r\n data,\r\n }),\r\n })\r\n}\r\n\r\nexport default useUploadImage\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useDelete = () => {\r\n return useMutation({\r\n mutationFn: ({ ids, model }: { ids: any; model: string }) =>\r\n ModelService.delete({ ids, model }),\r\n })\r\n}\r\n\r\nexport default useDelete\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetAll = ({ data, queryKey, viewResponse }: any) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n ModelService.getAll({ data: data }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled:\r\n !!data.specification && !!data.model && !!data.domain && !!viewResponse,\r\n refetchOnWindowFocus: false,\r\n // placeholderData: keepPreviousData,\r\n })\r\n}\r\n\r\nexport default useGetAll\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetConversionRate = () => {\r\n return useQuery({\r\n queryKey: ['currency-rate'],\r\n queryFn: () =>\r\n ModelService.getConversionRate().then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: true,\r\n })\r\n}\r\n\r\nexport default useGetConversionRate\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetCurrency = () => {\r\n return useQuery({\r\n queryKey: ['currency'],\r\n queryFn: () =>\r\n ModelService.getCurrency().then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: true,\r\n })\r\n}\r\n\r\nexport default useGetCurrency\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetDetail = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n model,\r\n ids,\r\n specification,\r\n context,\r\n }: {\r\n model?: string\r\n ids: any\r\n specification?: any\r\n context?: any\r\n }) =>\r\n ModelService.getDetail({\r\n model,\r\n ids,\r\n specification,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useGetDetail\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetFieldOnChange = ({ model }: { model: string }) => {\r\n return useQuery({\r\n queryKey: [`field-onchange-${model}`, model],\r\n queryFn: () =>\r\n ModelService.getListFieldsOnchange({\r\n model,\r\n }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n refetchOnWindowFocus: false,\r\n staleTime: Infinity,\r\n })\r\n}\r\n\r\nexport default useGetFieldOnChange\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetListMyBankAccount = ({\r\n domain,\r\n spectification,\r\n model,\r\n}: {\r\n domain: any\r\n spectification: any\r\n model: string\r\n}) => {\r\n return useQuery({\r\n queryKey: ['bank-account', model, domain],\r\n queryFn: () =>\r\n ModelService.getListMyBankAccount({\r\n domain,\r\n spectification,\r\n model,\r\n }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n }),\r\n enabled: true,\r\n })\r\n}\r\n\r\nexport default useGetListMyBankAccount\r\n","import { BaseModelInit } from '../../types/base-model-type'\r\nimport {\r\n ComponentType,\r\n FieldTypeConstants,\r\n WIDGETAVATAR,\r\n} from '../../constants'\r\n\r\nexport class BaseModel {\r\n name: string\r\n view: Record<string, any>\r\n actContext?: Record<string, any>\r\n fields?: any\r\n\r\n constructor(init: BaseModelInit) {\r\n this.name = init.name\r\n this.view = init.view\r\n this.actContext = init.actContext\r\n this.fields = init.fields\r\n }\r\n\r\n private getSpecificationByFields({\r\n fields = [],\r\n specification = {},\r\n modelsData,\r\n model,\r\n modelRoot,\r\n }: {\r\n fields: any[]\r\n specification: any\r\n modelsData: any\r\n model: string\r\n modelRoot?: string\r\n }) {\r\n if (Array.isArray(fields)) {\r\n let spec = { ...specification }\r\n fields.forEach((field) => {\r\n if (\r\n !field?.type_co ||\r\n (field?.name && field?.type_co === ComponentType.FIELD)\r\n ) {\r\n if (modelsData?.[model]?.[field?.name]) {\r\n if (\r\n modelsData?.[model]?.[field?.name]?.type ===\r\n FieldTypeConstants.ONE2MANY ||\r\n modelsData?.[model]?.[field?.name]?.type ===\r\n FieldTypeConstants.MANY2MANY\r\n ) {\r\n const relation = modelsData?.[model]?.[field?.name]?.relation\r\n const modelRelation = modelsData?.[relation]\r\n\r\n if (modelRelation) {\r\n spec[field?.name] = {\r\n fields: {},\r\n }\r\n\r\n if (modelRoot && modelRoot === relation) {\r\n spec[field?.name].fields = { id: {} }\r\n } else {\r\n spec[field?.name].fields = this.getSpecificationByFields({\r\n fields: Object.values(modelRelation),\r\n specification: {},\r\n modelsData: modelsData,\r\n model: relation,\r\n modelRoot: model,\r\n })\r\n }\r\n } else {\r\n spec[field?.name] = {\r\n fields: {\r\n id: {},\r\n display_name: {},\r\n },\r\n }\r\n }\r\n } else if (\r\n modelsData?.[model]?.[field?.name]?.type ===\r\n FieldTypeConstants.MANY2ONE\r\n ) {\r\n spec[field?.name] = {\r\n fields: {\r\n id: {},\r\n display_name: {},\r\n ...(WIDGETAVATAR[field?.widget as keyof typeof WIDGETAVATAR]\r\n ? { image_256: {} }\r\n : {}),\r\n ...(field?.name === 'currency_id' &&\r\n fields?.find((item: any) => item?.widget === 'monetary')\r\n ? { symbol: {} }\r\n : {}),\r\n ...(field?.widget === 'many2many_binary'\r\n ? { mimetype: {} }\r\n : {}),\r\n },\r\n }\r\n } else {\r\n spec[field?.name] = {}\r\n }\r\n }\r\n } else if (\r\n field?.type_co === ComponentType.GROUP ||\r\n field?.type_co === ComponentType.DIV ||\r\n field?.type_co === ComponentType.SPAN\r\n ) {\r\n const specGroup = this.getSpecificationByFields({\r\n fields: field?.fields,\r\n specification: spec,\r\n modelsData: modelsData,\r\n model: model,\r\n })\r\n spec = { ...spec, ...specGroup }\r\n } else if (\r\n field?.type_co === ComponentType.TREE ||\r\n field?.type_co === ComponentType.LIST\r\n ) {\r\n const relation = modelsData?.[model]?.[field?.name]?.relation\r\n const specTreee = this.getSpecificationByFields({\r\n fields: field?.fields,\r\n specification: {},\r\n modelsData: modelsData,\r\n model: relation,\r\n modelRoot: model,\r\n })\r\n spec = { ...spec, [field?.name]: { fields: specTreee } }\r\n }\r\n })\r\n\r\n return spec\r\n } else {\r\n console.warn('fields is not array')\r\n }\r\n }\r\n\r\n getTreeProps(): Record<string, any> {\r\n const props = this.view?.views?.list || {}\r\n return props\r\n }\r\n\r\n getTreeFields(): Record<string, any>[] {\r\n const fields = this.view?.views?.list?.fields || []\r\n return fields\r\n }\r\n\r\n getSpecification(): Record<string, any> {\r\n const specInit = {}\r\n const modelData = this.view?.models || {}\r\n const specification = this.getSpecificationByFields({\r\n fields: this.fields,\r\n specification: specInit,\r\n modelsData: modelData,\r\n model: this.name,\r\n modelRoot: '',\r\n })\r\n return specification\r\n }\r\n}\r\n\r\nexport default BaseModel\r\n","import { BaseModelInit } from '../../types/base-model-type'\r\nimport BaseModel from '../../models/base-model'\r\n\r\nconst useModel = () => {\r\n const initModel = (modelData: BaseModelInit) => {\r\n switch (modelData?.name) {\r\n default:\r\n return new BaseModel(modelData)\r\n }\r\n }\r\n\r\n return {\r\n initModel,\r\n }\r\n}\r\n\r\nexport default useModel\r\n","import { ModelService } from '../../services'\r\n\r\nconst useOdooDataTransform = () => {\r\n return {\r\n toDataJS: ModelService.toDataJS,\r\n parseORM: ModelService.parseORMOdoo,\r\n }\r\n}\r\n\r\nexport default useOdooDataTransform\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useOnChangeForm = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n ids,\r\n model,\r\n specification,\r\n context,\r\n object,\r\n fieldChange,\r\n }: {\r\n ids: any\r\n model: string\r\n specification: any\r\n context: any\r\n object: any\r\n fieldChange?: any\r\n }) =>\r\n ModelService.onChange({\r\n ids,\r\n model,\r\n specification,\r\n context,\r\n object,\r\n fieldChange,\r\n }),\r\n })\r\n}\r\n\r\nexport default useOnChangeForm\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useSave = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n ids,\r\n model,\r\n data,\r\n specification,\r\n context,\r\n path,\r\n }: {\r\n ids: any\r\n model: string\r\n data: any\r\n specification?: any\r\n context: any\r\n path?: string\r\n }) => ModelService.save({ ids, model, data, specification, context, path }),\r\n })\r\n}\r\n\r\nexport default useSave\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { UserService } from '../../services'\r\n\r\nconst useGetProfile = (path?: string) => {\r\n return useMutation({\r\n mutationFn: () => UserService.getProfile(path),\r\n })\r\n}\r\n\r\nexport default useGetProfile\r\n","import { useMutation } from '@tanstack/react-query'\r\nimport { UserService } from '../../services'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nconst useGetUser = () => {\r\n return useMutation({\r\n mutationFn: ({ id, context }: { id: any; context: ContextApi }) =>\r\n UserService.getUser({\r\n id,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useGetUser\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { UserService } from '../../services'\r\n\r\ntype SwitchUserLocaleParams = {\r\n data: {\r\n id: number\r\n values: any\r\n }\r\n}\r\n\r\nconst useSwitchLocale = () => {\r\n return useMutation({\r\n mutationFn: ({ data }: SwitchUserLocaleParams) => {\r\n return UserService.switchUserLocale({\r\n id: data.id,\r\n values: data.values,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useSwitchLocale\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ActionService } from '../../services'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nconst useButton = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n model,\r\n ids,\r\n context,\r\n method,\r\n }: {\r\n model: string\r\n ids: Record<string, any>[] | any\r\n context: ContextApi\r\n method: any\r\n }) =>\r\n ActionService.callButton({\r\n model,\r\n ids,\r\n context,\r\n method,\r\n }),\r\n onSuccess: (response) => {\r\n return response\r\n },\r\n })\r\n}\r\n\r\nexport default useButton\r\n","import { useMutation } from '@tanstack/react-query'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nimport { ActionService } from '../../services'\r\n\r\nconst useDuplicateRecord = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n id,\r\n model,\r\n context,\r\n }: {\r\n id: any\r\n model: string\r\n context: ContextApi\r\n }) =>\r\n ActionService.duplicateRecord({\r\n id,\r\n model,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useDuplicateRecord\r\n","import { useQuery } from '@tanstack/react-query'\r\nimport { FormService, ViewService } from '../../services'\r\n\r\nconst useGetActionDetail = ({\r\n aid,\r\n context,\r\n enabled,\r\n id,\r\n model,\r\n queryKey,\r\n}: {\r\n aid: number\r\n context: any\r\n enabled: boolean\r\n id?: number\r\n model?: string\r\n queryKey?: any\r\n}) => {\r\n const data = {\r\n id: id,\r\n model: model ?? '',\r\n context: context,\r\n }\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: async () => {\r\n if (aid) {\r\n const res = await ViewService.getActionDetail(aid, context)\r\n if (res && res.length > 0) {\r\n return res[0]\r\n }\r\n } else {\r\n const res = await FormService.getFormView({ data })\r\n return res\r\n }\r\n },\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n staleTime: Infinity,\r\n })\r\n}\r\n\r\nexport default useGetActionDetail\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetCalendar = (listDataProps: any, queryKey?: any, enabled?: any) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n ModelService.getListCalendar({ data: listDataProps }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n return []\r\n }),\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n staleTime: 0,\r\n })\r\n}\r\n\r\nexport default useGetCalendar\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { KanbanService } from '../../services'\r\nconst useGetGroups = ({\r\n model,\r\n width_context,\r\n}: {\r\n model: string\r\n width_context: any\r\n}) => {\r\n return useQuery({\r\n queryKey: [model, width_context],\r\n queryFn: () =>\r\n KanbanService.getGroups({\r\n model: model,\r\n width_context: width_context,\r\n }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n return []\r\n }),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetGroups\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ModelService } from '../../services'\r\n\r\nconst useGetListData = (listDataProps: any, queryKey?: any, enabled?: any) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () =>\r\n ModelService.getAll({ data: listDataProps }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n return []\r\n }),\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n staleTime: 0,\r\n })\r\n}\r\n\r\nexport default useGetListData\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { KeyConstants } from '../../constants/api'\r\nimport { ViewService } from '../../services'\r\n\r\nconst useGetMenu = (context: any, enabled?: boolean) => {\r\n return useQuery({\r\n queryKey: [KeyConstants.MENU, context],\r\n queryFn: () =>\r\n ViewService.getMenu(context).then((res) => {\r\n if (res && res?.records && res?.records?.length > 0) {\r\n return res?.records\r\n }\r\n return []\r\n }),\r\n refetchOnWindowFocus: false,\r\n staleTime: Infinity,\r\n enabled: enabled,\r\n })\r\n}\r\n\r\nexport default useGetMenu\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ActionService } from '../../services'\r\n\r\nconst useGetPrintReport = () => {\r\n return useMutation({\r\n mutationFn: ({ id }: { id: number }) =>\r\n ActionService.getPrintReportName({\r\n id,\r\n }),\r\n })\r\n}\r\n\r\nexport default useGetPrintReport\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { KanbanService } from '../../services'\r\n\r\nconst useGetProGressBar = ({\r\n field,\r\n color,\r\n model,\r\n width_context,\r\n}: {\r\n field: any\r\n color: any\r\n model: string\r\n width_context: string\r\n}) => {\r\n return useQuery({\r\n queryKey: [],\r\n queryFn: () =>\r\n KanbanService.getProgressBar({\r\n field: field,\r\n color: color,\r\n model: model,\r\n width_context: width_context,\r\n }).then((res) => {\r\n if (res) {\r\n return res\r\n }\r\n return []\r\n }),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetProGressBar\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\nimport { GetSelectionType } from '../../types/api-type'\r\n\r\nconst useGetSelection = ({\r\n data,\r\n queryKey,\r\n enabled,\r\n}: {\r\n data: GetSelectionType\r\n queryKey: any[]\r\n enabled?: boolean\r\n}) => {\r\n return useQuery({\r\n queryKey: queryKey,\r\n queryFn: () => ViewService.getSelectionItem({ data }),\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetSelection\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { KeyConstants } from '../../constants/api'\r\nimport { ViewService } from '../../services'\r\nimport { GetViewParams } from '../../types/view-type'\r\n\r\nconst useGetView = (viewParams: GetViewParams, actData?: any) => {\r\n return useQuery({\r\n queryKey: [KeyConstants.GET_VIEW_BY_ACTION, viewParams],\r\n queryFn: () => ViewService.getView(viewParams),\r\n enabled: !!actData,\r\n refetchOnWindowFocus: false,\r\n staleTime: Infinity,\r\n })\r\n}\r\n\r\nexport default useGetView\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ActionService } from '../../services'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nconst useLoadAction = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n idAction,\r\n context,\r\n }: {\r\n idAction: any\r\n context: ContextApi\r\n }) => {\r\n return ActionService.loadAction({\r\n idAction: idAction,\r\n context: context,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useLoadAction\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useLoadMessage = () => {\r\n return useQuery({\r\n queryKey: [`load-message-failure`],\r\n queryFn: () => ViewService.loadMessages(),\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useLoadMessage\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ActionService } from '../../services'\r\n\r\nconst usePrint = () => {\r\n return useMutation({\r\n mutationFn: ({ id, report, db }: { id: number; report: any; db: any }) =>\r\n ActionService.print({\r\n id,\r\n report,\r\n db,\r\n }),\r\n })\r\n}\r\n\r\nexport default usePrint\r\n","import { useMutation } from '@tanstack/react-query'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nimport { ActionService } from '../../services'\r\n\r\nconst useRemoveRow = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n model,\r\n ids,\r\n context,\r\n }: {\r\n model: string\r\n ids: Record<string, any>[] | any\r\n context: ContextApi\r\n }) =>\r\n ActionService.removeRows({\r\n model,\r\n ids,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useRemoveRow\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useGetResequence = (\r\n model: string,\r\n resIds: any,\r\n context: any,\r\n offset: any\r\n) => {\r\n return useQuery({\r\n queryKey: [],\r\n queryFn: () =>\r\n ViewService.getResequence({\r\n model: model,\r\n ids: resIds,\r\n context: context,\r\n offset: offset,\r\n }),\r\n enabled: false,\r\n refetchOnWindowFocus: false,\r\n })\r\n}\r\n\r\nexport default useGetResequence\r\n","import { useMutation } from '@tanstack/react-query'\r\nimport { ContextApi } from '../../types/api-type'\r\n\r\nimport { ActionService } from '../../services'\r\n\r\nconst useRunAction = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n idAction,\r\n context,\r\n }: {\r\n idAction: any\r\n context: ContextApi\r\n }) =>\r\n ActionService.runAction({\r\n idAction,\r\n context,\r\n }),\r\n })\r\n}\r\n\r\nexport default useRunAction\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useSignInSSO = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n response_type,\r\n path,\r\n }: {\r\n redirect_uri: string\r\n state: string\r\n client_id: string\r\n response_type: string\r\n path: string\r\n }) => {\r\n return ViewService.signInSSO({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n response_type,\r\n path,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useSignInSSO\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useVerify2FA = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n with_context,\r\n code,\r\n device,\r\n location,\r\n }: {\r\n method: string\r\n with_context: any\r\n code: string\r\n device: string\r\n location: string\r\n }) => {\r\n return ViewService.verify2FA({\r\n method: method,\r\n with_context: with_context,\r\n code: code,\r\n device: device,\r\n location: location,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useVerify2FA\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useGet2FAMethods = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n with_context,\r\n }: {\r\n method: string\r\n with_context: any\r\n }) => {\r\n return ViewService.get2FAMethods({\r\n method: method,\r\n with_context: with_context,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useGet2FAMethods\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useGetFieldsViewSecurity = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n token,\r\n views,\r\n }: {\r\n method: string\r\n token: string\r\n views: any\r\n }) => {\r\n return ViewService.getFieldsViewSecurity({\r\n method,\r\n token,\r\n views,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useGetFieldsViewSecurity\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useGrantAccess = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n scopes,\r\n }: {\r\n redirect_uri: string\r\n state: string\r\n client_id: string\r\n scopes: string[]\r\n }) => {\r\n return ViewService.grantAccess({\r\n redirect_uri,\r\n state,\r\n client_id,\r\n scopes,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useGrantAccess\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useRemoveTotpSetup = () => {\r\n return useMutation({\r\n mutationFn: ({ method, token }: { method: string; token: string }) => {\r\n return ViewService.removeTotpSetUp({\r\n method,\r\n token,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useRemoveTotpSetup\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useRequestSetupTotp = () => {\r\n return useMutation({\r\n mutationFn: ({ method, token }: { method: string; token: string }) => {\r\n return ViewService.requestSetupTotp({\r\n method,\r\n token,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useRequestSetupTotp\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useSettingsWebRead2fa = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n token,\r\n kwargs,\r\n model,\r\n }: {\r\n method: string\r\n model: string\r\n kwargs: any\r\n token: string\r\n }) => {\r\n return ViewService.settingsWebRead2fa({\r\n method: method,\r\n model: model,\r\n kwargs: kwargs,\r\n token: token,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useSettingsWebRead2fa\r\n","import { useMutation } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../../services'\r\n\r\nconst useVerifyTotp = () => {\r\n return useMutation({\r\n mutationFn: ({\r\n method,\r\n action_token,\r\n code,\r\n }: {\r\n method: string\r\n action_token: string\r\n code: string\r\n }) => {\r\n return ViewService.verifyTotp({\r\n method,\r\n action_token,\r\n code,\r\n })\r\n },\r\n })\r\n}\r\n\r\nexport default useVerifyTotp\r\n","import { ReactNode } from 'react'\r\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\r\n\r\nexport const ReactQueryProvider = ({ children }: { children: ReactNode }) => {\r\n const queryClient = new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n // placeholderData: keepPreviousData,\r\n refetchOnWindowFocus: false,\r\n refetchOnMount: false,\r\n refetchOnReconnect: false,\r\n retry: false,\r\n },\r\n },\r\n })\r\n\r\n // const localStoragePersister = createSyncStoragePersister({\r\n // storage: window.localStorage,\r\n // })\r\n\r\n // persistQueryClient({\r\n // queryClient,\r\n // persister: localStoragePersister,\r\n // maxAge: Infinity,\r\n // })\r\n return (\r\n <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\r\n )\r\n}\r\n","import { ReactNode } from 'react'\r\nimport { Provider } from 'react-redux'\r\n\r\nimport { envStore } from '../store'\r\n\r\nexport const ReduxProvider = ({ children }: { children: ReactNode }) => {\r\n return <Provider store={envStore}>{children}</Provider>\r\n}\r\n","import { ReactNode } from 'react'\r\n\r\nimport { ReactQueryProvider } from './react-query-provider'\r\nimport { ReduxProvider } from './redux-provider'\r\n\r\nexport const MainProvider = ({ children }: { children: ReactNode }) => {\r\n return (\r\n <ReduxProvider>\r\n <ReactQueryProvider>{children}</ReactQueryProvider>\r\n </ReduxProvider>\r\n )\r\n}\r\n","import { ReactNode, useEffect, useState } from 'react'\r\nimport { useQueryClient } from '@tanstack/react-query'\r\n\r\nimport { ViewService } from '../services'\r\n\r\nexport const VersionGate = ({ children }: { children: ReactNode }) => {\r\n const queryClient = useQueryClient()\r\n const [ready, setReady] = useState(false)\r\n\r\n useEffect(() => {\r\n const clearVersion = () => {\r\n queryClient.clear()\r\n localStorage.removeItem('__api_version__')\r\n }\r\n\r\n const validateVersion = async () => {\r\n const serverVersion = await ViewService.getVersion()\r\n const cached = localStorage.getItem('__api_version__')\r\n if (cached !== serverVersion?.api_version) {\r\n clearVersion()\r\n localStorage.setItem('__api_version__', serverVersion?.api_version)\r\n } else {\r\n console.log('Api version:', serverVersion?.api_version)\r\n }\r\n setReady(true)\r\n }\r\n validateVersion()\r\n\r\n if (typeof window !== 'undefined') {\r\n const onKey = (e: KeyboardEvent) => {\r\n const key = e.key.toLowerCase()\r\n\r\n const isHardRefresh =\r\n ((key === 'f5' || key === 'r') &&\r\n e.ctrlKey &&\r\n (key !== 'r' || e.shiftKey)) ||\r\n (key === 'r' && e.metaKey && e.shiftKey) ||\r\n (key === 'r' && e.metaKey && e.altKey)\r\n\r\n if (isHardRefresh) clearVersion()\r\n }\r\n\r\n window.addEventListener('keydown', onKey)\r\n return () => window.removeEventListener('keydown', onKey)\r\n }\r\n }, [queryClient])\r\n\r\n return ready ? <>{children}</> : null\r\n}\r\n"],"mappings":"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","names":["KeyConstants","MethodConstants","UriConstants","env","moment","FieldTypeConstants","MethodType","ModelConstants","ComponentType","WIDGETAVATAR","WIDGETCURRENCY","WIDGETCOLOR","WIDGETSTATUS","WIDGETNOSTRING","Number","bp","n","days","seconds","microseconds","iterable","ast","key","shallowEqual","newDomain","shallowEqual","err","localStorage","sessionStorage","axios","config","handleError","error","db","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","initialState","import_toolkit","initialState","envStore","localStorageUtils","sessionStorageUtils","env","env","env","env","env","env","env","env","env","env","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","import_react_redux","import_jsx_runtime","import_jsx_runtime","import_react","import_react_query","import_jsx_runtime"]}