showEditZoneMetadataDialog function

Future<void> showEditZoneMetadataDialog(
  1. BuildContext context,
  2. NmZoneController controller
)

Show edit zone metadata dialog.

Implementation

Future<void> showEditZoneMetadataDialog(BuildContext context, NmZoneController controller) async {
  final zone = controller.selected;
  if (zone == null) return;
  final l10n = NmTelecom.l10n(context);
  final name = TextEditingController(text: zone.name);
  final region = TextEditingController(text: zone.region ?? '');
  final billingCode = TextEditingController(text: zone.billingCode ?? '');
  await showDialog<void>(
    context: context,
    builder: (_) => AlertDialog(
      title: Row(children: [const NmIcon(NmFugue.applicationBadgePencil), const SizedBox(width: 8), Text(l10n.zoneMetaDialogTitle)]),
      content: SizedBox(
        width: 420,
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            _field(name, l10n.zoneFieldName, required: true),
            const SizedBox(height: 10),
            _field(region, l10n.zoneFieldRegionOptional),
            const SizedBox(height: 10),
            _field(billingCode, l10n.zoneBillingCodeFieldLabel),
          ],
        ),
      ),
      actions: [
        TextButton(onPressed: () => Navigator.pop(context), child: Text(NmL10n.of(context).actionCancel)),
        FilledButton(
          onPressed: () {
            controller.renameZone(
              zone.id,
              name.text.trim(),
              region.text.trim().isEmpty ? null : region.text.trim(),
              billingCode.text.trim().isEmpty ? null : billingCode.text.trim().toUpperCase(),
              l10n,
            );
            Navigator.pop(context);
          },
          child: Text(NmL10n.of(context).actionApply),
        ),
      ],
    ),
  );
  name.dispose();
  region.dispose();
  billingCode.dispose();
}