ISPANA Client App Changelog — v0.0.7 Catatan Rilis Klien ISPANA — v0.0.7

a31 2026-07-28

Focus: Fix FilePicker API Call Compatibility

  • a. [customer_import_view.dart] (Widget): Updated FilePicker.platform.pickFiles to static method FilePicker.pickFiles for file_picker v11.x API compatibility.
  • b. [pubspec.yaml]: Bumped version to 0.0.7+31.
Git Commit Tag: ispana-v0.0.7a31
a30 2026-07-28

Focus: Refactor Role Management to Data Table & Integrate File Picker

  • a. [role_management_page.dart] (Widget): Refactored role grid cards to structured DataTable with action columns.
  • b. [customer_import_view.dart] (Widget): Integrated file_picker for selecting local CSV files.
  • c. [pubspec.yaml]: Added file_picker: ^11.0.2 dependency and bumped version to 0.0.7+30.
Git Commit Tag: ispana-v0.0.7a30
a29 2026-07-28

Focus: Simplify Staff & Customer Management UI/UX via Modal Dialogs

  • a. [staff_management_page.dart] (Page): Removed 'Peran' tab from top sub-menu bar.
  • b. [employee_management_page.dart] (Widget): Added 'Kelola Peran' button to open role management dialog.
  • c. [role_management_page.dart] (Widget): Wrapped role table and creation form into RoleManagementDialog.
  • d. [customer_management_page.dart] (Page): Removed 'Impor CSV' tab from top sub-menu bar.
  • e. [customer_management_view.dart] (Widget): Added 'Impor CSV' button in header action bar.
  • f. [customer_import_view.dart] (Widget): Wrapped CSV importer in CustomerImportDialog and added 'Unduh Templat CSV' template download button.
  • g. [pubspec.yaml]: Bumped version to 0.0.7+29.
Git Commit Tag: ispana-v0.0.7a29
a28 2026-07-28

Focus: Remove Template Shortcut Inserted SnackBar Notification

  • a. [whatsapp_send_dialog.dart] (Widget): Removed SnackBar notification when inserting message template shortcuts.
  • b. [pubspec.yaml]: Bumped version to 0.0.7+28.
Git Commit Tag: ispana-v0.0.7a28
a27 2026-07-28

Focus: WhatsApp History UI Cleanup (Refresh Button Removal & FAB Icon-Only)

  • a. [whatsapp_history_view.dart] (Widget): Removed manual refresh IconButton next to search field and updated FloatingActionButton to icon-only FAB.
  • b. [pubspec.yaml]: Bumped version to 0.0.7+27.
Git Commit Tag: ispana-v0.0.7a27
a26 2026-07-27

Focus: Release

Git Commit Tag: ispana-v0.0.7a26
a25 2026-07-26

Focus: Refactor Null Check to Null-Aware Element Marker in MapDisplayView

  • a. [map_display_view.dart] (Widget): Replaced if (_searchMarker != null) _searchMarker! with ?_searchMarker null-aware collection element syntax.
  • b. [pubspec.yaml]: Bumped version to 0.0.7+25.
Git Commit Tag: ispana-v0.0.7a25
a24 2026-07-26

Focus: Fix Map Event Infinite Rebuild Loop in MapDisplayView

  • a. [map_display_view.dart] (Widget): Filtered onMapEvent listener to only trigger debounced bounding box fetches when map camera movement finishes (MapEventMoveEnd, MapEventFlingAnimationEnd, MapEventDoubleTapZoomEnd), eliminating the UI thread freeze loop.
  • b. [pubspec.yaml]: Bumped version to 0.0.7+24.
Git Commit Tag: ispana-v0.0.7a24
a23 2026-07-26

