File component ts conversion
This commit is contained in:
parent
a442b3f280
commit
ed8160bdbb
|
@ -1,43 +1,47 @@
|
||||||
<script>
|
<script lang="ts">
|
||||||
import ActionButton from "../../ActionButton/ActionButton.svelte"
|
import ActionButton from "../../ActionButton/ActionButton.svelte"
|
||||||
import { uuid } from "../../helpers"
|
import { uuid } from "../../helpers"
|
||||||
import Icon from "../../Icon/Icon.svelte"
|
import Icon from "../../Icon/Icon.svelte"
|
||||||
import { createEventDispatcher } from "svelte"
|
import { createEventDispatcher } from "svelte"
|
||||||
|
|
||||||
export let value = null
|
const BYTES_IN_MB = 1000000
|
||||||
export let title = "Upload file"
|
|
||||||
export let disabled = false
|
export let value: File | undefined = undefined
|
||||||
export let allowClear = null
|
export let title: string = "Upload file"
|
||||||
export let extensions = null
|
export let disabled: boolean = false
|
||||||
export let handleFileTooLarge = null
|
export let allowClear: boolean | undefined = undefined
|
||||||
export let fileSizeLimit = BYTES_IN_MB * 20
|
export let extensions: string[] | undefined = undefined
|
||||||
export let id = null
|
export let handleFileTooLarge: ((file: File) => void) | undefined = undefined
|
||||||
export let previewUrl = null
|
export let fileSizeLimit: number = BYTES_IN_MB * 20
|
||||||
|
export let id: string | undefined = undefined
|
||||||
|
export let previewUrl: string | undefined = undefined
|
||||||
|
|
||||||
const fieldId = id || uuid()
|
const fieldId = id || uuid()
|
||||||
const BYTES_IN_KB = 1000
|
const BYTES_IN_KB = 1000
|
||||||
const BYTES_IN_MB = 1000000
|
|
||||||
|
|
||||||
const dispatch = createEventDispatcher()
|
const dispatch = createEventDispatcher()
|
||||||
|
|
||||||
let fileInput
|
let fileInput: HTMLInputElement | undefined
|
||||||
|
|
||||||
$: inputAccept = Array.isArray(extensions) ? extensions.join(",") : "*"
|
$: inputAccept = Array.isArray(extensions) ? extensions.join(",") : "*"
|
||||||
|
|
||||||
async function processFile(targetFile) {
|
async function processFile(targetFile: File | undefined) {
|
||||||
if (handleFileTooLarge && targetFile?.size >= fileSizeLimit) {
|
if (targetFile) {
|
||||||
handleFileTooLarge(targetFile)
|
if (handleFileTooLarge && targetFile.size >= fileSizeLimit) {
|
||||||
return
|
handleFileTooLarge(targetFile)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dispatch("change", targetFile)
|
||||||
}
|
}
|
||||||
dispatch("change", targetFile)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleFile(evt) {
|
function handleFile(evt: Event) {
|
||||||
processFile(evt.target.files[0])
|
const target = evt.target as HTMLInputElement
|
||||||
|
processFile(target.files?.[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearFile() {
|
function clearFile() {
|
||||||
dispatch("change", null)
|
dispatch("change", undefined)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -75,7 +79,9 @@
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<ActionButton {disabled} on:click={fileInput.click()}>{title}</ActionButton>
|
<ActionButton {disabled} on:click={() => fileInput?.click()}>
|
||||||
|
{title}
|
||||||
|
</ActionButton>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
<script>
|
<script lang="ts">
|
||||||
import Field from "./Field.svelte"
|
import Field from "./Field.svelte"
|
||||||
import { CoreFile } from "./Core"
|
import { CoreFile } from "./Core"
|
||||||
import { createEventDispatcher } from "svelte"
|
import { createEventDispatcher } from "svelte"
|
||||||
|
|
||||||
export let label = null
|
export let label: string | undefined = undefined
|
||||||
export let labelPosition = "above"
|
export let labelPosition: string = "above"
|
||||||
export let disabled = false
|
export let disabled: boolean = false
|
||||||
export let allowClear = null
|
export let allowClear: boolean | undefined = undefined
|
||||||
export let handleFileTooLarge = () => {}
|
export let handleFileTooLarge: (file: File) => void = () => {}
|
||||||
export let previewUrl = null
|
export let previewUrl: string | undefined = undefined
|
||||||
export let extensions = null
|
export let extensions: string[] | undefined = undefined
|
||||||
export let error = null
|
export let error: string | undefined = undefined
|
||||||
export let title = null
|
export let title: string | undefined = undefined
|
||||||
export let value = null
|
export let value: File | undefined = undefined
|
||||||
export let tooltip = null
|
export let tooltip: string | undefined = undefined
|
||||||
export let helpText = null
|
export let helpText: string | undefined = undefined
|
||||||
|
|
||||||
const dispatch = createEventDispatcher()
|
const dispatch = createEventDispatcher()
|
||||||
const onChange = e => {
|
const onChange = (e: CustomEvent) => {
|
||||||
value = e.detail
|
value = e.detail
|
||||||
dispatch("change", e.detail)
|
dispatch("change", e.detail)
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
<Field {helpText} {label} {labelPosition} {error} {tooltip}>
|
<Field {helpText} {label} {labelPosition} {error} {tooltip}>
|
||||||
<CoreFile
|
<CoreFile
|
||||||
{error}
|
|
||||||
{disabled}
|
{disabled}
|
||||||
{allowClear}
|
{allowClear}
|
||||||
{title}
|
{title}
|
||||||
|
|
Loading…
Reference in New Issue