-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eslintcache
1 lines (1 loc) · 14.6 KB
/
.eslintcache
1
[{"/home/huy/projects/bhxh/src/App.js":"1","/home/huy/projects/bhxh/src/constants.js":"2","/home/huy/projects/bhxh/src/reportWebVitals.js":"3","/home/huy/projects/bhxh/src/index.js":"4","/home/huy/projects/bhxh/src/utils.js":"5","/home/huy/projects/bhxh/src/components/ModalZones.js":"6","/home/huy/projects/bhxh/src/components/Result.js":"7","/home/huy/projects/bhxh/src/components/ModalAdjustments.js":"8","/home/huy/projects/bhxh/src/components/ModalInsuranceSalary.js":"9"},{"size":8650,"mtime":1618291886824,"results":"10","hashOfConfig":"11"},{"size":1490,"mtime":1670686911145,"results":"12","hashOfConfig":"11"},{"size":362,"mtime":1611836204320,"results":"13","hashOfConfig":"11"},{"size":478,"mtime":1615216442310,"results":"14","hashOfConfig":"11"},{"size":3840,"mtime":1670687858137,"results":"15","hashOfConfig":"11"},{"size":4669,"mtime":1611901987822,"results":"16","hashOfConfig":"17"},{"size":4977,"mtime":1615167237252,"results":"18","hashOfConfig":"11"},{"size":1488,"mtime":1615035172007,"results":"19","hashOfConfig":"11"},{"size":2536,"mtime":1615085898773,"results":"20","hashOfConfig":"11"},{"filePath":"21","messages":"22","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"23","usedDeprecatedRules":"24"},"1v4gcpn",{"filePath":"25","messages":"26","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"27"},{"filePath":"28","messages":"29","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"30"},{"filePath":"31","messages":"32","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"27"},{"filePath":"33","messages":"34","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"35","messages":"36","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"2zwhay",{"filePath":"37","messages":"38","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"39","messages":"40","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"41"},{"filePath":"42","messages":"43","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"/home/huy/projects/bhxh/src/App.js",["44"],"import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport ModalInsuranceSalary from './components/ModalInsuranceSalary';\nimport Result from './components/Result';\nimport {\n months,\n years,\n} from \"./constants\";\nimport utils from \"./utils\";\n\nlet periodId = 0;\n\nfunction createNewPeriod(lastPeriod) {\n let monthStart = '';\n let monthEnd = '';\n let yearStart = '';\n let yearEnd = '';\n\n if (lastPeriod) {\n const lastMonthStart = parseInt(lastPeriod['monthStart']) || false;\n const lastMonthEnd = parseInt(lastPeriod['monthEnd']) || lastMonthStart || false;\n const lastYearStart = parseInt(lastPeriod['yearStart']) || false;\n const lastYearEnd = parseInt(lastPeriod['yearEnd']) || lastYearStart || false;\n\n if (lastMonthStart && lastMonthEnd) {\n monthStart = lastMonthEnd === 12 ? 1 : lastMonthEnd + 1;\n yearStart = lastYearEnd || '';\n if (monthStart === 1 && yearStart) {\n yearStart++;\n }\n\n monthEnd = monthStart === 12 ? 1 : monthStart + 1;\n yearEnd = yearStart || '';\n if (monthEnd === 1 && yearEnd) {\n yearEnd++;\n }\n }\n }\n\n return {\n salary: '',\n id: periodId,\n monthStart,\n monthEnd,\n yearStart,\n yearEnd,\n };\n}\n\nfunction App() {\n const [periods, setPeriods] = React.useState([{...createNewPeriod()}]);\n const [result, setResult] = React.useState(null);\n const [showModalSalary, setShowModalSalary] = React.useState(false);\n\n const addPeriod = () => {\n periodId++;\n const lastPeriod = periods[periods.length - 1];\n const newPeriod = createNewPeriod(lastPeriod);\n\n console.log(newPeriod);\n\n setPeriods([...periods, newPeriod]);\n setResult(null);\n };\n\n const removePeriod = (index) => {\n setPeriods([...periods.filter((period, idx) => idx !== index)]);\n setResult(null);\n };\n\n const calculate = () => {\n const updatedPeriods = [];\n let hasError = false;\n\n periods.forEach((period) => {\n const errorMessage = utils.validatePeriod(period);\n\n if (errorMessage) hasError = true;\n\n updatedPeriods.push({\n ...period,\n errorMessage: errorMessage,\n })\n });\n\n setPeriods(updatedPeriods);\n\n if (!hasError) {\n setResult(utils.calculatePeriods(periods));\n }\n };\n\n const updatePeriod = (periodIndex, data) => {\n const updatedPeriods = [...periods];\n updatedPeriods[periodIndex] = {\n ...periods[periodIndex],\n ...data,\n errorMessage: '',\n };\n\n setPeriods([\n ...updatedPeriods,\n ]);\n\n setResult(null);\n };\n\n const handleSalaryChange = (periodIndex, salary) => {\n if (salary.length === 0) {\n updatePeriod(periodIndex, {salary: ''});\n return;\n }\n\n const salaryInInteger = parseInt(salary.replace(/[^0-9]/g, '') || 0);\n const localeString = salaryInInteger.toLocaleString('en');\n const formattedSalary = localeString.replace(/,/g, ' ');\n\n const amountPaidForInsurance = utils.calculateAmountPaid(salaryInInteger);\n\n updatePeriod(periodIndex, {salary: formattedSalary, amountPaidForInsurance});\n };\n\n const fillPeriod = (index) => {\n const period = periods[index];\n if (!period) {\n return;\n }\n\n const previousPeriod = periods[index - 1];\n if (!previousPeriod) {\n return;\n }\n\n updatePeriod(index, {\n ...createNewPeriod(previousPeriod),\n ...period,\n });\n };\n\n return (\n <div className=\"App\">\n <button className=\"btn btn-sm btn-link\" onClick={() => setShowModalSalary(true)} disabled={showModalSalary}>\n Hướng dẫn kiểm tra mức lương đóng BHXH\n </button>\n <table className=\"table table-bordered table-responsive-md\">\n <thead>\n <tr>\n <th>#</th>\n <th>Từ... </th>\n <th>Đến... </th>\n <th>\n Mức lương đóng BHXH\n </th>\n <th/>\n </tr>\n </thead>\n <tbody>\n {periods.map((period, index) => {\n const {\n id,\n salary,\n monthStart,\n monthEnd,\n yearStart,\n yearEnd,\n } = period;\n\n return (\n <tr key={id}>\n <td>{index + 1}</td>\n <td>\n <select\n className=\"mr-3\"\n onChange={(e) => updatePeriod(index, {monthStart: e.target.value})}\n value={monthStart}\n >\n <option>Tháng...</option>\n {months.map((label, index) => (<option value={index + 1} key={index}>{label}</option>))}\n </select>\n <select\n className=\"\"\n onChange={(e) => updatePeriod(index, {yearStart: e.target.value})}\n value={yearStart}\n >\n <option>Năm...</option>\n {years.map((label) => (<option value={label} key={label}>{label}</option>))}\n </select>\n </td>\n <td>\n <select\n className=\"mr-3\"\n onChange={(e) => updatePeriod(index, {monthEnd: e.target.value})}\n value={monthEnd}\n >\n <option>Tháng...</option>\n {months.map((label, index) => (<option value={index + 1} key={index}>{label}</option>))}\n </select>\n <select\n onChange={(e) => {\n updatePeriod(index, {yearEnd: e.target.value});\n\n // fillPeriod(index + 1);\n }}\n value={yearEnd}\n >\n <option>Năm...</option>\n {years.map((label) => (<option value={label} key={label}>{label}</option>))}\n </select>\n </td>\n <td>\n <input\n type=\"text\"\n placeholder=\"10 000 000\"\n aria-describedby=\"emailHelp\"\n value={salary}\n onChange={(e) => handleSalaryChange(index, e.target.value)}\n style={{width: '120px'}}\n />\n {' '}\n vnđ\n </td>\n <td>\n <button\n title=\"Xóa\"\n onClick={() => removePeriod(index)}\n className=\"btn btn-sm rounded btn-danger\"\n >\n xóa\n </button>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n <div className=\"mb-4\">\n <button\n onClick={addPeriod}\n className=\"btn btn-sm btn-secondary mr-2\"\n >\n <b>+</b> thêm dòng\n </button>\n </div>\n <ul>\n {periods.map((period, index) => {\n const monthStart = parseInt(period.monthStart);\n const monthEnd = parseInt(period.monthEnd);\n const yearStart = parseInt(period.yearStart);\n const yearEnd = parseInt(period.yearEnd);\n const {errorMessage} = period;\n\n let isValidTimeRange = true;\n if (monthStart && monthEnd && yearStart && yearEnd) {\n if (yearEnd < yearStart || (yearEnd === yearStart && monthEnd < monthStart)) {\n isValidTimeRange = false;\n }\n }\n\n if (isValidTimeRange && !errorMessage) {\n return null;\n }\n\n return (\n <li key={index}>\n Lỗi ở dòng {index + 1}:\n {' '}\n {!isValidTimeRange && (\n <span className=\"text-danger\">Thời gian không phù hợp, vui lòng chọn lại!</span>\n )}\n {' '}\n {errorMessage && (\n <span className=\"text-danger\">{errorMessage}</span>\n )}\n </li>\n );\n })}\n </ul>\n\n {!result && (\n <div className=\"mt-5 mb-3\">\n <button\n className=\"btn btn-lg btn-primary\"\n onClick={calculate}\n disabled={periods.length === 0}\n >\n Xem kết quả\n </button>\n </div>\n )}\n\n {result && (\n <div className=\"card mt-5\">\n <div className=\"card-body\">\n <Result\n result={result}\n />\n </div>\n </div>\n )}\n <ModalInsuranceSalary\n show={showModalSalary}\n setShow={setShowModalSalary}\n />\n </div>\n );\n}\n\nexport default App;\n",["45","46"],"/home/huy/projects/bhxh/src/constants.js",[],["47","48"],"/home/huy/projects/bhxh/src/reportWebVitals.js",[],["49","50"],"/home/huy/projects/bhxh/src/index.js",[],"/home/huy/projects/bhxh/src/utils.js",["51"],"/home/huy/projects/bhxh/src/components/ModalZones.js",[],"/home/huy/projects/bhxh/src/components/Result.js",[],"/home/huy/projects/bhxh/src/components/ModalAdjustments.js",["52"],"import React from 'react';\nimport Modal from 'react-bootstrap/Modal';\nimport {adjustments} from '../constants';\n\nfunction ModalAdjustments({ show, setShow}) {\n return (\n <Modal\n show={show}\n onHide={() => setShow(false)}\n dialogClassName=\"modal-90w\"\n aria-labelledby=\"salary-adjustment\"\n >\n <Modal.Header closeButton>\n <Modal.Title id=\"salary-adjustment\">\n Mức điều chỉnh lương\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <p>\n Theo\n {' '}\n <a target=\"_blank\" href=\"https://luatvietnam.vn/lao-dong/thong-tu-35-2019-tt-bldtbxh-muc-dieu-chinh-tien-luong-thu-nhap-thang-da-dong-bao-hiem-xa-hoi-180368-d1.html\">\n Điều 2 Thông tư 35/2019/TT-BLĐTBXH\n </a>,\n mức điều chỉnh tiền lương tháng đóng BHXH của người lao động như sau:\n </p>\n <table className=\"table table-bordered table-striped\">\n <thead>\n <tr>\n <th>Năm</th>\n <th>Mức điều chỉnh</th>\n </tr>\n </thead>\n <tbody>\n {Object.keys(adjustments).map((year, index) => {\n return (\n <tr key={year}>\n <td>{index === 0 && '<= '}{year}</td>\n <td>{adjustments[year]}</td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </Modal.Body>\n </Modal>\n )\n}\n\nexport default ModalAdjustments;\n","/home/huy/projects/bhxh/src/components/ModalInsuranceSalary.js",["53","54","55","56"],{"ruleId":"57","severity":1,"message":"58","line":123,"column":9,"nodeType":"59","messageId":"60","endLine":123,"endColumn":19},{"ruleId":"61","replacedBy":"62"},{"ruleId":"63","replacedBy":"64"},{"ruleId":"61","replacedBy":"65"},{"ruleId":"63","replacedBy":"66"},{"ruleId":"61","replacedBy":"67"},{"ruleId":"63","replacedBy":"68"},{"ruleId":"69","severity":1,"message":"70","line":124,"column":1,"nodeType":"71","endLine":129,"endColumn":3},{"ruleId":"72","severity":1,"message":"73","line":22,"column":14,"nodeType":"74","endLine":22,"endColumn":29},{"ruleId":"72","severity":1,"message":"73","line":24,"column":29,"nodeType":"74","endLine":24,"endColumn":44},{"ruleId":"72","severity":1,"message":"73","line":27,"column":34,"nodeType":"74","endLine":27,"endColumn":49},{"ruleId":"72","severity":1,"message":"73","line":54,"column":24,"nodeType":"74","endLine":54,"endColumn":39},{"ruleId":"72","severity":1,"message":"73","line":57,"column":24,"nodeType":"74","endLine":57,"endColumn":39},"no-unused-vars","'fillPeriod' is assigned a value but never used.","Identifier","unusedVar","no-native-reassign",["75"],"no-negated-in-lhs",["76"],["75"],["76"],["75"],["76"],"import/no-anonymous-default-export","Assign object to a variable before exporting as module default","ExportDefaultDeclaration","react/jsx-no-target-blank","Using target=\"_blank\" without rel=\"noreferrer\" is a security risk: see https://html.spec.whatwg.org/multipage/links.html#link-type-noopener","JSXAttribute","no-global-assign","no-unsafe-negation"]