mirror of
https://github.com/we-promise/sure.git
synced 2026-04-07 14:31:25 +00:00
* Add family moniker selection and dynamic UI labels Introduce a Family moniker persisted in the database with allowed values Family/Group, add required onboarding selection for it, and thread moniker-aware copy through key user-facing views and locales. Also add helper methods and tests for onboarding form presence and family moniker behavior. * Small copy edits/change moniker question order * Conditional Group/Family onboarding flow fixes * Fix label * Grouping of fields * Profile Info page Group/Family changes * Only admins can change Group/Family moniker * Repetitive defaults * Moniker in Account model * Moniker in User model * Auth fix * Sure product is also a moniker --------- Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
70 lines
1.9 KiB
JavaScript
70 lines
1.9 KiB
JavaScript
import { Controller } from "@hotwired/stimulus";
|
|
|
|
// Connects to data-controller="onboarding"
|
|
export default class extends Controller {
|
|
static targets = ["nameField", "monikerRadio"]
|
|
static values = {
|
|
householdNameLabel: String,
|
|
householdNamePlaceholder: String,
|
|
groupNameLabel: String,
|
|
groupNamePlaceholder: String
|
|
}
|
|
|
|
connect() {
|
|
this.updateNameFieldForCurrentMoniker();
|
|
}
|
|
|
|
setLocale(event) {
|
|
this.refreshWithParam("locale", event.target.value);
|
|
}
|
|
|
|
setDateFormat(event) {
|
|
this.refreshWithParam("date_format", event.target.value);
|
|
}
|
|
|
|
setCurrency(event) {
|
|
this.refreshWithParam("currency", event.target.value);
|
|
}
|
|
|
|
setTheme(event) {
|
|
document.documentElement.setAttribute("data-theme", event.target.value);
|
|
}
|
|
|
|
updateNameFieldForCurrentMoniker(event = null) {
|
|
if (!this.hasNameFieldTarget) {
|
|
return;
|
|
}
|
|
|
|
const selectedMonikerRadio = event?.target?.dataset?.onboardingMoniker ? event.target : this.monikerRadioTargets.find((radio) => radio.checked);
|
|
const selectedMoniker = selectedMonikerRadio?.dataset?.onboardingMoniker;
|
|
const isGroup = selectedMoniker === "Group";
|
|
|
|
this.nameFieldTarget.placeholder = isGroup ? this.groupNamePlaceholderValue : this.householdNamePlaceholderValue;
|
|
|
|
const label = this.nameFieldTarget.closest(".form-field")?.querySelector(".form-field__label");
|
|
if (!label) {
|
|
return;
|
|
}
|
|
|
|
if (isGroup) {
|
|
label.textContent = this.groupNameLabelValue;
|
|
return;
|
|
}
|
|
|
|
label.textContent = this.householdNameLabelValue;
|
|
}
|
|
|
|
refreshWithParam(key, value) {
|
|
const url = new URL(window.location);
|
|
url.searchParams.set(key, value);
|
|
|
|
// Preserve existing params by getting the current search string
|
|
// and appending our new param to it
|
|
const currentParams = new URLSearchParams(window.location.search);
|
|
currentParams.set(key, value);
|
|
|
|
// Refresh the page with all params
|
|
window.location.search = currentParams.toString();
|
|
}
|
|
}
|