docs: public void onValueChange(ValueChangeEvent<String> event) {
  
          cancelQuickFilterTimer();
          if (event.getSource() == m_sortSelectBox) {
              // depending on the sort value the tab may or may not have the quick filter ability
              if (hasQuickFilter()) {
                  if (m_quickSearch == null) {
                      createQuickBox();
                  }
              } else {
                  removeQuickBox();
              }
              getTabHandler().onSort(event.getValue(), hasQuickFilter() ? m_quickSearch.getFormValueAsString() : null);
          }
          if ((event.getSource() == m_quickSearch)) {
              if (hasQuickFilter()) {
  
                  if ((CmsStringUtil.isEmptyOrWhitespaceOnly(event.getValue()) || (event.getValue().length() >= 3))) {
                      // only act if filter length is at least 3 characters or empty
                      if ((m_lastQuickSearchValue == null) || !m_lastQuickSearchValue.equals(event.getValue())) {
                          scheduleQuickFilterTimer();
                      }
                      m_lastQuickSearchValue = event.getValue();
                  }
              } else {
                  checkQuickSearchStatus();
              }
          }
      }