From fe31bc522d0918847f9c97426cd38b4730b19c72 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Tue, 15 Dec 2020 10:54:40 +0100 Subject: [PATCH] Sharing of user types (#4210) * Sharing of user types * url encoding/decoding * assert non-array * Developer page URL encoding * Cleanup saving/loading encoding * Move fflate * CopyButton --- packages/page-accounts/src/modals/Create.tsx | 2 +- packages/page-settings/src/Developer.tsx | 22 ++++++++++- packages/react-api/package.json | 1 + packages/react-api/src/Api.tsx | 3 +- packages/react-api/src/urlTypes.ts | 37 +++++++++++++++++++ .../react-components/src/Button/Group.tsx | 4 ++ packages/react-components/src/CopyButton.tsx | 12 +++--- yarn.lock | 1 + 8 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 packages/react-api/src/urlTypes.ts diff --git a/packages/page-accounts/src/modals/Create.tsx b/packages/page-accounts/src/modals/Create.tsx index de0cbc69c8..9026aa93bc 100644 --- a/packages/page-accounts/src/modals/Create.tsx +++ b/packages/page-accounts/src/modals/Create.tsx @@ -321,7 +321,7 @@ function Create ({ className = '', onClose, onStatusChange, seed: propsSeed, typ onChange={_selectSeedType} options={seedOpt} /> - < CopyButton + ('mnemonic') : seedType === 'raw' ? isEthereum ? t('private key') : 'seed' : t('raw seed')} value={seed} diff --git a/packages/page-settings/src/Developer.tsx b/packages/page-settings/src/Developer.tsx index ffebc8cced..4a73b66caa 100644 --- a/packages/page-settings/src/Developer.tsx +++ b/packages/page-settings/src/Developer.tsx @@ -9,7 +9,8 @@ import store from 'store'; import styled from 'styled-components'; import { registry } from '@polkadot/react-api'; -import { Button, Editor, InputFile } from '@polkadot/react-components'; +import { decodeUrlTypes, encodeUrlTypes } from '@polkadot/react-api/urlTypes'; +import { Button, CopyButton, Editor, InputFile } from '@polkadot/react-components'; import { isJsonObject, stringToU8a, u8aToString } from '@polkadot/util'; import { useTranslation } from './translate'; @@ -37,14 +38,16 @@ function Developer ({ className = '', onStatusChange }: Props): React.ReactEleme const [isTypesValid, setIsTypesValid] = useState(true); const [types, setTypes] = useState>(EMPTY_TYPES); const [typesPlaceholder, setTypesPlaceholder] = useState(null); + const [sharedUrl, setSharedUrl] = useState(null); useEffect((): void => { - const types = store.get('types') as Record || {}; + const types = decodeUrlTypes() || store.get('types') as Record || {}; if (Object.keys(types).length) { setCode(JSON.stringify(types, null, 2)); setTypes({}); setTypesPlaceholder(Object.keys(types).join(', ')); + setSharedUrl(encodeUrlTypes(types)); } }, []); @@ -125,6 +128,8 @@ function Developer ({ className = '', onStatusChange }: Props): React.ReactEleme const _saveDeveloper = useCallback( (): void => { + let url = null; + try { registry.register(types); store.set('types', types); @@ -133,6 +138,12 @@ function Developer ({ className = '', onStatusChange }: Props): React.ReactEleme action: t('Your custom types have been added'), status: 'success' }); + + if (Object.keys(types).length) { + url = encodeUrlTypes(types); + + console.log(url); + } } catch (error) { console.error(error); setIsTypesValid(false); @@ -141,6 +152,8 @@ function Developer ({ className = '', onStatusChange }: Props): React.ReactEleme status: 'error' }); } + + setSharedUrl(url); }, [onStatusChange, t, types] ); @@ -180,6 +193,11 @@ function Developer ({ className = '', onStatusChange }: Props): React.ReactEleme + ('Share')} + type={t('url')} + value={sharedUrl} + />