From ec4eeb84f59e43fcbe15afe692e953ff48e4124c Mon Sep 17 00:00:00 2001 From: James Nuanez Date: Sun, 26 Jul 2020 23:24:13 -0700 Subject: [PATCH] Implement visibility toggle for account API keys --- src/components/blocks/TableContent.js | 71 ++++++++++++++----- src/components/blocks/ToggleText.js | 60 ++++++++++++++++ .../pages/internal/AccountsAddEdit.js | 21 ++++-- 3 files changed, 127 insertions(+), 25 deletions(-) create mode 100644 src/components/blocks/ToggleText.js diff --git a/src/components/blocks/TableContent.js b/src/components/blocks/TableContent.js index 2a310a8..f13ba53 100644 --- a/src/components/blocks/TableContent.js +++ b/src/components/blocks/TableContent.js @@ -11,6 +11,7 @@ import Loader from '../blocks/Loader.js'; import Modal from '../blocks/Modal.js'; import FormError from '../blocks/FormError.js'; import CopyableText from '../elements/CopyableText'; +import ToggleText from '../blocks/ToggleText.js'; const Td = styled.td` padding: 0.5rem 0; @@ -52,8 +53,24 @@ const TableContent = props => { newContent = newContent || content; const sortedContent = [...newContent]; sortedContent.sort((a, b) => { - let valA = (a[column] && a[column].toLowerCase()) || ''; - let valB = (b[column] && b[column].toLowerCase()) || ''; + let valA; + let valB; + if (!a[column]) { + valA = ''; + valB = ''; + } else if (typeof a[column] === 'object') { + if (a[column].type === 'masked') { + valA = a[column].masked; + valB = b[column].masked; + } + if (a[column].type === 'normal') { + valA = a[column].content; + valB = b[column].content; + } + } else { + valA = (a[column] && a[column].toLowerCase()) || ''; + valB = (b[column] && b[column].toLowerCase()) || ''; + } if (newSortOrder === 'asc') { return valA > valB ? 1 : valA < valB ? -1 : 0; } else { @@ -279,6 +296,7 @@ const TableContent = props => { {props.columns.map((c, i) => ( {selected.length && i === props.columns.length - 1 ? ( @@ -361,23 +379,40 @@ const TableContent = props => { /> )} - {props.columns.map((c, i) => ( - - {i === 0 && props.urlParam - ? - - - {a[c.key]} - - - - : {a[c.key]} + {props.columns.map((c, i) => { + let columnContent = ''; + let columnTitle = null; + if (a[c.key]) { + if (typeof a[c.key] === 'object') { + if (a[c.key].type === 'normal') { + columnContent = a[c.key].content; + columnTitle = columnContent; + } else if (a[c.key].type === 'masked') { + columnContent = ; + } + } else { + columnContent = a[c.key]; + columnTitle = columnContent; } - - ))} + } + return ( + + {i === 0 && props.urlParam + ? + + + {columnContent} + + + + : {columnContent} + } + + ); + })} {props.rowsHaveDeleteButtons ? (