Focus: Fix "Ini Tiang Sendiri" (isOwnedPole) Persistence in Dart API Backend

  • a. [landmark_model.dart] (API Model): Added isOwnedPole field, constructor mapping, fromMap() parsing, and toMap() serialization in Dart API backend.
  • b. [landmark_repository.dart] (API Repository): Added isOwnedPole parameter handling in createLandmark() and updateLandmark().
  • c. [landmark_controller.dart] (API Controller): Extracted payload['isOwnedPole'] in REST HTTP endpoints (POST /landmarks and PUT /landmarks/<id>) to preserve checkbox state in MongoDB.
  • d. [pubspec.yaml]: Bumped version to 0.0.7+23.
Git Commit Tag: ispana-v0.0.7a23
a22 2026-07-26

Focus: Fix Map Management UI Freeze & Unused Field Warning

  • a. [map_display_view.dart] (Widget): Replaced synchronous main-thread BuiltInMapCachingProvider with non-blocking NetworkTileProvider to prevent UI freeze on map startup, and fixed ?_searchMarker null-aware syntax in MarkerLayer.
  • b. [landmark_form_page.dart] (Page): Removed unused private field _landmarkIcons and unreferenced style handlers.
  • c. [pubspec.yaml]: Bumped version to 0.0.7+22.
Git Commit Tag: ispana-v0.0.7a22
a21 2026-07-26

Focus: Landmark Form Simplification (Moved Mark Own Pole to General Tab & Removed Style Tab)

  • a. [landmark_data_section.dart] (Widget): Moved the Ini Tiang Sendiri (Mark Own Pole) checkbox tile directly into the Umum (General) tab form.
  • b. [landmark_form_page.dart] (Page): Removed the Gaya (Style) sub-menu tab from the landmark modal dialog and reduced tab count to 3 (Umum, Infrastruktur, Perangkat Keras). Cleaned up unused style handlers & imports.
  • c. [pubspec.yaml]: Bumped version to 0.0.7+21.
Git Commit Tag: ispana-v0.0.7a21
a20 2026-07-26

