Skip to content

Commit fcec116

Browse files
DustinPhamR-Bower
andcommitted
feat(file-upload): add framework core bindings
Co-authored-by: Ryan Bower <rbower@qti.qualcomm.com> Signed-off-by: Dustin Pham <dustinpham95@gmail.com>
1 parent 4753e06 commit fcec116

22 files changed

Lines changed: 1155 additions & 0 deletions
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {Directive, type OnInit} from "@angular/core"
5+
6+
import {useTrackBindings} from "@qualcomm-ui/angular-core/machine"
7+
8+
import {useFileUploadContext} from "./file-upload-context.service"
9+
10+
@Directive()
11+
export class CoreFileUploadClearTriggerDirective implements OnInit {
12+
protected readonly fileUploadContext = useFileUploadContext()
13+
14+
protected readonly trackBindings = useTrackBindings(() =>
15+
this.fileUploadContext().getClearTriggerBindings(),
16+
)
17+
18+
ngOnInit() {
19+
this.trackBindings()
20+
}
21+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {
5+
booleanAttribute,
6+
computed,
7+
Directive,
8+
input,
9+
type OnInit,
10+
} from "@angular/core"
11+
12+
import {useId, useOnDestroy} from "@qualcomm-ui/angular-core/common"
13+
import {useTrackBindings} from "@qualcomm-ui/angular-core/machine"
14+
import type {SignalifyInput} from "@qualcomm-ui/angular-core/signals"
15+
import type {DropzoneProps} from "@qualcomm-ui/core/file-upload"
16+
import type {Booleanish} from "@qualcomm-ui/utils/coercion"
17+
18+
import {useFileUploadContext} from "./file-upload-context.service"
19+
20+
@Directive()
21+
export class CoreFileUploadDropzoneDirective
22+
implements SignalifyInput<DropzoneProps>, OnInit
23+
{
24+
/**
25+
* Whether to disable the click event on the dropzone
26+
*/
27+
readonly disableClick = input<boolean | undefined, Booleanish>(undefined, {
28+
transform: booleanAttribute,
29+
})
30+
31+
readonly id = input<string>()
32+
33+
private readonly hostId = computed(() => useId(this, this.id()))
34+
35+
protected readonly fileUploadContext = useFileUploadContext()
36+
37+
protected readonly onDestroy = useOnDestroy()
38+
39+
protected readonly trackBindings = useTrackBindings(() =>
40+
this.fileUploadContext().getDropzoneBindings({
41+
disableClick: this.disableClick(),
42+
id: this.hostId(),
43+
onDestroy: this.onDestroy,
44+
}),
45+
)
46+
47+
ngOnInit() {
48+
this.trackBindings()
49+
}
50+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {computed, Directive, input, type OnInit} from "@angular/core"
5+
6+
import {useId, useOnDestroy} from "@qualcomm-ui/angular-core/common"
7+
import {useTrackBindings} from "@qualcomm-ui/angular-core/machine"
8+
9+
import {useFileUploadContext} from "./file-upload-context.service"
10+
11+
@Directive()
12+
export class CoreFileUploadErrorTextDirective implements OnInit {
13+
readonly id = input<string>()
14+
15+
protected readonly fileUploadContext = useFileUploadContext()
16+
17+
private readonly hostId = computed(() => useId(this, this.id()))
18+
19+
protected readonly onDestroy = useOnDestroy()
20+
21+
protected readonly trackBindings = useTrackBindings(() =>
22+
this.fileUploadContext().getErrorTextBindings({
23+
id: this.hostId(),
24+
onDestroy: this.onDestroy,
25+
}),
26+
)
27+
28+
ngOnInit() {
29+
this.trackBindings()
30+
}
31+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {computed, Directive, input, type OnInit} from "@angular/core"
5+
6+
import {useId, useOnDestroy} from "@qualcomm-ui/angular-core/common"
7+
import {useTrackBindings} from "@qualcomm-ui/angular-core/machine"
8+
9+
import {useFileUploadContext} from "./file-upload-context.service"
10+
11+
@Directive()
12+
export class CoreFileUploadHiddenInputDirective implements OnInit {
13+
/**
14+
* {@link https://www.w3schools.com/html/html_id.asp id attribute}. If
15+
* omitted, a unique identifier will be generated for accessibility.
16+
*/
17+
readonly id = input<string>()
18+
19+
protected readonly fileUploadContext = useFileUploadContext()
20+
21+
protected readonly onDestroy = useOnDestroy()
22+
private readonly hostId = computed(() => useId(this, this.id()))
23+
24+
protected readonly trackBindings = useTrackBindings(() =>
25+
this.fileUploadContext().getHiddenInputBindings({
26+
id: this.hostId(),
27+
}),
28+
)
29+
30+
ngOnInit() {
31+
this.trackBindings()
32+
}
33+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {Directive, type OnInit} from "@angular/core"
5+
6+
import {useTrackBindings} from "@qualcomm-ui/angular-core/machine"
7+
8+
import {useFileUploadContext} from "./file-upload-context.service"
9+
import {useFileUploadItemContext} from "./file-upload-item-context.service"
10+
11+
@Directive()
12+
export class CoreFileUploadItemDeleteTriggerDirective implements OnInit {
13+
protected readonly fileUploadContext = useFileUploadContext()
14+
protected readonly fileUploadItemContext = useFileUploadItemContext()
15+
16+
protected readonly trackBindings = useTrackBindings(() =>
17+
this.fileUploadContext().getItemDeleteTriggerBindings(
18+
this.fileUploadItemContext(),
19+
),
20+
)
21+
22+
ngOnInit() {
23+
this.trackBindings()
24+
}
25+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {computed, Directive, input, type OnInit} from "@angular/core"
5+
6+
import {useTrackBindings} from "@qualcomm-ui/angular-core/machine"
7+
import type {SignalifyInput} from "@qualcomm-ui/angular-core/signals"
8+
import type {ItemGroupProps, ItemType} from "@qualcomm-ui/core/file-upload"
9+
10+
import {useFileUploadContext} from "./file-upload-context.service"
11+
12+
@Directive()
13+
export class CoreFileUploadItemGroupDirective
14+
implements SignalifyInput<ItemGroupProps>, OnInit
15+
{
16+
/**
17+
* The type of items in this group (accepted or rejected)
18+
*/
19+
readonly type = input<ItemType | undefined>()
20+
21+
protected readonly fileUploadContext = useFileUploadContext()
22+
23+
protected readonly trackBindings = useTrackBindings(() =>
24+
this.fileUploadContext().getItemGroupBindings(
25+
computed(() => ({
26+
type: this.type(),
27+
}))(),
28+
),
29+
)
30+
31+
ngOnInit() {
32+
this.trackBindings()
33+
}
34+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {Directive, type OnInit} from "@angular/core"
5+
6+
import {useTrackBindings} from "@qualcomm-ui/angular-core/machine"
7+
8+
import {useFileUploadContext} from "./file-upload-context.service"
9+
import {useFileUploadItemContext} from "./file-upload-item-context.service"
10+
11+
@Directive()
12+
export class CoreFileUploadItemNameDirective implements OnInit {
13+
protected readonly fileUploadContext = useFileUploadContext()
14+
protected readonly fileUploadItemContext = useFileUploadItemContext()
15+
16+
protected readonly trackBindings = useTrackBindings(() =>
17+
this.fileUploadContext().getItemNameBindings(this.fileUploadItemContext()),
18+
)
19+
20+
ngOnInit() {
21+
this.trackBindings()
22+
}
23+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {Directive, input, type OnInit} from "@angular/core"
5+
6+
import {useTrackBindings} from "@qualcomm-ui/angular-core/machine"
7+
import type {SignalifyInput} from "@qualcomm-ui/angular-core/signals"
8+
import type {ItemPreviewImageProps} from "@qualcomm-ui/core/file-upload"
9+
10+
import {useFileUploadContext} from "./file-upload-context.service"
11+
import {useFileUploadItemContext} from "./file-upload-item-context.service"
12+
13+
@Directive()
14+
export class CoreFileUploadItemPreviewImageDirective
15+
implements
16+
Omit<SignalifyInput<ItemPreviewImageProps>, "file" | "fileErrors" | "type">,
17+
OnInit
18+
{
19+
/**
20+
* The URL of the image to preview
21+
*/
22+
readonly url = input.required<string>()
23+
24+
protected readonly fileUploadContext = useFileUploadContext()
25+
protected readonly fileUploadItemContext = useFileUploadItemContext()
26+
27+
protected readonly trackBindings = useTrackBindings(() =>
28+
this.fileUploadContext().getItemPreviewImageBindings({
29+
...this.fileUploadItemContext(),
30+
url: this.url(),
31+
}),
32+
)
33+
34+
ngOnInit() {
35+
this.trackBindings()
36+
}
37+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {Directive, type OnInit} from "@angular/core"
5+
6+
import {useTrackBindings} from "@qualcomm-ui/angular-core/machine"
7+
8+
import {useFileUploadContext} from "./file-upload-context.service"
9+
import {useFileUploadItemContext} from "./file-upload-item-context.service"
10+
11+
@Directive()
12+
export class CoreFileUploadItemPreviewDirective implements OnInit {
13+
protected readonly fileUploadContext = useFileUploadContext()
14+
protected readonly fileUploadItemContext = useFileUploadItemContext()
15+
16+
protected readonly trackBindings = useTrackBindings(() =>
17+
this.fileUploadContext().getItemPreviewBindings(
18+
this.fileUploadItemContext(),
19+
),
20+
)
21+
22+
ngOnInit() {
23+
this.trackBindings()
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
import {Directive, type OnInit} from "@angular/core"
5+
6+
import {useTrackBindings} from "@qualcomm-ui/angular-core/machine"
7+
8+
import {useFileUploadContext} from "./file-upload-context.service"
9+
import {useFileUploadItemContext} from "./file-upload-item-context.service"
10+
11+
@Directive()
12+
export class CoreFileUploadItemSizeTextDirective implements OnInit {
13+
protected readonly fileUploadContext = useFileUploadContext()
14+
protected readonly fileUploadItemContext = useFileUploadItemContext()
15+
16+
protected readonly trackBindings = useTrackBindings(() =>
17+
this.fileUploadContext().getItemSizeTextBindings(
18+
this.fileUploadItemContext(),
19+
),
20+
)
21+
22+
ngOnInit() {
23+
this.trackBindings()
24+
}
25+
}

0 commit comments

Comments
 (0)