|
| 1 | +<script lang="ts"> |
| 2 | + import { valueForUnspecifiedDisclosure, valueForNoUsageDisclosure } from '$lib/utils/mod'; |
| 3 | + import { getTolgee, getTranslate, T } from '@tolgee/svelte'; |
| 4 | +
|
| 5 | + // eslint bug? https://stackoverflow.com/questions/63961803/eslint-says-all-enums-in-typescript-app-are-already-declared-in-the-upper-scope |
| 6 | + // eslint-disable-next-line no-shadow |
| 7 | + enum NetworkDisclosureState { |
| 8 | + Unspecified = 'Unspecified', |
| 9 | + NoNetworkUsage = 'Does not contact external networks', |
| 10 | + YesNetworkUsage = 'Contacts external networks' |
| 11 | + } |
| 12 | +
|
| 13 | + const networkDisclosureStateDescriptionKeys: Record<NetworkDisclosureState, string> = { |
| 14 | + Unspecified: 'mod.network_disclosure.state.unspecified.description', |
| 15 | + 'Does not contact external networks': 'mod.network_disclosure.state.no_network_usage.description', |
| 16 | + 'Contacts external networks': 'mod.network_disclosure.state.yes_network_usage.description' |
| 17 | + }; |
| 18 | +
|
| 19 | + export let disclosure: string | null = null; |
| 20 | +
|
| 21 | + let disclosureState = NetworkDisclosureState.Unspecified; |
| 22 | + disclosureState = |
| 23 | + disclosure === null |
| 24 | + ? NetworkDisclosureState.Unspecified |
| 25 | + : disclosure.length === 0 |
| 26 | + ? NetworkDisclosureState.NoNetworkUsage |
| 27 | + : NetworkDisclosureState.YesNetworkUsage; |
| 28 | +
|
| 29 | + let oldDisclosure: string | null = null; |
| 30 | + oldDisclosure = disclosure; |
| 31 | +
|
| 32 | + const onStatePickerChange = () => { |
| 33 | + if (disclosure?.length > 0) { |
| 34 | + // Hold onto the user's previously entered value if they explore other dropdown options. |
| 35 | + oldDisclosure = disclosure; |
| 36 | + } |
| 37 | +
|
| 38 | + disclosure = { |
| 39 | + [NetworkDisclosureState.Unspecified]: valueForUnspecifiedDisclosure, |
| 40 | + [NetworkDisclosureState.NoNetworkUsage]: valueForNoUsageDisclosure, |
| 41 | + [NetworkDisclosureState.YesNetworkUsage]: oldDisclosure |
| 42 | + }[disclosureState]; |
| 43 | + }; |
| 44 | +
|
| 45 | + export const { t } = getTranslate(); |
| 46 | + export const tolgee = getTolgee().value; |
| 47 | +</script> |
| 48 | + |
| 49 | +<label class="label"> |
| 50 | + <span class="underline decoration-dotted" title={$t('mod.network_disclosure.header.tooltip')} |
| 51 | + ><T keyName="mod.network_disclosure.header" /></span> |
| 52 | + <select class="select" style="margin-bottom: 10px" bind:value={disclosureState} on:change={onStatePickerChange}> |
| 53 | + {#each Object.values(NetworkDisclosureState) as state} |
| 54 | + <option value={state}>{state}</option> |
| 55 | + {/each} |
| 56 | + </select> |
| 57 | + <p |
| 58 | + class="compatibility-state-description pb-4 {disclosureState === NetworkDisclosureState.Unspecified |
| 59 | + ? 'text-warning-500' |
| 60 | + : ''}"> |
| 61 | + <T keyName={networkDisclosureStateDescriptionKeys[disclosureState]} /> |
| 62 | + </p> |
| 63 | +</label> |
| 64 | +{#if disclosureState == NetworkDisclosureState.YesNetworkUsage} |
| 65 | + <label class="label"> |
| 66 | + <span><T keyName="mod.network_disclosure.developer.description.header" /></span> |
| 67 | + <textarea |
| 68 | + class="textarea p-4" |
| 69 | + bind:value={disclosure} |
| 70 | + placeholder={$t('mod.network_disclosure.developer.description.placeholder')} /> |
| 71 | + </label> |
| 72 | +{/if} |
0 commit comments