{#if (!setting.cloudonly || isCloudHosted()) && showSetting(setting.key, $values) && !(setting.hiddenIfNull && $values[setting.key] == null) && !(setting.hiddenIfEmpty && !$values[setting.key])} {#if setting.ee_only != undefined && !$enterpriseLicense}
EE only {#if setting.ee_only != ''}{setting.ee_only}{/if}
{/if} {#if setting.fieldType == 'select'}
{#snippet children({ item: toggleButton })} {#each setting.select_items ?? [] as item} {/each} {/snippet}
{:else if setting.fieldType == 'select_python'}
{#snippet children({ item: toggleButtonn })} {#each setting.select_items ?? [] as item} {/each} {#snippet trigger()} {#if setting.select_items?.some((e) => e.label == $values[setting.key] || e.value == $values[setting.key])} {:else} {/if} {/snippet} {#snippet content()} {#if isPyFetching}
{:else} {#snippet children({ item: toggleButtonn })} {#each pythonAvailableVersions as item} {/each} {/snippet} {/if} {/snippet}
{/snippet}
{:else} {#snippet settingContent()} {setting.label} {#if setting.description} {@html setting.description} {/if} {#if setting.tooltip} {setting.tooltip} {/if} {#if $values} {@const hasError = setting.isValid && !setting.isValid($values[setting.key])} {#if loading} {:else if setting.fieldType == 'text'} {#if setting.advancedToggle}
{ if (setting.advancedToggle) { $values = setting.advancedToggle.onChange($values) } }} />
{/if} {:else if setting.fieldType == 'textarea'} {#if setting.key == 'saml_metadata'}
{/if} {:else if setting.fieldType == 'codearea'} {:else if setting.fieldType == 'license_key'} {@const { valid, expiration } = parseLicenseKey($values[setting.key] ?? '')}
{ licenseKeyChanged = true }} bind:password={$values[setting.key]} />
{#if $values[setting.key]?.length > 0} {#if valid}
License key expires on {expiration ?? ''}
{:else if expiration}
{#if $values[setting.key]?.endsWith('__dev')} Dev license key expired on {expiration}.
If even after successful renewal, your dev license key is still expired, it means that your production key has expired due to unpaid invoices or excessive use of your production instance. {:else} License key expired on {expiration}. {/if}
{:else}
Invalid license key format
{/if} {/if} {#if latestKeyRenewalAttempt} {@const attemptedAt = new Date(latestKeyRenewalAttempt.attempted_at).toLocaleString()} {@const isTrial = latestKeyRenewalAttempt.result.startsWith('error: trial:')}
{#if latestKeyRenewalAttempt.result === 'success'} {:else} {/if} {#if latestKeyRenewalAttempt.result === 'success' && $values[setting.key]?.endsWith('__dev')} Latest dev key renewal succeeded on {attemptedAt}. The dev key expiry was updated to align with your current production key's expiration date. {:else} {latestKeyRenewalAttempt.result === 'success' ? 'Latest key renewal succeeded' : isTrial ? 'Latest key renewal ignored because in trial' : 'Latest key renewal failed'} on {attemptedAt} {/if}
{#snippet text()}
{#if latestKeyRenewalAttempt?.result === 'success'} Latest key renewal succeeded on {attemptedAt} {:else if isTrial} License key cannot be renewed during trial ({attemptedAt}) {:else} Latest key renewal failed on {attemptedAt}: {latestKeyRenewalAttempt?.result.replace( 'error: ', '' )} {/if}
As long as invoices are paid and usage corresponds to the subscription, the key is renewed daily with a validity of 35 days (grace period).
{/snippet}
{/if} {#if licenseKeyChanged && !$enterpriseLicense} {#if version.startsWith('CE')}
License key is set but image used is the Community Edition {version}. Switch image to EE.
{/if} {/if} {#if valid || expiration}
{/if}
{:else if setting.fieldType == 'email'} {:else if setting.key == 'critical_alert_mute_ui'}
{:else if setting.fieldType == 'critical_error_channels'}
{#if $enterpriseLicense && Array.isArray($values[setting.key])} {#each $values[setting.key] ?? [] as v, i}
{#if v && 'slack_channel' in v} { if (e.target?.['value']) { $values[setting.key][i] = { slack_channel: e.target['value'] } } }} value={v?.slack_channel ?? ''} /> {:else if v && 'teams_channel' in v}
$values['critical_error_channels'][i]?.teams_channel ? { team_id: $values['critical_error_channels'][i]?.teams_channel?.team_id, team_name: $values['critical_error_channels'][i]?.teams_channel ?.team_name } : undefined, (team) => handleTeamChange(team, i) } /> {#if $values['critical_error_channels'][i]?.teams_channel?.team_id} $values['critical_error_channels'][i]?.teams_channel?.channel_id ? { channel_id: $values['critical_error_channels'][i]?.teams_channel ?.channel_id, channel_name: $values['critical_error_channels'][i]?.teams_channel ?.channel_name } : undefined, (channel) => handleChannelChange(channel, i) } onError={(e) => sendUserToast('Failed to load channels: ' + e.message, true)} /> {/if}
{:else} { if (e.target?.['value']) { $values[setting.key][i] = { email: e.target['value'] } } }} value={v?.email ?? ''} /> {/if}
{/each} {/if}
{:else if setting.fieldType == 'slack_connect'}
{#if $values[setting.key] && 'team_name' in $values[setting.key]}
Connected to {$values[setting.key]['team_name']}
{:else} {/if}
{:else if setting.fieldType == 'indexer_rates'}
{#if $values[setting.key]}
{ if (e.target instanceof HTMLInputElement) { if (e.target.valueAsNumber) { $values[setting.key].writer_memory_budget = e.target.valueAsNumber * (1024 * 1024) } } }} value={$values[setting.key].writer_memory_budget / (1024 * 1024)} />

Completed Job Index

{ if (e.target instanceof HTMLInputElement) { if (e.target.valueAsNumber) { $values[setting.key].max_indexed_job_log_size = e.target.valueAsNumber * 1024 } } }} value={$values[setting.key].max_indexed_job_log_size / 1024} />

Service Logs Index

Reset Index

This buttons will clear the whole index, and the service will start reindexing from scratch. Full text search might be down during this time.
{ let r = await IndexSearchService.clearIndex({ idxName: 'JobIndex' }) console.log('asasd') sendUserToast(r) }}>Clear Jobs Index { let r = await IndexSearchService.clearIndex({ idxName: 'ServiceLogIndex' }) console.log('asasd') sendUserToast(r) }}>Clear Service Logs Index
{/if}
{:else if setting.fieldType == 'smtp_connect'}
{#if $values[setting.key]}
{ if ($values[setting.key].smtp_disable_tls) { $values[setting.key].smtp_tls_implicit = false } }} options={{ right: 'Disable TLS' }} label="Disable TLS" />
{/if}
{:else if setting.fieldType == 'otel'}
{#if $values[setting.key]}
gRPC
{/if}
{:else if setting.fieldType == 'object_store_config'}
{:else if setting.fieldType == 'critical_alerts_on_db_oversize'} {#if $values[setting.key]}
{#if $values[setting.key].enabled} GB {/if}
{/if} {:else if setting.fieldType == 'number'} {:else if setting.fieldType == 'password'} {:else if setting.fieldType == 'boolean'}
{:else if setting.fieldType == 'seconds'}
{:else if setting.fieldType == 'select'} TODO {/if} {#if hasError} {setting.error ?? ''} {/if} {:else} {/if} {/snippet} {#if ['codearea', 'object_store_config'].includes(setting.fieldType)}
{@render settingContent()}
{:else} {/if} {/if} {/if}