@@ -41,19 +41,19 @@ class ActionParamInfo {
4141 // 多个值的分隔符(仅限多选下拉)
4242 var separator: String = " \n "
4343
44+ // ========== 新增依赖管理功能 ==========
45+
4446 // Tên (các) param điều khiển: param này sẽ ẩn/hiện dựa theo giá trị của (các) param có
4547 // "name" trùng dependOn. Có thể khai báo NHIỀU param cha cùng lúc, nối bằng dấu "|",
4648 // ví dụ: "mode|cam" -> phụ thuộc đồng thời vào cả param "mode" và "cam" (tất cả phải
4749 // cùng thỏa điều kiện tương ứng - AND).
4850 var dependOn: String? = null
51+
4952 // Danh sách giá trị cần khớp cho từng param cha (theo đúng thứ tự khai báo ở dependOn),
5053 // các param cha cách nhau bởi dấu "|"; trong mỗi vị trí, các giá trị được chấp nhận (OR)
5154 // cách nhau bởi dấu phẩy, ví dụ: "a|b,c" -> cha 1 khớp khi = a, cha 2 khớp khi = b hoặc c.
52- // Giá trị so khớp không chỉ là value thực tế của option, mà còn có thể là title (label)
53- // hiển thị của option, hoặc phần văn bản nằm trong dấu ngoặc () của title (khớp cả có
54- // ngoặc lẫn không ngoặc). Ví dụ option-sh="echo -e 'a|A (so)'" (value=a, title="A (so)")
55- // thì depend-value="a,A,(so)" đều khớp được (qua value "a", qua title "A", qua "(so)"/"so").
5655 var dependValue: String? = null
56+
5757 // "show": chỉ hiện khi khớp dependValue (mặc định) | "hide": ẩn khi khớp dependValue
5858 // Cũng có thể khai báo riêng cho từng param cha, nối bằng "|", theo đúng thứ tự dependOn,
5959 // ví dụ: "show|hide".
@@ -63,14 +63,55 @@ class ActionParamInfo {
6363 // - "and" (mặc định): TẤT CẢ điều kiện phải cùng thỏa (giữ tương thích hành vi cũ).
6464 // - "priority" (hoặc "or"): xét theo THỨ TỰ ưu tiên từ TRÁI SANG PHẢI theo đúng thứ tự
6565 // khai báo trong dependOn. Điều kiện nào (đã tính cả dependMode của chính nó) thỏa
66- // trước sẽ quyết định luôn kết quả là "show" (không cần xét tiếp các điều kiện còn lại).
67- // Nếu không có điều kiện nào thỏa thì "hide".
68- // Ví dụ: depend-on="mode|level" depend-value="b|7" depend-mode="show|show"
69- // depend-logic="priority"
70- // -> Nếu "mode" khớp "b" thì show luôn (bất kể level).
71- // -> Nếu "mode" không khớp nhưng "level" khớp "7" thì vẫn show.
72- // -> Nếu cả hai đều không khớp thì hide.
66+ // trước sẽ quyết định luôn kết quả.
67+ // Nếu không có điều kiện nào thỏa thì sử dụng dependDefault.
7368 // - "priority-rtl" (hoặc "or-rtl"): giống "priority" nhưng xét theo thứ tự ưu tiên từ
74- // PHẢI SANG TRÁI (điều kiện cuối cùng trong dependOn được xét trước).
69+ // PHẢI SANG TRÁI.
70+ // - "xor": chỉ ĐÚNG MỘT điều kiện phải thỏa.
71+ // - "nand": phủ định của "and" (không phải tất cả điều kiện đều thỏa).
7572 var dependLogic: String = " and"
73+
74+ // ========== TÍNH NĂNG MỚI: MẶC ĐỊNH ẨN/HIỆN ==========
75+ // Giá trị mặc định khi KHÔNG có điều kiện phụ thuộc nào thỏa mãn:
76+ // - "show" (mặc định): hiển thị khi không có điều kiện nào khớp
77+ // - "hide": ẩn khi không có điều kiện nào khớp
78+ // Ví dụ: depend-on="mode" depend-value="advanced"
79+ // depend-default="hide"
80+ // -> Khi mode != advanced thì ẩn (không phải "show")
81+ var dependDefault: String = " show"
82+
83+ // ========== TÍNH NĂNG MỚI: TRẠNG THÁI KHỞI ĐỘNG ==========
84+ // Trạng thái ẩn/hiện BAN ĐẦU khi chưa đánh giá bất kỳ điều kiện nào:
85+ // - "auto" (mặc định): tự động xác định dựa trên dependDefault
86+ // - "show": luôn hiển thị lúc đầu
87+ // - "hide": luôn ẩn lúc đầu
88+ // Hữu ích khi bạn không muốn param nhấp nháy lúc tải dialog.
89+ var dependInitialState: String = " auto"
90+
91+ // ========== TÍNH NĂNG MỚI: ĐẢO NGƯỢC ĐIỀU KIỆN ==========
92+ // Nếu true, tất cả các điều kiện sẽ bị đảo ngược (NOT logic):
93+ // - "show" trở thành "hide"
94+ // - "hide" trở thành "show"
95+ // Ví dụ: depend-on="admin" depend-value="1" depend-negate="true"
96+ // -> Hiện khi admin != 1 (ẩn khi admin = 1)
97+ var dependNegate: Boolean = false
98+
99+ // ========== TÍNH NĂNG MỚI: NGƯỠNG ĐIỀU KIỆN (CHO "AND") ==========
100+ // Với logic "and", chỉ bao nhiêu % điều kiện cần thỏa mãn:
101+ // - -1 (mặc định): 100% (tất cả phải thỏa) - hành vi cũ
102+ // - 0-100: % số điều kiện cần thỏa, vd: 50 = ít nhất 50% điều kiện phải thỏa
103+ // Ví dụ: depend-on="a|b|c" 3 điều kiện
104+ // depend-threshold="67" (tối thiểu 2/3 điều kiện)
105+ // -> Chỉ cần tối thiểu 2 trong 3 điều kiện thỏa mãn
106+ var dependThreshold: Int = - 1
107+
108+ // ========== TÍNH NĂNG MỚI: HOẠT ĐỘNG KHÔNG ĐỒNG THỜI ==========
109+ // Nếu true, param ẩn sẽ vẫn được đưa vào kết quả readParamsValue() nếu nó có giá trị
110+ // (thay vì bỏ qua param ẩn). Hữu ích cho các param ẩn nhưng vẫn cần giá trị.
111+ var dependIncludeHidden: Boolean = false
112+
113+ // ========== TÍNH NĂNG MỚI: LÀMĐIỀU GỌILẠI KHI THAY ĐỔI DEPENDENCY ==========
114+ // Tên shell script/callback để gọi khi param này thay đổi trạng thái ẩn/hiện
115+ // (chỉ gọi khi trạng thái thực sự thay đổi, từ visible -> hidden hoặc ngược lại)
116+ var dependOnChangeCallback: String? = null
76117}
0 commit comments