Some checks failed
Deploy SOLUTION_ERP / build-deploy (push) Failing after 48s
Bro UAT S23 t2 catch screenshot: tick AllowReturnToAssignee + untick AllowReturnToDrafter cho slot Approver → user click "Trả lại" → dialog mở với default state `returnMode=Drafter` (S17 backward compat fallback). Radio Drafter HIDDEN vì allowReturnToDrafter=false → user thấy radio Assignee đã pick + Bùi Lê Thủy Trà từ dropdown → click Xác nhận → BE receive `returnMode: 4` (Drafter từ initial state) → throw "Cấp Approver hiện tại không bật mode 'Drafter'. Liên hệ Admin Designer". Bro intent: "cho duyệt trong muốn cho trả lại trong mode đang gửi duyệt chứ ko phải draft, draft chỉ khi trả lại cho người soạn thôi" — 3 F1 modes (OneLevel/OneStep/ Assignee) là "trả lại trong mode đang gửi duyệt" (Phase=ChoDuyet lùi pointer); Drafter mode = trả về Người soạn (Phase=TraLai), CHỈ default khi không có F1 nào. Fix FE × 2 app PeWorkflowPanel.tsx (mirror rule §3.9): - Import useEffect - useEffect khi target=TraLai → compute first available F1 mode: - allowReturnOneLevel ? OneLevel - : allowReturnOneStep ? OneStep - : allowReturnToAssignee ? Assignee - : Drafter (fallback) - setReturnMode(firstAvailable) → Dialog mở với mode đúng selected → user click Xác nhận → BE receive correct mode → ApplyReturnModeAsync check correct flag → PASS. Pattern lesson saved: dialog initial state phải compute từ permission flags KHÔNG hardcode default — admin có thể disable mọi mode khác Drafter, hoặc ngược lại enable F1 only. Verify: - npm run build × 2 app pass (0 TS err) - Bundle hash rotate × 2 app Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Oxc
- @vitejs/plugin-react-swc uses SWC
React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])