01 Mar 2025·6 menit membaca

Pola UI untuk tindakan massal: pratinjau, izin, dan undo

Pola UI tindakan massal yang mengurangi edit massal tidak sengaja: alur pratinjau-dulu, pemeriksaan izin, opsi undo, dan pengamanan backend yang bisa Anda terapkan.

Pola UI untuk tindakan massal: pratinjau, izin, dan undo

Mengapa tindakan massal sering salah (dan apa arti “aman”)\n\nTindakan massal adalah kontrol “lakukan ini ke banyak item” yang sering dipilih orang ketika mereka bergerak cepat. Dalam produk nyata, itu biasanya berarti bulk edit (mengubah sebuah field), bulk delete, memindahkan ke folder atau tahap lain, menetapkan ke orang atau tim, menambahkan tag, atau memicu workflow.\n\nMereka gagal karena alasan sederhana: mereka menukar pemikiran teliti per-rekor dengan kecepatan. Pertukaran itu baik ketika cakupannya jelas. Terlalu sering, cakupan kabur, konsekuensi tidak jelas, dan aturan izin tidak konsisten. Operasi terasa baik sampai seseorang menyadari 200 rekaman yang salah telah diperbarui.\n\nMasalah yang sama muncul berulang kali:\n\n- Pemilihan tidak jelas (filter vs item yang dicentang, lintas halaman, kejutan “select all”).\n- Dampak sulit dipratinjau (Anda tidak bisa melihat apa yang sebenarnya akan berubah).\n- Izin diperiksa terlambat atau hanya di UI.\n- “Undo” hilang, tidak dapat diandalkan, atau menyesatkan.\n\nKerusakan jarang ringan. Pelanggan menerima email yang salah, faktur pindah ke status yang salah, atau pipeline penjualan direassignment ke pemilik yang salah. Bahkan ketika data dapat dipulihkan, pemulihan memakan waktu berjam-jam dan menimbulkan keraguan: “Bisakah kita mempercayai sistem ini?”\n\n“Aman” bukan berarti “lambat” atau “penuh peringatan.” Itu berarti pengguna bisa menjawab tiga pertanyaan sebelum mereka mengonfirmasi:\n\n1. Rekaman mana yang tepatnya akan terpengaruh?\n2. Tepatnya apa yang akan berubah, dan apa yang tidak akan berubah?\n3. Jika ini kesalahan, apa cara tercepat dan jujur untuk kembali?\n\nBayangkan seorang lead support menutup tiket massal setelah gangguan. Jika UI diam-diam menyertakan tiket yang diarsipkan, menutupnya tanpa menunjukkan jumlah akhir, dan tidak menawarkan undo, pembersihan 30 detik berubah menjadi insiden nyata.\n\n## Prinsip inti untuk tindakan massal yang aman\n\nTindakan massal yang bagus mengurangi dua risiko sekaligus: pengguna melakukan hal yang salah, atau sistem melakukan hal yang salah. Anda bukan mencoba memperlambat orang. Anda mencoba membuat tindakan itu jelas, disengaja, dan mudah diverifikasi.\n\nPisahkan pemilihan dari tindakan. Biarkan orang memilih item (atau mengonfirmasi set yang difilter) terlebih dahulu, lalu pilih tindakan. Ketika pemilihan dan tindakan saling terkait, pengguna memicu perubahan saat mereka masih memutuskan apa yang harus disertakan.\n\nTunjukkan cakupan sebelum pengguna mengonfirmasi. Itu berarti jumlah yang tepat, filter yang diterapkan, dan pengecualian apa pun (item yang tidak bisa mereka edit, item yang sudah dalam status target, dan sebagainya). Satu baris seperti “128 dipilih (difilter oleh: Status = Open, Assignee = Me; 6 dikecualikan: tidak ada izin)” mencegah sebagian besar kejutan.\n\nBuat tindakan destruktif terasa berbeda. Gunakan label yang jelas (“Delete 128 records”), isyarat visual kuat, dan jauhkan dari tindakan aman. Juga minta pemicu yang disengaja (tombol khusus), bukan item menu yang terlihat seperti yang lain.\n\nPertahankan alur singkat dan dapat diprediksi: pilih, tinjau cakupan, konfirmasi, lihat hasil. Hindari wizard multi-langkah kecuali tindakan itu benar-benar membutuhkan pilihan tambahan.\n\nJika Anda ingin pengecekan cepat, hal-hal penting adalah: pemilihan eksplisit, cakupan terlihat di samping tindakan, tindakan destruktif lebih sulit mengenai secara tidak sengaja, teks konfirmasi menjelaskan apa yang akan terjadi, dan hasil ditampilkan dengan jelas (sukses, sukses sebagian, kegagalan).\n\n## UI berbasis pratinjau: tunjukkan dampak sebelum menerapkan\n\nTindakan massal yang baik tidak boleh terasa seperti loncatan iman. Sebelum pengguna menekan Apply, tampilkan pratinjau yang menjawab satu pertanyaan: “Apa yang akan berubah, tepatnya?”\n\nMulailah dengan ringkasan yang mudah dipercaya. Hitungan mengalahkan tabel panjang ketika pemilihan besar. Jika Anda mengubah status, tunjukkan berapa item yang berpindah dari tiap status saat ini ke status baru. Jika Anda menetapkan ulang pemilik, tunjukkan hitungan berdasarkan pemilik saat ini dan pemilik baru. Letakkan ringkasan dekat dengan tombol aksi utama agar sulit terlewatkan.\n\nKemudian berikan detail yang cukup agar pengguna menangkap kejutan. Beberapa baris sampel cocok untuk perubahan sederhana (misalnya “Set priority to High”). Daftar penuh (atau set yang dapat diekspor) lebih baik ketika pengguna mengharapkan pengecualian atau ketika pemilihan berasal dari filter yang mungkin tidak mereka ingat sepenuhnya.\n\nJuga jelaskan apa yang tidak akan terjadi. Area kecil “akan dilewati” membangun kepercayaan ketika menjelaskan pengecualian dalam bahasa biasa, misalnya: dilewati karena Anda tidak punya izin, sudah dalam status target, terkunci oleh workflow persetujuan, atau data yang diperlukan hilang.\n\nKuncinya adalah pratinjau harus mencerminkan aturan nyata. Jika backend akan menolak pembaruan, pratinjau harus menunjukkan itu sebelum pengguna mengonfirmasi, bukan setelahnya.\n\n## Dialog konfirmasi yang benar-benar dipahami pengguna\n\nDialog konfirmasi seharusnya bukan hambatan. Itu harus menjawab satu pertanyaan: “Apakah saya benar-benar memahami apa yang akan terjadi jika saya klik ini?” Jika tidak bisa menjawab dalam dua bacaan cepat, orang akan mengabaikannya.\n\nMulailah dengan nama tindakan dan keadaan akhir. Label generik seperti “Update status” memaksa pengguna menebak. Lebih baik “Set status to Closed” atau “Delete 24 customers.”\n\nJangan jadikan pilihan berisiko sebagai default. Jika ada dua tombol, buat yang paling aman sebagai fokus default. Jika ada opsi (seperti “Close tickets and notify customers”), minta pilihan eksplisit alih-alih mencentang opsi paling destruktif.\n\nGunakan teks dialog untuk risiko nyata. Katakan apa yang berubah, apa yang tidak akan terjadi, apa yang permanen, dan apa yang termasuk. Hindari salinan samar “Are you sure?”.\n\nTidak semua tindakan massal membutuhkan gesekan yang sama. Konfirmasi sederhana cukup untuk perubahan berisiko rendah yang dapat dibalik (seperti menambahkan tag). Konfirmasi ketik (typed confirmation) masuk akal ketika radius ledakan besar: penghapusan yang tidak dapat dibalik, perubahan izin, pembayaran besar, atau apa pun yang langsung mempengaruhi pelanggan.\n\nPola yang berguna adalah “ketik DELETE” atau “ketik CLOSE 24” sehingga pengguna melihat cakupan saat mengonfirmasi.\n\n## Izin dan kontrol akses untuk operasi massal\n\nTindakan massal adalah tempat aturan izin diuji paling keras. Seorang pengguna mungkin bisa membuka beberapa record, tidak bisa menghapus apa pun, dan hanya bisa mengubah field tertentu. Perlakukan izin sebagai bagian dari workflow, bukan kejutan setelah “Apply.”\n\nJelaskan apa arti “diizinkan.” Jarang hanya berarti “bisakah mereka membuka item?” Ini biasanya campuran akses lihat, hak edit, hak hapus, aturan level-field (bisa mengubah status tapi bukan owner, harga, atau izin), dan aturan cakupan (hanya item di tim, wilayah, atau proyek mereka).\n\nIzin campuran dalam pemilihan itu normal. Sistem yang aman memilih satu pendekatan jujur dan mengomunikasikannya dengan jelas:\n\n- Terapkan hanya pada item yang diizinkan dan ringkas apa yang dilewati.\n- Blokir tindakan sampai pemilihan hanya berisi item yang diizinkan.\n\nOpsi pertama terasa lebih mulus untuk pekerjaan volume tinggi. Opsi kedua sering lebih baik untuk tindakan berisiko tinggi seperti penghapusan atau perubahan izin.\n\nHindari kebocoran data ketika beberapa item tidak dapat diakses. Jangan ungkapkan nama, judul, atau field sensitif untuk record yang diblokir. “12 item tidak bisa diperbarui karena aturan akses” lebih aman daripada mencantumkan mana saja.\n\nUmpan balik UI yang baik membantu pengguna memahami apa yang terjadi tanpa terasa dihukum. Misalnya: banner pre-check (“Anda bisa memperbarui 38 dari 50 item yang dipilih”), kode alasan singkat (“Blocked: not in your team”), dan filter yang menyembunyikan item yang tidak bisa diedit pengguna.\n\nDi backend, tegakkan aturan yang sama lagi untuk setiap item. Bahkan jika UI melakukan pre-check, server tetap harus memverifikasi izin per record dan per field.\n\n## Pola undo yang terasa aman dan jujur\n\nUndo paling aman adalah yang benar-benar bisa Anda penuhi. Itu biasanya berarti merancang untuk pemulihan sejak awal, bukan menempelkan tombol terakhir.\n\nDefault yang kuat adalah soft delete dengan jendela pemulihan terbatas waktu. Alih-alih menghapus rekaman segera, tandai sebagai terhapus (dan sembunyikan dari tampilan normal), lalu hapus permanen nanti. Ini menangkap klik yang keliru, filter yang salah, dan kesalahan “Saya tidak menyadari item itu termasuk”.\n\nUntuk tindakan cepat, undo toast bekerja baik karena segera dan rendah gesekan. Buat spesifik sehingga pengguna mempercayainya: apa yang berubah, tombol Undo, batas waktu, dan catatan jika beberapa item dilewati.\n\nPilih jendela undo yang sesuai dengan risikonya. Sepuluh sampai tiga puluh detik umum untuk kesalahan kecil. Jam atau hari lebih baik ditangani oleh soft delete ditambah layar restore.\n\nUntuk pekerjaan massal yang berjalan lama, “undo” biasanya berarti batal, bukan rollback. Mengembalikan job yang sudah memicu email, pembayaran, atau pembaruan eksternal bisa menyesatkan. Biarkan pengguna membatalkan pekerjaan yang tersisa dan tunjukkan apa yang sudah terjadi.\n\nKetika undo tidak mungkin, jujurlah dan berikan jalur pemulihan: ekspor ID yang terpengaruh, tulis entri audit log, dan tawarkan workflow restore bila memungkinkan.\n\n## Pengamanan backend: validasi, idempotency, auditability\n\nTindakan massal yang aman bukan hanya masalah UI. Bahkan dengan pratinjau kuat, pengguna double-click, browser mencoba lagi, dan job latar belakang berjalan dua kali. Backend harus mengasumsikan setiap permintaan massal berisiko dan membuktikan aman untuk diterapkan.\n\nMulailah dengan validasi ketat. Validasi setiap item, bukan hanya yang pertama. Jika 3 dari 200 record akan gagal (field yang diperlukan hilang, status salah, tidak ada izin), putuskan di awal apakah menolak seluruh batch atau mengizinkan keberhasilan parsial dengan error per-item yang jelas.\n\nIdempotency mencegah penerapan ganda. Berikan setiap permintaan massal idempotency key unik (atau request ID) dan simpan hasilnya. Jika kunci yang sama tiba lagi, kembalikan hasil yang sama tanpa menjalankan pembaruan dua kali.\n\nUntuk edit konkuren, gunakan optimistic locking. Simpan versi atau nilai updated_at per record dan hanya perbarui jika masih cocok. Jika berubah, kembalikan konflik daripada menimpa pekerjaan orang lain.\n\nDua pola API sangat membantu:\n\n- Dry-run: jalankan validasi dan pemeriksaan izin, kembalikan hitungan dan contoh perubahan, tapi jangan menulis.\n- Apply: minta token konfirmasi atau pemilihan yang sama yang dihitung, lalu tulis.\n\nTambahkan batas praktis untuk melindungi sistem: batasi maksimal item per permintaan, terapkan rate limit (sering lebih ketat untuk penghapusan), dan set timeout untuk batch agar dependensi yang macet tidak membekukan seluruh job.\n\nTerakhir, buat setiap perubahan massal dapat diaudit. Log siapa yang melakukannya, apa yang berubah, dan cakupannya. Entri audit yang berguna menangkap pelaku, timestamp, parameter aksi (filter, hitungan), data before/after (atau diff), dan batch atau job ID.\n\n## Menskalakan tindakan massal tanpa merusak reliabilitas\n\nKetika tindakan massal bertambah dari 50 item menjadi 50.000, risikonya bukan hanya kesalahan pengguna. Sistem bisa kelebihan beban di tengah operasi, meninggalkan perubahan yang setengah jadi dan susah dijelaskan.\n\nPecah pekerjaan menjadi potongan. Daripada memperbarui semua record dalam satu transaksi panjang, proses dalam batch (misalnya 500 sampai 2.000 sekaligus) dan catat kemajuan setelah tiap batch. Jika sesuatu gagal, Anda bisa berhenti dengan rapi, menunjukkan di mana berhenti, dan menghindari penguncian tabel terlalu lama.\n\nUntuk job besar, jalankan di background dan tampilkan status yang jelas: queued, running (dengan “X dari Y”), completed with issues, failed, atau canceled (jika didukung).\n\nKeberhasilan parsial butuh UI yang jujur. Jangan tampilkan “Done” jika 20% gagal. Tunjukkan apa yang berhasil dan apa yang tidak, dan permudah tindakan pada kegagalan: retry hanya item yang gagal, ekspor ID yang gagal, atau buka view yang sudah difilter.\n\nAturan sederhana yang tahan lama: jika Anda tidak bisa menjelaskan status job saat ini dalam satu kalimat, pengguna juga tidak akan mempercayainya.\n\n## Kesalahan umum dan jebakan yang harus dihindari\n\nKebanyakan kegagalan tindakan massal bukanlah “kesalahan pengguna.” Mereka terjadi ketika UI diam-diam mengubah arti “selected,” atau ketika sistem mengasumsikan pengguna bermaksud perubahan terbesar yang mungkin.\n\nJebakan klasik adalah mencampur “all visible rows” dengan “all results.” Pengguna memilih 20 item di layar, lalu mengeklik checkbox yang menargetkan 20.000 di semua halaman. Jika Anda mendukung “select all results,” buat itu sebagai langkah terpisah dan eksplisit, dan selalu tunjukkan jumlah akhir di sebelah tindakan.\n\nMasalah umum lain adalah perubahan filter diam-diam antara pemilihan dan penerapan. Pengguna memilih sekumpulan order, lalu view bersama berubah atau daftar refresh dan filter bergeser. Aksi diterapkan pada set yang berbeda dari yang mereka tinjau. Kaitkan tindakan ke snapshot (ID yang dipilih) dan beri peringatan jika pemilihan berubah.\n\nMenu yang ramai juga menyebabkan kerusakan. Jika “Delete” duduk di sebelah “Export” dan “Tag,” kesalahan akan terjadi. Pisahkan tindakan destruktif dan beri konfirmasi yang lebih jelas.\n\nDan jangan pernah mengandalkan “UI menyembunyikan tombol” sebagai kontrol izin. Backend tetap harus memverifikasi setiap item.\n\n## Checklist cepat untuk keamanan tindakan massal\n\nSebelum Anda merilis tindakan massal, periksa dasar yang mencegah momen “Saya tidak bermaksud melakukan itu” dan membuat investigasi support jauh lebih mudah.\n\nMulai dengan kejelasan cakupan. Pengguna harus melihat tepatnya apa yang akan terpengaruh, bukan hanya label aksi. Tampilkan jumlah item dan filter atau pemilihan yang menghasilkan jumlah itu (misalnya, “132 tiket yang cocok: Status = Open, Assigned to = Me”).\n\nLalu pastikan tiga area berisiko tinggi tidak tersembunyi: dampak, izin, dan konsekuensi.\n\n- Cakupan eksplisit: jumlah record plus filter/pemilihan yang digunakan untuk membangun set.\n- Aksi berisiko memiliki pratinjau: contoh perubahan atau ringkasan gaya diff singkat.\n- Izin ditegakkan di server untuk setiap item, bukan hanya di UI.\n- Ada cara nyata kembali: undo/restore bila memungkinkan, atau peringatan “irreversible” sebelum dijalankan.\n- Hasil didokumentasikan: audit log dan ringkasan hasil yang jelas (sukses, dilewati, gagal, dan kenapa).\n\n## Contoh realistis: menutup tiket support massal dengan aman\n\nSeorang lead support menjalankan pembersihan pasca-kampanye. Ratusan tiket diberi tag “promo-2026,” dan banyak sudah diselesaikan lewat self-service. Mereka ingin menutup sisanya tanpa secara tidak sengaja menutup kasus VIP atau tiket yang dimiliki tim lain.\n\nMereka memilih tiket dari daftar yang sudah difilter dan mengklik “Close selected.” Sebelum ada yang berubah, mereka melihat pratinjau yang membuat dampak menjadi konkret:\n\n- Ringkasan hitungan: 183 akan ditutup, 12 akan dilewati, 4 perlu perhatian.\n- Alasan sederhana untuk item yang dilewati (misalnya, “Already closed” atau “VIP account, cannot bulk-close”).\n- Daftar sampel kecil (10 item) plus opsi untuk mengekspor set yang terpengaruh.\n- Perubahan yang tepat: status menjadi “Closed,” alasan menjadi “Campaign cleanup.”\n- Tombol utama yang jelas: “Close 183 tickets,” bukan “Confirm” yang samar.\n\nSetelah mereka konfirmasi, sistem menjalankan background job dan menampilkan progres. Saat selesai, layar hasil menunjukkan berapa yang berhasil, mana yang gagal, dan kenapa (misalnya, sebuah tiket diperbarui oleh agen selama pekerjaan berjalan).\n\nDi backend, alur tetap defensif: periksa kembali izin per tiket saat eksekusi, validasi status yang diizinkan, tulis catatan audit dengan batch ID, terapkan pembaruan dalam potongan kecil, dan kembalikan laporan hasil.\n\nUndo diperlakukan sebagai operasi nyata, bukan janji. UI menawarkan “Undo this batch” selama 30 menit. Mengkliknya memulai job baru yang mengembalikan status dan alasan sebelumnya hanya untuk tiket yang diubah oleh batch itu, dan hanya jika tiket tersebut belum diedit sejak saat itu.\n\n## Langkah selanjutnya: terapkan satu perbaikan keamanan minggu ini\n\nAnda tidak perlu redesign penuh untuk membuat tindakan massal lebih aman. Pilih satu perubahan kecil yang mengurangi kecelakaan dan tiket support, rilis, lalu bangun dari situ.\n\nMulailah dengan kejelasan: tambahkan label cakupan yang mengatakan tepat apa yang akan berubah (“37 selected invoices”), dan tampilkan ringkasan hasil singkat setelah tindakan dijalankan (berapa yang berhasil, gagal, dan kenapa). Itu saja mencegah banyak kesalahan “Saya kira cuma satu item”.\n\nLalu beralih ke tindakan berisiko lebih tinggi. Untuk penghapusan massal, perubahan status, dan pembaruan sensitif izin, tambahkan pratinjau yang menunjukkan dampaknya sebelum apa pun disimpan. Bahkan tabel “sebelum -> sesudah” sederhana untuk 10 item pertama menangkap filter yang salah.\n\nUrutan praktis yang bekerja untuk kebanyakan tim:\n\n- Tambahkan hitungan pemilihan + teks cakupan jelas di samping tombol.\n- Tambahkan layar hasil dengan kegagalan dan alasannya (permission, validation).\n- Tambahkan pratinjau atau validasi dry-run untuk tindakan paling berisiko.\n\n- Tambahkan restore untuk penghapusan (soft delete + tampilan restore) dan tampilkan opsi pemulihan segera setelahnya.\n\n- Untuk batch besar, jalankan di background dan beri notifikasi saat selesai.\n\nJika Anda membangun alat internal atau admin panel di AppMaster, Anda bisa mengimplementasikan ini tanpa menggabungkan sistem terpisah: model audit dan tabel job di PostgreSQL lewat Data Designer, tegakkan aturan per-record di Business Process Editor, dan bangun layar pratinjau, konfirmasi, dan hasil di web atau mobile UI builder. Untuk tim yang sedang mengevaluasi platform, appmaster.io juga tempat praktis untuk mem-prototype satu tindakan massal end-to-end dan menguji apakah pemeriksaan keamanan terasa alami bagi pengguna sehari-hari.

