This commit is contained in:
@@ -57,39 +57,75 @@
|
||||
<v-form ref="nocodbFormRef" v-model="nocodbFormValid">
|
||||
<v-row>
|
||||
<v-col cols="12">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.url"
|
||||
label="NocoDB URL"
|
||||
variant="outlined"
|
||||
:rules="[rules.required, rules.url]"
|
||||
required
|
||||
placeholder="https://database.monacousa.org"
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.url"
|
||||
label="NocoDB URL"
|
||||
variant="outlined"
|
||||
:rules="[rules.required, rules.url]"
|
||||
:readonly="!editingFields.nocodbUrl"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="https://database.monacousa.org"
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.nocodbUrl ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.nocodbUrl ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('nocodbUrl')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.apiKey"
|
||||
label="API Token"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
required
|
||||
:type="showNocodbApiKey ? 'text' : 'password'"
|
||||
:append-inner-icon="showNocodbApiKey ? 'mdi-eye' : 'mdi-eye-off'"
|
||||
@click:append-inner="showNocodbApiKey = !showNocodbApiKey"
|
||||
placeholder="Enter your NocoDB API token"
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.apiKey"
|
||||
label="API Token"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
:readonly="!editingFields.nocodbApiKey"
|
||||
:type="showNocodbApiKey ? 'text' : 'password'"
|
||||
:append-inner-icon="showNocodbApiKey ? 'mdi-eye' : 'mdi-eye-off'"
|
||||
@click:append-inner="showNocodbApiKey = !showNocodbApiKey"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="Enter your NocoDB API token"
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.nocodbApiKey ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.nocodbApiKey ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('nocodbApiKey')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.baseId"
|
||||
label="Base ID"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
required
|
||||
placeholder="your-base-id"
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.baseId"
|
||||
label="Base ID"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
:readonly="!editingFields.nocodbBaseId"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="your-base-id"
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.nocodbBaseId ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.nocodbBaseId ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('nocodbBaseId')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
@@ -97,42 +133,78 @@
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.tables.members"
|
||||
label="Members Table ID"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
required
|
||||
placeholder="members-table-id"
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.tables.members"
|
||||
label="Members Table ID"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
:readonly="!editingFields.membersTableId"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="members-table-id"
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.membersTableId ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.membersTableId ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('membersTableId')"
|
||||
/>
|
||||
</div>
|
||||
<div class="text-caption text-medium-emphasis mt-1">
|
||||
Configure the table ID for the Members functionality
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.tables.events"
|
||||
label="Events Table ID"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
required
|
||||
placeholder="events-table-id"
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.tables.events"
|
||||
label="Events Table ID"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
:readonly="!editingFields.eventsTableId"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="events-table-id"
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.eventsTableId ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.eventsTableId ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('eventsTableId')"
|
||||
/>
|
||||
</div>
|
||||
<div class="text-caption text-medium-emphasis mt-1">
|
||||
Configure the table ID for the Events functionality
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.tables.rsvps"
|
||||
label="RSVPs Table ID"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
required
|
||||
placeholder="rsvps-table-id"
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="nocodbForm.tables.rsvps"
|
||||
label="RSVPs Table ID"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
:readonly="!editingFields.rsvpsTableId"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="rsvps-table-id"
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.rsvpsTableId ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.rsvpsTableId ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('rsvpsTableId')"
|
||||
/>
|
||||
</div>
|
||||
<div class="text-caption text-medium-emphasis mt-1">
|
||||
Configure the table ID for the Event RSVPs functionality
|
||||
</div>
|
||||
@@ -186,32 +258,56 @@
|
||||
<v-form ref="recaptchaFormRef" v-model="recaptchaFormValid">
|
||||
<v-row>
|
||||
<v-col cols="12">
|
||||
<v-text-field
|
||||
v-model="recaptchaForm.siteKey"
|
||||
label="Site Key (Public)"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
required
|
||||
placeholder="6Lc..."
|
||||
hint="This key is visible to users on the frontend"
|
||||
persistent-hint
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="recaptchaForm.siteKey"
|
||||
label="Site Key (Public)"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
:readonly="!editingFields.recaptchaSiteKey"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="6Lc..."
|
||||
hint="This key is visible to users on the frontend"
|
||||
persistent-hint
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.recaptchaSiteKey ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.recaptchaSiteKey ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('recaptchaSiteKey')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
<v-text-field
|
||||
v-model="recaptchaForm.secretKey"
|
||||
label="Secret Key (Private)"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
required
|
||||
:type="showRecaptchaSecret ? 'text' : 'password'"
|
||||
:append-inner-icon="showRecaptchaSecret ? 'mdi-eye' : 'mdi-eye-off'"
|
||||
@click:append-inner="showRecaptchaSecret = !showRecaptchaSecret"
|
||||
placeholder="6Lc..."
|
||||
hint="This key is kept secret on the server"
|
||||
persistent-hint
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="recaptchaForm.secretKey"
|
||||
label="Secret Key (Private)"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
:readonly="!editingFields.recaptchaSecretKey"
|
||||
:type="showRecaptchaSecret ? 'text' : 'password'"
|
||||
:append-inner-icon="showRecaptchaSecret ? 'mdi-eye' : 'mdi-eye-off'"
|
||||
@click:append-inner="showRecaptchaSecret = !showRecaptchaSecret"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="6Lc..."
|
||||
hint="This key is kept secret on the server"
|
||||
persistent-hint
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.recaptchaSecretKey ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.recaptchaSecretKey ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('recaptchaSecretKey')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
@@ -249,17 +345,29 @@
|
||||
<v-form ref="registrationFormRef" v-model="registrationFormValid">
|
||||
<v-row>
|
||||
<v-col cols="12" md="6">
|
||||
<v-text-field
|
||||
v-model.number="registrationForm.membershipFee"
|
||||
label="Annual Membership Fee (EUR)"
|
||||
variant="outlined"
|
||||
:rules="[rules.required, rules.positiveNumber]"
|
||||
required
|
||||
type="number"
|
||||
min="1"
|
||||
placeholder="50"
|
||||
prefix="€"
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model.number="registrationForm.membershipFee"
|
||||
label="Annual Membership Fee (EUR)"
|
||||
variant="outlined"
|
||||
:rules="[rules.required, rules.positiveNumber]"
|
||||
:readonly="!editingFields.membershipFee"
|
||||
autocomplete="off"
|
||||
required
|
||||
type="number"
|
||||
min="1"
|
||||
placeholder="50"
|
||||
prefix="€"
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.membershipFee ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.membershipFee ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('membershipFee')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12" md="6">
|
||||
@@ -267,29 +375,53 @@
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
<v-text-field
|
||||
v-model="registrationForm.iban"
|
||||
label="Bank IBAN"
|
||||
variant="outlined"
|
||||
:rules="[rules.required, rules.iban]"
|
||||
required
|
||||
placeholder="DE89 3704 0044 0532 0130 00"
|
||||
hint="International Bank Account Number for membership dues"
|
||||
persistent-hint
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="registrationForm.iban"
|
||||
label="Bank IBAN"
|
||||
variant="outlined"
|
||||
:rules="[rules.required, rules.iban]"
|
||||
:readonly="!editingFields.iban"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="DE89 3704 0044 0532 0130 00"
|
||||
hint="International Bank Account Number for membership dues"
|
||||
persistent-hint
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.iban ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.iban ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('iban')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
<v-text-field
|
||||
v-model="registrationForm.accountHolder"
|
||||
label="Account Holder Name"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
required
|
||||
placeholder="MonacoUSA Association"
|
||||
hint="Name on the bank account"
|
||||
persistent-hint
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="registrationForm.accountHolder"
|
||||
label="Account Holder Name"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
:readonly="!editingFields.accountHolder"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="MonacoUSA Association"
|
||||
hint="Name on the bank account"
|
||||
persistent-hint
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.accountHolder ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.accountHolder ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('accountHolder')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
@@ -335,32 +467,56 @@
|
||||
<v-form ref="emailFormRef" v-model="emailFormValid">
|
||||
<v-row>
|
||||
<v-col cols="12" md="6">
|
||||
<v-text-field
|
||||
v-model="emailForm.host"
|
||||
label="SMTP Host"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
required
|
||||
placeholder="smtp.gmail.com"
|
||||
hint="Your SMTP server hostname"
|
||||
persistent-hint
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="emailForm.host"
|
||||
label="SMTP Host"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
:readonly="!editingFields.smtpHost"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="smtp.gmail.com"
|
||||
hint="Your SMTP server hostname"
|
||||
persistent-hint
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.smtpHost ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.smtpHost ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('smtpHost')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12" md="6">
|
||||
<v-text-field
|
||||
v-model.number="emailForm.port"
|
||||
label="Port"
|
||||
variant="outlined"
|
||||
:rules="[rules.required, rules.validPort]"
|
||||
required
|
||||
type="number"
|
||||
min="1"
|
||||
max="65535"
|
||||
placeholder="587"
|
||||
hint="Usually 587 (TLS) or 465 (SSL)"
|
||||
persistent-hint
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model.number="emailForm.port"
|
||||
label="Port"
|
||||
variant="outlined"
|
||||
:rules="[rules.required, rules.validPort]"
|
||||
:readonly="!editingFields.smtpPort"
|
||||
autocomplete="off"
|
||||
required
|
||||
type="number"
|
||||
min="1"
|
||||
max="65535"
|
||||
placeholder="587"
|
||||
hint="Usually 587 (TLS) or 465 (SSL)"
|
||||
persistent-hint
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.smtpPort ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.smtpPort ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('smtpPort')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
@@ -377,55 +533,103 @@
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12" md="6">
|
||||
<v-text-field
|
||||
v-model="emailForm.username"
|
||||
label="Username"
|
||||
variant="outlined"
|
||||
placeholder="your-email@domain.com"
|
||||
hint="SMTP authentication username (usually your email)"
|
||||
persistent-hint
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="emailForm.username"
|
||||
label="Username"
|
||||
variant="outlined"
|
||||
:readonly="!editingFields.smtpUsername"
|
||||
autocomplete="off"
|
||||
placeholder="your-email@domain.com"
|
||||
hint="SMTP authentication username (usually your email)"
|
||||
persistent-hint
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.smtpUsername ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.smtpUsername ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('smtpUsername')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12" md="6">
|
||||
<v-text-field
|
||||
v-model="emailForm.password"
|
||||
label="Password"
|
||||
variant="outlined"
|
||||
:type="showEmailPassword ? 'text' : 'password'"
|
||||
:append-inner-icon="showEmailPassword ? 'mdi-eye' : 'mdi-eye-off'"
|
||||
@click:append-inner="showEmailPassword = !showEmailPassword"
|
||||
placeholder="Enter SMTP password"
|
||||
hint="SMTP authentication password or app password"
|
||||
persistent-hint
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="emailForm.password"
|
||||
label="Password"
|
||||
variant="outlined"
|
||||
:readonly="!editingFields.smtpPassword"
|
||||
:type="showEmailPassword ? 'text' : 'password'"
|
||||
:append-inner-icon="showEmailPassword ? 'mdi-eye' : 'mdi-eye-off'"
|
||||
@click:append-inner="showEmailPassword = !showEmailPassword"
|
||||
autocomplete="off"
|
||||
placeholder="Enter SMTP password"
|
||||
hint="SMTP authentication password or app password"
|
||||
persistent-hint
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.smtpPassword ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.smtpPassword ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('smtpPassword')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12" md="6">
|
||||
<v-text-field
|
||||
v-model="emailForm.fromAddress"
|
||||
label="From Email Address"
|
||||
variant="outlined"
|
||||
:rules="[rules.required, rules.email]"
|
||||
required
|
||||
type="email"
|
||||
placeholder="noreply@monacousa.org"
|
||||
hint="Email address that emails will be sent from"
|
||||
persistent-hint
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="emailForm.fromAddress"
|
||||
label="From Email Address"
|
||||
variant="outlined"
|
||||
:rules="[rules.required, rules.email]"
|
||||
:readonly="!editingFields.smtpFromAddress"
|
||||
autocomplete="off"
|
||||
required
|
||||
type="email"
|
||||
placeholder="noreply@monacousa.org"
|
||||
hint="Email address that emails will be sent from"
|
||||
persistent-hint
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.smtpFromAddress ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.smtpFromAddress ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('smtpFromAddress')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12" md="6">
|
||||
<v-text-field
|
||||
v-model="emailForm.fromName"
|
||||
label="From Name"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
required
|
||||
placeholder="MonacoUSA Portal"
|
||||
hint="Display name for outgoing emails"
|
||||
persistent-hint
|
||||
/>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<v-text-field
|
||||
v-model="emailForm.fromName"
|
||||
label="From Name"
|
||||
variant="outlined"
|
||||
:rules="[rules.required]"
|
||||
:readonly="!editingFields.smtpFromName"
|
||||
autocomplete="off"
|
||||
required
|
||||
placeholder="MonacoUSA Portal"
|
||||
hint="Display name for outgoing emails"
|
||||
persistent-hint
|
||||
class="flex-grow-1"
|
||||
/>
|
||||
<v-btn
|
||||
:icon="editingFields.smtpFromName ? 'mdi-check' : 'mdi-pencil'"
|
||||
:color="editingFields.smtpFromName ? 'success' : 'primary'"
|
||||
variant="outlined"
|
||||
size="small"
|
||||
@click="toggleEdit('smtpFromName')"
|
||||
/>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col cols="12">
|
||||
@@ -592,6 +796,32 @@ const emailTestStatus = ref<{ success: boolean; message: string } | null>(null);
|
||||
// Test email address
|
||||
const testEmailAddress = ref('');
|
||||
|
||||
// Editing state for fields (to prevent autofill interference)
|
||||
const editingFields = ref({
|
||||
nocodbUrl: false,
|
||||
nocodbApiKey: false,
|
||||
nocodbBaseId: false,
|
||||
membersTableId: false,
|
||||
eventsTableId: false,
|
||||
rsvpsTableId: false,
|
||||
recaptchaSiteKey: false,
|
||||
recaptchaSecretKey: false,
|
||||
membershipFee: false,
|
||||
iban: false,
|
||||
accountHolder: false,
|
||||
smtpHost: false,
|
||||
smtpPort: false,
|
||||
smtpUsername: false,
|
||||
smtpPassword: false,
|
||||
smtpFromAddress: false,
|
||||
smtpFromName: false
|
||||
});
|
||||
|
||||
// Toggle edit mode for a field
|
||||
const toggleEdit = (fieldName: keyof typeof editingFields.value) => {
|
||||
editingFields.value[fieldName] = !editingFields.value[fieldName];
|
||||
};
|
||||
|
||||
// Form data
|
||||
const nocodbForm = ref<NocoDBSettings>({
|
||||
url: 'https://database.monacousa.org',
|
||||
|
||||
Reference in New Issue
Block a user