/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
import React, { useState, useEffect } from 'react';
import {
Box,
Button,
CollectionPreferences,
Pagination,
TextFilter,
Table,
} from '@awsui/components-react';
import {
PAGE_SELECTOR_OPTIONS,
DEFAULT_PREFERENCES,
getColumnDefinitions,
getContentSelectorOptions
} from '../resources/auto-script-table-config.jsx';
import {
resolveRelationshipValues
} from '../resources/main.js'
import { useCollection } from '@awsui/collection-hooks';
import TableHeader from './TableHeader.jsx';
const AutomationJobsTable = (props) => {
const locaStorageKeys = {
tablePrefs: "Automation_Scripts_Table_Prefs",
tableAttributes: "Automation_Scripts_Table_Atrributes"
}
const [preferences, setPreferences] = useState(localStorage[locaStorageKeys.tablePrefs] ? JSON.parse(localStorage.getItem(locaStorageKeys.tablePrefs)) : DEFAULT_PREFERENCES);
const [contentAttributes,] = useState(getContentSelectorOptions(props.schema));
useEffect(() => {
localStorage.setItem(locaStorageKeys.tablePrefs, JSON.stringify(preferences));
}, [preferences]);
const { items, actions, collectionProps, filterProps, paginationProps, filteredItemsCount } = useCollection(
props.items,
{
pagination: { pageSize: preferences.pageSize },
sorting: {},
filtering: {
noMatch: (
No matches
No results match your query
)
}
}
);
// Keeps track of how many items are selected
function headerCounter(selectedItems, items) {
if(selectedItems != undefined){
return selectedItems.length
? `(${selectedItems.length} of ${items.length})`
: `(${items.length})`;
} else {
return undefined;
}
}
function filterCounter(count) {
return `${count} ${count === 1 ? 'match' : 'matches'}`;
}
async function handleRefresh(e) {
e.preventDefault();
await props.handleRefreshClick(e);
// Force update of current item to ensure latest data is available on viewer.
// Search for previously selected items, and update based on refreshed data.
let updatedItems = []
if (props.selectedItems.length > 0) {
for (const selectedItem of props.selectedItems) {
const findResult = items.find(item => item[props.schemaKeyAttribute] === selectedItem[props.schemaKeyAttribute])
if (findResult) {
updatedItems.push(findResult);
}
}
await props.handleSelectionChange(updatedItems);
}
}
async function handleOnRowClick(detail) {
if (props.handleSelectionChange){
let selectedItem = []
selectedItem.push(detail.item);
await props.handleSelectionChange(selectedItem);
}
}
function handleConfirmPreferences(detail) {
let lPreferences = detail;
lPreferences.trackBy = DEFAULT_PREFERENCES.trackBy;
setPreferences(lPreferences);
}
function getEntityAccess() {
let disabledButtons = {}
if (props.userAccess) {
//access permissions provided.
if (props.userAccess[props.schemaName]) {
if (props.userAccess[props.schemaName].create) {
if (props.userAccess[props.schemaName].create == false){
disabledButtons.add = true;
}
} else{
//user does not have this right defined, disable button.
disabledButtons.add = true;
}
if (props.userAccess[props.schemaName].update) {
if (props.userAccess[props.schemaName].update == false) {
disabledButtons.edit = true;
}
} else {
//user does not have this right defined, disable button.
disabledButtons.edit = true;
}
if (props.userAccess[props.schemaName].delete) {
if (props.userAccess[props.schemaName].delete == false) {
disabledButtons.delete = true;
}
} else{
//user does not have this right defined, disable button.
disabledButtons.delete = true;
}
} else
{
//access permissions provided but schema not present so default to no buttons enabled.
disabledButtons.add = true;
disabledButtons.edit = true;
disabledButtons.delete = true;
}
}
return disabledButtons;
}
return (
}
preferences={
handleConfirmPreferences(detail)}
pageSizePreference={{
title: 'Page size',
options: PAGE_SELECTOR_OPTIONS
}}
visibleContentPreference={{
title: 'Select visible columns',
options: contentAttributes
}}
wrapLinesPreference={{
label: 'Wrap lines',
description: 'Check to see all the text and wrap the lines'
}}
/>
}
wrapLines={preferences.wrapLines}
selectedItems={props.selectedItems ? props.selectedItems : []}
onSelectionChange={props.handleSelectionChange ? ({ detail }) => props.handleSelectionChange(detail.selectedItems) : null}
onRowClick={({ detail }) => handleOnRowClick(detail)}
selectionType={props.handleSelectionChange ? 'multi' : undefined}
pagination={}
filter={
}
/>
);
};
export default AutomationJobsTable;