Сведения о фильтреСписок

Может кто-нибудь дайте мне знать, как отфильтровать DetailsList? Например, у меня есть следующий список:

список

Как мне отфильтровать список, чтобы при вводе «Отклонить» отображались только элементы со статусом «Отклонить»

Вот код, который я пробовал (из документации https://developer.microsoft.com/en-us/fabric#/components/detailslist):

private _onChangeText = (text: any) => {
    this.setState({ items: text ? this.state.items.filter(i => 
    i.Status.indexOf(text) > -1) : this.state.items });
}

<TextField
  label="Filter by name:"
  onChanged={this._onChangeText}
/>

Спасибо!


person user989988    schedule 15.08.2018    source источник


Ответы (1)


Вот Codepen, где я фильтрую коллекцию элементов, чтобы узнать, текст присутствует в любом из значений элемента (без учета регистра). Он похож на пример документации, который вы указали в своем исходном вопросе. Надеюсь, это поможет!

let COLUMNS = [
  { 
    key: "name", 
    name: "Name", 
    fieldName: "Name", 
    minWidth: 20, 
    maxWidth: 300,
  },
  { 
    key: "status", 
    name: "Status",
    fieldName: 'Status',
    minWidth: 20, 
    maxWidth: 300
  }
];


const ITEMS = [
  {
    Name: 'xyz',
    Status: 'Approve'
  },
  {
    Name: 'abc',
    Status: 'Approve'
  },
  {
    Name: 'mno',
    Status: 'Reject'
  },
  {
    Name: 'pqr',
    Status: 'Reject'
  }
]

const includesText = (i, text): boolean => {
  return Object.values(i).some((txt) => txt.toLowerCase().indexOf(text.toLowerCase()) > -1);
}

const filter = (text: string): any[] => {
  return ITEMS.filter(i => includesText(i, text)) || ITEMS;
}

class Content extends React.Component {

  constructor(props: any) {
    super(props);

    this.state = {
      items: ITEMS
    }
  }

  private _onChange(ev: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>, text: string) {
    let items = filter(text);
    this.setState({ items: items });
  }

  public render() {
    const { items } = this.state;
    return (
      <Fabric.Fabric>
          <Fabric.TextField label="Filter" onChange={this._onChange.bind(this)} />
          <Fabric.DetailsList 
            items={ items } 
            columns={ COLUMNS }              
          />        
      </Fabric.Fabric>
    );
  }

}

ReactDOM.render( 
  <Content />,
  document.getElementById('content')
);
person kevintcoughlin    schedule 15.08.2018
comment
Догадаться. Можно ли фильтровать, проверяя значения только в одном столбце, а не во всех значениях столбца? Например, с вашим текущим кодом, если я наберу «A», он вернет все элементы со значением «A». Скажем, имя одного элемента - «abc», а статус - «Отклонить», он также вернет его. Вместо этого, как мне просто проверить значения столбца «Статус» и вернуть результат на основе этого? Спасибо! - person user989988; 16.08.2018
comment
Вы можете выполнить вышеуказанное, настроив функцию фильтра следующим образом: codepen.io/kevintcoughlin/pen/ XBwLgp? Editors = 1011 - person kevintcoughlin; 16.08.2018
comment
Спасибо. Ценю вашу помощь! - person user989988; 16.08.2018