<!--
Copyright (C) 2016 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<script>
(function(window) {
  'use strict';

  window.Gerrit = window.Gerrit || {};

  /** @polymerBehavior Gerrit.ChangeTableBehavior */
  Gerrit.ChangeTableBehavior = {
    properties: {
      columnNames: {
        type: Array,
        value: [
          'Subject',
          'Status',
          'Owner',
          'Project',
          'Branch',
          'Updated',
          'Size',
        ],
        readOnly: true,
      },
    },

    /**
     * Returns the complement to the given column array
     * @param {Array} columns
     * @return {!Array}
     */
    getComplementColumns(columns) {
      return this.columnNames.filter(column => {
        return !columns.includes(column);
      });
    },

    /**
     * @param {string} columnToCheck
     * @param {!Array} columnsToDisplay
     * @return {boolean}
     */
    isColumnHidden(columnToCheck, columnsToDisplay) {
      return !columnsToDisplay.includes(columnToCheck);
    },
  };
})(window);
</script>
