mirror of
https://github.com/wassname/talk.git
synced 2026-09-14 11:36:51 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e85947af74 | ||
|
|
abfcdcc933 | ||
|
|
d001fcd456 | ||
|
|
a49b0d6fa7 | ||
|
|
f47c8661da | ||
|
|
d67c3d2907 | ||
|
|
3398bd12c4 | ||
|
|
fc6de50dde | ||
|
|
6c32316595 | ||
|
|
47abd030ef | ||
|
|
5ffb53d0eb | ||
|
|
af842e98ee | ||
|
|
281f19d21c | ||
|
|
45cd0e6628 | ||
|
|
adc508c7dc | ||
|
|
88a77f8712 | ||
|
|
5d2ab3d061 | ||
|
|
df6f666447 | ||
|
|
e412b27c1e | ||
|
|
0fe0be832e | ||
|
|
288809ee14 | ||
|
|
b97ec638b2 | ||
|
|
2bbfbc7ddd | ||
|
|
b029a01bd9 | ||
|
|
6fabeb2755 | ||
|
|
459e11a5fa | ||
|
|
ce7d6969dd | ||
|
|
6a8d6b07d6 | ||
|
|
8ede245a8d | ||
|
|
88eb9555c7 | ||
|
|
ce53134736 | ||
|
|
0f1dd7d707 | ||
|
|
9d02391062 | ||
|
|
8aac2d33fc | ||
|
|
3eddf5f155 | ||
|
|
94ff8ff880 | ||
|
|
7dfc064c9f | ||
|
|
d602cf873c | ||
|
|
79627af8d6 | ||
|
|
871d3f80c1 | ||
|
|
f7d01174d7 | ||
|
|
6966bb8d12 | ||
|
|
40ad2ed0cb | ||
|
|
802f656caa | ||
|
|
dfdea2b9d2 | ||
|
|
9a9c92d360 | ||
|
|
ceadcc7ae1 | ||
|
|
e0db803a21 | ||
|
|
7a099bbf05 | ||
|
|
51112a11c0 | ||
|
|
6e50b28d8b | ||
|
|
1f72cdbfb3 | ||
|
|
87aba459d6 | ||
|
|
9aa4591655 | ||
|
|
87d32680f0 | ||
|
|
25a1dcdf8d | ||
|
|
e90272aa58 | ||
|
|
bbbff98270 | ||
|
|
fe19ffd7e1 | ||
|
|
7f98f13990 | ||
|
|
1a9bd27236 | ||
|
|
536e804d61 | ||
|
|
43d5d56c90 | ||
|
|
cdcc991255 | ||
|
|
b221baff82 |
@@ -27,4 +27,3 @@ yarn.lock
|
||||
dist
|
||||
*.css.d.ts
|
||||
__generated__
|
||||
README.md.orig
|
||||
|
||||
@@ -21,6 +21,7 @@ const typescriptOverrides = {
|
||||
"@typescript-eslint/tslint",
|
||||
"react",
|
||||
"jsx-a11y",
|
||||
"react-hooks",
|
||||
],
|
||||
settings: {
|
||||
react: {
|
||||
@@ -175,6 +176,7 @@ module.exports = {
|
||||
"eslint:recommended",
|
||||
"plugin:jsdoc/recommended",
|
||||
"plugin:prettier/recommended",
|
||||
"plugin:react-hooks/recommended",
|
||||
],
|
||||
parserOptions: {
|
||||
ecmaVersion: 2018,
|
||||
|
||||
@@ -20,5 +20,4 @@ yarn.lock
|
||||
dist
|
||||
*.css.d.ts
|
||||
__generated__
|
||||
README.md.orig
|
||||
persisted-queries.json
|
||||
|
||||
@@ -133,6 +133,7 @@ createComment.error
|
||||
- <a href="#unfeatureComment">unfeatureComment</a>
|
||||
- <a href="#updateNotificationSettings">updateNotificationSettings</a>
|
||||
- <a href="#updateStorySettings">updateStorySettings</a>
|
||||
- <a href="#updateUserMediaSettings">updateUserMediaSettings</a>
|
||||
- <a href="#viewConversation">viewConversation</a>
|
||||
- <a href="#viewFullDiscussion">viewFullDiscussion</a>
|
||||
- <a href="#viewNewComments">viewNewComments</a>
|
||||
@@ -587,6 +588,17 @@ createComment.error
|
||||
};
|
||||
}
|
||||
```
|
||||
- <a id="updateUserMediaSettings">**updateUserMediaSettings.success**, **updateUserMediaSettings.error**</a>:
|
||||
```ts
|
||||
{
|
||||
unfurlEmbeds?: boolean | null | undefined;
|
||||
success: {};
|
||||
error: {
|
||||
message: string;
|
||||
code?: string | undefined;
|
||||
};
|
||||
}
|
||||
```
|
||||
- <a id="viewConversation">**viewConversation**</a>: This event is emitted when the viewer changes to the single conversation view.
|
||||
```ts
|
||||
{
|
||||
|
||||
+7
-30
@@ -36,7 +36,6 @@ the old CSS Variables, please upgrade. Currently we have a compatibility layer t
|
||||
- <a href="#font-weight-primary">font-weight-primary</a>
|
||||
- <a href="#font-weight-secondary">font-weight-secondary</a>
|
||||
- <a href="#font-size">font-size</a>
|
||||
- <a href="#line-height">line-height</a>
|
||||
- <a href="#shadow">shadow</a>
|
||||
- <a href="#spacing">spacing</a>
|
||||
- <a href="#mini-unit">mini-unit</a>
|
||||
@@ -128,7 +127,7 @@ Color palette that is used for grey shades.
|
||||
|
||||
#### palette-error
|
||||
|
||||
Color palette that is used for indicating something negative and is usually red.
|
||||
Color palette that is used for indicating something is error red.
|
||||
|
||||
`--palette-error-100: #FCE5D9; /* Before 6.3.0: --palette-error-lightest */`
|
||||
|
||||
@@ -150,7 +149,7 @@ Color palette that is used for indicating something negative and is usually red.
|
||||
|
||||
#### palette-success
|
||||
|
||||
Color palette that is used for indicating something positive and is usually green.
|
||||
Color palette that is used for indicating something is success green.
|
||||
|
||||
`--palette-success-100: #D8F9D5; /* Before 6.3.0: --palette-success-lightest */`
|
||||
|
||||
@@ -192,17 +191,17 @@ Different font weights with matching values for the fonts.
|
||||
|
||||
#### font-weight-primary
|
||||
|
||||
`--font-weight-primary-bold: 700; /* Before 6.3.0: --font-weight-sans-bold */`
|
||||
`--font-weight-primary-bold: 700; /* Before 6.3.0: --font-weight-bold */`
|
||||
|
||||
`--font-weight-primary-semi-bold: 600; /* Before 6.3.0: --font-weight-sans-medium */`
|
||||
`--font-weight-primary-semi-bold: 600; /* Before 6.3.0: --font-weight-medium */`
|
||||
|
||||
`--font-weight-primary-regular: 300; /* Before 6.3.0: --font-weight-sans-regular */`
|
||||
`--font-weight-primary-regular: 300; /* Before 6.3.0: --font-weight-light */`
|
||||
|
||||
#### font-weight-secondary
|
||||
|
||||
`--font-weight-secondary-bold: 700; /* Before 6.3.0: --font-weight-serif-bold */`
|
||||
`--font-weight-secondary-bold: 700; /* Before 6.3.0: --font-weight-bold */`
|
||||
|
||||
`--font-weight-secondary-regular: 300; /* Before 6.3.0: --font-weight-serif-regular */`
|
||||
`--font-weight-secondary-regular: 300; /* Before 6.3.0: --font-weight-light */`
|
||||
|
||||
### font-size
|
||||
|
||||
@@ -234,28 +233,6 @@ Different font weights with matching values for the fonts.
|
||||
|
||||
`--font-size-icon-xs: 0.75rem;`
|
||||
|
||||
### line-height
|
||||
|
||||
`--line-height-comment-body: 1.45rem;`
|
||||
|
||||
`--line-height-field-description: 1.3rem;`
|
||||
|
||||
`--line-height-1: 0.75rem;`
|
||||
|
||||
`--line-height-2: 0.875rem;`
|
||||
|
||||
`--line-height-3: 1rem;`
|
||||
|
||||
`--line-height-4: 1.125rem;`
|
||||
|
||||
`--line-height-5: 1.25rem;`
|
||||
|
||||
`--line-height-6: 1.5rem;`
|
||||
|
||||
`--line-height-7: 1.75rem;`
|
||||
|
||||
`--line-height-8: 2rem;`
|
||||
|
||||
### shadow
|
||||
|
||||
Different shadows that are currently used in Coral.
|
||||
|
||||
@@ -1,39 +1,52 @@
|
||||
# Coral 
|
||||
<p align="center">
|
||||
<a href="https://coralproject.net" target="_blank"><img width="250" src="https://docs.coralproject.net/coral/images/coralproject_by_voxmedia.svg" alt="Coral by Vox Media" /></a>
|
||||
</p>
|
||||
|
||||
Online comments are broken. Our open-source commenting platform, Coral, rethinks
|
||||
how moderation, comment display, and conversation function, creating the
|
||||
opportunity for safer, smarter discussions around your work.
|
||||
[Read more about Coral here](https://coralproject.net/talk).
|
||||
<p align="center">
|
||||
A better commenting experience from <a href="https://product.voxmedia.com/" target="_blank">Vox Media</a>.
|
||||
</p>
|
||||
|
||||
Built with <3 by the Coral team, a part of [Vox Media](https://product.voxmedia.com/).
|
||||
<p align="center">
|
||||
<a href="https://circleci.com/gh/coralproject/talk" target="_blank"><img src="https://img.shields.io/circleci/build/gh/coralproject/talk?style=flat-square" alt="CircleCI" /></a>
|
||||
<a href="https://hub.docker.com/r/coralproject/talk" target="_blank"><img src="https://img.shields.io/docker/v/coralproject/talk?label=docker%20hub&sort=semver&style=flat-square" alt="Docker Image Version" /></a>
|
||||
<a href="https://hub.docker.com/r/coralproject/talk" target="_blank"><img src="https://img.shields.io/docker/image-size/coralproject/talk?label=docker%20image%20size&sort=semver&style=flat-square" alt="Docker Image Size" /></a>
|
||||
<a href="https://twitter.com/coralproject" target="_blank"><img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/coralproject?style=flat-square"></a>
|
||||
</p>
|
||||
|
||||
Preview Coral easily by running it via a Heroku App:
|
||||
## Description
|
||||
|
||||
[](https://heroku.com/deploy?template=https://github.com/coralproject/talk)
|
||||
Online comments are broken. Our open-source commenting platform,
|
||||
[Coral](https://coralproject.net), rethinks how moderation, comment display, and
|
||||
conversation function, creating the opportunity for safer, smarter discussions
|
||||
around your work.
|
||||
|
||||
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||
## Table of Contents
|
||||
|
||||
- [Documentation](#documentation)
|
||||
- [Pre-Launch Guide](#pre-launch-guide)
|
||||
- [More Resources](#more-resources)
|
||||
- [License](#license)
|
||||
|
||||
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||
We offer hosting and support packages for Coral, as well as exclusive,
|
||||
customer-only features. [Contact us](https://coralproject.net/pricing/) for more
|
||||
information or [sign up for a webinar](https://coralproject.net).
|
||||
|
||||
## Documentation
|
||||
|
||||
You can get started with Coral using our [Documentation](https://docs.coralproject.net/talk/).
|
||||
If you're new to Coral, the [Coral documentation](https://docs.coralproject.net/)
|
||||
is a great place to start running and developing with Coral.
|
||||
|
||||
## Pre-Launch Guide
|
||||
You’ve installed Coral, and you’re preparing to launch it on your site. The real
|
||||
community work starts now, before you go live. You have a unique opportunity
|
||||
pre-launch to set your community up for success. Read our
|
||||
[Community Guides](https://guides.coralproject.net/start-here/) to learn more.
|
||||
|
||||
You’ve installed Coral on your server, and you’re preparing to launch it on your site. The real community work starts now, before you go live. You have a unique opportunity pre-launch to set your community up for success. Read our [Community Guides](https://guides.coralproject.net/start-here/) to learn more.
|
||||
## Support
|
||||
|
||||
## More Resources
|
||||
We can help you set up Coral, migrate your comments from another system,
|
||||
integrate your registration platform, pair with your programmers, and help you
|
||||
with bespoke installs. To learn more, [contact us](https://coralproject.net/pricing/).
|
||||
|
||||
- [Learn more about Coral and sign up for a webinar](https://coralproject.net/)
|
||||
## Contributing
|
||||
|
||||
Coral is a Apache-2.0 licensed open-source project built with <3 by the Coral
|
||||
team, a part of [Vox Media](https://product.voxmedia.com/).
|
||||
|
||||
If you are interested in contributing to Coral, check out our [Contributor's Guide](CONTRIBUTING.md).
|
||||
|
||||
## License
|
||||
|
||||
Coral is released under the [Apache License, v2.0](/LICENSE).
|
||||
Coral is [Apache-2.0 licensed](LICENSE).
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"name": "Coral",
|
||||
"description": "A better commenting experience from Vox Media.",
|
||||
"env": {
|
||||
"REWRITE_ENV": {
|
||||
"description": "Used to rewrite the environment variables set by Heroku.",
|
||||
"value": "REDIS_URI:REDIS_URL,MONGODB_URI:MONGO_URI"
|
||||
},
|
||||
"SIGNING_SECRET": {
|
||||
"description": "The shared secret to use to sign JSON Web Tokens (JWT) with the selected signing algorithm.",
|
||||
"generator": "secret"
|
||||
},
|
||||
"LOCALE": {
|
||||
"description": "Specify the default locale to use for all requests without a locale specified",
|
||||
"value": "en-US"
|
||||
},
|
||||
"ENABLE_GRAPHIQL": {
|
||||
"description": "When true, this will enable the GraphiQL routes",
|
||||
"value": "false"
|
||||
},
|
||||
"TRUST_PROXY": {
|
||||
"description": "When set to 1, it instructs Coral to trust up to one proxy, this is needed for authentication support",
|
||||
"value": "1"
|
||||
}
|
||||
},
|
||||
"addons": [
|
||||
{
|
||||
"plan": "mongolab:sandbox",
|
||||
"as": "MONGO"
|
||||
},
|
||||
{
|
||||
"plan": "rediscloud:30",
|
||||
"as": "REDIS"
|
||||
}
|
||||
],
|
||||
"success_url": "/install",
|
||||
"website": "https://github.com/coralproject/talk"
|
||||
}
|
||||
Generated
+139
-94
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@coralproject/talk",
|
||||
"version": "6.3.0",
|
||||
"version": "6.3.2",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -5087,13 +5087,13 @@
|
||||
}
|
||||
},
|
||||
"@coralproject/rte": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@coralproject/rte/-/rte-1.1.1.tgz",
|
||||
"integrity": "sha512-r70xg7arHttiJr4pXCZTTWA86bjT9M+XHDeaYjNpMQrW5rIL+kw7sjoRuiyPLzi88xINMbxffurdKep2Z68bcg==",
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@coralproject/rte/-/rte-1.2.3.tgz",
|
||||
"integrity": "sha512-1H5HsidtrwS3+1e3oRe7ZQFHi93mAZOmlg9eIi/oOlzLsMszOZbODYL5YL3Exh2KrV2VCbgS69vxvBlGYkXP0A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"classnames": "^2.2.6",
|
||||
"squire-rte": "^1.9.0"
|
||||
"squire-rte": "^1.10.2"
|
||||
}
|
||||
},
|
||||
"@csstools/convert-colors": {
|
||||
@@ -8237,12 +8237,14 @@
|
||||
"@types/d3-path": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.8.tgz",
|
||||
"integrity": "sha512-AZGHWslq/oApTAHu9+yH/Bnk63y9oFOMROtqPAtxl5uB6qm1x2lueWdVEjsjjV3Qc2+QfuzKIwIR5MvVBakfzA=="
|
||||
"integrity": "sha512-AZGHWslq/oApTAHu9+yH/Bnk63y9oFOMROtqPAtxl5uB6qm1x2lueWdVEjsjjV3Qc2+QfuzKIwIR5MvVBakfzA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/d3-shape": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.2.tgz",
|
||||
"integrity": "sha512-LtD8EaNYCaBRzHzaAiIPrfcL3DdIysc81dkGlQvv7WQP3+YXV7b0JJTtR1U3bzeRieS603KF4wUo+ZkJVenh8w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/d3-path": "*"
|
||||
}
|
||||
@@ -8925,7 +8927,8 @@
|
||||
"@types/prop-types": {
|
||||
"version": "15.5.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.8.tgz",
|
||||
"integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw=="
|
||||
"integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/q": {
|
||||
"version": "1.5.1",
|
||||
@@ -8947,6 +8950,7 @@
|
||||
"version": "16.9.31",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.31.tgz",
|
||||
"integrity": "sha512-NpYJpNMWScFXtx3A2BJMeew2G3+9SEslVWMdxNJ6DLvxIuxWjY1bizK9q5Y1ujhln31vtjmhjOAYDr9Xx3k9FQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/prop-types": "*",
|
||||
"csstype": "^2.2.0"
|
||||
@@ -9039,6 +9043,7 @@
|
||||
"version": "1.8.11",
|
||||
"resolved": "https://registry.npmjs.org/@types/recharts/-/recharts-1.8.11.tgz",
|
||||
"integrity": "sha512-1E1+3uKo7EyNk3LZ6J2cqfayIdQEUt1YOq2Y/9eRSXUzasf100ncF4f0iARnaXnED6DyFgTPRomwtChcwLYvhA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/d3-shape": "*",
|
||||
"@types/react": "*",
|
||||
@@ -9048,7 +9053,8 @@
|
||||
"@types/recharts-scale": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/recharts-scale/-/recharts-scale-1.0.0.tgz",
|
||||
"integrity": "sha512-HR/PrCcxYb2YHviTqH7CMdL1TUhUZLTUKzfrkMhxm1HTa5mg/QtP8XMiuSPz6dZ6wecazAOu8aYZ5DqkNlgHHQ=="
|
||||
"integrity": "sha512-HR/PrCcxYb2YHviTqH7CMdL1TUhUZLTUKzfrkMhxm1HTa5mg/QtP8XMiuSPz6dZ6wecazAOu8aYZ5DqkNlgHHQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/recompose": {
|
||||
"version": "0.30.7",
|
||||
@@ -14000,7 +14006,8 @@
|
||||
"classnames": {
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
|
||||
"integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
|
||||
"integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==",
|
||||
"dev": true
|
||||
},
|
||||
"clean-css": {
|
||||
"version": "4.2.1",
|
||||
@@ -16442,27 +16449,32 @@
|
||||
"d3-array": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
|
||||
"integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
|
||||
"integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
|
||||
"dev": true
|
||||
},
|
||||
"d3-collection": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
|
||||
"integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
|
||||
"integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==",
|
||||
"dev": true
|
||||
},
|
||||
"d3-color": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz",
|
||||
"integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q=="
|
||||
"integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==",
|
||||
"dev": true
|
||||
},
|
||||
"d3-format": {
|
||||
"version": "1.4.4",
|
||||
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.4.tgz",
|
||||
"integrity": "sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw=="
|
||||
"integrity": "sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw==",
|
||||
"dev": true
|
||||
},
|
||||
"d3-interpolate": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
|
||||
"integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"d3-color": "1"
|
||||
}
|
||||
@@ -16470,12 +16482,14 @@
|
||||
"d3-path": {
|
||||
"version": "1.0.9",
|
||||
"resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
|
||||
"integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
|
||||
"integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
|
||||
"dev": true
|
||||
},
|
||||
"d3-scale": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz",
|
||||
"integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"d3-array": "^1.2.0",
|
||||
"d3-collection": "1",
|
||||
@@ -16489,6 +16503,7 @@
|
||||
"version": "1.3.7",
|
||||
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
|
||||
"integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"d3-path": "1"
|
||||
}
|
||||
@@ -16496,12 +16511,14 @@
|
||||
"d3-time": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
|
||||
"integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
|
||||
"integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==",
|
||||
"dev": true
|
||||
},
|
||||
"d3-time-format": {
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.3.tgz",
|
||||
"integrity": "sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"d3-time": "1"
|
||||
}
|
||||
@@ -16815,7 +16832,8 @@
|
||||
"decimal.js-light": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.0.tgz",
|
||||
"integrity": "sha512-b3VJCbd2hwUpeRGG3Toob+CRo8W22xplipNhP3tN7TSVB/cyMX71P1vM2Xjc9H74uV6dS2hDDmo/rHq8L87Upg=="
|
||||
"integrity": "sha512-b3VJCbd2hwUpeRGG3Toob+CRo8W22xplipNhP3tN7TSVB/cyMX71P1vM2Xjc9H74uV6dS2hDDmo/rHq8L87Upg==",
|
||||
"dev": true
|
||||
},
|
||||
"decode-uri-component": {
|
||||
"version": "0.2.0",
|
||||
@@ -18437,6 +18455,7 @@
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
|
||||
"integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.1.2"
|
||||
}
|
||||
@@ -20249,9 +20268,9 @@
|
||||
}
|
||||
},
|
||||
"eslint-plugin-react-hooks": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz",
|
||||
"integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==",
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.8.tgz",
|
||||
"integrity": "sha512-6SSb5AiMCPd8FDJrzah+Z4F44P2CdOaK026cXFV+o/xSRzfOiV1FNFeLl2z6xm3yqWOQEZ5OfVgiec90qV2xrQ==",
|
||||
"dev": true
|
||||
},
|
||||
"eslint-scope": {
|
||||
@@ -22020,28 +22039,28 @@
|
||||
"dependencies": {
|
||||
"abbrev": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"aproba": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"are-we-there-yet": {
|
||||
"version": "1.1.5",
|
||||
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22052,14 +22071,14 @@
|
||||
},
|
||||
"balanced-match": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22077,35 +22096,35 @@
|
||||
},
|
||||
"code-point-at": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"console-control-strings": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22115,21 +22134,21 @@
|
||||
},
|
||||
"deep-extend": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"delegates": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"detect-libc": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
@@ -22159,7 +22178,7 @@
|
||||
},
|
||||
"gauge": {
|
||||
"version": "2.7.4",
|
||||
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22176,7 +22195,7 @@
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.1.3",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22191,14 +22210,14 @@
|
||||
},
|
||||
"has-unicode": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"iconv-lite": {
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22208,7 +22227,7 @@
|
||||
},
|
||||
"ignore-walk": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22218,7 +22237,7 @@
|
||||
},
|
||||
"inflight": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22229,21 +22248,21 @@
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22253,14 +22272,14 @@
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22308,7 +22327,7 @@
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
@@ -22322,7 +22341,7 @@
|
||||
},
|
||||
"needle": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22334,7 +22353,7 @@
|
||||
},
|
||||
"node-pre-gyp": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22353,7 +22372,7 @@
|
||||
},
|
||||
"nopt": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22364,14 +22383,14 @@
|
||||
},
|
||||
"npm-bundled": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"npm-packlist": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22382,7 +22401,7 @@
|
||||
},
|
||||
"npmlog": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22395,21 +22414,21 @@
|
||||
},
|
||||
"number-is-nan": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22419,21 +22438,21 @@
|
||||
},
|
||||
"os-homedir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"os-tmpdir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"osenv": {
|
||||
"version": "0.1.5",
|
||||
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22444,21 +22463,21 @@
|
||||
},
|
||||
"path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"rc": {
|
||||
"version": "1.2.8",
|
||||
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22480,7 +22499,7 @@
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22496,7 +22515,7 @@
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "2.6.3",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22506,49 +22525,49 @@
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"set-blocking": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"signal-exit": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"string-width": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22560,7 +22579,7 @@
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22570,7 +22589,7 @@
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22580,7 +22599,7 @@
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
@@ -22603,14 +22622,14 @@
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"wide-align": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -22620,7 +22639,7 @@
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"resolved": false,
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
@@ -24051,6 +24070,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"eslint-plugin-react-hooks": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz",
|
||||
"integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==",
|
||||
"dev": true
|
||||
},
|
||||
"event-source-polyfill": {
|
||||
"version": "1.0.15",
|
||||
"resolved": "https://registry.npmjs.org/event-source-polyfill/-/event-source-polyfill-1.0.15.tgz",
|
||||
@@ -29508,12 +29533,9 @@
|
||||
}
|
||||
},
|
||||
"graphql-playground-html": {
|
||||
"version": "1.6.22",
|
||||
"resolved": "https://registry.npmjs.org/graphql-playground-html/-/graphql-playground-html-1.6.22.tgz",
|
||||
"integrity": "sha512-pqDJ8N8tI1LFORLZTDC+gByuqiBfbirjgMKprFxRbCmFylnIRj2AyUQUhTPQkm08n8pWj8w5T0wWCVtbE323ag==",
|
||||
"requires": {
|
||||
"xss": "^1.0.6"
|
||||
}
|
||||
"version": "1.6.13",
|
||||
"resolved": "https://registry.npmjs.org/graphql-playground-html/-/graphql-playground-html-1.6.13.tgz",
|
||||
"integrity": "sha512-5DNtVeaWrfxrobA2Vp3ypWjAQYGPIXyZ3rdQXy4m4nDJnc4UALPSZRh9y+U4kp8GaoPp1aCgIJerDSRBOT9HnA=="
|
||||
},
|
||||
"graphql-redis-subscriptions": {
|
||||
"version": "2.2.1",
|
||||
@@ -36110,7 +36132,8 @@
|
||||
"js-tokens": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
|
||||
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
|
||||
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
|
||||
"dev": true
|
||||
},
|
||||
"js-yaml": {
|
||||
"version": "3.13.1",
|
||||
@@ -37345,9 +37368,9 @@
|
||||
}
|
||||
},
|
||||
"lodash": {
|
||||
"version": "4.17.15",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
|
||||
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
|
||||
"version": "4.17.19",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
|
||||
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
|
||||
},
|
||||
"lodash-es": {
|
||||
"version": "4.17.15",
|
||||
@@ -37379,7 +37402,8 @@
|
||||
"lodash.debounce": {
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
|
||||
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
|
||||
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
|
||||
"dev": true
|
||||
},
|
||||
"lodash.deburr": {
|
||||
"version": "4.1.0",
|
||||
@@ -37558,7 +37582,8 @@
|
||||
"lodash.throttle": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
|
||||
"integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
|
||||
"integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=",
|
||||
"dev": true
|
||||
},
|
||||
"lodash.toarray": {
|
||||
"version": "4.4.0",
|
||||
@@ -37785,6 +37810,7 @@
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
|
||||
"integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"js-tokens": "^3.0.0"
|
||||
}
|
||||
@@ -38054,7 +38080,8 @@
|
||||
"math-expression-evaluator": {
|
||||
"version": "1.2.22",
|
||||
"resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz",
|
||||
"integrity": "sha512-L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ=="
|
||||
"integrity": "sha512-L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ==",
|
||||
"dev": true
|
||||
},
|
||||
"mathjs": {
|
||||
"version": "2.7.0",
|
||||
@@ -44873,6 +44900,7 @@
|
||||
"version": "15.6.2",
|
||||
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
|
||||
"integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"loose-envify": "^1.3.1",
|
||||
"object-assign": "^4.1.1"
|
||||
@@ -45090,6 +45118,7 @@
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
|
||||
"integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"performance-now": "^2.1.0"
|
||||
}
|
||||
@@ -45916,7 +45945,8 @@
|
||||
"react-fast-compare": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
|
||||
"integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
|
||||
"integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==",
|
||||
"dev": true
|
||||
},
|
||||
"react-feather": {
|
||||
"version": "2.0.3",
|
||||
@@ -45978,6 +46008,7 @@
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-5.2.1.tgz",
|
||||
"integrity": "sha512-CnwD822LU8NDBnjCpZ4ySh8L6HYyngViTZLfBBb3NjtrpN8m49clH8hidHouq20I51Y6TpCTISCBbqiY5GamwA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"object-assign": "^4.1.1",
|
||||
"prop-types": "^15.5.4",
|
||||
@@ -46029,7 +46060,8 @@
|
||||
"react-lifecycles-compat": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
|
||||
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
|
||||
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==",
|
||||
"dev": true
|
||||
},
|
||||
"react-live": {
|
||||
"version": "2.2.2",
|
||||
@@ -46256,6 +46288,7 @@
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-1.2.0.tgz",
|
||||
"integrity": "sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"shallowequal": "^1.0.1"
|
||||
}
|
||||
@@ -46270,6 +46303,7 @@
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-1.0.5.tgz",
|
||||
"integrity": "sha512-eW057HT0lFgCKh8ilr0y2JaH2YbNcuEdFpxyg7Gf/qDKk9hqGMyXryZJ8iMGJEuKH0+wxS0ccSsBBB3W8yCn8w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lodash": "~4.17.4",
|
||||
"prop-types": "^15.6.0",
|
||||
@@ -46281,6 +46315,7 @@
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
||||
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"js-tokens": "^3.0.0 || ^4.0.0"
|
||||
}
|
||||
@@ -46289,6 +46324,7 @@
|
||||
"version": "2.9.0",
|
||||
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
|
||||
"integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"dom-helpers": "^3.4.0",
|
||||
"loose-envify": "^1.4.0",
|
||||
@@ -46465,6 +46501,7 @@
|
||||
"version": "1.8.5",
|
||||
"resolved": "https://registry.npmjs.org/recharts/-/recharts-1.8.5.tgz",
|
||||
"integrity": "sha512-tM9mprJbXVEBxjM7zHsIy6Cc41oO/pVYqyAsOHLxlJrbNBuLs0PHB3iys2M+RqCF0//k8nJtZF6X6swSkWY3tg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"classnames": "^2.2.5",
|
||||
"core-js": "^2.6.10",
|
||||
@@ -46482,12 +46519,14 @@
|
||||
"core-js": {
|
||||
"version": "2.6.11",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
|
||||
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
|
||||
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
|
||||
"dev": true
|
||||
},
|
||||
"react-resize-detector": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-2.3.0.tgz",
|
||||
"integrity": "sha512-oCAddEWWeFWYH5FAcHdBYcZjAw9fMzRUK9sWSx6WvSSOPVRxcHd5zTIGy/mOus+AhN/u6T4TMiWxvq79PywnJQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"lodash.throttle": "^4.1.1",
|
||||
@@ -46501,6 +46540,7 @@
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.3.tgz",
|
||||
"integrity": "sha512-t8p5sccG9Blm7c1JQK/ak9O8o95WGhNXD7TXg/BW5bYbVlr6eCeRBNpgyigD4p6pSSMehC5nSvBUPj6F68rbFA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"decimal.js-light": "^2.4.1"
|
||||
}
|
||||
@@ -46559,6 +46599,7 @@
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
|
||||
"integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"balanced-match": "^0.4.2",
|
||||
"math-expression-evaluator": "^1.2.14",
|
||||
@@ -46568,7 +46609,8 @@
|
||||
"balanced-match": {
|
||||
"version": "0.4.2",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
|
||||
"integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
|
||||
"integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -46576,6 +46618,7 @@
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz",
|
||||
"integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
@@ -47868,7 +47911,8 @@
|
||||
"resize-observer-polyfill": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
|
||||
"integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
|
||||
"integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==",
|
||||
"dev": true
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.8.1",
|
||||
@@ -48380,7 +48424,8 @@
|
||||
"shallowequal": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
|
||||
"integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
|
||||
"integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==",
|
||||
"dev": true
|
||||
},
|
||||
"shebang-command": {
|
||||
"version": "1.2.0",
|
||||
|
||||
+15
-10
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@coralproject/talk",
|
||||
"version": "6.3.0",
|
||||
"version": "6.3.2",
|
||||
"author": "The Coral Project",
|
||||
"homepage": "https://coralproject.net/",
|
||||
"sideEffects": [
|
||||
@@ -29,7 +29,7 @@
|
||||
"migration:create": "ts-node --transpile-only ./scripts/migration/create.ts",
|
||||
"docs:events": "ts-node ./scripts/generateEventDocs.ts ./src/core/client/stream/events.ts ./CLIENT_EVENTS.md",
|
||||
"docs:css-variables": "ts-node ./scripts/generateCSSVariablesDocs.ts ./src/core/client/ui/theme/streamVariables.ts ./CSS_VARIABLES.md",
|
||||
"doctoc": "doctoc --maxlevel=3 --title '## Table of Contents' README.md CLIENT_EVENTS.md CONTRIBUTING.md WEBHOOKS.md EXTERNAL_MODERATION_PHASES.md",
|
||||
"doctoc": "doctoc --maxlevel=3 --title '## Table of Contents' CLIENT_EVENTS.md CONTRIBUTING.md WEBHOOKS.md EXTERNAL_MODERATION_PHASES.md",
|
||||
"generate": "npm-run-all generate:css-types generate:schema generate:relay",
|
||||
"generate-persist": "npm-run-all generate:css-types generate:schema generate:relay-persist",
|
||||
"generate:css-types": "tcm src/core/client/",
|
||||
@@ -67,7 +67,6 @@
|
||||
"@hapi/joi": "^17.1.1",
|
||||
"@metascraper/helpers": "^5.11.6",
|
||||
"@rudderstack/rudder-sdk-node": "0.0.2",
|
||||
"@types/recharts": "^1.8.9",
|
||||
"abort-controller": "^3.0.0",
|
||||
"akismet-api": "^5.0.0",
|
||||
"apollo-server-core": "^2.14.4",
|
||||
@@ -100,8 +99,7 @@
|
||||
"graphql-config": "^2.2.2",
|
||||
"graphql-extensions": "^0.11.0",
|
||||
"graphql-fields": "2.0.3",
|
||||
"graphql-import": "^0.7.1",
|
||||
"graphql-playground-html": "^1.6.22",
|
||||
"graphql-playground-html": "1.6.13",
|
||||
"graphql-redis-subscriptions": "^2.2.1",
|
||||
"graphql-subscriptions": "^1.1.0",
|
||||
"graphql-tools": "^4.0.7",
|
||||
@@ -114,7 +112,7 @@
|
||||
"juice": "^6.0.0",
|
||||
"jwks-rsa": "^1.7.0",
|
||||
"linkifyjs": "^2.1.9",
|
||||
"lodash": "^4.17.15",
|
||||
"lodash": "^4.17.19",
|
||||
"long-settimeout": "^1.0.1",
|
||||
"lru-cache": "^5.1.1",
|
||||
"luxon": "^1.22.2",
|
||||
@@ -138,8 +136,6 @@
|
||||
"prom-client": "^12.0.0",
|
||||
"proxy-agent": "^3.1.1",
|
||||
"querystringify": "^2.1.1",
|
||||
"react-helmet": "^5.2.1",
|
||||
"recharts": "^1.8.5",
|
||||
"source-map-support": "^0.5.16",
|
||||
"stack-utils": "^2.0.1",
|
||||
"striptags": "^3.1.1",
|
||||
@@ -156,7 +152,7 @@
|
||||
"@babel/preset-typescript": "^7.10.1",
|
||||
"@babel/runtime-corejs3": "^7.10.3",
|
||||
"@coralproject/npm-run-all": "^4.1.5",
|
||||
"@coralproject/rte": "^1.1.1",
|
||||
"@coralproject/rte": "^1.2.3",
|
||||
"@fluent/react": "^0.11.1",
|
||||
"@intervolga/optimize-cssnano-plugin": "^1.0.6",
|
||||
"@types/archiver": "^3.1.0",
|
||||
@@ -225,6 +221,7 @@
|
||||
"@types/react-responsive": "^8.0.2",
|
||||
"@types/react-test-renderer": "^16.9.2",
|
||||
"@types/react-transition-group": "^4.2.4",
|
||||
"@types/recharts": "^1.8.9",
|
||||
"@types/recompose": "^0.30.7",
|
||||
"@types/relay-runtime": "^8.0.7",
|
||||
"@types/sane": "^2.0.0",
|
||||
@@ -279,6 +276,7 @@
|
||||
"eslint-plugin-jsx-a11y": "^6.3.1",
|
||||
"eslint-plugin-prettier": "^3.1.4",
|
||||
"eslint-plugin-react": "^7.20.0",
|
||||
"eslint-plugin-react-hooks": "^4.0.8",
|
||||
"eventemitter2": "^6.3.1",
|
||||
"farce": "^0.2.8",
|
||||
"final-form": "4.18.6",
|
||||
@@ -334,6 +332,7 @@
|
||||
"react-error-overlay": "^6.0.7",
|
||||
"react-final-form": "6.3.0",
|
||||
"react-final-form-arrays": "^3.1.1",
|
||||
"react-helmet": "^5.2.1",
|
||||
"react-popper": "^1.3.7",
|
||||
"react-relay": "^9.0.0",
|
||||
"react-relay-network-modern": "^4.6.1",
|
||||
@@ -341,6 +340,7 @@
|
||||
"react-test-renderer": "^16.13.1",
|
||||
"react-timeago": "^4.4.0",
|
||||
"react-transition-group": "^4.3.0",
|
||||
"recharts": "^1.8.5",
|
||||
"recompose": "^0.30.0",
|
||||
"regenerator-runtime": "^0.13.5",
|
||||
"relay-compiler": "^9.0.0",
|
||||
@@ -409,6 +409,11 @@
|
||||
"Newer versions has problems with radio and checkbox fields.",
|
||||
"Update when the following issue is resolved:",
|
||||
"https://github.com/final-form/react-final-form/issues/683"
|
||||
],
|
||||
"graphql-playground-html@1.6.13": [
|
||||
"A template was broken in a release.",
|
||||
"Update when the following issue is resolved:",
|
||||
"https://github.com/prisma-labs/graphql-playground/pull/1238"
|
||||
]
|
||||
},
|
||||
"husky": {
|
||||
@@ -429,7 +434,7 @@
|
||||
"{src/core/client/ui/theme/sharedVariables.ts,src/core/client/ui/theme/streamVariables.ts,scripts/generateCSSVariablesDocs.ts,CSS_VARIABLES.md}": [
|
||||
"npm run docs:css-variables -- --verify"
|
||||
],
|
||||
"{README,CLIENT_EVENTS,CONTRIBUTING,WEBHOOKS,EXTERNAL_MODERATION_PHASES}.md": [
|
||||
"{CLIENT_EVENTS,CONTRIBUTING,WEBHOOKS,EXTERNAL_MODERATION_PHASES}.md": [
|
||||
"npm run doctoc"
|
||||
]
|
||||
},
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-size: var(--font-size-6);
|
||||
line-height: var(--line-height-7);
|
||||
line-height: 1.17;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-size: var(--font-size-6);
|
||||
line-height: var(--line-height-7);
|
||||
line-height: 1.17;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-3);
|
||||
line-height: var(--line-height-5);
|
||||
line-height: 1.25;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import { CallOut } from "coral-ui/components/v3";
|
||||
const Sorry: FunctionComponent = () => {
|
||||
return (
|
||||
<CallOut
|
||||
color="negative"
|
||||
color="error"
|
||||
icon={<Icon>error</Icon>}
|
||||
titleWeight="semiBold"
|
||||
title={
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-size: var(--font-size-6);
|
||||
line-height: var(--line-height-7);
|
||||
line-height: 1.17;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-3);
|
||||
line-height: var(--line-height-5);
|
||||
line-height: 1.25;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-primary-bold);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.285;
|
||||
|
||||
color: var(--palette-text-100);
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ const Sorry: React.FunctionComponent<Props> = ({ reason }) => {
|
||||
<div className={styles.title}>Oops Sorry!</div>
|
||||
</Localized>
|
||||
<CallOut
|
||||
color="negative"
|
||||
color="error"
|
||||
titleWeight="semiBold"
|
||||
title={
|
||||
reason ? (
|
||||
|
||||
@@ -16,7 +16,7 @@ const Sorry: React.FunctionComponent<Props> = ({ reason }) => {
|
||||
<div className={styles.title}>Oops Sorry!</div>
|
||||
</Localized>
|
||||
<CallOut
|
||||
color="negative"
|
||||
color="error"
|
||||
titleWeight="semiBold"
|
||||
title={
|
||||
reason ? (
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-size: var(--font-size-6);
|
||||
line-height: var(--line-height-7);
|
||||
line-height: 1.17;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-3);
|
||||
line-height: var(--line-height-5);
|
||||
line-height: 1.25;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-primary-bold);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.285;
|
||||
|
||||
color: var(--palette-text-100);
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ const UnsubscribeForm: React.FunctionComponent<Props> = ({
|
||||
notifications.
|
||||
</div>
|
||||
</Localized>
|
||||
{submitError && <CallOut color="negative" title={submitError} />}
|
||||
{submitError && <CallOut color="error" title={submitError} />}
|
||||
<Localized id="unsubscribe-submit-unsubscribe">
|
||||
<Button
|
||||
type="submit"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-size: var(--font-size-6);
|
||||
line-height: var(--line-height-7);
|
||||
line-height: 1.17;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-3);
|
||||
line-height: var(--line-height-5);
|
||||
line-height: 1.25;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-primary-bold);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
|
||||
color: var(--palette-text-500);
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
font-style: normal;
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.285;
|
||||
|
||||
color: var(--palette-text-100);
|
||||
|
||||
|
||||
@@ -105,9 +105,7 @@ const ResetPasswordForm: React.FunctionComponent<Props> = ({
|
||||
</FormField>
|
||||
)}
|
||||
</Field>
|
||||
{submitError && (
|
||||
<CallOut color="negative" title={submitError} />
|
||||
)}
|
||||
{submitError && <CallOut color="error" title={submitError} />}
|
||||
<Localized id="resetPassword-resetPassword">
|
||||
<Button
|
||||
type="submit"
|
||||
|
||||
@@ -16,7 +16,7 @@ const Sorry: React.FunctionComponent<Props> = ({ reason }) => {
|
||||
<div className={styles.title}>Oops Sorry!</div>
|
||||
</Localized>
|
||||
<CallOut
|
||||
color="negative"
|
||||
color="error"
|
||||
titleWeight="semiBold"
|
||||
title={
|
||||
reason ? (
|
||||
|
||||
@@ -36,6 +36,7 @@ exports[`renders form 1`] = `
|
||||
<div>
|
||||
<button
|
||||
className="BaseButton-root Button-base Button-filled Button-fontSizeSmall Button-textAlignCenter Button-fontFamilyPrimary Button-fontWeightPrimaryBold Button-paddingSizeSmall Button-colorPrimary Button-upperCase Button-fullWidth Confirm-submit"
|
||||
data-variant="filled"
|
||||
disabled={false}
|
||||
onBlur={[Function]}
|
||||
onFocus={[Function]}
|
||||
@@ -78,10 +79,10 @@ exports[`renders missing confirm token 1`] = `
|
||||
Oops Sorry!
|
||||
</div>
|
||||
<div
|
||||
className="CallOut-root CallOut-negative CallOut-leftBorder"
|
||||
className="CallOut-root CallOut-error CallOut-leftBorder"
|
||||
>
|
||||
<div
|
||||
className="Box-root Flex-root Flex-flex Flex-justifyFlexStart Flex-alignFlexStart"
|
||||
className="CallOut-container"
|
||||
>
|
||||
<div
|
||||
className="CallOut-content"
|
||||
|
||||
@@ -93,6 +93,7 @@ Make sure it is unique and be sure to keep it secure.
|
||||
</div>
|
||||
<button
|
||||
className="BaseButton-root Button-base Button-filled Button-fontSizeSmall Button-textAlignCenter Button-fontFamilyPrimary Button-fontWeightPrimaryBold Button-paddingSizeMedium Button-colorPrimary Button-upperCase Button-fullWidth Reset-submit"
|
||||
data-variant="filled"
|
||||
disabled={false}
|
||||
onBlur={[Function]}
|
||||
onFocus={[Function]}
|
||||
@@ -136,10 +137,10 @@ exports[`renders missing reset token 1`] = `
|
||||
Oops Sorry!
|
||||
</div>
|
||||
<div
|
||||
className="CallOut-root CallOut-negative CallOut-leftBorder"
|
||||
className="CallOut-root CallOut-error CallOut-leftBorder"
|
||||
>
|
||||
<div
|
||||
className="Box-root Flex-root Flex-flex Flex-justifyFlexStart Flex-alignFlexStart"
|
||||
className="CallOut-container"
|
||||
>
|
||||
<div
|
||||
className="CallOut-content"
|
||||
|
||||
@@ -35,6 +35,7 @@ exports[`renders form 1`] = `
|
||||
</div>
|
||||
<button
|
||||
className="BaseButton-root Button-base Button-filled Button-fontSizeSmall Button-textAlignCenter Button-fontFamilyPrimary Button-fontWeightPrimaryBold Button-paddingSizeMedium Button-colorPrimary Button-upperCase Button-fullWidth Unsubscribe-submit"
|
||||
data-variant="filled"
|
||||
disabled={false}
|
||||
onBlur={[Function]}
|
||||
onFocus={[Function]}
|
||||
@@ -77,10 +78,10 @@ exports[`renders missing confirm token 1`] = `
|
||||
Oops Sorry!
|
||||
</div>
|
||||
<div
|
||||
className="CallOut-root CallOut-negative CallOut-leftBorder"
|
||||
className="CallOut-root CallOut-error CallOut-leftBorder"
|
||||
>
|
||||
<div
|
||||
className="Box-root Flex-root Flex-flex Flex-justifyFlexStart Flex-alignFlexStart"
|
||||
className="CallOut-container"
|
||||
>
|
||||
<div
|
||||
className="CallOut-content"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
.root {
|
||||
height: 100%;
|
||||
font-size: var(--font-size-1);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.33;
|
||||
color: var(--palette-text-100);
|
||||
padding: 0 var(--spacing-1);
|
||||
}
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.285;
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
$moderateCardDecisionHistoryLinkTextColor: $colors-teal-700;
|
||||
|
||||
.root {
|
||||
line-height: var(--line-height-3);
|
||||
font-weight: var(--font-weight-primary-bold);
|
||||
font-family: var(--font-family-primary);
|
||||
font-size: var(--font-size-1);
|
||||
line-height: 1.33;
|
||||
color: $moderateCardDecisionHistoryLinkTextColor;
|
||||
font-style: var(--font-style-underline);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,6 @@
|
||||
color: var(--palette-text-500);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-4);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: 1.285;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ $moderateCardDecisionHistoryBorderColor: var(--palette-grey-300);
|
||||
font-size: var(--font-size-2);
|
||||
font-weight: var(--font-weight-primary-bold);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
text-transform: uppercase;
|
||||
color: $moderateCardDecisionHistoryLinkTextColor;
|
||||
width: 100%;
|
||||
|
||||
@@ -5,5 +5,5 @@ $timestampColor: var(--palette-text-100);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-bold);
|
||||
font-size: var(--font-size-1);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.33;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,6 @@ $moderateCardDecisionHistoryColor: var(--palette-text-900);
|
||||
color: $moderateCardDecisionHistoryColor;
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-family: var(--font-family-secondary);
|
||||
line-height: var(--line-height-field-description);
|
||||
line-height: 1.3;
|
||||
font-size: var(--font-size-3);
|
||||
}
|
||||
|
||||
+1
-3
@@ -11,9 +11,7 @@ exports[`renders correctly 1`] = `
|
||||
className="DecisionHistoryLoading-container"
|
||||
justifyContent="center"
|
||||
>
|
||||
<Delay
|
||||
ms={500}
|
||||
>
|
||||
<Delay>
|
||||
<withPropsOnChange(Spinner)
|
||||
size="sm"
|
||||
/>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { useRouter } from "found";
|
||||
import { setLongTimeout } from "long-settimeout";
|
||||
import { ReactNode, useContext } from "react";
|
||||
|
||||
import { NotificationContext } from "./GlobalNotificationContext";
|
||||
@@ -17,7 +18,7 @@ function useNotification() {
|
||||
const setMessage = (message: ReactNode, timeout?: number) => {
|
||||
dispatch({ type: "SET_MESSAGE", message });
|
||||
if (timeout) {
|
||||
setTimeout(() => {
|
||||
setLongTimeout(() => {
|
||||
dispatch({ type: "CLEAR_MESSAGE" });
|
||||
}, timeout);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ $comment-link-active: $colors-teal-900;
|
||||
font-size: var(--font-size-3);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-comment-body);
|
||||
line-height: 1.45;
|
||||
color: $comment-content;
|
||||
overflow-wrap: break-word;
|
||||
|
||||
|
||||
@@ -11,14 +11,14 @@ $moderateCardUsernameBackgroundHover: var(--palette-grey-200);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
}
|
||||
.username {
|
||||
color: $moderateCardInReplyToUsernameColor;
|
||||
font-family: var(--font-family-secondary);
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-size: var(--font-size-3);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1;
|
||||
|
||||
padding: var(--spacing-1);
|
||||
|
||||
|
||||
@@ -4,6 +4,6 @@ $moderateCardUsernameColor: var(--palette-text-900);
|
||||
font-size: var(--font-size-3);
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-family: var(--font-family-secondary);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1;
|
||||
color: $moderateCardUsernameColor;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ $moderateCardUsernameBackgroundHover: var(--palette-grey-200);
|
||||
padding: var(--spacing-1);
|
||||
margin-left: calc(-1 * var(--spacing-1));
|
||||
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1;
|
||||
|
||||
&:hover {
|
||||
background-color: $moderateCardUsernameBackgroundHover;
|
||||
|
||||
+4
-1
@@ -3,6 +3,7 @@ import cn from "classnames";
|
||||
import React, { FunctionComponent, useCallback, useState } from "react";
|
||||
import { graphql } from "react-relay";
|
||||
|
||||
import { MediaContainer } from "coral-admin/components/MediaContainer";
|
||||
import { withFragmentContainer } from "coral-framework/lib/relay";
|
||||
import {
|
||||
Button,
|
||||
@@ -95,6 +96,7 @@ const ConversationModalCommentContainer: FunctionComponent<Props> = ({
|
||||
{comment.body}
|
||||
</CommentContent>
|
||||
)}
|
||||
<MediaContainer comment={comment} />
|
||||
</div>
|
||||
</HorizontalGutter>
|
||||
</Flex>
|
||||
@@ -104,7 +106,7 @@ const ConversationModalCommentContainer: FunctionComponent<Props> = ({
|
||||
<Localized id="conversation-modal-reply-show-replies">
|
||||
<Button
|
||||
color="mono"
|
||||
variant="outline"
|
||||
variant="outlined"
|
||||
onClick={onShowReplies}
|
||||
fullWidth
|
||||
>
|
||||
@@ -153,6 +155,7 @@ const enhanced = withFragmentContainer<Props>({
|
||||
id
|
||||
}
|
||||
}
|
||||
...MediaContainer_comment
|
||||
}
|
||||
`,
|
||||
})(ConversationModalCommentContainer);
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ $modal-header-text: var(--palette-text-900);
|
||||
font-size: var(--font-size-4);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
line-height: var(--line-height-5);
|
||||
line-height: 1.11;
|
||||
color: $modal-header-text;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
+6
-1
@@ -39,7 +39,12 @@ const ConversationModalHeaderContainer: FunctionComponent<Props> = ({
|
||||
: comment.story.url}
|
||||
</h1>
|
||||
<Localized id="conversation-modal-header-moderate-link">
|
||||
<Button variant="outline" color="mono" uppercase onClick={onModerate}>
|
||||
<Button
|
||||
variant="outlined"
|
||||
color="mono"
|
||||
uppercase
|
||||
onClick={onModerate}
|
||||
>
|
||||
Moderate story
|
||||
</Button>
|
||||
</Localized>
|
||||
|
||||
+2
-2
@@ -62,7 +62,7 @@ const ConversationModalRepliesContainer: FunctionComponent<Props> = ({
|
||||
<div className={styles.footer}>
|
||||
{!showReplies && comment.replyCount > 0 && (
|
||||
<Localized id="conversation-modal-replies-show">
|
||||
<Button variant="outline" fullWidth onClick={onShowReplies}>
|
||||
<Button variant="outlined" fullWidth onClick={onShowReplies}>
|
||||
Show replies
|
||||
</Button>
|
||||
</Localized>
|
||||
@@ -71,7 +71,7 @@ const ConversationModalRepliesContainer: FunctionComponent<Props> = ({
|
||||
comment.replyCount > replies.length &&
|
||||
replies.length > 0 && (
|
||||
<Localized id="conversation-modal-replies-show-more">
|
||||
<Button variant="outline" fullWidth onClick={loadMore}>
|
||||
<Button variant="outlined" fullWidth onClick={loadMore}>
|
||||
Show more replies
|
||||
</Button>
|
||||
</Localized>
|
||||
|
||||
+5
-9
@@ -1,5 +1,5 @@
|
||||
import { Localized } from "@fluent/react/compat";
|
||||
import React, { FunctionComponent, useMemo } from "react";
|
||||
import React, { FunctionComponent } from "react";
|
||||
import { graphql } from "react-relay";
|
||||
|
||||
import { QueryRenderData, QueryRenderer } from "coral-framework/lib/relay";
|
||||
@@ -60,17 +60,13 @@ const ConversationModalRepliesQuery: FunctionComponent<Props> = ({
|
||||
);
|
||||
}
|
||||
|
||||
const replies = useMemo(
|
||||
() => props.comment!.replies.edges.map((edge) => edge.node),
|
||||
[props.comment.replies]
|
||||
);
|
||||
return (
|
||||
<div>
|
||||
{replies.map((reply) => (
|
||||
<div key={reply.id}>
|
||||
{props.comment.replies.edges.map((reply) => (
|
||||
<div key={reply.node.id}>
|
||||
<ConversationModalCommentContainer
|
||||
key={reply.id}
|
||||
comment={reply}
|
||||
key={reply.node.id}
|
||||
comment={reply.node}
|
||||
settings={props.settings}
|
||||
isHighlighted={false}
|
||||
isReply={true}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
export { default as MediaContainer } from "./MediaContainer";
|
||||
export { default as GiphyMedia } from "./GiphyMedia";
|
||||
export { default as TwitterMedia } from "./TwitterMedia";
|
||||
export { default as YouTubeMedia } from "./YouTubeMedia";
|
||||
@@ -4,6 +4,6 @@ $modal-body-text: $colors-mono-500;
|
||||
font-size: var(--font-size-3);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
line-height: var(--line-height-field-description);
|
||||
line-height: 1.3;
|
||||
color: $modal-body-text;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ $modal-text: $colors-mono-500;
|
||||
font-size: var(--font-size-5);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
line-height: var(--line-height-title);
|
||||
line-height: 1.2;
|
||||
color: $modal-text;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,6 @@ $moderateCardFlagsCategoryColor: var(--palette-text-500);
|
||||
font-size: var(--font-size-3);
|
||||
font-weight: var(--font-weight-primary-bold);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-6);
|
||||
line-height: 1.5;
|
||||
color: $moderateCardFlagsCategoryColor;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ $moderateCardReasonTextColor: var(--palette-text-500);
|
||||
font-size: var(--font-size-2);
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-family: var(--font-family-secondary);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
padding-right: calc(0.5 * var(--mini-unit));
|
||||
}
|
||||
|
||||
@@ -17,11 +17,10 @@ $moderateCardReasonTextColor: var(--palette-text-500);
|
||||
font-size: var(--font-size-2);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
}
|
||||
|
||||
.flagger {
|
||||
line-height: var(--line-height-3);
|
||||
margin-right: var(--mini-unit);
|
||||
padding: var(--spacing-1);
|
||||
margin-left: calc(-1 * var(--spacing-1));
|
||||
|
||||
@@ -32,6 +32,11 @@ it("renders all markers", () => {
|
||||
},
|
||||
},
|
||||
},
|
||||
metadata: {
|
||||
wordList: {
|
||||
timedOut: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
@@ -71,6 +76,11 @@ it("renders some markers", () => {
|
||||
},
|
||||
},
|
||||
},
|
||||
metadata: {
|
||||
wordList: {
|
||||
timedOut: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
|
||||
@@ -38,7 +38,17 @@ const markers: Array<(
|
||||
null,
|
||||
(c) =>
|
||||
(c.revision &&
|
||||
c.revision.actionCounts.flag.reasons.COMMENT_DETECTED_BANNED_WORD && (
|
||||
c.revision.actionCounts.flag.reasons.COMMENT_DETECTED_BANNED_WORD &&
|
||||
c.revision.metadata?.wordList?.timedOut && (
|
||||
<Localized id="moderate-marker-possibleBannedWord" key={keyCounter++}>
|
||||
<Marker color="reported">Possible Banned Word</Marker>
|
||||
</Localized>
|
||||
)) ||
|
||||
null,
|
||||
(c) =>
|
||||
(c.revision &&
|
||||
c.revision.actionCounts.flag.reasons.COMMENT_DETECTED_BANNED_WORD &&
|
||||
!c.revision.metadata?.wordList?.timedOut && (
|
||||
<Localized id="moderate-marker-bannedWord" key={keyCounter++}>
|
||||
<Marker color="reported">Banned Word</Marker>
|
||||
</Localized>
|
||||
@@ -46,7 +56,17 @@ const markers: Array<(
|
||||
null,
|
||||
(c) =>
|
||||
(c.revision &&
|
||||
c.revision.actionCounts.flag.reasons.COMMENT_DETECTED_SUSPECT_WORD && (
|
||||
c.revision.actionCounts.flag.reasons.COMMENT_DETECTED_SUSPECT_WORD &&
|
||||
c.revision.metadata?.wordList?.timedOut && (
|
||||
<Localized id="moderate-marker-possibleSuspectWord" key={keyCounter++}>
|
||||
<Marker color="reported">Possible Suspect Word</Marker>
|
||||
</Localized>
|
||||
)) ||
|
||||
null,
|
||||
(c) =>
|
||||
(c.revision &&
|
||||
c.revision.actionCounts.flag.reasons.COMMENT_DETECTED_SUSPECT_WORD &&
|
||||
!c.revision.metadata?.wordList?.timedOut && (
|
||||
<Localized id="moderate-marker-suspectWord" key={keyCounter++}>
|
||||
<Marker color="reported">Suspect Word</Marker>
|
||||
</Localized>
|
||||
@@ -193,6 +213,11 @@ const enhanced = withFragmentContainer<MarkersContainerProps>({
|
||||
}
|
||||
}
|
||||
}
|
||||
metadata {
|
||||
wordList {
|
||||
timedOut
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
|
||||
@@ -101,7 +101,7 @@ $moderateCardLinkTextColor: $colors-teal-700;
|
||||
font-size: var(--font-size-1);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.33;
|
||||
color: $moderateCardLinkTextColor;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
@@ -115,7 +115,7 @@ $moderateCardLinkTextColor: $colors-teal-700;
|
||||
font-size: var(--font-size-1);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.33;
|
||||
margin-bottom: var(--spacing-1);
|
||||
text-transform: uppercase;
|
||||
}
|
||||
@@ -123,7 +123,7 @@ $moderateCardLinkTextColor: $colors-teal-700;
|
||||
.commentOn {
|
||||
font-size: var(--font-size-2);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
margin-bottom: var(--spacing-1);
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ $moderateCardLinkTextColor: $colors-teal-700;
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-1);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.33;
|
||||
}
|
||||
|
||||
.edited {
|
||||
@@ -160,7 +160,7 @@ $moderateCardLinkTextColor: $colors-teal-700;
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-1);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.33;
|
||||
padding-left: var(--spacing-2);
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ $moderateCardLinkTextColor: $colors-teal-700;
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-1);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.33;
|
||||
padding-left: var(--spacing-2);
|
||||
}
|
||||
|
||||
@@ -183,5 +183,5 @@ $moderateCardLinkTextColor: $colors-teal-700;
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.285;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import React, {
|
||||
useRef,
|
||||
} from "react";
|
||||
|
||||
import { MediaContainer } from "coral-admin/components/MediaContainer";
|
||||
import { HOTKEYS } from "coral-admin/constants";
|
||||
import { GetPhrasesRegExpOptions } from "coral-admin/helpers";
|
||||
import { PropTypesOf } from "coral-framework/types";
|
||||
@@ -29,7 +30,6 @@ import ApproveButton from "./ApproveButton";
|
||||
import CommentAuthorContainer from "./CommentAuthorContainer";
|
||||
import FeatureButton from "./FeatureButton";
|
||||
import MarkersContainer from "./MarkersContainer";
|
||||
import MediaContainer from "./MediaContainer";
|
||||
import RejectButton from "./RejectButton";
|
||||
|
||||
import styles from "./ModerateCard.css";
|
||||
|
||||
@@ -5,7 +5,7 @@ $moderated-by-username: var(--palette-text-900);
|
||||
font-size: var(--font-size-1);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.33;
|
||||
color: $moderated-by;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
@@ -14,7 +14,7 @@ $moderated-by-username: var(--palette-text-900);
|
||||
font-size: var(--font-size-2);
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-family: var(--font-family-secondary);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
color: $moderated-by-username;
|
||||
text-align: center;
|
||||
padding-top: 1px;
|
||||
|
||||
@@ -5,7 +5,7 @@ $moderateCardToxicityColor: var(--palette-text-500);
|
||||
font-size: var(--font-size-2);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.285;
|
||||
color: $moderateCardToxicityColor;
|
||||
}
|
||||
|
||||
|
||||
+10
@@ -25,6 +25,11 @@ exports[`renders all markers 1`] = `
|
||||
},
|
||||
},
|
||||
},
|
||||
"metadata": Object {
|
||||
"wordList": Object {
|
||||
"timedOut": false,
|
||||
},
|
||||
},
|
||||
},
|
||||
"status": "PREMOD",
|
||||
}
|
||||
@@ -172,6 +177,11 @@ exports[`renders some markers 1`] = `
|
||||
},
|
||||
},
|
||||
},
|
||||
"metadata": Object {
|
||||
"wordList": Object {
|
||||
"timedOut": false,
|
||||
},
|
||||
},
|
||||
},
|
||||
"status": "PREMOD",
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
overflow-x: hidden;
|
||||
overflow: hidden;
|
||||
/* adjust for button line-height being > 1 */
|
||||
margin-top: -2px;
|
||||
}
|
||||
@@ -20,7 +20,7 @@
|
||||
width: calc(20 * var(--mini-unit));
|
||||
margin-right: calc(var(--spacing-1) / 2);
|
||||
font-size: var(--font-size-3);
|
||||
line-height: var(--line-height-min);
|
||||
line-height: 1.2;
|
||||
justify-content: space-between;
|
||||
background: var(--palette-background-input);
|
||||
}
|
||||
@@ -41,6 +41,6 @@
|
||||
}
|
||||
|
||||
.buttonText {
|
||||
overflow-x: hidden;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
@@ -6,14 +6,16 @@ import SuspensionAction, { SuspensionActionProps } from "./SuspensionAction";
|
||||
import UsernameChangeAction, {
|
||||
UsernameChangeActionProps,
|
||||
} from "./UsernameChangeAction";
|
||||
import WarningAction, { WarningActionProps } from "./WarningAction";
|
||||
|
||||
export interface HistoryActionProps {
|
||||
kind: "username" | "suspension" | "ban" | "premod";
|
||||
kind: "username" | "suspension" | "ban" | "premod" | "warning";
|
||||
action:
|
||||
| UsernameChangeActionProps
|
||||
| SuspensionActionProps
|
||||
| BanActionProps
|
||||
| PremodActionProps;
|
||||
| PremodActionProps
|
||||
| WarningActionProps;
|
||||
}
|
||||
|
||||
const AccountHistoryAction: FunctionComponent<HistoryActionProps> = ({
|
||||
@@ -31,6 +33,8 @@ const AccountHistoryAction: FunctionComponent<HistoryActionProps> = ({
|
||||
return <BanAction {...(action as BanActionProps)} />;
|
||||
case "premod":
|
||||
return <PremodAction {...(action as PremodActionProps)} />;
|
||||
case "warning":
|
||||
return <WarningAction {...(action as WarningActionProps)} />;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ $moderator-note-username: var(--palette-text-900);
|
||||
font-family: var(--font-family-primary);
|
||||
font-size: var(--font-size-3);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
line-height: var(--line-height-field-description);
|
||||
line-height: 1.3;
|
||||
background-color: $moderator-note-bg;
|
||||
border-radius: 4px;
|
||||
padding: var(--spacing-3);
|
||||
@@ -25,7 +25,7 @@ $moderator-note-username: var(--palette-text-900);
|
||||
font-family: var(--font-family-primary);
|
||||
font-size: var(--font-size-2);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
padding-left: var(--spacing-4);
|
||||
padding-right: var(--spacing-1);
|
||||
position: relative;
|
||||
@@ -47,8 +47,8 @@ $moderator-note-username: var(--palette-text-900);
|
||||
.username {
|
||||
font-family: var(--font-family-secondary);
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
line-height: var(--line-height-3);
|
||||
font-size: var(--font-size-3);
|
||||
line-height: 1;
|
||||
color: $moderator-note-username;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ $recent-history-triggered: var(--palette-error-500);
|
||||
font-weight: var(--font-weight-primary-bold);
|
||||
font-size: var(--font-size-3);
|
||||
margin: 0;
|
||||
line-height: var(--line-height-field-description);
|
||||
line-height: 1.3;
|
||||
color: $recent-history-title;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ $recent-history-triggered: var(--palette-error-500);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
margin: 0;
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.285;
|
||||
}
|
||||
|
||||
.info {
|
||||
@@ -29,8 +29,7 @@ $recent-history-triggered: var(--palette-error-500);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
font-size: var(--font-size-6);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1;
|
||||
color: $recent-history-info;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@@ -133,6 +133,30 @@ const UserDrawerAccountHistory: FunctionComponent<Props> = ({ user }) => {
|
||||
});
|
||||
});
|
||||
|
||||
user.status.warning.history.forEach((record, i) => {
|
||||
let action: "created" | "acknowledged" | "removed";
|
||||
if (record.active) {
|
||||
action = "created";
|
||||
} else {
|
||||
if (record.acknowledgedAt) {
|
||||
action = "acknowledged";
|
||||
} else {
|
||||
action = "removed";
|
||||
}
|
||||
}
|
||||
history.push({
|
||||
kind: "warning",
|
||||
date: new Date(record.createdAt),
|
||||
takenBy: record.createdBy.username,
|
||||
action: {
|
||||
action,
|
||||
acknowledgedAt: record.acknowledgedAt
|
||||
? new Date(record.acknowledgedAt)
|
||||
: null,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
// Sort the history so that it's in the right order.
|
||||
return history.sort((a, b) => b.date.getTime() - a.date.getTime());
|
||||
}, [user]);
|
||||
@@ -193,6 +217,16 @@ const enhanced = withFragmentContainer<any>({
|
||||
}
|
||||
}
|
||||
}
|
||||
warning {
|
||||
history {
|
||||
active
|
||||
createdBy {
|
||||
username
|
||||
}
|
||||
acknowledgedAt
|
||||
createdAt
|
||||
}
|
||||
}
|
||||
ban {
|
||||
history {
|
||||
active
|
||||
|
||||
@@ -29,7 +29,7 @@ $user-drawer-status-label: var(--palette-text-500);
|
||||
font-family: var(--font-family-secondary);
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-size: var(--font-size-6);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 0.67;
|
||||
}
|
||||
|
||||
.userDetail {
|
||||
@@ -39,7 +39,7 @@ $user-drawer-status-label: var(--palette-text-500);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-3);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1;
|
||||
color: $user-drawer-account-info;
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ $user-drawer-status-label: var(--palette-text-500);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-bold);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
color: $user-drawer-status-label;
|
||||
margin-right: var(--spacing-1);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ $user-status-details: var(--palette-text-500);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
color: $user-status-details;
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.285;
|
||||
margin: 0 0 var(--spacing-1) 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { Localized } from "@fluent/react/compat";
|
||||
import { last } from "lodash";
|
||||
import React, { FunctionComponent, useMemo } from "react";
|
||||
import { graphql } from "react-relay";
|
||||
|
||||
@@ -21,18 +22,24 @@ interface Props {
|
||||
}
|
||||
|
||||
const UserStatusDetailsContainer: FunctionComponent<Props> = ({ user }) => {
|
||||
if (!user.status.ban.active && !user.status.suspension.active) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const activeBan = useMemo(() => {
|
||||
return user.status.ban.history.find((item) => item.active);
|
||||
if (user.status.ban.active) {
|
||||
return last(user.status.ban.history);
|
||||
}
|
||||
return null;
|
||||
}, [user]);
|
||||
|
||||
const activeSuspension = useMemo(() => {
|
||||
return user.status.suspension.history.find((item) => item.active);
|
||||
}, [user]);
|
||||
|
||||
const activeWarning = useMemo(() => {
|
||||
if (user.status.warning.active) {
|
||||
return last(user.status.warning.history);
|
||||
}
|
||||
return null;
|
||||
}, [user]);
|
||||
|
||||
const formatter = useDateTimeFormatter({
|
||||
day: "2-digit",
|
||||
month: "2-digit",
|
||||
@@ -41,6 +48,14 @@ const UserStatusDetailsContainer: FunctionComponent<Props> = ({ user }) => {
|
||||
minute: "2-digit",
|
||||
});
|
||||
|
||||
if (
|
||||
!user.status.ban.active &&
|
||||
!user.status.suspension.active &&
|
||||
!user.status.warning.active
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Popover
|
||||
@@ -49,6 +64,37 @@ const UserStatusDetailsContainer: FunctionComponent<Props> = ({ user }) => {
|
||||
body={({ toggleVisibility }) => (
|
||||
<ClickOutside onClickOutside={toggleVisibility}>
|
||||
<Box p={2}>
|
||||
{activeWarning && (
|
||||
<div>
|
||||
<Localized
|
||||
id="userDetails-warned-on"
|
||||
$timestamp={formatter(activeWarning.createdAt)}
|
||||
strong={<strong />}
|
||||
>
|
||||
<p className={styles.root}>
|
||||
<strong>Warned on </strong>{" "}
|
||||
{formatter(activeWarning.createdAt)}
|
||||
</p>
|
||||
</Localized>
|
||||
{activeWarning.createdBy && (
|
||||
<Localized
|
||||
id="userDetails-warned-by"
|
||||
strong={<strong />}
|
||||
$username={activeWarning.createdBy.username}
|
||||
>
|
||||
<p className={styles.root}>
|
||||
<strong>by </strong>
|
||||
{activeWarning.createdBy.username}
|
||||
</p>
|
||||
</Localized>
|
||||
)}
|
||||
<Localized id="userDetails-warned-explanation">
|
||||
<p className={styles.root}>
|
||||
User has not acknowledged the warning.
|
||||
</p>
|
||||
</Localized>
|
||||
</div>
|
||||
)}
|
||||
{activeBan && (
|
||||
<div>
|
||||
<Localized
|
||||
@@ -138,6 +184,16 @@ const enhanced = withFragmentContainer<Props>({
|
||||
user: graphql`
|
||||
fragment UserStatusDetailsContainer_user on User {
|
||||
status {
|
||||
warning {
|
||||
active
|
||||
history {
|
||||
active
|
||||
createdBy {
|
||||
username
|
||||
}
|
||||
createdAt
|
||||
}
|
||||
}
|
||||
ban {
|
||||
active
|
||||
history {
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
import { Localized } from "@fluent/react/compat";
|
||||
import React, { FunctionComponent } from "react";
|
||||
|
||||
export interface WarningActionProps {
|
||||
action: "created" | "removed" | "acknowledged";
|
||||
acknowledgedAt: Date | null;
|
||||
}
|
||||
|
||||
import { useDateTimeFormatter } from "coral-framework/hooks";
|
||||
|
||||
const WarningAction: FunctionComponent<WarningActionProps> = ({
|
||||
action,
|
||||
acknowledgedAt,
|
||||
}) => {
|
||||
const formatter = useDateTimeFormatter({
|
||||
hour: "numeric",
|
||||
minute: "2-digit",
|
||||
});
|
||||
if (action === "created") {
|
||||
return (
|
||||
<Localized id="moderate-user-drawer-account-history-warning-set">
|
||||
<span>User warned</span>
|
||||
</Localized>
|
||||
);
|
||||
} else if (action === "removed") {
|
||||
return (
|
||||
<Localized id="moderate-user-drawer-account-history-warning-removed">
|
||||
<span>Warning removed</span>
|
||||
</Localized>
|
||||
);
|
||||
} else if (action === "acknowledged") {
|
||||
return (
|
||||
<Localized id="moderate-user-drawer-account-history-warning-acknowledged">
|
||||
<span>
|
||||
Warning acknowledged at{" "}
|
||||
{acknowledgedAt ? formatter(acknowledgedAt) : ""}
|
||||
</span>
|
||||
</Localized>
|
||||
);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
export default WarningAction;
|
||||
@@ -56,7 +56,7 @@ const SiteModeratorModal: FunctionComponent<Props> = ({
|
||||
);
|
||||
|
||||
return (
|
||||
<Modal open={open} onClose={onCancel}>
|
||||
<Modal open={open} onClose={onCancel} disableScroll>
|
||||
{({ firstFocusableRef, lastFocusableRef }) => (
|
||||
<Card className={styles.root}>
|
||||
<Flex justifyContent="flex-end">
|
||||
|
||||
@@ -4,7 +4,7 @@ $ban-modal-text: var(--palette-text-500);
|
||||
font-size: var(--font-size-3);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
line-height: var(--line-height-field-description);
|
||||
line-height: 1.3;
|
||||
color: $ban-modal-text;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
import { graphql } from "react-relay";
|
||||
import { Environment } from "relay-runtime";
|
||||
|
||||
import { getViewer } from "coral-framework/helpers";
|
||||
import {
|
||||
commitMutationPromiseNormalized,
|
||||
createMutation,
|
||||
lookup,
|
||||
MutationInput,
|
||||
} from "coral-framework/lib/relay";
|
||||
import { GQLUser, GQLUSER_STATUS } from "coral-framework/schema";
|
||||
|
||||
import { RemoveUserWarningMutation as MutationTypes } from "coral-admin/__generated__/RemoveUserWarningMutation.graphql";
|
||||
|
||||
let clientMutationId = 0;
|
||||
|
||||
const RemoveUserWarningMutation = createMutation(
|
||||
"removeUserWarning",
|
||||
(environment: Environment, input: MutationInput<MutationTypes>) => {
|
||||
const viewer = getViewer(environment)!;
|
||||
const now = new Date();
|
||||
return commitMutationPromiseNormalized<MutationTypes>(environment, {
|
||||
mutation: graphql`
|
||||
mutation RemoveUserWarningMutation($input: RemoveUserWarningInput!) {
|
||||
removeUserWarning(input: $input) {
|
||||
user {
|
||||
id
|
||||
status {
|
||||
current
|
||||
warning {
|
||||
active
|
||||
history {
|
||||
active
|
||||
createdAt
|
||||
createdBy {
|
||||
id
|
||||
username
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
clientMutationId
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
input: {
|
||||
...input,
|
||||
clientMutationId: clientMutationId.toString(),
|
||||
},
|
||||
},
|
||||
optimisticResponse: {
|
||||
removeUserWarning: {
|
||||
user: {
|
||||
id: input.userID,
|
||||
status: {
|
||||
current: lookup<GQLUser>(
|
||||
environment,
|
||||
input.userID
|
||||
)!.status.current.filter((s) => s !== GQLUSER_STATUS.WARNED),
|
||||
warning: {
|
||||
active: false,
|
||||
history: [
|
||||
{
|
||||
active: false,
|
||||
createdBy: {
|
||||
id: viewer.id,
|
||||
username: viewer.username,
|
||||
},
|
||||
createdAt: now.toISOString(),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
clientMutationId: (clientMutationId++).toString(),
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
export default RemoveUserWarningMutation;
|
||||
@@ -19,7 +19,7 @@ $suspend-modal-text: var(--palette-text-500);
|
||||
font-size: var(--font-size-4);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
line-height: var(--line-height-5);
|
||||
line-height: 1.11;
|
||||
color: $suspend-modal-text;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ $suspend-modal-text: var(--palette-text-500);
|
||||
font-size: var(--font-size-3);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
line-height: var(--line-height-field-description);
|
||||
line-height: 1.3;
|
||||
color: $suspend-modal-text;
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ $suspend-modal-text: var(--palette-text-500);
|
||||
font-size: var(--font-size-4);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
line-height: var(--line-height-5);
|
||||
line-height: 1.11;
|
||||
color: $suspend-modal-text;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
}
|
||||
|
||||
.success {
|
||||
|
||||
@@ -10,6 +10,7 @@ interface Props {
|
||||
banned: boolean;
|
||||
suspended: boolean;
|
||||
premod: boolean;
|
||||
warned: boolean;
|
||||
}
|
||||
|
||||
const render = (className: string, content: React.ReactNode) => (
|
||||
@@ -45,6 +46,14 @@ const UserStatus: FunctionComponent<Props> = (props) => {
|
||||
</Localized>
|
||||
);
|
||||
}
|
||||
if (props.warned) {
|
||||
return render(
|
||||
styles.warning,
|
||||
<Localized id="userStatus-warned">
|
||||
<div>Warned</div>
|
||||
</Localized>
|
||||
);
|
||||
}
|
||||
return render(
|
||||
styles.success,
|
||||
<Localized id="userStatus-active">
|
||||
|
||||
@@ -32,9 +32,12 @@ interface Props {
|
||||
onRemoveSuspension: () => void;
|
||||
onPremod: () => void;
|
||||
onRemovePremod: () => void;
|
||||
onWarn: () => void;
|
||||
onRemoveWarning: () => void;
|
||||
banned: boolean;
|
||||
suspended: boolean;
|
||||
premod: boolean;
|
||||
warned: boolean;
|
||||
children: React.ReactNode;
|
||||
fullWidth?: boolean;
|
||||
bordered?: boolean;
|
||||
@@ -47,6 +50,9 @@ const UserStatusChange: FunctionComponent<Props> = ({
|
||||
onRemoveSuspension,
|
||||
onPremod,
|
||||
onRemovePremod,
|
||||
onWarn,
|
||||
onRemoveWarning,
|
||||
warned,
|
||||
banned,
|
||||
suspended,
|
||||
premod,
|
||||
@@ -143,6 +149,37 @@ const UserStatusChange: FunctionComponent<Props> = ({
|
||||
</DropdownButton>
|
||||
</Localized>
|
||||
)}
|
||||
{warned ? (
|
||||
<Localized id="community-userStatus-removeWarning">
|
||||
<DropdownButton
|
||||
className={styles.dropdownButton}
|
||||
disabled={!onRemoveWarning}
|
||||
onClick={() => {
|
||||
if (onRemoveWarning) {
|
||||
onRemoveWarning();
|
||||
toggleVisibility();
|
||||
}
|
||||
}}
|
||||
>
|
||||
Remove warning
|
||||
</DropdownButton>
|
||||
</Localized>
|
||||
) : (
|
||||
<Localized id="community-userStatus-warn">
|
||||
<DropdownButton
|
||||
className={styles.dropdownButton}
|
||||
disabled={!onWarn}
|
||||
onClick={() => {
|
||||
if (onWarn) {
|
||||
onWarn();
|
||||
toggleVisibility();
|
||||
}
|
||||
}}
|
||||
>
|
||||
Warn
|
||||
</DropdownButton>
|
||||
</Localized>
|
||||
)}
|
||||
</Dropdown>
|
||||
</ClickOutside>
|
||||
)}
|
||||
|
||||
@@ -15,10 +15,13 @@ import PremodUserMutation from "./PremodUserMutation";
|
||||
import RemoveUserBanMutation from "./RemoveUserBanMutation";
|
||||
import RemoveUserPremodMudtaion from "./RemoveUserPremodMutation";
|
||||
import RemoveUserSuspensionMutation from "./RemoveUserSuspensionMutation";
|
||||
import RemoveUserWarningMutation from "./RemoveUserWarningMutation";
|
||||
import SuspendModal from "./SuspendModal";
|
||||
import SuspendUserMutation from "./SuspendUserMutation";
|
||||
import UserStatusChange from "./UserStatusChange";
|
||||
import UserStatusContainer from "./UserStatusContainer";
|
||||
import WarnModal from "./WarnModal";
|
||||
import WarnUserMutation from "./WarnUserMutation";
|
||||
|
||||
interface Props {
|
||||
settings: UserStatusChangeContainer_settings;
|
||||
@@ -41,10 +44,37 @@ const UserStatusChangeContainer: FunctionComponent<Props> = ({
|
||||
const removeUserSuspension = useMutation(RemoveUserSuspensionMutation);
|
||||
const premodUser = useMutation(PremodUserMutation);
|
||||
const removeUserPremod = useMutation(RemoveUserPremodMudtaion);
|
||||
const warnUser = useMutation(WarnUserMutation);
|
||||
const removeUserWarning = useMutation(RemoveUserWarningMutation);
|
||||
const [showPremod, setShowPremod] = useState<boolean>(false);
|
||||
const [showBanned, setShowBanned] = useState<boolean>(false);
|
||||
const [showSuspend, setShowSuspend] = useState<boolean>(false);
|
||||
const [showWarn, setShowWarn] = useState<boolean>(false);
|
||||
const [showSuspendSuccess, setShowSuspendSuccess] = useState<boolean>(false);
|
||||
const [showWarnSuccess, setShowWarnSuccess] = useState<boolean>(false);
|
||||
const handleWarn = useCallback(() => {
|
||||
if (user.status.warning.active) {
|
||||
return;
|
||||
}
|
||||
setShowWarn(true);
|
||||
}, [user, setShowWarn]);
|
||||
const handleRemoveWarning = useCallback(() => {
|
||||
if (!user.status.warning.active) {
|
||||
return;
|
||||
}
|
||||
void removeUserWarning({ userID: user.id });
|
||||
}, [user, removeUserWarning]);
|
||||
const hideWarn = useCallback(() => {
|
||||
setShowWarn(false);
|
||||
setShowWarnSuccess(false);
|
||||
}, [setShowWarn]);
|
||||
const handleWarnConfirm = useCallback(
|
||||
(message: string) => {
|
||||
void warnUser({ userID: user.id, message });
|
||||
setShowWarnSuccess(true);
|
||||
},
|
||||
[warnUser, user, setShowWarnSuccess]
|
||||
);
|
||||
const handleBan = useCallback(() => {
|
||||
if (user.status.ban.active) {
|
||||
return;
|
||||
@@ -91,12 +121,12 @@ const UserStatusChangeContainer: FunctionComponent<Props> = ({
|
||||
return;
|
||||
}
|
||||
void removeUserPremod({ userID: user.id });
|
||||
}, [user, premodUser]);
|
||||
}, [user, removeUserPremod]);
|
||||
|
||||
const handleSuspendModalClose = useCallback(() => {
|
||||
setShowSuspend(false);
|
||||
setShowSuspendSuccess(false);
|
||||
}, [setShowBanned, setShowSuspendSuccess]);
|
||||
}, [setShowSuspendSuccess]);
|
||||
|
||||
const handleBanModalClose = useCallback(() => {
|
||||
setShowBanned(false);
|
||||
@@ -119,7 +149,7 @@ const UserStatusChangeContainer: FunctionComponent<Props> = ({
|
||||
void banUser({ userID: user.id, message, rejectExistingComments });
|
||||
setShowBanned(false);
|
||||
},
|
||||
[user, setShowBanned]
|
||||
[user, setShowBanned, banUser]
|
||||
);
|
||||
|
||||
if (user.role !== GQLUSER_ROLE.COMMENTER) {
|
||||
@@ -140,6 +170,9 @@ const UserStatusChangeContainer: FunctionComponent<Props> = ({
|
||||
banned={user.status.ban.active}
|
||||
suspended={user.status.suspension.active}
|
||||
premod={user.status.premod.active}
|
||||
warned={user.status.warning.active}
|
||||
onWarn={handleWarn}
|
||||
onRemoveWarning={handleRemoveWarning}
|
||||
fullWidth={fullWidth}
|
||||
bordered={bordered}
|
||||
>
|
||||
@@ -159,6 +192,14 @@ const UserStatusChangeContainer: FunctionComponent<Props> = ({
|
||||
onClose={hidePremod}
|
||||
onConfirm={handlePremodConfirm}
|
||||
/>
|
||||
<WarnModal
|
||||
username={user.username}
|
||||
organizationName={settings.organization.name}
|
||||
open={showWarn}
|
||||
onClose={hideWarn}
|
||||
onConfirm={handleWarnConfirm}
|
||||
success={showWarnSuccess}
|
||||
/>
|
||||
{!scoped && (
|
||||
<BanModal
|
||||
username={user.username}
|
||||
@@ -187,6 +228,9 @@ const enhanced = withFragmentContainer<Props>({
|
||||
premod {
|
||||
active
|
||||
}
|
||||
warning {
|
||||
active
|
||||
}
|
||||
}
|
||||
...UserStatusContainer_user
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ const UserStatusContainer: FunctionComponent<Props> = (props) => {
|
||||
banned={props.user.status.current.includes(GQLUSER_STATUS.BANNED)}
|
||||
suspended={props.user.status.current.includes(GQLUSER_STATUS.SUSPENDED)}
|
||||
premod={props.user.status.current.includes(GQLUSER_STATUS.PREMOD)}
|
||||
warned={props.user.status.current.includes(GQLUSER_STATUS.WARNED)}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
.label {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.required {
|
||||
color: var(--palette-text-100);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
import { Localized } from "@fluent/react/compat";
|
||||
import React, { FunctionComponent, RefObject, useCallback } from "react";
|
||||
import { Field, Form } from "react-final-form";
|
||||
|
||||
import { required } from "coral-framework/lib/validation";
|
||||
import {
|
||||
Button,
|
||||
Flex,
|
||||
HelperText,
|
||||
HorizontalGutter,
|
||||
Label,
|
||||
Textarea,
|
||||
} from "coral-ui/components/v2";
|
||||
|
||||
import styles from "./WarnForm.css";
|
||||
|
||||
interface Props {
|
||||
onCancel: () => void;
|
||||
onSubmit: (message: string) => void;
|
||||
lastFocusableRef: RefObject<any>;
|
||||
}
|
||||
|
||||
const WarnForm: FunctionComponent<Props> = ({
|
||||
onCancel,
|
||||
onSubmit,
|
||||
lastFocusableRef,
|
||||
}) => {
|
||||
const onFormSubmit = useCallback(
|
||||
({ message }) => {
|
||||
onSubmit(message);
|
||||
},
|
||||
[onSubmit]
|
||||
);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Form onSubmit={onFormSubmit}>
|
||||
{({ handleSubmit, invalid, form }) => (
|
||||
<form onSubmit={handleSubmit}>
|
||||
<HorizontalGutter spacing={3}>
|
||||
<HorizontalGutter spacing={1}>
|
||||
<Flex alignItems="baseline" spacing={1}>
|
||||
<Localized id="community-warnModal-message-label">
|
||||
<Label className={styles.label}>Message</Label>
|
||||
</Localized>
|
||||
<Localized id="community-warnModal-message-required">
|
||||
<span className={styles.required}>Required</span>
|
||||
</Localized>
|
||||
</Flex>
|
||||
<Localized id="community-warnModal-message-description">
|
||||
<HelperText>
|
||||
Explain to this user how they should change their behavior
|
||||
on your site.
|
||||
</HelperText>
|
||||
</Localized>
|
||||
</HorizontalGutter>
|
||||
<Field component="textarea" name="message" validate={required}>
|
||||
{({ input }) => (
|
||||
<Textarea id="warnModal-message" {...input} fullwidth />
|
||||
)}
|
||||
</Field>
|
||||
<Flex justifyContent="flex-end" itemGutter="half">
|
||||
<Localized id="community-warnModal-cancel">
|
||||
<Button variant="flat" onClick={onCancel}>
|
||||
Cancel
|
||||
</Button>
|
||||
</Localized>
|
||||
<Localized id="community-warnModal-warnUser">
|
||||
<Button
|
||||
ref={lastFocusableRef}
|
||||
type="submit"
|
||||
disabled={invalid}
|
||||
>
|
||||
Warn User
|
||||
</Button>
|
||||
</Localized>
|
||||
</Flex>
|
||||
</HorizontalGutter>
|
||||
</form>
|
||||
)}
|
||||
</Form>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default WarnForm;
|
||||
@@ -0,0 +1,103 @@
|
||||
import { Localized } from "@fluent/react/compat";
|
||||
import React, { FunctionComponent, useCallback } from "react";
|
||||
|
||||
import NotAvailable from "coral-admin/components/NotAvailable";
|
||||
import { Button, Flex, HorizontalGutter } from "coral-ui/components/v2";
|
||||
|
||||
import ModalBodyText from "../ModalBodyText";
|
||||
import ModalHeader from "../ModalHeader";
|
||||
import ModalHeaderUsername from "../ModalHeaderUsername";
|
||||
import ChangeStatusModal from "./ChangeStatusModal";
|
||||
import WarnForm from "./WarnForm";
|
||||
|
||||
interface Props {
|
||||
username: string | null;
|
||||
open: boolean;
|
||||
onClose: () => void;
|
||||
onConfirm: (message: string) => void;
|
||||
organizationName: string;
|
||||
success: boolean;
|
||||
}
|
||||
|
||||
const WarnModal: FunctionComponent<Props> = ({
|
||||
open,
|
||||
onClose,
|
||||
onConfirm,
|
||||
username,
|
||||
organizationName,
|
||||
success,
|
||||
}) => {
|
||||
const onFormSubmit = useCallback(
|
||||
(message: string) => {
|
||||
onConfirm(message);
|
||||
},
|
||||
[onConfirm]
|
||||
);
|
||||
|
||||
return (
|
||||
<ChangeStatusModal
|
||||
open={open}
|
||||
onClose={onClose}
|
||||
aria-labelledby="warnModal-title"
|
||||
>
|
||||
{({ lastFocusableRef }) => (
|
||||
<>
|
||||
{success && (
|
||||
<HorizontalGutter spacing={3}>
|
||||
<Localized
|
||||
id="community-warnModal-success"
|
||||
$username={username}
|
||||
strong={<ModalHeaderUsername />}
|
||||
>
|
||||
<ModalHeader>
|
||||
A warning has been sent to{" "}
|
||||
<ModalHeaderUsername>{username}</ModalHeaderUsername>
|
||||
</ModalHeader>
|
||||
</Localized>
|
||||
|
||||
<Flex justifyContent="flex-end" itemGutter="half">
|
||||
<Localized id="community-suspendModal-success-close">
|
||||
<Button ref={lastFocusableRef} onClick={onClose}>
|
||||
Ok
|
||||
</Button>
|
||||
</Localized>
|
||||
</Flex>
|
||||
</HorizontalGutter>
|
||||
)}
|
||||
{!success && (
|
||||
<HorizontalGutter spacing={3}>
|
||||
<Localized
|
||||
id="community-warnModal-areYouSure"
|
||||
strong={<ModalHeaderUsername />}
|
||||
$username={username || <NotAvailable />}
|
||||
>
|
||||
<ModalHeader id="warnModal-title">
|
||||
Warn{" "}
|
||||
<ModalHeaderUsername>
|
||||
{username || <NotAvailable />}
|
||||
</ModalHeaderUsername>
|
||||
?
|
||||
</ModalHeader>
|
||||
</Localized>
|
||||
<Localized id="community-warnModal-consequence">
|
||||
<ModalBodyText>
|
||||
A warning can improve a commenter’s conduct without a
|
||||
suspension or ban. The user must acknowledge the warning
|
||||
before they can continue commenting.
|
||||
</ModalBodyText>
|
||||
</Localized>
|
||||
|
||||
<WarnForm
|
||||
onCancel={onClose}
|
||||
onSubmit={onFormSubmit}
|
||||
lastFocusableRef={lastFocusableRef}
|
||||
/>
|
||||
</HorizontalGutter>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</ChangeStatusModal>
|
||||
);
|
||||
};
|
||||
|
||||
export default WarnModal;
|
||||
@@ -0,0 +1,84 @@
|
||||
import { graphql } from "react-relay";
|
||||
import { Environment } from "relay-runtime";
|
||||
|
||||
import { getViewer } from "coral-framework/helpers";
|
||||
import {
|
||||
commitMutationPromiseNormalized,
|
||||
createMutation,
|
||||
lookup,
|
||||
MutationInput,
|
||||
} from "coral-framework/lib/relay";
|
||||
import { GQLUser, GQLUSER_STATUS } from "coral-framework/schema";
|
||||
|
||||
import { WarnUserMutation as MutationTypes } from "coral-admin/__generated__/WarnUserMutation.graphql";
|
||||
|
||||
let clientMutationId = 0;
|
||||
|
||||
const WarnUserMutation = createMutation(
|
||||
"warnUser",
|
||||
(environment: Environment, input: MutationInput<MutationTypes>) => {
|
||||
const viewer = getViewer(environment)!;
|
||||
const now = new Date();
|
||||
return commitMutationPromiseNormalized<MutationTypes>(environment, {
|
||||
mutation: graphql`
|
||||
mutation WarnUserMutation($input: WarnUserInput!) {
|
||||
warnUser(input: $input) {
|
||||
user {
|
||||
id
|
||||
status {
|
||||
current
|
||||
warning {
|
||||
active
|
||||
history {
|
||||
active
|
||||
createdAt
|
||||
createdBy {
|
||||
id
|
||||
username
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
clientMutationId
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
input: {
|
||||
...input,
|
||||
clientMutationId: clientMutationId.toString(),
|
||||
},
|
||||
},
|
||||
optimisticResponse: {
|
||||
warnUser: {
|
||||
user: {
|
||||
id: input.userID,
|
||||
status: {
|
||||
current: lookup<GQLUser>(
|
||||
environment,
|
||||
input.userID
|
||||
)!.status.current.concat(GQLUSER_STATUS.WARNED),
|
||||
warning: {
|
||||
active: true,
|
||||
history: [
|
||||
{
|
||||
active: true,
|
||||
createdBy: {
|
||||
id: viewer.id,
|
||||
username: viewer.username,
|
||||
},
|
||||
createdAt: now.toISOString(),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
clientMutationId: (clientMutationId++).toString(),
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
export default WarnUserMutation;
|
||||
@@ -100,10 +100,34 @@ const RejectCommentMutation = createMutation(
|
||||
proxy.setValue(true, "viewerDidModerate");
|
||||
|
||||
const connections = [
|
||||
getQueueConnection(store, "REPORTED", input.storyID),
|
||||
getQueueConnection(store, "PENDING", input.storyID),
|
||||
getQueueConnection(store, "UNMODERATED", input.storyID),
|
||||
getQueueConnection(store, "APPROVED", input.storyID),
|
||||
getQueueConnection(
|
||||
store,
|
||||
"REPORTED",
|
||||
input.storyID,
|
||||
input.siteID,
|
||||
input.section
|
||||
),
|
||||
getQueueConnection(
|
||||
store,
|
||||
"PENDING",
|
||||
input.storyID,
|
||||
input.siteID,
|
||||
input.section
|
||||
),
|
||||
getQueueConnection(
|
||||
store,
|
||||
"UNMODERATED",
|
||||
input.storyID,
|
||||
input.siteID,
|
||||
input.section
|
||||
),
|
||||
getQueueConnection(
|
||||
store,
|
||||
"APPROVED",
|
||||
input.storyID,
|
||||
input.siteID,
|
||||
input.section
|
||||
),
|
||||
].filter((c) => c);
|
||||
connections.forEach((con) =>
|
||||
ConnectionHandler.deleteNode(con!, input.commentID)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
font-family: var(--font-family-secondary);
|
||||
color: var(--palette-text-100);
|
||||
font-size: var(--font-size-3);
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.285;
|
||||
|
||||
padding-bottom: var(--spacing-3);
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
font-size: var(--font-size-6);
|
||||
font-weight: var(--font-weight-secondary-bold);
|
||||
font-family: var(--font-family-secondary);
|
||||
line-height: var(--line-height-7);
|
||||
line-height: 1.17;
|
||||
color: var(--palette-text-900);
|
||||
|
||||
text-align: center;
|
||||
@@ -24,7 +24,7 @@
|
||||
font-size: var(--font-size-3);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.125;
|
||||
color: var(--palette-text-500);
|
||||
|
||||
text-align: center;
|
||||
@@ -39,7 +39,7 @@
|
||||
font-size: var(--font-size-4);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 0.89;
|
||||
color: var(--palette-text-900);
|
||||
|
||||
text-align: center;
|
||||
|
||||
@@ -3,7 +3,7 @@ import React, { Component } from "react";
|
||||
import { graphql } from "react-relay";
|
||||
|
||||
import { SetRedirectPathMutation } from "coral-admin/mutations";
|
||||
import { timeout } from "coral-common/utils";
|
||||
import { waitFor } from "coral-common/helpers";
|
||||
import {
|
||||
MutationProp,
|
||||
withFragmentContainer,
|
||||
@@ -31,7 +31,7 @@ class RestrictedContainer extends Component<Props> {
|
||||
private handleSignInAs = async () => {
|
||||
await this.props.signOut();
|
||||
// Wait for new context to propagate.
|
||||
await timeout();
|
||||
await waitFor();
|
||||
void this.props.setRedirectPath({
|
||||
path: location.pathname + location.search + location.hash,
|
||||
});
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-3);
|
||||
line-height: var(--line-height-field-description);
|
||||
line-height: 1.3;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,6 @@ $invite-form-text: var(--palette-text-500);
|
||||
font-size: var(--font-size-3);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
line-height: var(--line-height-field-description);
|
||||
line-height: 1.3;
|
||||
color: $invite-form-text;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ $invite-modal-text: var(--palette-text-500);
|
||||
font-size: var(--font-size-5);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
line-height: var(--line-height-6);
|
||||
line-height: 1.2;
|
||||
color: $invite-modal-text;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,6 @@ $role-field-text: var(--palette-text-500);
|
||||
font-size: var(--font-size-3);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
line-height: var(--line-height-field-description);
|
||||
line-height: 1.3;
|
||||
color: $role-field-text;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ $success-text: var(--palette-text-500);
|
||||
font-size: var(--font-size-5);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
line-height: var(--line-height-6);
|
||||
line-height: 1.2;
|
||||
color: $success-text;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
padding: 0px;
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
line-height: var(--line-height-3);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: 1.14;
|
||||
}
|
||||
|
||||
.username {
|
||||
|
||||
@@ -6,6 +6,6 @@ $configureHeadingForegroundColor: var(--palette-text-000);
|
||||
color: $configureHeadingForegroundColor;
|
||||
font-size: var(--font-size-3);
|
||||
font-weight: var(--font-weight-primary-bold);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1;
|
||||
font-family: var(--font-family-primary);
|
||||
}
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.285;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ $sideNavActiveColor: var(--palette-text-500);
|
||||
color: $sideNavItemColor;
|
||||
font-family: var(--font-family-primary);
|
||||
font-size: var(--font-size-4);
|
||||
line-height: var(--line-height-5);
|
||||
line-height: 1.11;
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
display: inline-block;
|
||||
padding: var(--spacing-2) var(--spacing-2)
|
||||
|
||||
+1
-1
@@ -6,5 +6,5 @@
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: var(--line-height-3);
|
||||
line-height: 1.14;
|
||||
|
||||
border-radius: 2px;
|
||||
padding-left: var(--spacing-1);
|
||||
|
||||
@@ -9,7 +9,7 @@ $announcement-modal-text: var(--palette-text-500);
|
||||
font-size: var(--font-size-5);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
line-height: var(--line-height-6);
|
||||
line-height: 1.2;
|
||||
color: $announcement-modal-text;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ const AnnouncementForm: FunctionComponent<Props> = ({
|
||||
</HorizontalGutter>
|
||||
<Flex itemGutter justifyContent="flex-end">
|
||||
<Localized id="configure-general-announcements-cancel">
|
||||
<Button color="mono" variant="outline" onClick={onClose}>
|
||||
<Button color="mono" variant="outlined" onClick={onClose}>
|
||||
Cancel
|
||||
</Button>
|
||||
</Localized>
|
||||
|
||||
@@ -7,5 +7,5 @@
|
||||
font-size: var(--font-size-3);
|
||||
font-weight: var(--font-weight-primary-regular);
|
||||
font-family: var(--font-family-primary);
|
||||
line-height: var(--line-height-4);
|
||||
line-height: 1.125;
|
||||
}
|
||||
|
||||
+1
-1
@@ -6,5 +6,5 @@
|
||||
font-size: var(--font-size-5);
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
line-height: var(--line-height-6);
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
+1
-1
@@ -5,6 +5,6 @@
|
||||
.detailsButton {
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: var(--font-weight-primary-semi-bold);
|
||||
line-height: var(--line-height-3);
|
||||
font-size: var(--font-size-2);
|
||||
line-height: 1.14;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user