Focus: Fix HTTP 301 Moved Permanently Error (Separate API BaseUrl & Public Verification Domain)

  • a. [api_config.dart] (Config): Restored ApiConfig.baseUrl back to API backend server (http://103.196.40.140:8080) to prevent Nginx HTTP-to-HTTPS 301 redirects on API calls, and added ApiConfig.publicDomain (http://swainet.id) specifically for public invoice links.
  • b. [invoice_view.dart] (Widget): Updated invoice PDF download & WhatsApp sharing links to utilize ApiConfig.publicDomain (http://swainet.id/verify/invoice/...) while preserving direct API server connectivity for app requests.
  • c. [pubspec.yaml]: Bumped version to 0.0.7+20.
Git Commit Tag: ispana-v0.0.7a20
a19 2026-07-26

Focus: Domain Invoice PDF URL & Auto-Populating Brand Settings Form

  • a. [api_config.dart] (Config): Updated default ApiConfig.baseUrl from IP:PORT (http://103.196.40.140:8080) to production domain (http://swainet.id) so invoice PDF links are formatted with the domain.
  • b. [brand_settings_view.dart] (Widget): Added automatic fetchVendorSettings() post-frame callback in initState() and implemented reactive _populateFromBrand() syncing so existing brand settings (Business Name, WhatsApp Number, Address, Logo, Banner) are populated into the form.
  • c. [pubspec.yaml]: Bumped version to 0.0.7+19.
Git Commit Tag: ispana-v0.0.7a19
a18 2026-07-26

Focus: Auto-Fetch Vendor Settings & Compact Autocomplete Template Selection Field

  • a. [whatsapp_send_dialog.dart] (Widget): Added automatic fetchVendorSettings() execution in initState() so custom saved message templates from vendor settings are always loaded when opening the dialog.
  • b. [whatsapp_send_dialog.dart] (Widget): Replaced the template action chips bar with a compact, clean Autocomplete<Map<String, dynamic>> FormField (Pilih / Cari Templat Pesan (Pintasan)) with live filtering by template title, shortcut, or body.
  • c. [pubspec.yaml]: Bumped version to 0.0.7+18.
Git Commit Tag: ispana-v0.0.7a18
a17 2026-07-26

Focus: Reliable Shortcut Expansion & Built-In Template Fallback

  • a. [whatsapp_send_dialog.dart] (Widget): Added automatic pre-send shortcut expansion inside _handleSend() so clicking "Kirim WhatsApp" with raw shortcut text (e.g. /hello) instantly expands into template text before sending.
  • b. [whatsapp_send_dialog.dart] (Widget): Implemented live onChanged shortcut expansion detection (expanding shortcuts when space or newline is typed) and added built-in fallback template defaults (/hello, /tagihan, /terimakasih).
  • c. [pubspec.yaml]: Bumped version to 0.0.7+17.
Git Commit Tag: ispana-v0.0.7a17
a16 2026-07-26

Focus: Auto-Sanitization of Phone Numbers (Country Code Conversion)

  • a. [customer_form_page.dart] (Page): Auto-sanitizes input phone numbers starting with 0 (e.g. 08123456789) into international country code format (628123456789) upon customer registration & edit.
  • b. [whatsapp_send_dialog.dart] (Widget): Normalizes target phone numbers in direct messaging modal dialog to ensure leading 0 is converted to country code 62.
  • c. [pubspec.yaml]: Bumped version to 0.0.7+16.
Git Commit Tag: ispana-v0.0.7a16
a15 2026-07-26

Focus: Full WhatsApp Integration (Customer Card Button, Invoice Send, Shortcut Engine & History Tab)

  • a. [customer_management_view.dart] (Widget): Added a green WhatsApp IconButton on the bottom-right of customer card opening direct chat modal dialog.
  • b. [whatsapp_send_dialog.dart] (Widget): Implemented a modal dialog supporting shortcut auto-expansion (e.g. typing /hello and pressing Enter automatically fills template text and replaces variables {customerName}, {invoiceNumber}, {amount}) and quick-pick action chips.
  • c. [invoice_view.dart] (Widget): Integrated direct WhatsApp sending in the Faktur / Invoice sub-menu table with prefilled invoice payment notice template.
  • d. [whatsapp_history_view.dart] (Widget): Created the "Riwayat WhatsApp" sub-menu tab displaying sent history logs data table with recipient type badges, source badges, status, and extended Floating Action Button (FAB) with recipient autocomplete suggestions.
  • e. [vendor_features.dart] & [app_localization.dart]: Registered whatsapp_history sub-feature key and localized all strings in Indonesian & English.
  • f. [pubspec.yaml]: Bumped version to 0.0.7+15.
Git Commit Tag: ispana-v0.0.7a15
a14 2026-07-26

Focus: Fix BuildContext Across Async Gaps Warning

  • a. [whatsapp_gateway_settings_view.dart] (Widget): Replaced context.mounted checks after asynchronous operations with mounted (State.mounted) to satisfy Dart's use_build_context_synchronously linter rule.
  • b. [pubspec.yaml]: Bumped version to 0.0.7+14.
Git Commit Tag: ispana-v0.0.7a14
a11 2026-07-24

Focus: Responsive Draft Data Table & Creator Name Resolution

  • a. [landmark_drafts_list_view.dart] (Widget): Wrapped DataTable in LayoutBuilder with responsive min-width constraint (math.max(constraints.maxWidth, 700.0)) so the table expands responsively across 100% of desktop/web views.
  • b. [landmark_drafts_list_view.dart] (Widget): Added _fetchStaffNames() via EmployeeService to resolve raw creator token IDs (e.g. 3SY!C8) into human-readable staff names (e.g. John Doe) in the "Dibuat Oleh" column.
  • c. [pubspec.yaml]: Bumped version to 0.0.7+11.
Git Commit Tag: ispana-v0.0.7a11
a10 2026-07-24

Focus: Landmark Draft Sub-Menu DataTable & Live Background Sync

  • a. [landmark_drafts_list_view.dart] (Widget): Replaced bulky card layout with a clean, horizontal-scrolling DataTable (Tipe, Nama Markah, Dibuat Oleh, Tanggal, Aksi). Preserved click-to-view feature opening read-only draft form.
  • b. [landmark_drafts_list_view.dart] (Widget): Implemented a periodic 5-second background sync timer while mounted so newly submitted drafts automatically appear live for admins without manual refresh.
  • c. [landmark_provider.dart] (Provider): Updated approveDraft() to call both fetchLandmarks() and fetchDrafts() for immediate real-time state resolution.
  • d. [pubspec.yaml]: Bumped version to 0.0.7+10.
Git Commit Tag: ispana-v0.0.7a10
a9 2026-07-24

Focus: Fix App Crash on Map Marker Render (Safeguard Splitter Ratio Parsing)

  • a. [map_landmark.dart] (Model): Wrapped getEffectiveColor() in a try-catch safety handler and added range checks for splitterRatio string splitting to prevent RangeError crashes when splitter ratios lack colon formatting.
  • b. [pubspec.yaml]: Bumped version to 0.0.7+9.
Git Commit Tag: ispana-v0.0.7a9
a8 2026-07-24

Focus: Restrict Landmark Editing to Landmark Sub-Menu List

  • a. [landmark_detail_sheet.dart] (Widget): Removed the edit button icon from the landmark detail popup sheet header so landmark editing can only be launched from the Landmark sub-menu list view ("Markah Tanah" tab).
  • b. [pubspec.yaml]: Bumped version to 0.0.7+8.
Git Commit Tag: ispana-v0.0.7a8
a7 2026-07-24

Focus: Landmark Pin Style & Color Revision (Dynamic Port & Status Colors + Color Wheel Picker)

  • a. [map_landmark.dart] (Model): Added getEffectiveColor() method calculating dynamic status colors for odp, olt, jc, bts, otb based on non-zero port capacity and onu based on customer status.
  • b. [map_display_view.dart] (Widget): Updated marker pin rendering, polylines, search suggestions, and dimmed opacity for unconfigured ONU pins.
  • c. [landmark_detail_sheet.dart] & [landmarks_list_view.dart] (Widgets): Updated landmark headers and list items to display effective status colors.
  • d. [landmark_style_section.dart] (Page): Restricted customizable colors to pop & default themes, added Hex input field, interactive HSV Color Wheel dialog, and dynamic color notification notice for hardware devices.
  • e. [landmark_form_page.dart] (Page): Added silent color normalization on edit when saving non-customizable landmark records to database.
  • f. [pubspec.yaml]: Bumped version to 0.0.7+7.
Git Commit Tag: ispana-v0.0.7a7
a6 2026-07-24

Focus: Remove Duplicated AppBar Search Bar in Maps Management

  • a. [maps_management_page.dart] (Frontend): Removed redundant AppBar title TextField that caused a double search bar when filterQuery was active.
  • b. [pubspec.yaml]: Bumped version to 0.0.7+6.
Git Commit Tag: ispana-v0.0.7a6
a41 2026-08-02

Focus: Standardized Proportional Card System Across Staff, Customer & Radius Routers

  • a. [employee_management_page.dart]: Standardized EmployeeCard layout to 175px grid height with 52x52 soft avatar container, zero blank space, and uniform borders.
  • b. [customer_management_view.dart]: Converted Customer view to GridView.builder with 175px grid height, 52x52 customer avatar container, and 3-dots popup menu.
  • c. [radius_management_view.dart]: Converted Router view to GridView.builder with 175px grid height, 52x52 router icon container, and top ID/status chips.
  • d. [pubspec.yaml]: Incremented version to 0.0.7+41.
Git Commit Tag: ispana-v0.0.7a41
a40 2026-08-02

Focus: Role Form Top-Right Header Action & Redundant Cancel Button Removal

  • a. [role_management_page.dart]: Placed the primary BUAT PERAN / SIMPAN button in the top-right header bar next to the close button for seamless design alignment with Settings.
  • b. [role_form_page.dart]: Removed the redundant BATAL button from the bottom footer bar since the top-left <- back button handles navigation.
  • c. [pubspec.yaml]: Incremented version to 0.0.7+40.
Git Commit Tag: ispana-v0.0.7a40
a39 2026-08-02

Focus: Single-Layer Role Management Dialog, CSV Import Permission Cleanup & Modal Overflow Fix

  • a. [role_management_page.dart] & [role_form_page.dart]: Refactored RoleManagementDialog to switch views inline (List <-> Form) inside a single modal container, eliminating double-stacked popups.
  • b. [vendor_features.dart]: Removed customer_import (Impor CSV) sub-feature entry from the role permission checklist.
  • c. [customer_import_view.dart]: Wrapped title/description text in Expanded inside the CSV import modal header to eliminate pixel overflow errors.
  • d. [pubspec.yaml]: Incremented version to 0.0.7+39.
Git Commit Tag: ispana-v0.0.7a39
a38 2026-08-02

Focus: Reusable PhotoUploadWidget Integration & Account Profile Global SIMPAN Binding

  • a. [account_security_view.dart]: Removed redundant Simpan Profil button and bound saving to the top global SIMPAN button header.
  • b. [photo_upload_widget.dart]: Decoupled PhotoUploadWidget from LandmarkProvider so it can be reused globally across all app features.
  • c. [account_security_view.dart] & [employee_form_page.dart]: Integrated PhotoUploadWidget for uniform image picker and upload experience.
  • d. [auth_repository_impl.dart], [auth_remote_data_source.dart] & [auth_controller.dart]: Resolved all backend API compile errors.
  • e. [pubspec.yaml]: Incremented version to 0.0.7+38.
Git Commit Tag: ispana-v0.0.7a38
a37 2026-08-02

Focus: Employee Form Profile Picture Field & Account Profile Settings Form (Phone, Photo, Address)

  • a. [employee_form_page.dart]: Added profile picture field with live 54x54 soft rounded square avatar preview container in EmployeeFormDialog.
  • b. [employee_management_page.dart]: Rendered uploaded network photo images inside the staff card avatar container with initial letter fallback.
  • c. [account_security_view.dart]: Added Profil Akun card allowing users to update their WhatsApp number (with InputSanitizer), profile picture URL, and address.
  • d. [auth_controller.dart] & [auth_repository_impl.dart]: Added PUT /v1/auth/profile endpoint in API to persist user profile updates in data_auth and data_employees.
  • e. [pubspec.yaml]: Incremented version to 0.0.7+37.
Git Commit Tag: ispana-v0.0.7a37
a36 2026-08-02

Focus: Staff Square Avatar, PopupMenu Contrast Fix, Employee Form Dialog Popup & Responsive Role Table

  • a. [employee_management_page.dart]: Added a square avatar container with soft border radius displaying staff initials to balance the card layout.
  • b. [employee_management_page.dart]: Enhanced PopupMenu contrast and elevation so item list options stand out clearly against dark card surface.
  • c. [employee_form_page.dart]: Refactored Employee Create/Edit form from a full-page route into a modal dialog (EmployeeFormDialog.show).
  • d. [role_management_page.dart]: Made the role list table 100% responsive (expanding to double.infinity width).
  • e. [pubspec.yaml]: Incremented version to 0.0.7+36.
Git Commit Tag: ispana-v0.0.7a36
a35 2026-08-02

Focus: Staff Page Double Navbar Fix, Dropdown Filter Removal & Icon-Only FloatingActionButton

  • a. [employee_management_page.dart]: Removed duplicate inner AppBar and VendorDrawer, fixing the double navbar issue.
  • b. [employee_management_page.dart]: Completely removed status dropdown filter from top header row to eliminate pixel overflow.
  • c. [employee_management_page.dart]: Converted FloatingActionButton to an icon-only button (Icon(Icons.person_add_outlined)).
  • d. [pubspec.yaml]: Incremented version to 0.0.7+35.
Git Commit Tag: ispana-v0.0.7a35
a34 2026-08-02

Focus: Staff Page Header Overflow Fix, FAB Refactoring, Outdated Warning Card Removal & Centralized Input Sanitizers

  • a. [employee_management_page.dart]: Moved + Tambah Karyawan action to a FloatingActionButton (FloatingActionButton.extended) and cleaned up top header action row to eliminate pixel overflow.
  • b. [employee_form_page.dart]: Removed outdated AppLocale.employeeSignInInfo warning card from employee form.
  • c. [input_sanitizer.dart]: Created centralized InputSanitizer utility in both Flutter frontend (02_ispana) and backend API (01_API) for mandatory email lowercasing and phone country code conversion.
  • d. [staff_repository.dart], [customer_form_page.dart], [auth_provider.dart] & [auth_repository_impl.dart]: Enforced InputSanitizer across forms, providers, and backend repositories.
  • e. [pubspec.yaml]: Incremented version to 0.0.7+34.
Git Commit Tag: ispana-v0.0.7a34
a33 2026-08-02

Focus: Staff Phone Country Code Auto-Conversion, Staff Page UI/UX Modernization & WhatsApp Recipient Autocomplete

  • a. [employee_form_page.dart] & [staff_repository.dart]: Enforced automatic phone country code conversion (converting 08... to 628...) on frontend form submission and backend database insertion.
  • b. [employee_management_page.dart]: Redesigned Staff Management page UI/UX to match Customer Management styling with live search, status filter, ID badges, role chips, and WhatsApp quick actions.
  • c. [whatsapp_send_dialog.dart]: Enhanced recipient autocomplete search so searching by customer or staff name automatically populates and replaces text field with their WhatsApp phone number.
  • d. [pubspec.yaml]: Incremented version to 0.0.7+33.
Git Commit Tag: ispana-v0.0.7a33
a32 2026-08-02

Focus: Option C Role Permission Selection & Global Settings Architecture Refactoring

  • a. [app_appearance_view.dart]: Created shared core widget for universal theme and language selection across all tiers.
  • b. [account_security_view.dart]: Created shared core widget for change password & security verification across all tiers.
  • c. [vendor_features.dart]: Added isPermissionConfigurable and supportedLevels per feature, excluding universal features (dashboard and settings_account).
  • d. [role_form_page.dart]: Updated RoleFormDialog to filter out universal features, dynamically build supported permission level segments, and support claim level access.
  • e. [auth_provider.dart] & [auth_middleware.dart]: Updated permission engines to evaluate |claim level access.
  • f. [settings_management_page.dart]: Refactored settings tabs to isolate vendor company settings and create a dedicated Account tab for change password.
  • g. [pubspec.yaml]: Incremented version to 0.0.7+32.
Git Commit Tag: ispana-v0.0.7a32
a5 2026-07-24

Focus: Strict Read-Write Role Level Enforcement (Delete Button Removal)

  • a. [auth_provider.dart] (Frontend): Refactored _hasLevelPermission so delete level strictly requires |delete permission and updated isSuper getter.
  • b. [auth_middleware.dart] (Backend): Enforced strict delete level validation in _hasLevelPermission and updated hasPermission bypass for employees.
  • c. [staff_repository.dart] (Backend): Ensured employee auth accounts are saved with role: 1 (Employee), reserving role: 0 exclusively for primary Vendor Owner.
  • d. [pubspec.yaml]: Bumped version to 0.0.7+5.
Git Commit Tag: ispana-v0.0.7a5
a4 2026-07-24

Focus: Dev Tools Cleanup

  • a. [build.ps1]: Removed unused $CHANGELOG_DIR variable assignment.
Git Commit Tag: ispana-v0.0.7a4
a1 2026-07-24

Focus: Version Transition to v0.0.7

  • a. [pubspec.yaml]: Bumped version to 0.0.7+1 to initiate the v0.0.7 development cycle.
  • b. [app-v0-0-7.astro]: Created standalone Astro changelog page for tracking v0.0.7 iterations.
Git Commit Tag: ispana-v0.0.7a1