Tambahkan opsi multipilih ke dalam komponen filter
Saat ini, pengguna tidak dapat memilih beberapa nilai untuk jenis filter yang sama secara berkelompok. Fitur multiselect akan memungkinkan pengguna untuk mencapai tujuan itu.
Mungkin, pendekatan terbaik adalah membuat panel baru untuk multiseleksi, mengikuti pendekatan yang sama yang digunakan dengan jenis filter rentang. Panel ini dapat menampilkan daftar yang dapat digulir dengan semua saran yang tersedia, kotak centang untuk memilih beberapa nilai, dan tombol Terapkan (sehingga perubahan dapat diabaikan jika tidak).
Lihat tangkapan layar terlampir.
Data tambahan:
Mulai ketik tombol filter, seperti biasa
Jika itu adalah filter multipilihan, maka tampilkan panel dengan opsi yang tersedia
Saat pengguna memperbarui pilihan kotak centang, teks dalam chip juga diperbarui
Setelah filter diterapkan, chip mencerminkan semua nilai yang diterapkan mengikuti pendekatan yang dipisahkan koma
Pengguna dapat kembali kapan saja dan mengklik chip sehingga panel dibuka lagi untuk interaksi lebih lanjut
.
Halo @kaikcreator ,
terima kasih telah mengajukan permintaan ini, kami pikir ini adalah fitur yang berguna untuk Bidang Filter. Apakah Anda sendiri bersedia berkontribusi?
Untuk yang terpilih untuk membuat fitur ini, inilah yang Anda perlukan untuk melanjutkan.
Pertama, cari tahu Proposal API yang menjelaskan bagaimana Anda akan membangun fitur .
Apa yang Anda perlukan untuk mencapai fitur itu dan apa yang akan berubah pada dasarnya. Bidang filter bukan untuk jiwa yang lemah jadi persiapkan diri Anda untuk mengatasi ini dengan percaya diri berpikir kritis .
Beberapa pertanyaan muncul mengenai beberapa kasus tepi. Apa yang terjadi ketika tidak ada kotak yang dicentang dan ketika banyak kotak dicentang.
CATATAN: Gunakan komponen kotak centang barista kami untuk mengimplementasikan fitur tersebut. Kami tidak suka melihat penyesuaian gaya karena kotak centang di tangkapan layar Anda sudah terlihat berbeda dari milik kami.
Hai @rowa-audil , ya. Mungkin bukan saya, tetapi seseorang di tim kami akan berkontribusi pada fitur ini, pasti.
Kami akan menyediakan API secepatnya, tetapi pertama-tama kami perlu memahami sedikit lebih baik bagaimana opsi jangkauan diterapkan, karena kami pikir kami harus mengikuti pendekatan serupa. Ada saran di sini @tomheller @ffriedl89 ?
@kaikcreator , bidang filter dalam keadaan saat ini tidak terlalu dapat diperpanjang, itu sebabnya rentangnya juga sangat terjalin dengan bidang filter pada umumnya. Ada banyak hal yang menentukan _overlay_ apa yang harus dibuka.
Saya kira Anda harus mengikuti pendekatan jangkauan, tetapi ada beberapa jebakan, yang mungkin perlu diperhitungkan.
Rentang mendefinisikan tipe datanya sendiri dalam definisi sumber data dari bidang filter (termasuk beberapa fungsi pembantu, yang membantu mengidentifikasi apakah node adalah node rentang atau bukan dan juga membandingkan node). Anda pasti akan membutuhkan fungsi serupa seperti itu.
Rentang mengimplementasikan versinya sendiri dari perilaku pelengkapan otomatis di dalam component , dan saya pikir ini juga akan menjadi pendekatan yang baik di sini.
Hamparan dan pemicu selalu dibuat saat bidang filter dibuat, _overlay_ dibuka secara terprogram oleh bidang filter. (jika overlay tidak ditampilkan, mereka dinonaktifkan pada pemicu untuk mencegahnya muncul secara visual).
Mode edit dalam bidang filter sedikit rumit dalam hal manajemen status, karena Anda perlu mengembalikan filter pengeditan sebagai filter saat ini. Anda mungkin memerlukan beberapa pengeditan dalam fungsi ini untuk melakukan ini dengan benar untuk mutli-select.
Terima kasih @tomheller , ini pasti akan banyak membantu kami!!!
Memikirkan kemungkinan grup, akan lebih baik untuk mengadopsi opsi dan grup pelengkapan otomatis
ts
export interface DtMultiSelectDef<OpGr = unknown> {
optionsOrGroups: DtNodeDef<OpGr>[];
}
Perbarui DtNodeFlags
dengan tipe baru
ts
export enum DtNodeFlags {
None = 0,
TypeAutocomplete = 1 << 0,
TypeFreeText = 1 << 1,
TypeOption = 1 << 2,
TypeGroup = 1 << 3,
TypeRange = 1 << 4,
TypeMultiSelect = 1 << 5,
RenderTypes = TypeAutocomplete | TypeFreeText | TypeRange | TypeMultiSelect,
Types = TypeAutocomplete | TypeFreeText | TypeOption | TypeGroup,
}
ts
export function isDtMultiSelectDef<D = unknown>(
def: DtNodeDef<D> | null,
): def is DtNodeDef<D> & DtMultiSelectDef {
return isDtNodeDef(def) && !!(def.nodeFlags & DtNodeFlags.TypeMultiSelect);
}
|Nama|Jenis|Deskripsi|
|-|-|-|
|optionsOrGroups| DtNodeDef<OpGr>[]
| Opsi yang sudah dipilih|
|Nama|Memancarkan|Deskripsi|
|-|-|-|
| dibuka | void
| Panel dibuka|
|tutup| void
| Panel ditutup|
| pilihanDikirim | DtNodeDef<OpGr>[]
| Opsi yang dipilih oleh pengguna|
|Nama|Jenis|Deskripsi|
|-|-|-|
|dtFilterFieldMultiSelect| DtFilterFieldMultiSelect
|Panel multi-pilihan bidang filter yang akan dilampirkan ke pemicu ini.|
|dtFilterFieldMultiSelectDisabled| boolean
|Apakah panel multi pilih bidang filter harus dinonaktifkan.|
@tomheller Saya akan mulai dengan ini minggu depan
Untuk daftar kotak centang, saya berpikir untuk menggunakan ReactiveFormsModule, tetapi saya melihat bahwa kami tidak menggunakannya di mana pun pada filter. Apakah ada alasan untuk itu sehingga saya harus menghindarinya atau apakah saya dapat menggunakannya? @thomaspink @tomheller
Anda dapat menggunakannya jika Anda mau, atau membuat model pilihan Anda sendiri dari cdk seperti yang dilakukan @dt-mafe di pr-nya tentang baris yang dapat dipilih #1052
Tidak ada di peta jalan kami.