<form action="#" accept-charset="UTF-8" method="get"> <div class="mb-6"> <div class="lui-filter_bar" data-controller="lui--filter-buttons lui--filter-toggle lui--filter-pills" data-lui--filter-pills-table-id-value="filter_bar_table_example" data-lui--filter-buttons-table-id-value="filter_bar_table_example" data-lui--filter-toggle-table-id-value="filter_bar_table_example"> <div class="lui-filter_bar__top"> <div class="lui-filter_bar__search"> <div data-controller="search" id="looposui-inputs-search_q_search__3405539807" class="lui-search" data-search-input-outlet="#looposui-inputs-search_q_search__3405539807 .lui-inner-input" data-search-event-only-value="false" > <div data-controller="input" data-input-open-actions-value="false" class="lui-inner-input relative flex gap-2" data-input-original-input-value="" data-input-mode-value="autosubmit" data-input-form-value=""> <div class="w-full flex flex-col"> <span class="lui-input "> <span class="lui-input__addon-left"> <div class="text-[12px] flex items-center text-center"> <i class="fa-regular fa-magnifying-glass text-gray-400"></i> </div> </span> <input name="q[search]" type="search" value="" placeholder="Search items..." class="lui-input__input" mode="autosubmit" contentEditable="true" data-input-target="input" data-action="input->search#toggleClearButton input->input#setEditing input->search#onInput change->search#onInput" data-search-target="input"> <span class="lui-input__addon-right"> <span class="flex"> <i class="fa-regular fa-xmark cursor-pointer text-gray-400" data-search-target="clearButton" data-action="click->search#clear click->input#finishEditing"> </i> </span> </span> <span class="lui-input__spinner"> <i class="fa-regular fa-spinner"></i> </span> </span> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <button class="lui-button lui-button--icon-only lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit relative" data-controller="lui--button" data-input-target="cancel" data-action="click->input#handleClose" type="button" disabled="disabled"> <div class="opacity-100 inline-flex" data-lui--button-target="leadingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-xmark" data-lui--button-target="leadingIcon"></i></div> </div> <div class="absolute w-full flex items-center justify-center opacity-0" data-lui--button-target="loadingIcon"> <i class="lui-m_icon animate-spin material-symbols-outlined" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button> <button class="lui-button lui-button--icon-only lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit relative" data-controller="lui--button" data-input-target="submit" data-action="click->input#setLoading" type="submit" disabled="disabled"> <div class="opacity-100 inline-flex" data-lui--button-target="leadingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-check" data-lui--button-target="leadingIcon"></i></div> </div> <div class="absolute w-full flex items-center justify-center opacity-0" data-lui--button-target="loadingIcon"> <i class="lui-m_icon animate-spin material-symbols-outlined" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button> </span> </div> </div> </div> <div class="lui-filter_bar__actions"> <div class="lui-filter_bar__toggle"> <div class="flex items-center gap-2 flex-row" data-controller="toggle"> <p class="text-black text-primary-xs-regular"> Only items in Handling </p> <label class="lui-toggle relative"> <input name="only_in_handling" type="checkbox" data-toggle-target="input" data-action=" change->lui--filter-toggle#handleToggleChange" data-method="patch" data-turbo_frame="" checked> <span class="lui-slider" style=""> <span class="lui-toggle__spinner" data-toggle-target="spinner"> <i class="absolute origin-center animate-spin text-[9px] top-px left-px fa-solid fa-spinner"></i> </span> </span> </label> </div> </div> </div> </div> <div class="lui-filter_bar__pills" data-controller="lui--filter-pills" data-lui--filter-pills-table-id-value="filter_bar_table_example"> <div class="lui-filter_bar__pills-list" data-lui--filter-pills-target="container"> </div> <div class="lui-filter_bar__clear_all" data-lui--filter-pills-target="clearAllButton" style="display: none;"> <button class="lui-button lui-button--neutral--tertiary lui-button--size-small w-fit w-fit relative" data-controller="lui--button" data-action="click->lui--filter-pills#clearAll" type="button"> <span class="lui-button__text opacity-100 inline-flex" data-lui--button-target="text"> Clear all filters </span> <div class="absolute w-full flex items-center justify-center opacity-0" data-lui--button-target="loadingIcon"> <i class="lui-m_icon animate-spin material-symbols-outlined" style="--lui-micon-size: 14px;"> progress_activity </i> </div> </button> </div> </div> </div> </div> <div id="table_5793709857"> <div class="lui-table" id="table_5793709857" data-controller="table" data-table-data-source-id-value="filter_bar_table_example_data_source" data-table-float-bar-outlet="#table_5793709857 .lui-table__floating_bar .lui-float_bar" data-table-columns-value="[{"title":"ID","dataIndex":"id","key":"id","type":"html","className":"lui-table__cell lui-table__cell--n0 lui-table__cell--first","hidable":true,"sorter":true,"sortKey":"id"},{"title":"Nome","dataIndex":"name","key":"name","searchable":true,"type":"html","className":"lui-table__cell lui-table__cell--n1","hidable":true},{"title":"Status","dataIndex":"status","key":"status","filters":[{"type":"tag","text":"Ativo","value":"status$ativo"},{"type":"tag","text":"Pendente","value":"status$pendente"}],"type":"html","className":"lui-table__cell lui-table__cell--n2","hidable":true,"filterMode":"tree","filterSearch":true},{"title":"Tipo","dataIndex":"type","key":"type","filters":[{"type":"tag","text":"Documento","value":"type$document"},{"type":"tag","text":"Relatório","value":"type$report"}],"type":"html","className":"lui-table__cell lui-table__cell--n3","hidable":true,"filterMode":"tree","filterSearch":true},{"title":"Data","dataIndex":"created_at","key":"created_at","type":"date","className":"lui-table__cell lui-table__cell--n4 lui-table__cell--last","hidable":true}]"> <div data-react-class="Table" data-react-props="{"uniqueId":"table_5793709857","id":"filter_bar_table_example","lang":"en","columns":[{"title":"ID","dataIndex":"id","key":"id","type":"html","className":"lui-table__cell lui-table__cell--n0 lui-table__cell--first","hidable":true,"sorter":true,"sortKey":"id"},{"title":"Nome","dataIndex":"name","key":"name","searchable":true,"type":"html","className":"lui-table__cell lui-table__cell--n1","hidable":true},{"title":"Status","dataIndex":"status","key":"status","filters":[{"type":"tag","text":"Ativo","value":"status$ativo"},{"type":"tag","text":"Pendente","value":"status$pendente"}],"type":"html","className":"lui-table__cell lui-table__cell--n2","hidable":true,"filterMode":"tree","filterSearch":true},{"title":"Tipo","dataIndex":"type","key":"type","filters":[{"type":"tag","text":"Documento","value":"type$document"},{"type":"tag","text":"Relatório","value":"type$report"}],"type":"html","className":"lui-table__cell lui-table__cell--n3","hidable":true,"filterMode":"tree","filterSearch":true},{"title":"Data","dataIndex":"created_at","key":"created_at","type":"date","className":"lui-table__cell lui-table__cell--n4 lui-table__cell--last","hidable":true}],"dataSource":[{"id":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9912568611\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n 1\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","name":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_2322156580\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Documento 1\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","status":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_6597424226\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Ativo\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","type":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_8670528836\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Document\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","created_at":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9451751915\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n \u003cspan class=\"lui-date-show\"\u003e15-01-2024\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","_lui_key":1,"_lui_data":{"delete_action":null}},{"id":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_5215854990\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n 2\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","name":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_1569762617\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Documento 2\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","status":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_5005363814\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Pendente\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","type":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9404554452\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Document\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","created_at":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_5703447052\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n \u003cspan class=\"lui-date-show\"\u003e20-02-2024\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","_lui_key":2,"_lui_data":{"delete_action":null}},{"id":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_3999329769\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n 3\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","name":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_3139447488\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Relatório 1\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","status":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_7821441232\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Ativo\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","type":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_2902670536\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Report\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","created_at":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_1475808767\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n \u003cspan class=\"lui-date-show\"\u003e10-03-2024\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","_lui_key":3,"_lui_data":{"delete_action":null}},{"id":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_1514812509\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n 4\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","name":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9508286743\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Documento 3\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","status":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_5362092628\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Ativo\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","type":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_65226010\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Document\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","created_at":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_3805063338\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n \u003cspan class=\"lui-date-show\"\u003e05-04-2024\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","_lui_key":4,"_lui_data":{"delete_action":null}},{"id":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_2807543204\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n 5\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","name":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9974911290\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Relatório 2\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","status":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9608590673\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Pendente\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","type":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_1680139525\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Report\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","created_at":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_4575178121\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n \u003cspan class=\"lui-date-show\"\u003e12-05-2024\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","_lui_key":5,"_lui_data":{"delete_action":null}}],"pagination":{"current":1,"pageSize":10,"total":5},"searchQuery":null,"globalFiltersHtml":null,"tableHeader":"\u003cdiv class=\"lui-table_header\" data-controller=\"table-filters\"\u003e\n \u003cdiv class=\"hidden\" data-table-filters-target=\"button\"\u003e\n \u003cbutton class=\"lui-button lui-button--neutral--tertiary lui-button--size-small w-fit w-fit relative\" data-controller=\"lui--button\" data-action=\"click-\u0026gt;table-filters#clearAllFilters\"\u003e\n \n \u003cdiv class=\"opacity-100 inline-flex\" data-lui--button-target=\"leadingIcon\"\u003e\n \u003cdiv class=\"flex items-center justify-center\" style=\"width: 14px; height: 14px;\"\u003e\u003ci class=\"lui-button__icon lui-button__icon--small fa-regular fa-eraser\" data-lui--button-target=\"leadingIcon\"\u003e\u003c/i\u003e\u003c/div\u003e\n\u003c/div\u003e \u003cspan class=\"lui-button__text opacity-100 inline-flex\" data-lui--button-target=\"text\"\u003e\n Clear all filters\n\u003c/span\u003e \u003cdiv class=\"absolute w-full flex items-center justify-center opacity-0\" data-lui--button-target=\"loadingIcon\"\u003e\n \u003ci class=\"lui-m_icon animate-spin material-symbols-outlined\" style=\"--lui-micon-size: 14px;\"\u003e\n progress_activity\n\u003c/i\u003e\n \u003c/div\u003e\n\u003c/button\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n","footerHtml":null,"filterCounterTemplateHtml":"\n \u003cspan class=\"lui-counter lui-counter--tinny\" style=\"color: #212529; background-color: #F8F9FA; border: var(--Spacings-0, 1px) solid var(--General-Gray-500, #C4CAD0);\"\u003e\n \u003cspan class=\"lui-counter__text\"\u003e:count:\u003c/span\u003e\n\u003c/span\u003e\n","sortingEnabled":true,"view_more":10,"viewMoreHtml":"\u003cbutton class=\"lui-button lui-button--neutral--tertiary lui-button--size-default w-fit w-fit relative\" data-controller=\"lui--button\"\u003e\n \n \u003cspan class=\"lui-button__text opacity-100 inline-flex\" data-lui--button-target=\"text\"\u003e\n View more\n\u003c/span\u003e \u003cdiv class=\"absolute w-full flex items-center justify-center opacity-0\" data-lui--button-target=\"loadingIcon\"\u003e\n \u003ci class=\"lui-m_icon animate-spin material-symbols-outlined\" style=\"--lui-micon-size: 16px;\"\u003e\n progress_activity\n\u003c/i\u003e\n \u003c/div\u003e\n\u003c/button\u003e","fetchUrl":null,"selectable":null,"selectableType":null,"showPagination":true,"showPaginationSizeChanger":true,"showResultCount":true,"searchable":false,"theme":{"token":{"fontFamily":"Satoshi","borderRadius":4,"colorLink":"#212529","colorActive":"#212529","colorHover":"#212529","colorText":"#212529"},"components":{"Table":{"footerBg":"#ffffff","headerBg":"#F8F9FA","headerColor":"#495057","headerSortActiveBg":"#F8F9FA","headerSortHoverBg":"#F8F9FA","headerSortSortBg":"#F8F9FA","bodySortBg":"#ffffff","rowHoverBg":"#F8F9FA","borderColor":"#ECEFF2","headerBorderRadius":4,"rowSelectedBg":"#F8F9FA","rowSelectedHoverBg":"#F8F9FA","selectionColumnWidth":32,"headerSplitColor":"#ECEFF2","cellPaddingInlineSM":16},"Pagination":{"itemActiveBg":"transparent"}}},"treeIndentSize":15,"expandableConfig":{"defaultExpandAllRows":false}}" data-react-cache-id="Table-0"></div> </div> </div> <div id="filter_bar_table_example_data_source" class="hidden"> [{"id":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9912568611\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n 1\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","name":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_2322156580\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Documento 1\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","status":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_6597424226\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Ativo\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","type":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_8670528836\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Document\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","created_at":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9451751915\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n \u003cspan class=\"lui-date-show\"\u003e15-01-2024\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","_lui_key":1,"_lui_data":{"delete_action":null}},{"id":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_5215854990\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n 2\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","name":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_1569762617\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Documento 2\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","status":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_5005363814\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Pendente\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","type":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9404554452\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Document\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","created_at":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_5703447052\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n \u003cspan class=\"lui-date-show\"\u003e20-02-2024\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","_lui_key":2,"_lui_data":{"delete_action":null}},{"id":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_3999329769\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n 3\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","name":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_3139447488\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Relatório 1\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","status":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_7821441232\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Ativo\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","type":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_2902670536\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Report\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","created_at":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_1475808767\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n \u003cspan class=\"lui-date-show\"\u003e10-03-2024\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","_lui_key":3,"_lui_data":{"delete_action":null}},{"id":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_1514812509\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n 4\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","name":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9508286743\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Documento 3\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","status":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_5362092628\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Ativo\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","type":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_65226010\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Document\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","created_at":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_3805063338\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n \u003cspan class=\"lui-date-show\"\u003e05-04-2024\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","_lui_key":4,"_lui_data":{"delete_action":null}},{"id":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_2807543204\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n 5\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","name":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9974911290\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Relatório 2\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","status":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_9608590673\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Pendente\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","type":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_1680139525\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n Report\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","created_at":"\u003cspan class=\"lui-table__cell-content\" style=\"\" id=\"table_5793709857_cell_4575178121\" data-table-target=\"cell\"\u003e\n \u003cdiv class=\"lui-table__cell-content_slot\"\u003e\n \u003cspan class=\"lui-date-show\"\u003e12-05-2024\u003c/span\u003e\n \u003c/div\u003e\n \u003cdiv class=\"flex flex-row items-center justify-center\"\u003e\n \n \u003c/div\u003e\n\u003c/span\u003e\n","_lui_key":5,"_lui_data":{"delete_action":null}}] </div> <div id="filter_bar_table_example_pagination" class="hidden"> {"current":1,"pageSize":10,"total":5} </div></form>FilterBar
Description
Related components
| Used Components | Components where is Used |
|---|---|
| Label |
Usage rules
- ✅ Do
- ❌ Don't
<% # Simula dados da table items_data = [ { id: 1, name: "Documento 1", status: "ativo", type: "document", created_at: "2024-01-15" }, { id: 2, name: "Documento 2", status: "pendente", type: "document", created_at: "2024-02-20" }, { id: 3, name: "Relatório 1", status: "ativo", type: "report", created_at: "2024-03-10" }, { id: 4, name: "Documento 3", status: "ativo", type: "document", created_at: "2024-04-05" }, { id: 5, name: "Relatório 2", status: "pendente", type: "report", created_at: "2024-05-12" } ] # Simula parâmetros de filtros ativos mock_params = params[:q] || {} search_value = mock_params[:search] || "" status_filters = Array(mock_params[:status] || []) type_filters = Array(mock_params[:type] || []) filter_bar_filters = { status: status_filters, type: type_filters } # Aplica filtros aos dados filtered_data = items_data.dup filtered_data = filtered_data.filter { |item| item[:name].downcase.include?(search_value.downcase) } if search_value.present? filtered_data = filtered_data.filter { |item| status_filters.include?(item[:status]) } if status_filters.any? filtered_data = filtered_data.filter { |item| type_filters.include?(item[:type]) } if type_filters.any? # Configuração das colunas da table columns = [ { title: "ID", dataIndex: "id", key: "id", sortable: true }, { title: "Nome", dataIndex: "name", key: "name", searchable: true }, { title: "Status", dataIndex: "status", key: "status", filters: [ { type: :tag, text: "Ativo", value: "ativo" }, { type: :tag, text: "Pendente", value: "pendente" } ] }, { title: "Tipo", dataIndex: "type", key: "type", filters: [ { type: :tag, text: "Documento", value: "document" }, { type: :tag, text: "Relatório", value: "report" } ] }, { title: "Data", dataIndex: "created_at", key: "created_at", type: :date } ] pagination = { current: params[:page] || 1, pageSize: 10, total: filtered_data.size }%><% # ID fixo para a table para conectar com FilterBar table_id = "filter_bar_table_example" filter_bar_search_options = { name: "q[search]", value: search_value, placeholder: "Search items...", event_only: false }%><%= form_with url: "#", method: :get do |form| %> <% render LooposUi::V2::Table.new( id: table_id, columns: columns, searchable: false, # search managed by filter bar pagination: pagination, sortable: true, filter_bar_filters: filter_bar_filters, filter_bar_search_options: filter_bar_search_options, filter_bar_toggle_options: { label: "Only items in Handling", name: "only_in_handling", checked: true, } ) do |table| %> <% filtered_data.each do |item| %> <% table.with_row(key: item[:id]) do |row| %> <% row.with_cell(property: :id).with_content(item[:id]) %> <% row.with_cell(property: :name).with_content(item[:name]) %> <% row.with_cell(property: :status).with_content(item[:status].humanize) %> <% row.with_cell(property: :type).with_content(item[:type].humanize) %> <% row.with_cell(property: :created_at).with_content(item[:created_at]) %> <% end %> <% end %> <% end %><% end %>No notes provided.
No params configured.
Description
The FilterBar component is a comprehensive filtering interface that combines search functionality, filter buttons, toggle switches, and filter pills into a unified component. It's designed to work seamlessly with tables and provides dynamic filter management through JavaScript events.
Arguments
| Property | Default | Required | Description |
|---|---|---|---|
buttons |
[] |
- | Array of filter button configurations. Each item is a hash with properties for LooposUi::FilterButton |
show_search |
false |
- | Controls visibility of the search input field |
show_filter_buttons |
false |
- | Controls visibility of filter buttons |
show_toggle_switch |
false |
- | Controls visibility of the toggle switch |
search_options |
{} |
- | Hash of options to pass to the LooposUi::Inputs::Search component |
toggle_options |
{} |
- | Hash of options to pass to the LooposUi::Toggle component (excluding label, which is handled separately) |
mode |
:both |
- | Layout mode: :both (header + pills), :header (header only), or :pills (pills only) |
table_id |
nil |
- | Optional table ID for integration with table components |
Layout Modes
:both- Displays both the header (search + buttons + toggle) and the pills section:header- Shows only the header section (first row):pills- Shows only the pills section (second row)
Buttons Configuration
The buttons option accepts an array of hashes, where each hash contains properties for LooposUi::FilterButton:
buttons: [ { text: "Issues", showLeftIcon: true, left_icon: "info", showCounter: true, count: 3, counter_kind: :danger }, { text: "Operator actions", showLeftIcon: true, left_icon: "group", showCounter: true, count: 35, counter_kind: :warning }]Search Options
The search_options hash is passed directly to the LooposUi::Inputs::Search component:
search_options: { name: "q[search]", placeholder: "Search...", event_only: false}Toggle Options
The toggle_options hash is passed to the LooposUi::Toggle component, except for label which is handled separately by the FilterBar:
toggle_options: { label: "Show inactive items", name: "show_inactive", checked: false}Slots
filter_pills
Renders multiple LooposUi::FilterPill components. Each pill represents an active filter:
<%= render LooposUi::FilterBar.new(...) do |bar| %> <% bar.with_filter_pill( text: "Status: Active", state: :active, hasCloseButton: true ) %> <% bar.with_filter_pill( text: "Type: Document", state: :enabled, hasCloseButton: true ) %><% end %>Controller Targets
| Target | Description |
|---|---|
pillsContainer |
Container element for filter pills |
pill |
Individual filter pill elements |
clearAllButton |
Button to clear all filters |
Controller Values
| Value | Type | Description |
|---|---|---|
tableId |
String | ID of the associated table element |
Controller Methods
| Method | Description |
|---|---|
handleFiltersShow |
Handles the filters:show event to dynamically add filter pills |
handleFiltersDelete |
Handles the filters:delete event to remove specific filter pills |
handleFiltersClearAll |
Handles the filters:clearAll event to remove all filter pills |
clearAll |
Clears all filters and dispatches the filters:clearAll event |
addPill |
Dynamically adds a new filter pill based on a filter key |
removePill |
Removes a filter pill and dispatches the filters:delete event |
handleToggleChange |
Handles toggle switch changes and dispatches filter:toggle events |
handleButtonClick |
Handles filter button clicks and manages button selection state |
syncButtonStates |
Synchronizes filter button states based on form inputs |
syncToggleStates |
Synchronizes toggle switch state based on URL parameters and form data |
JavaScript Events
The FilterBar controller listens to and dispatches several custom events:
Listened Events
| Event Name | Description |
|---|---|
filters:show |
Adds filter pills dynamically. Event detail should contain toShow array |
filters:delete |
Removes a specific filter pill. Event detail should contain toDelete key |
filters:clearAll |
Removes all filter pills |
filter:toggle |
Handles filter toggle changes (from buttons or toggle switches) |
Dispatched Events
| Event Name | Description |
|---|---|
filters:clearAll |
Dispatched when the "Clear all filters" button is clicked |
filters:delete |
Dispatched when a filter pill is removed |
filter:toggle |
Dispatched when a filter button or toggle switch changes state |
Event Details
filters:show Event
const event = new CustomEvent('filters:show', { detail: { toShow: ['status$active', 'type$document'], tableId: 'table_123', // optional }, bubbles: true,})document.dispatchEvent(event)filters:delete Event
const event = new CustomEvent('filters:delete', { detail: { toDelete: 'status$active', tableId: 'table_123', // optional }, bubbles: true,})document.dispatchEvent(event)filter:toggle Event
const event = new CustomEvent('filter:toggle', { detail: { name: 'show_inactive', value: true, tableId: 'table_123', // optional }, bubbles: true,})document.dispatchEvent(event)Integration with Tables
When table_id is provided, the FilterBar automatically integrates with table components:
- The controller finds the table element by ID
- Filter pills are dynamically added/removed based on table filter events
- Button and toggle states are synchronized with form inputs
- The "Clear all filters" button visibility is managed automatically
Usage Examples
Basic Filter Bar with Search
<%= render LooposUi::FilterBar.new( show_search: true, search_options: { name: "q[search]", placeholder: "Search items...", event_only: false }, mode: :both) do |bar| %> <% bar.with_filter_pill(text: "Status: Active", state: :active) %><% end %>Filter Bar with Buttons and Toggle
<%= render LooposUi::FilterBar.new( show_search: true, show_filter_buttons: true, show_toggle_switch: true, buttons: [ { text: "Issues", showCounter: true, count: 3 }, { text: "Messages", showCounter: true, count: 10 } ], search_options: { name: "q[search]", placeholder: "Search...", event_only: false }, toggle_options: { label: "Show inactive items", name: "show_inactive", checked: false }, mode: :both) do |bar| %> <% bar.with_filter_pill(text: "Status: Active", state: :active) %><% end %>Header Only Mode
<%= render LooposUi::FilterBar.new( show_search: true, show_filter_buttons: true, search_options: { name: "q[search]", placeholder: "Search...", event_only: false }, mode: :header) %>Pills Only Mode
<%= render LooposUi::FilterBar.new( mode: :pills) do |bar| %> <% bar.with_filter_pill(text: "Status: Active", state: :active) %> <% bar.with_filter_pill(text: "Type: Document", state: :enabled) %><% end %>Integration with Table
<%= render LooposUi::FilterBar.new( table_id: "table_items", show_search: true, show_filter_buttons: true, search_options: { name: "q[search]", placeholder: "Search...", event_only: false }, mode: :both) %>