diff --git a/src/pages-and-resources/discussions/app-list/AppCard.jsx b/src/pages-and-resources/discussions/app-list/AppCard.jsx
index 42be175fa..1f95ddbd9 100644
--- a/src/pages-and-resources/discussions/app-list/AppCard.jsx
+++ b/src/pages-and-resources/discussions/app-list/AppCard.jsx
@@ -2,12 +2,14 @@ import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
-import { Card, CheckboxControl } from '@edx/paragon';
-
+import {
+ Card, CheckboxControl, ExtraSmall,
+} from '@edx/paragon';
import messages from './messages';
+import FeaturesList from './FeaturesList';
function AppCard({
- app, onClick, intl, selected,
+ app, onClick, intl, selected, features,
}) {
const supportText = app.hasFullSupport
? intl.formatMessage(messages.appFullSupport)
@@ -49,6 +51,12 @@ function AppCard({
{supportText}
{intl.formatMessage(messages[`appDescription-${app.id}`])}
+
+
+
);
@@ -63,6 +71,7 @@ AppCard.propTypes = {
onClick: PropTypes.func.isRequired,
selected: PropTypes.bool.isRequired,
intl: intlShape.isRequired,
+ features: PropTypes.arrayOf(PropTypes.object).isRequired,
};
export default injectIntl(AppCard);
diff --git a/src/pages-and-resources/discussions/app-list/AppList.jsx b/src/pages-and-resources/discussions/app-list/AppList.jsx
index c94713994..ddbb4cfb5 100644
--- a/src/pages-and-resources/discussions/app-list/AppList.jsx
+++ b/src/pages-and-resources/discussions/app-list/AppList.jsx
@@ -1,6 +1,6 @@
import React, { useCallback, useEffect } from 'react';
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
-import { CardGrid, Container } from '@edx/paragon';
+import { CardGrid, Container, LargerThanExtraSmall } from '@edx/paragon';
import { useDispatch, useSelector } from 'react-redux';
import { useModels } from '../../../generic/model-store';
@@ -69,21 +69,21 @@ function AppList({ intl }) {
app={app}
selected={app.id === selectedAppId}
onClick={handleSelectApp}
+ features={features}
/>
))}
-
-
- {intl.formatMessage(messages.supportedFeatures)}
-
-
-
-
-
-
+
+
+ {intl.formatMessage(messages.supportedFeatures)}
+
+
+
+
+
);
}
diff --git a/src/pages-and-resources/discussions/app-list/FeaturesList.jsx b/src/pages-and-resources/discussions/app-list/FeaturesList.jsx
new file mode 100644
index 000000000..5ba1ef9cc
--- /dev/null
+++ b/src/pages-and-resources/discussions/app-list/FeaturesList.jsx
@@ -0,0 +1,52 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { faCheck } from '@fortawesome/free-solid-svg-icons';
+import { Remove } from '@edx/paragon/icons';
+import { Collapsible } from '@edx/paragon';
+import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
+import messages from './messages';
+
+const SupportedFeature = (
+
+
+
+);
+const NonSupportedFeature = (
+
+);
+
+function FeaturesList({ app, features, intl }) {
+ return (
+
+
+ {intl.formatMessage(messages['supportedFeatureList-mobile-show'])}
+
+
+ {intl.formatMessage(messages['supportedFeatureList-mobile-hide'])}
+
+ >
+ )}
+ styling="basic"
+ >
+ {features && features.map((feature) => (
+
+ {app.featureIds.includes(feature.id)
+ ? SupportedFeature
+ : NonSupportedFeature}
+ {feature.id}
+
+ ))}
+
+ );
+}
+
+export default injectIntl(FeaturesList);
+
+FeaturesList.propTypes = {
+ app: PropTypes.arrayOf(PropTypes.object).isRequired,
+ features: PropTypes.arrayOf(PropTypes.object).isRequired,
+ intl: intlShape.isRequired,
+};
diff --git a/src/pages-and-resources/discussions/app-list/messages.js b/src/pages-and-resources/discussions/app-list/messages.js
index 4c61af901..ff10cc505 100644
--- a/src/pages-and-resources/discussions/app-list/messages.js
+++ b/src/pages-and-resources/discussions/app-list/messages.js
@@ -9,6 +9,16 @@ const messages = defineMessages({
id: 'authoring.discussions.supportedFeatures',
defaultMessage: 'Supported Features',
},
+ 'supportedFeatureList-mobile-show': {
+ id: 'authoring.discussions.supportedFeatureList-mobile-show',
+ defaultMessage: 'Show supported features',
+ description: 'This is used in mobile view as supported feature list heading when close',
+ },
+ 'supportedFeatureList-mobile-hide': {
+ id: 'authoring.discussions.supportedFeatureList-mobile-hide',
+ defaultMessage: 'Hide supported features',
+ description: 'This is used in mobile view as supported feature list heading when opened',
+ },
noApps: {
id: 'authoring.discussions.noApps',
defaultMessage: 'There are no discussions providers available for your course.',