diff --git a/common/app/components/SK-Wave.jsx b/common/app/components/SK-Wave.jsx deleted file mode 100644 index 8f8080a0fb..0000000000 --- a/common/app/components/SK-Wave.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import React, { PureComponent } from 'react'; - -const propTypes = { -}; -export default class SKWave extends PureComponent { - render() { - return ( -
-
-
-
-
-
-
- ); - } -} -SKWave.displayName = 'SKWave'; -SKWave.propTypes = propTypes; diff --git a/common/app/routes/index.less b/common/app/routes/index.less index 5fb84826d4..af0f7d4506 100644 --- a/common/app/routes/index.less +++ b/common/app/routes/index.less @@ -1 +1,2 @@ &{ @import "./challenges/challenges.less"; } +&{ @import "./settings/settings.less"; } \ No newline at end of file diff --git a/common/app/routes/settings/components/Settings.jsx b/common/app/routes/settings/components/Settings.jsx index a0fc73eea6..ed257f252c 100644 --- a/common/app/routes/settings/components/Settings.jsx +++ b/common/app/routes/settings/components/Settings.jsx @@ -9,7 +9,7 @@ import LockedSettings from './Locked-Settings.jsx'; import SocialSettings from './Social-Settings.jsx'; import EmailSettings from './Email-Setting.jsx'; import LanguageSettings from './Language-Settings.jsx'; -import SKWave from '../../../components/SK-Wave.jsx'; +import SettingsSkeleton from './SettingsSkeleton.jsx'; import { toggleUserFlag } from '../redux/actions.js'; @@ -115,7 +115,7 @@ export class Settings extends React.Component { toggleNotificationEmail } = this.props; if (!username && !showLoading) { - return ; + return ; } if (children) { return ( diff --git a/common/app/routes/settings/components/SettingsSkeleton.jsx b/common/app/routes/settings/components/SettingsSkeleton.jsx new file mode 100644 index 0000000000..3224f16f93 --- /dev/null +++ b/common/app/routes/settings/components/SettingsSkeleton.jsx @@ -0,0 +1,99 @@ +import React from 'react'; +import { Button, Row, Col } from 'react-bootstrap'; + +import ns from '../ns.json'; + +// actual chars required to give buttons some height +// whitespace alone is no good +const placeholderString = ( + + placeholder text of 28 chars + +); +const shortString = ( + + placeholder + +); + + +export default function SettingsSkeleton() { + return ( +
+ + + + + + + +

{ placeholderString }

+

{ shortString }

+ + + + + + + + +
+

{ placeholderString }

+ + + + + +
+

{ placeholderString }

+
+ ); +} diff --git a/common/app/routes/settings/ns.json b/common/app/routes/settings/ns.json new file mode 100644 index 0000000000..1beea17991 --- /dev/null +++ b/common/app/routes/settings/ns.json @@ -0,0 +1 @@ +"settings" diff --git a/common/app/routes/settings/settings.less b/common/app/routes/settings/settings.less new file mode 100644 index 0000000000..7be26e4713 --- /dev/null +++ b/common/app/routes/settings/settings.less @@ -0,0 +1,37 @@ +// should be the same as the filename and ./ns.json +@ns: settings; + +@skeleton-gray: #b0bdb7; + +@keyframes pulsingOverlay { + 0% { + opacity: 0.5; + } + 50% { + opacity: 0.8; + } + 100% { + opacity: 0.5; + } +} + +.@{ns}-skeleton { + background-color: #fff; + z-index: 10; + animation-name: pulsingOverlay; + animation-duration: 2.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: normal; + + .placeholder-string { + background-color: @skeleton-gray; + box-shadow: 0px 0px 12px 6px @skeleton-gray; + color: @skeleton-gray; + } + .btn-link-social { + background-color: @skeleton-gray; + border-color: @skeleton-gray; + box-shadow: 0px 0px 12px 6px @skeleton-gray; + } +}