import { connect } from 'react-redux';
import { Minimatch } from 'minimatch';
import { actions } from './file';
import shallowEqual from '../utils/shallowEqual';
export default function withFiles(options) {
  var watching = options.watch === undefined ? undefined // watch がない場合, 全てにマッチする
  : new Minimatch(options.watch);
  return function (component) {
    return connect(function (state) {
      var files = state.file.files;

      if (options.includeTrashedFiles !== true) {
        // ゴミ箱にあるファイルを除外
        files = files.filter(function (file) {
          return !file.isTrashed;
        });
      }

      if (watching) {
        // watch の対象でないファイルを除外
        files = files.filter(function (file) {
          return watching.match(file.name);
        });
      }

      return {
        files: files,
        glob: function glob(pattern, options) {
          var mm = new Minimatch(pattern, options);
          return files.filter(function (file) {
            return mm.match(file.name);
          });
        }
      };
    }, actions, null, // mergeProps,
    {
      areStatePropsEqual: function areStatePropsEqual(prevProps, nextProps) {
        return shallowEqual(prevProps.files, nextProps.files); // ImmutableFile は参照透過性を持つ
      }
    })(component);
  };
}