Skip to content

Sprint 9 (v1.2.0): Multiple profiles + bugfix indikator versi tray#10

Merged
devhardiyanto merged 6 commits into
mainfrom
phase-9-profiles
Jul 23, 2026
Merged

Sprint 9 (v1.2.0): Multiple profiles + bugfix indikator versi tray#10
devhardiyanto merged 6 commits into
mainfrom
phase-9-profiles

Conversation

@devhardiyanto

Copy link
Copy Markdown
Owner

What

Sprint 9 (v1.2.0): Multiple profiles per project (M9) + 2 bugfix indikator versi di tray (regresi M8).

Why

  • Profil = preset pilihan service ber-nama, biar bisa switch set service cepat per proyek (mis. "Laravel", "Node API") tanpa toggle satu-satu.
  • Bugfix tray: (1) semua versi Node tampil ● karena fnm list menandai * di setiap baris; (2) ● tak pindah setelah switch versi sampai app restart.

How

  • Config schema + migrasi (backward-compatible): ConfigState dapat profiles: Vec<Profile> + activeProfileId. selectedServiceIds tetap ada sebagai proyeksi profil aktif (di-reproject saat write), jadi tray & compose generator tak berubah. Migrasi v1→v2: config lama → profil "Default" berisi selection existing.
  • Toggle = edit profil aktif: toggle service menyinkronkan serviceIds profil aktif (bukan selection lepas), konsisten dengan re-proyeksi backend.
  • Tray fix: submenu tray ambil penanda aktif dari sumber otoritatif (php_get_active/node_get_active) — sama seperti frontend — dan di-rebuild setelah php_switch/node_switch selesai.

Changes

  • src-tauri/src/tray.rs — penanda aktif dari sumber otoritatif; refresh_version_submenus jadi pub(crate).
  • src-tauri/src/commands/{php,node}.rs — rebuild tray pasca-switch.
  • src-tauri/src/commands/config.rsProfile, profiles/activeProfileId, migrate() (v0→v1→v2), re-proyeksi saat write. +6 unit test.
  • src/composables/useConfig.tsProfile, CRUD profil (create/rename/delete + guard min 1 & fallback), syncSelection/applySelection, setActiveProfile.
  • src/composables/useServices.tsapplyProfile (set switch uiState + aktifkan); toggle path ikut edit profil aktif.
  • src/views/Dashboard.vue — switcher profil di header Services.
  • src/views/Settings.vue — CRUD profil di tab Services.
  • Version bump → v1.2.0 (5 file).

Testing

  • cargo test — 62 passed (termasuk 6 test migrasi/roundtrip/idempotent).
  • vue-tsc --noEmit bersih, vite build sukses.

Catatan

  • applyProfile mengubah selection (desired state); tidak meng-start/stop container yang sedang running. Start/stop tetap manual via tombol. Bisa ditingkatkan bila diminta.

devhardiyanto

…tatif)

Tray tak lagi mengandalkan flag active hasil parse listing (fnm list
menandai * di setiap baris terpasang -> semua tampil aktif). Penanda
ikut php_get_active/node_get_active, konsisten dgn frontend.

devhardiyanto
…tif)

Panggil refresh_version_submenus pasca php_switch/node_switch sukses,
lewat window.app_handle(). Bullet aktif selalu sinkron apa pun pemicunya
(tray atau UI), tak perlu restart app.

devhardiyanto
Tambah Profile{id,name,serviceIds} + profiles/activeProfileId ke ConfigState.
selected_service_ids jadi proyeksi profil aktif (di-sinkron saat write) agar
tray & compose tak berubah. Migrasi backward-compat: config lama -> profil
Default berisi selection existing, version bump ke 2.

devhardiyanto
Perluas useConfig: interface Profile, profiles/activeProfileId, CRUD
(create/rename/delete + guard min 1 profil & fallback), setActiveProfile.
Selection selalu proyeksi profil aktif (syncSelection) agar konsisten dgn
re-proyeksi backend. useServices.applyProfile set switch uiState + aktifkan.

devhardiyanto
Dashboard: switcher profil (select) di header Services -> applyProfile.
Settings tab Services: daftar profil + badge aktif + rename inline + hapus
(guard min 1) + buat profil dari selection saat ini. Konsisten token dark.

devhardiyanto
@devhardiyanto
devhardiyanto merged commit 3912fc0 into main Jul 23, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant