Browse Source

Centralize all injected config (easier PR-able) (#2317)

* Centralize all injected config (easier PR-able)

* Extract logos into .config

* .config -> all-config
Jaco Greeff 5 years ago
parent
commit
50eb7d83f0
37 changed files with 427 additions and 135 deletions
  1. 0 0
      packages/all-config/.skip-build
  2. 0 0
      packages/all-config/.skip-npm
  3. 201 0
      packages/all-config/LICENSE
  4. 3 0
      packages/all-config/README.md
  5. 18 0
      packages/all-config/package.json
  6. 1 1
      packages/all-config/src/api/chain/index.ts
  7. 1 1
      packages/all-config/src/api/chain/westend.ts
  8. 11 0
      packages/all-config/src/api/index.ts
  9. 1 1
      packages/all-config/src/api/spec/centrifuge-chain.ts
  10. 0 0
      packages/all-config/src/api/spec/edgeware-node-types/identity.ts
  11. 0 0
      packages/all-config/src/api/spec/edgeware-node-types/index.ts
  12. 0 0
      packages/all-config/src/api/spec/edgeware-node-types/signaling.ts
  13. 0 0
      packages/all-config/src/api/spec/edgeware-node-types/treasuryReward.ts
  14. 0 0
      packages/all-config/src/api/spec/edgeware-node-types/voting.ts
  15. 1 1
      packages/all-config/src/api/spec/edgeware.ts
  16. 1 1
      packages/all-config/src/api/spec/index.ts
  17. 1 1
      packages/all-config/src/api/spec/kulupu.ts
  18. 22 0
      packages/all-config/src/links/commonwealth.ts
  19. 17 0
      packages/all-config/src/links/index.ts
  20. 27 0
      packages/all-config/src/links/polkascan.ts
  21. 20 0
      packages/all-config/src/links/subscan.ts
  22. 14 0
      packages/all-config/src/links/types.ts
  23. 56 0
      packages/all-config/src/logos/index.ts
  24. 2 2
      packages/all-config/src/settings/endpoints.ts
  25. 1 1
      packages/all-config/src/settings/index.ts
  26. 2 2
      packages/all-config/src/settings/languages.ts
  27. 1 1
      packages/all-config/src/settings/types.ts
  28. 2 2
      packages/app-settings/src/General.tsx
  29. 2 2
      packages/app-settings/src/SelectUrl.tsx
  30. 1 1
      packages/app-settings/src/util.tsx
  31. 2 2
      packages/apps/src/initSettings.ts
  32. 0 1
      packages/react-api/package.json
  33. 1 2
      packages/react-api/src/Api.tsx
  34. 3 48
      packages/react-components/src/ChainImg.tsx
  35. 4 64
      packages/react-components/src/LinkExternal.tsx
  36. 1 0
      tsconfig.json
  37. 10 1
      yarn.lock

+ 0 - 0
packages/all-config/.skip-build


+ 0 - 0
packages/all-config/.skip-npm


+ 201 - 0
packages/all-config/LICENSE

@@ -0,0 +1,201 @@
+                              Apache License
+                        Version 2.0, January 2004
+                    http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+  "License" shall mean the terms and conditions for use, reproduction,
+  and distribution as defined by Sections 1 through 9 of this document.
+
+  "Licensor" shall mean the copyright owner or entity authorized by
+  the copyright owner that is granting the License.
+
+  "Legal Entity" shall mean the union of the acting entity and all
+  other entities that control, are controlled by, or are under common
+  control with that entity. For the purposes of this definition,
+  "control" means (i) the power, direct or indirect, to cause the
+  direction or management of such entity, whether by contract or
+  otherwise, or (ii) ownership of fifty percent (50%) or more of the
+  outstanding shares, or (iii) beneficial ownership of such entity.
+
+  "You" (or "Your") shall mean an individual or Legal Entity
+  exercising permissions granted by this License.
+
+  "Source" form shall mean the preferred form for making modifications,
+  including but not limited to software source code, documentation
+  source, and configuration files.
+
+  "Object" form shall mean any form resulting from mechanical
+  transformation or translation of a Source form, including but
+  not limited to compiled object code, generated documentation,
+  and conversions to other media types.
+
+  "Work" shall mean the work of authorship, whether in Source or
+  Object form, made available under the License, as indicated by a
+  copyright notice that is included in or attached to the work
+  (an example is provided in the Appendix below).
+
+  "Derivative Works" shall mean any work, whether in Source or Object
+  form, that is based on (or derived from) the Work and for which the
+  editorial revisions, annotations, elaborations, or other modifications
+  represent, as a whole, an original work of authorship. For the purposes
+  of this License, Derivative Works shall not include works that remain
+  separable from, or merely link (or bind by name) to the interfaces of,
+  the Work and Derivative Works thereof.
+
+  "Contribution" shall mean any work of authorship, including
+  the original version of the Work and any modifications or additions
+  to that Work or Derivative Works thereof, that is intentionally
+  submitted to Licensor for inclusion in the Work by the copyright owner
+  or by an individual or Legal Entity authorized to submit on behalf of
+  the copyright owner. For the purposes of this definition, "submitted"
+  means any form of electronic, verbal, or written communication sent
+  to the Licensor or its representatives, including but not limited to
+  communication on electronic mailing lists, source code control systems,
+  and issue tracking systems that are managed by, or on behalf of, the
+  Licensor for the purpose of discussing and improving the Work, but
+  excluding communication that is conspicuously marked or otherwise
+  designated in writing by the copyright owner as "Not a Contribution."
+
+  "Contributor" shall mean Licensor and any individual or Legal Entity
+  on behalf of whom a Contribution has been received by Licensor and
+  subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+  this License, each Contributor hereby grants to You a perpetual,
+  worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+  copyright license to reproduce, prepare Derivative Works of,
+  publicly display, publicly perform, sublicense, and distribute the
+  Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+  this License, each Contributor hereby grants to You a perpetual,
+  worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+  (except as stated in this section) patent license to make, have made,
+  use, offer to sell, sell, import, and otherwise transfer the Work,
+  where such license applies only to those patent claims licensable
+  by such Contributor that are necessarily infringed by their
+  Contribution(s) alone or by combination of their Contribution(s)
+  with the Work to which such Contribution(s) was submitted. If You
+  institute patent litigation against any entity (including a
+  cross-claim or counterclaim in a lawsuit) alleging that the Work
+  or a Contribution incorporated within the Work constitutes direct
+  or contributory patent infringement, then any patent licenses
+  granted to You under this License for that Work shall terminate
+  as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+  Work or Derivative Works thereof in any medium, with or without
+  modifications, and in Source or Object form, provided that You
+  meet the following conditions:
+
+  (a) You must give any other recipients of the Work or
+      Derivative Works a copy of this License; and
+
+  (b) You must cause any modified files to carry prominent notices
+      stating that You changed the files; and
+
+  (c) You must retain, in the Source form of any Derivative Works
+      that You distribute, all copyright, patent, trademark, and
+      attribution notices from the Source form of the Work,
+      excluding those notices that do not pertain to any part of
+      the Derivative Works; and
+
+  (d) If the Work includes a "NOTICE" text file as part of its
+      distribution, then any Derivative Works that You distribute must
+      include a readable copy of the attribution notices contained
+      within such NOTICE file, excluding those notices that do not
+      pertain to any part of the Derivative Works, in at least one
+      of the following places: within a NOTICE text file distributed
+      as part of the Derivative Works; within the Source form or
+      documentation, if provided along with the Derivative Works; or,
+      within a display generated by the Derivative Works, if and
+      wherever such third-party notices normally appear. The contents
+      of the NOTICE file are for informational purposes only and
+      do not modify the License. You may add Your own attribution
+      notices within Derivative Works that You distribute, alongside
+      or as an addendum to the NOTICE text from the Work, provided
+      that such additional attribution notices cannot be construed
+      as modifying the License.
+
+  You may add Your own copyright statement to Your modifications and
+  may provide additional or different license terms and conditions
+  for use, reproduction, or distribution of Your modifications, or
+  for any such Derivative Works as a whole, provided Your use,
+  reproduction, and distribution of the Work otherwise complies with
+  the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+  any Contribution intentionally submitted for inclusion in the Work
+  by You to the Licensor shall be under the terms and conditions of
+  this License, without any additional terms or conditions.
+  Notwithstanding the above, nothing herein shall supersede or modify
+  the terms of any separate license agreement you may have executed
+  with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+  names, trademarks, service marks, or product names of the Licensor,
+  except as required for reasonable and customary use in describing the
+  origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+  agreed to in writing, Licensor provides the Work (and each
+  Contributor provides its Contributions) on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+  implied, including, without limitation, any warranties or conditions
+  of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+  PARTICULAR PURPOSE. You are solely responsible for determining the
+  appropriateness of using or redistributing the Work and assume any
+  risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+  whether in tort (including negligence), contract, or otherwise,
+  unless required by applicable law (such as deliberate and grossly
+  negligent acts) or agreed to in writing, shall any Contributor be
+  liable to You for damages, including any direct, indirect, special,
+  incidental, or consequential damages of any character arising as a
+  result of this License or out of the use or inability to use the
+  Work (including but not limited to damages for loss of goodwill,
+  work stoppage, computer failure or malfunction, or any and all
+  other commercial damages or losses), even if such Contributor
+  has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+  the Work or Derivative Works thereof, You may choose to offer,
+  and charge a fee for, acceptance of support, warranty, indemnity,
+  or other liability obligations and/or rights consistent with this
+  License. However, in accepting such obligations, You may act only
+  on Your own behalf and on Your sole responsibility, not on behalf
+  of any other Contributor, and only if You agree to indemnify,
+  defend, and hold each Contributor harmless for any liability
+  incurred by, or claims asserted against, such Contributor by reason
+  of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+  To apply the Apache License to your work, attach the following
+  boilerplate notice, with the fields enclosed by brackets "[]"
+  replaced with your own identifying information. (Don't include
+  the brackets!)  The text should be enclosed in the appropriate
+  comment syntax for the file format. We also recommend that a
+  file or class name and description of purpose be included on the
+  same "printed page" as the copyright notice for easier
+  identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+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.

+ 3 - 0
packages/all-config/README.md

@@ -0,0 +1,3 @@
+# @polkadot/apps-config
+
+General config for various services, including settings, external links & types

+ 18 - 0
packages/all-config/package.json

@@ -0,0 +1,18 @@
+{
+  "name": "@polkadot/apps-config",
+  "private": true,
+  "version": "0.40.0-beta.62",
+  "main": "index.js",
+  "repository": "https://github.com/polkadot-js/apps.git",
+  "author": "Jaco Greeff <jacogr@gmail.com>",
+  "maintainers": [
+    "Jaco Greeff <jacogr@gmail.com>"
+  ],
+  "contributors": [],
+  "license": "Apache-2.0",
+  "dependencies": {
+    "@babel/runtime": "^7.8.4",
+    "@polkadot/ui-assets": "^0.52.0-beta.4",
+    "edgeware-node-types": "^1.2.0"
+  }
+}

+ 1 - 1
packages/react-api/src/overrides/chain/index.ts → packages/all-config/src/api/chain/index.ts

@@ -1,4 +1,4 @@
-// Copyright 2017-2020 @polkadot/react-api authors & contributors
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 

+ 1 - 1
packages/react-api/src/overrides/chain/westend.ts → packages/all-config/src/api/chain/westend.ts

@@ -1,4 +1,4 @@
-// Copyright 2017-2020 @polkadot/react-api authors & contributors
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 

+ 11 - 0
packages/all-config/src/api/index.ts

@@ -0,0 +1,11 @@
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
+// This software may be modified and distributed under the terms
+// of the Apache-2.0 license. See the LICENSE file for details.
+
+import typesChain from './chain';
+import typesSpec from './spec';
+
+export {
+  typesChain,
+  typesSpec
+};

+ 1 - 1
packages/react-api/src/overrides/spec/centrifuge-chain.ts → packages/all-config/src/api/spec/centrifuge-chain.ts

@@ -1,4 +1,4 @@
-// Copyright 2017-2020 @polkadot/react-api authors & contributors
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 

+ 0 - 0
packages/react-api/src/overrides/spec/edgeware-node-types/identity.ts → packages/all-config/src/api/spec/edgeware-node-types/identity.ts


+ 0 - 0
packages/react-api/src/overrides/spec/edgeware-node-types/index.ts → packages/all-config/src/api/spec/edgeware-node-types/index.ts


+ 0 - 0
packages/react-api/src/overrides/spec/edgeware-node-types/signaling.ts → packages/all-config/src/api/spec/edgeware-node-types/signaling.ts


+ 0 - 0
packages/react-api/src/overrides/spec/edgeware-node-types/treasuryReward.ts → packages/all-config/src/api/spec/edgeware-node-types/treasuryReward.ts


+ 0 - 0
packages/react-api/src/overrides/spec/edgeware-node-types/voting.ts → packages/all-config/src/api/spec/edgeware-node-types/voting.ts


+ 1 - 1
packages/react-api/src/overrides/spec/edgeware.ts → packages/all-config/src/api/spec/edgeware.ts

@@ -1,4 +1,4 @@
-// Copyright 2017-2020 @polkadot/react-api authors & contributors
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 

+ 1 - 1
packages/react-api/src/overrides/spec/index.ts → packages/all-config/src/api/spec/index.ts

@@ -1,4 +1,4 @@
-// Copyright 2017-2020 @polkadot/react-api authors & contributors
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 

+ 1 - 1
packages/react-api/src/overrides/spec/kulupu.ts → packages/all-config/src/api/spec/kulupu.ts

@@ -1,4 +1,4 @@
-// Copyright 2017-2020 @polkadot/react-api authors & contributors
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 

+ 22 - 0
packages/all-config/src/links/commonwealth.ts

@@ -0,0 +1,22 @@
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
+// This software may be modified and distributed under the terms
+// of the Apache-2.0 license. See the LICENSE file for details.
+
+import BN from 'bn.js';
+
+export default {
+  isActive: true,
+  chains: {
+    Edgeware: 'edgeware',
+    Kusama: 'kusama',
+    'Kusama CC3': 'kusama'
+  },
+  paths: {
+    council: 'proposal/councilmotion',
+    proposal: 'proposal/democracyproposal',
+    referendum: 'proposal/referendum',
+    treasury: 'proposal/treasuryproposal'
+  },
+  create: (chain: string, path: string, data: BN | number | string): string =>
+    `https://commonwealth.im/${chain}/${path}/${data.toString()}`
+};

+ 17 - 0
packages/all-config/src/links/index.ts

@@ -0,0 +1,17 @@
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
+// This software may be modified and distributed under the terms
+// of the Apache-2.0 license. See the LICENSE file for details.
+
+import { ExternalDef } from './types';
+
+import Commonwealth from './commonwealth';
+import Polkascan from './polkascan';
+import Subscan from './subscan';
+
+const externals: Record<string, ExternalDef> = {
+  Commonwealth,
+  Polkascan,
+  Subscan
+};
+
+export default externals;

+ 27 - 0
packages/all-config/src/links/polkascan.ts

@@ -0,0 +1,27 @@
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
+// This software may be modified and distributed under the terms
+// of the Apache-2.0 license. See the LICENSE file for details.
+
+import BN from 'bn.js';
+
+export default {
+  isActive: true,
+  chains: {
+    Edgeware: 'edgeware',
+    Kulupu: 'kulupu',
+    Kusama: 'kusama',
+    'Kusama CC3': 'kusama',
+    Westend: 'westend'
+  },
+  paths: {
+    address: 'module/account',
+    block: 'system/block',
+    council: 'council/motion',
+    extrinsic: 'system/extrinsic',
+    proposal: 'democracy/proposal',
+    referendum: 'democracy/referendum',
+    treasury: 'treasury/proposal'
+  },
+  create: (chain: string, path: string, data: BN | number | string): string =>
+    `https://polkascan.io/pre/${chain}/${path}/${data.toString()}`
+};

+ 20 - 0
packages/all-config/src/links/subscan.ts

@@ -0,0 +1,20 @@
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
+// This software may be modified and distributed under the terms
+// of the Apache-2.0 license. See the LICENSE file for details.
+
+import BN from 'bn.js';
+
+export default {
+  isActive: false,
+  chains: {
+    Kusama: 'kusama',
+    'Kusama CC3': 'kusama'
+  },
+  paths: {
+    address: 'account',
+    block: 'block',
+    extrinsic: 'extrinsic'
+  },
+  create: (chain: string, path: string, data: BN | number | string): string =>
+    `https://${chain}.subscan.io/${path}/${data.toString()}`
+};

+ 14 - 0
packages/all-config/src/links/types.ts

@@ -0,0 +1,14 @@
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
+// This software may be modified and distributed under the terms
+// of the Apache-2.0 license. See the LICENSE file for details.
+
+import BN from 'bn.js';
+
+export type LinkTypes = 'address' | 'block' | 'council' | 'extrinsic' | 'proposal' | 'referendum' | 'treasury';
+
+export interface ExternalDef {
+  isActive: boolean;
+  chains: Record<string, string>;
+  paths: Partial<Record<LinkTypes, string>>;
+  create: (chain: string, path: string, data: BN | number | string) => string;
+}

+ 56 - 0
packages/all-config/src/logos/index.ts

@@ -0,0 +1,56 @@
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
+// This software may be modified and distributed under the terms
+// of the Apache-2.0 license. See the LICENSE file for details.
+
+// the imports here as a bit all-over, non-aphabetical as a whole - since we expect this to grow,
+// rather organize based on type, grouping chains and nodes as opposed to location
+
+// last-resort fallback, just something empty
+import emptyLogo from '@polkadot/ui-assets/empty.svg';
+
+// anything for a specific chain, most would probably fit into the node category (but allow for chain-specific)
+import chainKusama from '@polkadot/ui-assets/chains/kusama-128.gif';
+
+// defaults for the node type, assuming we don't have a specific chain, but rather match on the implementation
+import nodeCentrifuge from '@polkadot/ui-assets/centrifuge.png';
+import nodeEdgeware from '@polkadot/ui-assets/edgeware-circle.svg';
+import nodePolkadot from '@polkadot/ui-assets/polkadot-circle.svg';
+import nodePolkadotJs from '@polkadot/ui-assets/polkadot-js.svg';
+import nodeSubstrate from '@polkadot/ui-assets/substrate-hexagon.svg';
+
+// overrides based on the actual matched chain name
+const chainLogos: Record<string, any> = {
+  kusama: chainKusama, // new name after CC3
+  'kusama cc1': chainKusama,
+  'kusama cc2': chainKusama,
+  'kusama cc3': chainKusama
+};
+
+// overrides based on the actual software node type (all '-' converted to ' ')
+const nodeLogos: Record<string, any> = {
+  'centrifuge chain': nodeCentrifuge,
+  'edgeware node': nodeEdgeware,
+  'node template': nodeSubstrate,
+  'parity polkadot': nodePolkadot,
+  'polkadot js': nodePolkadotJs,
+  'substrate node': nodeSubstrate
+};
+
+// overrides when we pass an explicit logo name
+const namedLogos: Record<string, any> = {
+  centrifuge: nodeCentrifuge,
+  empty: emptyLogo,
+  edgeware: nodeEdgeware,
+  alexander: nodePolkadot,
+  kusama: chainKusama,
+  polkadot: nodePolkadot,
+  substrate: nodeSubstrate,
+  westend: nodePolkadot
+};
+
+export {
+  chainLogos,
+  emptyLogo,
+  namedLogos,
+  nodeLogos
+};

+ 2 - 2
packages/app-settings/src/available/endpoints.ts → packages/all-config/src/settings/endpoints.ts

@@ -1,8 +1,8 @@
-// Copyright 2017-2020 @polkadot/app-settings authors & contributors
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 
-import { Option } from '../types';
+import { Option } from './types';
 
 export default [
   {

+ 1 - 1
packages/app-settings/src/available/index.ts → packages/all-config/src/settings/index.ts

@@ -1,4 +1,4 @@
-// Copyright 2017-2020 @polkadot/app-settings authors & contributors
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 

+ 2 - 2
packages/app-settings/src/available/languages.ts → packages/all-config/src/settings/languages.ts

@@ -1,8 +1,8 @@
-// Copyright 2017-2020 @polkadot/app-settings authors & contributors
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 
-import { Option } from '../types';
+import { Option } from './types';
 
 export default [
   {

+ 1 - 1
packages/app-settings/src/types.ts → packages/all-config/src/settings/types.ts

@@ -1,4 +1,4 @@
-// Copyright 2017-2020 @polkadot/app-settings authors & contributors
+// Copyright 2017-2020 @polkadot/apps-config authors & contributors
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 

+ 2 - 2
packages/app-settings/src/General.tsx

@@ -2,14 +2,14 @@
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 
-import { Option } from './types';
+import { Option } from '@polkadot/apps-config/settings/types';
 
 import React, { useEffect, useState, useMemo } from 'react';
+import { availableLanguages } from '@polkadot/apps-config/settings';
 import { isLedgerCapable } from '@polkadot/react-api';
 import { Button, ButtonCancel, Dropdown } from '@polkadot/react-components';
 import uiSettings, { SettingsStruct } from '@polkadot/ui-settings';
 
-import { availableLanguages } from './available';
 import { useTranslation } from './translate';
 import { createIdenticon, createOption, save, saveAndReload } from './util';
 import SelectUrl from './SelectUrl';

+ 2 - 2
packages/app-settings/src/SelectUrl.tsx

@@ -2,14 +2,14 @@
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 
-import { Option } from './types';
+import { Option } from '@polkadot/apps-config/settings/types';
 
 import React, { useEffect, useMemo, useState } from 'react';
 import styled from 'styled-components';
+import { availableEndpoints } from '@polkadot/apps-config/settings';
 import { Dropdown, Input, Toggle } from '@polkadot/react-components';
 import uiSettings from '@polkadot/ui-settings';
 
-import { availableEndpoints } from './available';
 import { useTranslation } from './translate';
 import { createOption } from './util';
 

+ 1 - 1
packages/app-settings/src/util.tsx

@@ -2,8 +2,8 @@
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 
+import { Option } from '@polkadot/apps-config/settings/types';
 import { SettingsStruct } from '@polkadot/ui-settings/types';
-import { Option } from './types';
 
 import React from 'react';
 import { ChainImg, IdentityIcon } from '@polkadot/react-components';

+ 2 - 2
packages/apps/src/initSettings.ts

@@ -4,9 +4,9 @@
 
 import queryString from 'query-string';
 import store from 'store';
+import { availableEndpoints } from '@polkadot/apps-config/settings';
 import { registry } from '@polkadot/react-api';
 import settings from '@polkadot/ui-settings';
-import endpoints from '@polkadot/app-settings/available/endpoints';
 
 // we split here so that both these forms are allowed
 //  - http://localhost:3000/?rpc=wss://substrate-rpc.parity.io/#/explorer
@@ -22,7 +22,7 @@ const apiUrl = urlOptions.rpc // we have a supplied value
   ? urlOptions.rpc.split('#')[0] // https://polkadot.js.org/apps/?rpc=ws://127.0.0.1:9944#/explorer
   : [stored.apiUrl, process.env.WS_URL].includes(settings.apiUrl) // overridden, or stored
     ? settings.apiUrl // keep as-is
-    : endpoints[0].value as string; // grab first available
+    : availableEndpoints[0].value as string; // grab first available
 
 // set the default as retrieved here
 settings.set({ apiUrl });

+ 0 - 1
packages/react-api/package.json

@@ -33,7 +33,6 @@
     "@babel/runtime": "^7.8.4",
     "@polkadot/api": "^1.5.0-beta.17",
     "@polkadot/extension-dapp": "^0.22.0-beta.9",
-    "edgeware-node-types": "^1.2.0",
     "rxjs-compat": "^6.5.4"
   }
 }

+ 1 - 2
packages/react-api/src/Api.tsx

@@ -6,6 +6,7 @@ import { ApiState } from './types';
 
 import React, { useContext, useEffect, useState } from 'react';
 import ApiPromise from '@polkadot/api/promise';
+import { typesChain, typesSpec } from '@polkadot/apps-config/api';
 import { isWeb3Injected, web3Accounts, web3Enable } from '@polkadot/extension-dapp';
 import { WsProvider } from '@polkadot/rpc-provider';
 import { StatusContext } from '@polkadot/react-components/Status';
@@ -18,8 +19,6 @@ import { formatBalance, isTestChain } from '@polkadot/util';
 import { setSS58Format } from '@polkadot/util-crypto';
 import addressDefaults from '@polkadot/util-crypto/address/defaults';
 
-import typesChain from './overrides/chain';
-import typesSpec from './overrides/spec';
 import ApiContext from './ApiContext';
 import registry from './typeRegistry';
 

+ 3 - 48
packages/react-components/src/ChainImg.tsx

@@ -4,57 +4,12 @@
 
 import React, { useMemo } from 'react';
 import styled from 'styled-components';
+import { chainLogos, emptyLogo, namedLogos, nodeLogos } from '@polkadot/apps-config/logos';
 import { useApi } from '@polkadot/react-hooks';
 
-// the imports here as a bit all-over, non-aphabetical - since we expect this to grow,
-// rather organise based on type, grouping chains and nodes as opposed to location
-
-// last-resort fallback, just something empty
-import EMPTY from '@polkadot/ui-assets/empty.svg';
-
-// anything fopr a specific chain, most items will probably go in here
-import chainKusama from '@polkadot/ui-assets/chains/kusama-128.gif';
-
-// defaults for the node type, assuming we don't have a specific chain
-import centrifuge from '@polkadot/ui-assets/centrifuge.png';
-import edgeware from '@polkadot/ui-assets/edgeware-circle.svg';
-import polkadot from '@polkadot/ui-assets/polkadot-circle.svg';
-import polkadotJs from '@polkadot/ui-assets/polkadot-js.svg';
-import substrate from '@polkadot/ui-assets/substrate-hexagon.svg';
-
-// overrides based on the actual matched chain name
-const CHAINS: Record<string, any> = {
-  kusama: chainKusama, // old name, the W3F nodes still has these
-  'kusama cc1': chainKusama,
-  'kusama cc2': chainKusama,
-  'kusama cc3': chainKusama
-};
-
-// overrides based on the actual software node type
-const NODES: Record<string, any> = {
-  'centrifuge chain': centrifuge,
-  'edgeware node': edgeware,
-  'node template': substrate,
-  'parity polkadot': polkadot,
-  'polkadot js': polkadotJs,
-  'substrate node': substrate
-};
-
-// overrides as specified
-const LOGOS: Record<string, any> = {
-  centrifuge,
-  empty: EMPTY,
-  edgeware,
-  alexander: polkadot,
-  kusama: chainKusama,
-  polkadot,
-  substrate,
-  westend: polkadot
-};
-
 interface Props {
   className?: string;
-  logo?: keyof typeof LOGOS;
+  logo?: keyof typeof namedLogos;
   onClick?: () => any;
 }
 
@@ -65,7 +20,7 @@ function sanitize (value?: string): string {
 function ChainImg ({ className, logo, onClick }: Props): React.ReactElement<Props> {
   const { systemChain, systemName } = useApi();
   const img = useMemo((): any => {
-    return LOGOS[logo || ''] || CHAINS[sanitize(systemChain)] || NODES[sanitize(systemName)] || EMPTY;
+    return namedLogos[logo || ''] || chainLogos[sanitize(systemChain)] || nodeLogos[sanitize(systemName)] || emptyLogo;
   }, [logo, systemChain, systemName]);
 
   return (

+ 4 - 64
packages/react-components/src/LinkExternal.tsx

@@ -2,17 +2,18 @@
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 
+import { LinkTypes } from '@polkadot/apps-config/links/types';
+
 import BN from 'bn.js';
 import React, { useMemo } from 'react';
 import styled from 'styled-components';
+import linked from '@polkadot/apps-config/links';
 import { useApi } from '@polkadot/react-hooks';
 
 import { useTranslation } from './translate';
 import Icon from './Icon';
 import Tooltip from './Tooltip';
 
-export type LinkTypes = 'address' | 'block' | 'council' | 'extrinsic' | 'proposal' | 'referendum' | 'treasury';
-
 interface Props {
   className?: string;
   data: BN | number | string;
@@ -20,70 +21,9 @@ interface Props {
   withShort?: boolean;
 }
 
-interface Explorer {
-  isActive: boolean;
-  chains: Record<string, string>;
-  paths: Partial<Record<LinkTypes, string>>;
-  create: (chain: string, path: string, data: BN | number | string) => string;
-}
-
-const EXPLORERS: Record<string, Explorer> = {
-  Commonwealth: {
-    isActive: true,
-    chains: {
-      Edgeware: 'edgeware',
-      Kusama: 'kusama',
-      'Kusama CC3': 'kusama'
-    },
-    paths: {
-      council: 'proposal/councilmotion',
-      proposal: 'proposal/democracyproposal',
-      referendum: 'proposal/referendum',
-      treasury: 'proposal/treasuryproposal'
-    },
-    create: (chain: string, path: string, data: BN | number | string): string =>
-      `https://commonwealth.im/${chain}/${path}/${data.toString()}`
-  },
-  Polkascan: {
-    isActive: true,
-    chains: {
-      Edgeware: 'edgeware',
-      Kulupu: 'kulupu',
-      Kusama: 'kusama',
-      'Kusama CC3': 'kusama',
-      Westend: 'westend'
-    },
-    paths: {
-      address: 'module/account',
-      block: 'system/block',
-      council: 'council/motion',
-      extrinsic: 'system/extrinsic',
-      proposal: 'democracy/proposal',
-      referendum: 'democracy/referendum',
-      treasury: 'treasury/proposal'
-    },
-    create: (chain: string, path: string, data: BN | number | string): string =>
-      `https://polkascan.io/pre/${chain}/${path}/${data.toString()}`
-  },
-  Subscan: {
-    isActive: false,
-    chains: {
-      Kusama: 'kusama',
-      'Kusama CC3': 'kusama'
-    },
-    paths: {
-      address: 'account',
-      block: 'block',
-      extrinsic: 'extrinsic'
-    },
-    create: (chain: string, path: string, data: BN | number | string): string =>
-      `https://${chain}.subscan.io/${path}/${data.toString()}`
-  }
-};
-
 function genLinks (systemChain: string, { data, type, withShort }: Props): React.ReactNode[] {
   return Object
-    .entries(EXPLORERS)
+    .entries(linked)
     .map(([name, { isActive, chains, paths, create }]): React.ReactNode | null => {
       const extChain = chains[systemChain];
       const extPath = paths[type];

+ 1 - 0
tsconfig.json

@@ -51,6 +51,7 @@
       "@polkadot/app-transfer/*": [ "packages/app-transfer/src/*" ],
       "@polkadot/app-treasury": [ "packages/app-treasury/src" ],
       "@polkadot/app-treasury/*": [ "packages/app-treasury/src/*" ],
+      "@polkadot/apps-config/*": [ "packages/all-config/src/*" ],
       "@polkadot/apps-routing": [ "packages/apps-routing/src" ],
       "@polkadot/apps-routing/*": [ "packages/apps-routing/src/*" ],
       "@polkadot/react-api": [ "packages/react-api/src" ],

+ 10 - 1
yarn.lock

@@ -3025,6 +3025,16 @@ __metadata:
   languageName: unknown
   linkType: soft
 
+"@polkadot/apps-config@workspace:packages/all-config":
+  version: 0.0.0-use.local
+  resolution: "@polkadot/apps-config@workspace:packages/all-config"
+  dependencies:
+    "@babel/runtime": ^7.8.4
+    "@polkadot/ui-assets": ^0.52.0-beta.4
+    edgeware-node-types: ^1.2.0
+  languageName: unknown
+  linkType: soft
+
 "@polkadot/apps-routing@0.40.0-beta.62, @polkadot/apps-routing@workspace:packages/apps-routing":
   version: 0.0.0-use.local
   resolution: "@polkadot/apps-routing@workspace:packages/apps-routing"
@@ -3199,7 +3209,6 @@ __metadata:
     "@babel/runtime": ^7.8.4
     "@polkadot/api": ^1.5.0-beta.17
     "@polkadot/extension-dapp": ^0.22.0-beta.9
-    edgeware-node-types: ^1.2.0
     rxjs-compat: ^6.5.4
   languageName: unknown
   linkType: soft