diff --git a/packages/docs/src/css/from-website/grid/gridlex-mixins.scss b/packages/docs/src/css/from-website/grid/gridlex-mixins.scss index 0dc1a500d7..58be72b65d 100755 --- a/packages/docs/src/css/from-website/grid/gridlex-mixins.scss +++ b/packages/docs/src/css/from-website/grid/gridlex-mixins.scss @@ -13,7 +13,7 @@ // Function to generate the grid by number @mixin makeGridByNumber($grid) { - @for $i from 1 through $gl-colCount { + @for $i from 2 through $gl-colCount { [#{$gl-attributeName}*="#{$grid}-#{$i}"] > [#{$gl-attributeName}~="#{$gl-colName}"], [#{$gl-attributeName}*="#{$grid}-#{$i}"] > [#{$gl-attributeName}*="#{$gl-colName}-"], [#{$gl-attributeName}*="#{$grid}-#{$i}"] > [#{$gl-attributeName}*="#{$gl-colName}_"] { @@ -32,7 +32,7 @@ [#{$gl-attributeName}*="#{$gl-gridName}-"], [#{$gl-attributeName}*="#{$gl-gridName}_"] { - @for $i from 1 through $gl-colCount { + @for $i from 2 through $gl-colCount { > [#{$gl-attributeName}*="#{$col}-#{$i}"]{ flex-basis: map-get($gl-colPortions, $i); max-width: map-get($gl-colPortions, $i); } } } diff --git a/packages/website/components/account/filesManager/fileRowItem.scss b/packages/website/components/account/filesManager/fileRowItem.scss index 1abd835765..b99973afa6 100644 --- a/packages/website/components/account/filesManager/fileRowItem.scss +++ b/packages/website/components/account/filesManager/fileRowItem.scss @@ -44,6 +44,7 @@ $file-size: auto; display: flex; align-items: flex-start; justify-content: space-between; + word-break: break-word; @include fontWeight_Regular; @include medium { padding: 0.85rem 1rem 0.85rem 1.975rem; diff --git a/packages/website/components/account/filesManager/filesManager.tsx b/packages/website/components/account/filesManager/filesManager.tsx index 40bd66c53c..ef369cbc5f 100644 --- a/packages/website/components/account/filesManager/filesManager.tsx +++ b/packages/website/components/account/filesManager/filesManager.tsx @@ -252,19 +252,21 @@ const FilesManager = ({ className, content, onFileUpload }: FilesManagerProps) = Object.values(PinStatus).find(status => item.pins.some(pin => status === pin.status)) || PinStatus.QUEUING } - storageProviders={item.deals.map((deal, indx, deals) => ( - - - {`${deal.storageProvider}`} - - {indx !== deals.length - 1 && ', '} - - ))} + storageProviders={item.deals + .filter(deal => !!deal.storageProvider) + .map((deal, indx, deals) => ( + + + {`${deal.storageProvider}`} + + {indx !== deals.length - 1 && ', '} + + ))} size={filesize(item.dagSize)} highlight={{ target: 'name', text: keyword?.toString() || '' }} numberOfPins={item.pins.length} diff --git a/packages/website/components/tokens/tokensManager/tokenRowItem.js b/packages/website/components/tokens/tokensManager/tokenRowItem.js index deb9d66093..4077089eba 100644 --- a/packages/website/components/tokens/tokensManager/tokenRowItem.js +++ b/packages/website/components/tokens/tokensManager/tokenRowItem.js @@ -42,22 +42,16 @@ const TokenRowItem = ({ className = '', name, secret, id = '', isHeader, onToken {!isHeader && ( <> - {deletingTokenId !== id ? ( - <> -
- -
-
- -
- - ) : ( - 'Deleting...' - )} +
+ +
+
+ +
)} diff --git a/packages/website/components/tokens/tokensManager/tokenRowItem.scss b/packages/website/components/tokens/tokensManager/tokenRowItem.scss index bbbe1d20a7..2c636af06f 100644 --- a/packages/website/components/tokens/tokensManager/tokenRowItem.scss +++ b/packages/website/components/tokens/tokensManager/tokenRowItem.scss @@ -28,6 +28,7 @@ $date-delete: auto; border-bottom: 0.0625rem solid rgba(white, 0.05); .file-row-label { @include fontWeight_Semibold; + padding-bottom: 0.25rem; width: 4.5rem; flex-shrink: 0; display: inline-block; diff --git a/packages/website/components/tokens/tokensManager/tokensManager.js b/packages/website/components/tokens/tokensManager/tokensManager.js index ba0572fcec..640fe6e608 100644 --- a/packages/website/components/tokens/tokensManager/tokensManager.js +++ b/packages/website/components/tokens/tokensManager/tokensManager.js @@ -7,7 +7,7 @@ import { useRouter } from 'next/router'; import TokenRowItem from './tokenRowItem'; import countly from 'lib/countly'; import Loading from 'components/loading/loading'; -import Button from 'components/button/button'; +import Button, { ButtonVariant } from 'components/button/button'; import { useTokens } from 'components/contexts/tokensContext'; import Dropdown from 'ZeroComponents/dropdown/dropdown'; import Filterable from 'ZeroComponents/filterable/filterable'; @@ -15,6 +15,9 @@ import Sortable from 'ZeroComponents/sortable/sortable'; import Pagination from 'ZeroComponents/pagination/pagination'; import SearchIcon from 'assets/icons/search'; import CheckIcon from 'assets/icons/check'; +import Modal from 'modules/zero/components/modal/modal'; +import GradientBackgroundB from 'assets/illustrations/gradient-background-b'; +import CloseIcon from 'assets/icons/close'; const defaultQueryOrder = 'a-z'; /** @@ -32,6 +35,7 @@ const TokensManager = ({ content }) => { const { query, replace } = useRouter(); const queryClient = useQueryClient(); const queryOrderRef = useRef(query.order); + const deleteModalState = useState(false); const [filteredTokens, setFilteredTokens] = useState([]); const [sortedTokens, setSortedTokens] = useState([]); @@ -63,29 +67,34 @@ const TokensManager = ({ content }) => { } }, [query.order, query, replace]); - const deleteTokenCallback = useCallback( - async id => { - if (!window.confirm('Are you sure? Deleted tokens cannot be recovered!')) { - return; - } - setDeletingTokenId(id); + const deleteTokenCallback = useCallback(async () => { + try { + await deleteToken(deletingTokenId); + } finally { + await queryClient.invalidateQueries('get-tokens'); - try { - await deleteToken(id); - } finally { - await queryClient.invalidateQueries('get-tokens'); + countly.trackEvent(countly.events.TOKEN_DELETE, { + ui: countly.ui.TOKENS, + }); - countly.trackEvent(countly.events.TOKEN_DELETE, { - ui: countly.ui.TOKENS, - }); + await getTokens(); + setDeletingTokenId(''); + } + deleteModalState[1](false); + }, [deleteModalState, deleteToken, deletingTokenId, queryClient, getTokens]); - await getTokens(); - setDeletingTokenId(''); - } + const onDeleteSingle = useCallback( + async id => { + deleteModalState[1](true); + setDeletingTokenId(id); }, - [queryClient, deleteToken, setDeletingTokenId, getTokens] + [deleteModalState] ); + const closeDeleteModal = useCallback(() => { + deleteModalState[1](false); + }, [deleteModalState]); + const showCheckOverlayHandler = useCallback(() => { setShowCheckOverlay(true); setTimeout(() => { @@ -94,81 +103,104 @@ const TokensManager = ({ content }) => { }, [setShowCheckOverlay]); return ( -
-
-

{content.heading}

- } - filterKeys={['name', 'secret']} - placeholder={content.ui.filter.placeholder} - queryParam="filter" - onChange={setFilteredTokens} - /> - -
- -
- {isFetchingTokens || !fetchDate ? ( - - ) : !tokens.length ? ( - - {content.table.message} - {'\u00A0'} - - - ) : ( - paginatedTokens.map(({ name, secret, _id }) => ( - deleteTokenCallback(_id)} - /> - )) - )} -
-
- - setItemsPerPage(value)} - onSelectChange={showCheckOverlayHandler} - /> -
-
-
- + <> +
+
+

{content.heading}

+ } + filterKeys={['name', 'secret']} + placeholder={content.ui.filter.placeholder} + queryParam="filter" + onChange={setFilteredTokens} + /> + +
+ +
+ {isFetchingTokens || !fetchDate ? ( + + ) : !tokens.length ? ( + + {content.table.message} + {'\u00A0'} + + + ) : ( + paginatedTokens.map(({ name, secret, _id }) => ( + onDeleteSingle(_id)} + /> + )) + )} +
+
+ + setItemsPerPage(value)} + onSelectChange={showCheckOverlayHandler} + /> +
+
+
+ +
-
+ } + showCloseButton + > + +
+
{content?.ui.delete.heading}
+

{content?.ui.delete.alert}

+
+
+ + +
+
+ ); }; diff --git a/packages/website/components/tokens/tokensManager/tokensManager.scss b/packages/website/components/tokens/tokensManager/tokensManager.scss index 5b0b5c6da5..ada43183c7 100644 --- a/packages/website/components/tokens/tokensManager/tokensManager.scss +++ b/packages/website/components/tokens/tokensManager/tokensManager.scss @@ -20,7 +20,7 @@ @include medium { padding-left: 0; } - + &:not(.delete-modal), &:not(.tokens-manager-footer) { max-width: 52.8125rem; @include medium { @@ -90,6 +90,15 @@ @include monospace_Text; } + .token-name { + line-height: 1.5; + padding: 0.5rem 1rem 0.5rem 0; + word-break: break-word; + @include medium { + padding: 0.85rem 3.975rem 0.85rem 1.375rem; + } + } + @include medium { .token-name { padding-top: 1.375rem; diff --git a/packages/website/content/pages/app/tokens.json b/packages/website/content/pages/app/tokens.json index 4a7725f456..68b89dfabd 100644 --- a/packages/website/content/pages/app/tokens.json +++ b/packages/website/content/pages/app/tokens.json @@ -79,6 +79,12 @@ { "label": "View 50 Results", "value": "50" }, { "label": "View 100 Results", "value": "100" } ] + }, + "delete": { + "alert": "Are you sure? Deleted tokens cannot be recovered!", + "ok": "Delete Token", + "cancel": "Cancel", + "heading": "Web3.Storage says" } } } diff --git a/packages/website/pages/404.js b/packages/website/pages/404.js index aff11fe852..72797fef50 100644 --- a/packages/website/pages/404.js +++ b/packages/website/pages/404.js @@ -9,7 +9,8 @@ export default function Home() { useEffect(() => { countly.trackEvent(countly.events.NOT_FOUND, { - path: '/404', + path: window.location?.pathname ?? 'unknown', + referrer: typeof window !== 'undefined' ? document.referrer : null, }); }, []);