FAQ

What does “safe” bulk action actually mean?

“Aman” berarti pengguna bisa mengetahui, sebelum mengonfirmasi, rekaman mana yang akan terpengaruh, field apa yang akan berubah, dan jalur pemulihan jika terjadi kesalahan. Prosesnya tetap cepat, tapi harus sulit melakukan hal yang salah tanpa disadari.

How do I prevent “select all” from updating way more records than expected?

Pisahkan pemilihan dari tindakan, lalu tampilkan cakupan akhir tepat di sebelah tombol aksi. Buat “select all results” sebagai langkah yang disengaja dengan jumlah eksplisit agar pengguna tidak keliru membedakan antara “apa yang saya lihat” dan “semua yang cocok”.

What should a good bulk-change preview show?

Mulai dengan ringkasan tepercaya yang sesuai aturan backend, misalnya berapa item yang akan berubah dan berapa yang akan dilewati. Kemudian tunjukkan detail yang cukup untuk menangkap kejutan, seperti sampel baris yang terkena atau nilai sebelum/sesudah untuk field yang diubah.

How do I write confirmation dialogs people won’t ignore?

Gunakan dialog untuk menegaskan kembali keadaan akhir dan cakupan dalam bahasa yang jelas, misalnya “Hapus 24 pelanggan” atau “Set status to Closed for 183 tickets.” Hindari copy yang samar seperti “Are you sure?” dan jangan memfokuskan atau mem-default tombol yang berisiko.

