6.5 KiB
Executable file
6.5 KiB
Executable file
رفع مشکل نمایش Currency_ID به صورت TextField در نودهای Workflow
🐛 مشکل
فیلد currency_id در فیلترهای نود InvoiceCreatedTrigger همچنان به صورت TextField عددی نمایش داده میشد به جای Dropdown انتخاب ارز.
🔍 علت ریشهای
در کد Frontend، بررسی ui_type فقط برای فیلدهای از نوع string انجام میشد. اما currency_id از نوع integer است!
کد قبلی (اشتباه):
switch (fieldType) {
case 'string':
// بررسی ui_type فقط اینجا بود ❌
final uiType = schema['ui_type'] as String?;
if (uiType == 'currency_selector') {
return _buildCurrencySelector(...);
}
// ...
case 'integer':
case 'number':
// هیچ بررسی ui_type نبود! ❌
return TextFormField(...); // همیشه TextField نشان میداد
✅ راه حل
اضافه کردن بررسی ui_type در case های integer و number:
case 'number':
case 'integer':
// ✅ اول ui_type را چک میکنیم
final uiType = schema['ui_type'] as String?;
if (uiType == 'currency_selector') {
return _buildCurrencySelector(key, schema, value, required, description);
} else if (uiType == 'person_selector') {
return _buildPersonSelector(key, schema, value, required, description);
} else if (uiType == 'product_selector') {
return _buildProductSelector(key, schema, value, required, description);
} else if (uiType == 'warehouse_selector') {
return _buildWarehouseSelector(key, schema, value, required, description);
} else if (uiType == 'account_selector') {
return _buildAccountSelector(key, schema, value, required, description);
} else if (uiType == 'fiscal_year_selector') {
return _buildFiscalYearSelector(key, schema, value, required, description);
}
// ✅ اگر ui_type خاصی نبود، TextField عددی معمولی
return Padding(...);
🆕 متدهای Helper اضافه شده
1. _buildNumberFieldWithReference
یک TextField عددی که از Reference هم پشتیبانی میکند:
Widget _buildNumberFieldWithReference(
String key,
Map<String, dynamic> schema,
dynamic currentValue,
bool required,
String? description,
String fieldType, // 'integer' or 'number'
) {
final isReference = currentValue?.toString().startsWith('\$') ?? false;
return TextFormField(
initialValue: currentValue?.toString(),
keyboardType: isReference ? TextInputType.text : TextInputType.number,
decoration: InputDecoration(
prefixIcon: isReference ? Icon(Icons.link) : null,
suffixIcon: Row(
children: [
IconButton(
icon: Icon(Icons.select_all),
onPressed: () => _showReferenceSelector(key),
),
],
),
),
onSaved: (newValue) {
if (newValue?.startsWith('\$') ?? false) {
_config[key] = newValue; // ذخیره به صورت reference
} else {
_config[key] = fieldType == 'integer'
? int.tryParse(newValue ?? '') ?? currentValue
: double.tryParse(newValue ?? '') ?? currentValue;
}
},
);
}
2. Stub Methods برای سلکتورهای آینده:
Widget _buildWarehouseSelector(...) {
return _buildNumberFieldWithReference(...);
}
Widget _buildAccountSelector(...) {
return _buildNumberFieldWithReference(...);
}
Widget _buildFiscalYearSelector(...) {
return _buildNumberFieldWithReference(...);
}
اینها فعلاً مثل TextField عددی کار میکنند ولی آماده پیادهسازی کامل هستند.
📊 حالا چطور کار میکند؟
روند Render فیلد currency_id:
1. Schema میگوید: type = "integer"
↓
2. Case 'integer' فراخوانی میشود
↓
3. بررسی ui_type:
schema['ui_type'] = "currency_selector"
↓
4. شرط if (uiType == 'currency_selector') برقرار است
↓
5. ✅ _buildCurrencySelector() فراخوانی میشود
↓
6. Dropdown با لیست ارزها نمایش داده میشود!
🎨 نتیجه نهایی
قبل (اشتباه):
┌────────────────────────────────────┐
│ Currency Id [⭐] │ ← TextField عددی
├────────────────────────────────────┤
│ 1 │
└────────────────────────────────────┘
بعد (صحیح):
┌────────────────────────────────────┐
│ 💰 ارز ▼ │ ← Dropdown
├────────────────────────────────────┤
│ ﷼ ریال ایران (IRR) [پیشفرض] ✓ │
│ $ دلار آمریکا (USD) │
│ € یورو (EUR) │
│ د.إ درهم امارات (AED) │
└────────────────────────────────────┘
[🔗 استفاده از نود قبلی]
🔧 تغییرات نهایی
فایل تغییر یافته:
- ✅
hesabixUI/hesabix_ui/lib/widgets/workflow/workflow_node_config_dialog.dart
تغییرات:
- ✅ بررسی
ui_typeدر caseintegerوnumber - ✅ اضافه شدن 6 شرط برای ui_type های مختلف
- ✅ متد
_buildNumberFieldWithReferenceبرای TextField های عددی - ✅ Stub methods برای سلکتورهای آینده
✅ نتیجه
اکنون همه فیلدهای integer/number که ui_type خاصی دارند، به درستی با Widget مناسب نمایش داده میشوند:
| ui_type | Widget |
|---|---|
currency_selector |
✅ Dropdown ارزها |
person_selector |
✅ Person Field با Reference |
product_selector |
✅ Product Field با Reference |
warehouse_selector |
⏳ TextField (آماده بهبود) |
account_selector |
⏳ TextField (آماده بهبود) |
fiscal_year_selector |
⏳ TextField (آماده بهبود) |
| بدون ui_type | TextField عددی معمولی |
وضعیت: ✅ رفع شد - آماده تست است!