What’s the best way to handle mixed permissions in a bulk selection?

Anggap izin campuran sebagai hal biasa dan pilih satu aturan jujur: blokir tindakan sampai hanya item yang diizinkan yang dipilih, atau terapkan perubahan hanya pada item yang diizinkan dan rangkum dengan jelas yang dilewati. Jangan mengandalkan tombol tersembunyi untuk keamanan; server harus memverifikasi izin per record dan per field.

Should a bulk action fail the whole batch if some records can’t be updated?

Keberhasilan parsial boleh saja asalkan dilaporkan dengan jelas. Tampilkan berapa yang berhasil, gagal, dan dilewati, serta berikan alasan singkat yang membantu pengguna memperbaiki masalah tanpa mengekspos detail sensitif tentang record yang tidak dapat mereka akses.

When should I use an undo toast vs a restore workflow?

Undo toast cocok untuk perubahan cepat yang dapat benar-benar dibalik. Untuk penghapusan, default yang lebih aman adalah soft delete dengan jendela restore, karena ini menangkap klik yang salah dan filter yang keliru tanpa memberi kesan palsu bahwa Anda bisa “undo” efek samping eksternal seperti email atau pembayaran.

What should an audit log capture for bulk actions?

Catat siapa menjalankan tindakan massal, kapan dijalankan, seleksi apa yang menghasilkan cakupan (filter atau ID yang dipilih), dan apa yang berubah. Sertakan batch atau job ID dan ringkasan hasil yang jelas sehingga tim support bisa menjelaskan apa yang terjadi tanpa tebak-tebakan.

What backend checks prevent double-applies and race conditions?

Gunakan idempotency sehingga permintaan berulang dengan kunci yang sama mengembalikan hasil yang sama tanpa menerapkan dua kali. Tambahkan validasi per-record dan optimistic locking agar Anda tidak menimpa edit yang lebih baru, dan pertimbangkan endpoint dry-run untuk menghitung cakupan dan error nyata sebelum menulis apa pun.

How do I scale bulk actions to tens of thousands of records without breaking reliability?

Proses batch besar dalam potongan dan jalankan sebagai background job dengan status yang terlihat, seperti queued, running, dan completed with issues. Progress harus bisa dijelaskan dalam satu kalimat, dan hasil harus jujur tentang apa yang selesai, apa yang gagal, dan apa yang dibatalkan.

Mudah untuk memulai
Ciptakan sesuatu yang menakjubkan

Eksperimen dengan AppMaster dengan paket gratis.
Saat Anda siap, Anda dapat memilih langganan yang tepat.

Memulai
Pola UI untuk tindakan massal: pratinjau, izin, dan undo | AppMaster