Commit 0223fb20 authored by Florent Chehab's avatar Florent Chehab Committed by Florent Chehab
Browse files

dropped(redux)

parent 1451f9ca
...@@ -35,7 +35,7 @@ check_back: ...@@ -35,7 +35,7 @@ check_back:
check_front: check_front:
<<: *only-default <<: *only-default
stage: check stage: check
image: registry.gitlab.utc.fr/rex-dri/rex-dri/frontend:v1.1.1 image: registry.gitlab.utc.fr/rex-dri/rex-dri/frontend:v1.2.0
before_script: before_script:
- cd frontend && cp -R /usr/src/deps/node_modules . - cd frontend && cp -R /usr/src/deps/node_modules .
script: script:
...@@ -77,7 +77,7 @@ test_back: ...@@ -77,7 +77,7 @@ test_back:
test_frontend: test_frontend:
<<: *only-default <<: *only-default
stage: test stage: test
image: registry.gitlab.utc.fr/rex-dri/rex-dri/frontend:v1.1.1 image: registry.gitlab.utc.fr/rex-dri/rex-dri/frontend:v1.2.0
before_script: before_script:
- cd frontend && cp -R /usr/src/deps/node_modules . - cd frontend && cp -R /usr/src/deps/node_modules .
script: script:
...@@ -97,7 +97,7 @@ flake8: ...@@ -97,7 +97,7 @@ flake8:
eslint: eslint:
<<: *only-default <<: *only-default
stage: lint stage: lint
image: registry.gitlab.utc.fr/rex-dri/rex-dri/frontend:v1.1.1 image: registry.gitlab.utc.fr/rex-dri/rex-dri/frontend:v1.2.0
before_script: before_script:
- cd frontend && cp -R /usr/src/deps/node_modules . - cd frontend && cp -R /usr/src/deps/node_modules .
script: script:
......
...@@ -68,7 +68,7 @@ services: ...@@ -68,7 +68,7 @@ services:
# Service to handle frontend live developpments and building # Service to handle frontend live developpments and building
frontend: frontend:
# Get the image from the registry # Get the image from the registry
image: registry.gitlab.utc.fr/rex-dri/rex-dri/frontend:v1.1.1 image: registry.gitlab.utc.fr/rex-dri/rex-dri/frontend:v1.2.0
# To use a locally built one, comment above, uncomment bellow. # To use a locally built one, comment above, uncomment bellow.
# build: ./frontend # build: ./frontend
# On startup, we retrieve the dependencies from the image and start the developpement server # On startup, we retrieve the dependencies from the image and start the developpement server
......
...@@ -49,12 +49,8 @@ ...@@ -49,12 +49,8 @@
"react-dom": "^16.9.0", "react-dom": "^16.9.0",
"react-mapbox-gl": "^4.6.0", "react-mapbox-gl": "^4.6.0",
"react-markdown": "^4.1.0", "react-markdown": "^4.1.0",
"react-redux": "^7.1.1",
"react-router-dom": "^5.0.1", "react-router-dom": "^5.0.1",
"recompose": "^0.30.0", "recompose": "^0.30.0",
"redux": "^4.0.4",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.3.0",
"regenerator-runtime": "^0.13.3", "regenerator-runtime": "^0.13.3",
"typeface-roboto": "0.0.75", "typeface-roboto": "0.0.75",
"uuid": "^3.3.3" "uuid": "^3.3.3"
......
...@@ -9,7 +9,7 @@ import ListItem from "@material-ui/core/ListItem"; ...@@ -9,7 +9,7 @@ import ListItem from "@material-ui/core/ListItem";
import ListItemIcon from "@material-ui/core/ListItemIcon"; import ListItemIcon from "@material-ui/core/ListItemIcon";
import ListItemText from "@material-ui/core/ListItemText"; import ListItemText from "@material-ui/core/ListItemText";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import RequestParams from "../../redux/api/RequestParams"; import RequestParams from "../../utils/api/RequestParams";
import { withErrorBoundary } from "../common/ErrorBoundary"; import { withErrorBoundary } from "../common/ErrorBoundary";
import toDateFr from "../../utils/dateToFr"; import toDateFr from "../../utils/dateToFr";
import withNetworkWrapper, { NetWrapParam } from "../../hoc/withNetworkWrapper"; import withNetworkWrapper, { NetWrapParam } from "../../hoc/withNetworkWrapper";
......
...@@ -2,7 +2,7 @@ import React from "react"; ...@@ -2,7 +2,7 @@ import React from "react";
import { compose } from "recompose"; import { compose } from "recompose";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import { withErrorBoundary } from "../common/ErrorBoundary"; import { withErrorBoundary } from "../common/ErrorBoundary";
import RequestParams from "../../redux/api/RequestParams"; import RequestParams from "../../utils/api/RequestParams";
import withNetworkWrapper, { NetWrapParam } from "../../hoc/withNetworkWrapper"; import withNetworkWrapper, { NetWrapParam } from "../../hoc/withNetworkWrapper";
import NotificationService from "../../services/NotificationService"; import NotificationService from "../../services/NotificationService";
......
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import useDeleteOne from "../../hooks/useDeleteOne";
import AlertService from "../../services/AlertService"; import AlertService from "../../services/AlertService";
import { useApiDelete } from "../../hooks/wrappers/api";
// TODO component is Useless... // TODO component is Useless...
function DeleteHandler({ performClose, route, id }) { function DeleteHandler({ performClose, route, id }) {
const performDelete = useDeleteOne(route); const performDelete = useApiDelete(route);
useEffect(() => { useEffect(() => {
AlertService.open({ AlertService.open({
info: false, info: false,
......
import React from "react"; import React from "react";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import { setDisplayName } from "recompose"; import { setDisplayName } from "recompose";
import compose from "recompose/compose";
import { connect } from "react-redux";
import { withRouter } from "react-router-dom";
import RequestParams from "../../redux/api/RequestParams";
import getActions from "../../redux/api/getActions";
import APP_ROUTES from "../../config/appRoutes";
import AlertService from "../../services/AlertService"; import AlertService from "../../services/AlertService";
import NavigationService from "../../services/NavigationService";
import { useApiCreate } from "../../hooks/wrappers/api";
function clear() { function clear() {
return { return {
...@@ -31,8 +27,7 @@ class ErrorBoundary extends React.Component { ...@@ -31,8 +27,7 @@ class ErrorBoundary extends React.Component {
const data = "stack" in error ? { componentStack: error.stack } : errorInfo; const data = "stack" in error ? { componentStack: error.stack } : errorInfo;
const params = RequestParams.Builder.withData(data).build(); this.props.logErrorOnServer(data);
this.props.logErrorOnServer(params);
} }
render() { render() {
...@@ -53,7 +48,7 @@ class ErrorBoundary extends React.Component { ...@@ -53,7 +48,7 @@ class ErrorBoundary extends React.Component {
handleResponse: agreed => { handleResponse: agreed => {
this.setState(clear()); this.setState(clear());
// May need to click twice, but there seem to be no other ways // May need to click twice, but there seem to be no other ways
if (!agreed) this.props.history.push(APP_ROUTES.base); if (!agreed) NavigationService.goHome();
} }
}); });
...@@ -67,23 +62,9 @@ class ErrorBoundary extends React.Component { ...@@ -67,23 +62,9 @@ class ErrorBoundary extends React.Component {
ErrorBoundary.propTypes = { ErrorBoundary.propTypes = {
children: PropTypes.node.isRequired, children: PropTypes.node.isRequired,
logErrorOnServer: PropTypes.func.isRequired, logErrorOnServer: PropTypes.func.isRequired
history: PropTypes.object.isRequired
}; };
const mapDispatchToProps = dispatch => ({
logErrorOnServer: params =>
dispatch(getActions("frontendErrors").create(params))
});
const ConnectedErrorBoundary = compose(
connect(
() => ({}),
mapDispatchToProps
),
withRouter
)(ErrorBoundary);
/** /**
* HOC (higher order component) wrapper to provide an error boundary to the sub components. * HOC (higher order component) wrapper to provide an error boundary to the sub components.
* *
...@@ -95,10 +76,14 @@ export function withErrorBoundary() { ...@@ -95,10 +76,14 @@ export function withErrorBoundary() {
setDisplayName("error-boundary")( setDisplayName("error-boundary")(
// We need to forward the ref otherwise the styles are not correctly applied. // We need to forward the ref otherwise the styles are not correctly applied.
// eslint-disable-next-line react/display-name // eslint-disable-next-line react/display-name
React.forwardRef((props, ref) => ( React.forwardRef((props, ref) => {
<ConnectedErrorBoundary> const logErrorOnServer = useApiCreate("frontendErrors");
<Component {...props} ref={ref} />
</ConnectedErrorBoundary> return (
)) <ErrorBoundary logErrorOnServer={logErrorOnServer}>
<Component {...props} ref={ref} />
</ErrorBoundary>
);
})
); );
} }
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
import React from "react"; import React from "react";
import parseMoney from "../../../utils/parseMoney"; import parseMoney from "../../../utils/parseMoney";
import convertAmountToEur from "../../../utils/convertAmountToEur";
import BaseMarkdown from "./BaseMarkdown"; import BaseMarkdown from "./BaseMarkdown";
import CurrencyService from "../../../services/data/CurrencyService";
function compileSource(source) { function compileSource(source) {
let compiled = ""; let compiled = "";
...@@ -18,7 +18,7 @@ function compileSource(source) { ...@@ -18,7 +18,7 @@ function compileSource(source) {
if (currency === "EUR") { if (currency === "EUR") {
compiled += `${amount}€`; compiled += `${amount}€`;
} else { } else {
const converted = convertAmountToEur(amount, currency); const converted = CurrencyService.convertAmountToEur(amount, currency);
compiled += `${amount} ${currency} `; compiled += `${amount} ${currency} `;
if (converted === null) { if (converted === null) {
compiled += `*(\`${currency}\` n'a pas été reconnue comme le code d'une monnaie ; nous n'avons pas pu procéder à une conversion automatique)*`; compiled += `*(\`${currency}\` n'a pas été reconnue comme le code d'une monnaie ; nous n'avons pas pu procéder à une conversion automatique)*`;
......
...@@ -3,7 +3,7 @@ import PropTypes from "prop-types"; ...@@ -3,7 +3,7 @@ import PropTypes from "prop-types";
import MuiThemeProvider from "@material-ui/core/styles/MuiThemeProvider"; import MuiThemeProvider from "@material-ui/core/styles/MuiThemeProvider";
import { getTheme, updatePhoneStatusBarColor } from "./utils"; import { getTheme, updatePhoneStatusBarColor } from "./utils";
import RequestParams from "../../../redux/api/RequestParams"; import RequestParams from "../../../utils/api/RequestParams";
import { CURRENT_USER_ID } from "../../../config/user"; import { CURRENT_USER_ID } from "../../../config/user";
import withNetworkWrapper, { import withNetworkWrapper, {
NetWrapParam NetWrapParam
......
...@@ -232,7 +232,7 @@ class Editor extends React.Component { ...@@ -232,7 +232,7 @@ class Editor extends React.Component {
Editor.propTypes = { Editor.propTypes = {
subscribeToModuleWrapper: PropTypes.func, subscribeToModuleWrapper: PropTypes.func,
rawModelData: PropTypes.object.isRequired, rawModelData: PropTypes.object.isRequired,
// props added in subclasses but are absolutely required to handle redux // props added in subclasses but are absolutely required to handle state managment
savingHasError: PropTypes.object.isRequired, savingHasError: PropTypes.object.isRequired,
clearSaveError: PropTypes.func.isRequired, clearSaveError: PropTypes.func.isRequired,
lastUpdateTimeInModel: PropTypes.string, lastUpdateTimeInModel: PropTypes.string,
......
...@@ -10,16 +10,16 @@ import KeyboardArrowRight from "@material-ui/icons/KeyboardArrowRight"; ...@@ -10,16 +10,16 @@ import KeyboardArrowRight from "@material-ui/icons/KeyboardArrowRight";
import { makeStyles } from "@material-ui/styles"; import { makeStyles } from "@material-ui/styles";
import Typography from "@material-ui/core/Typography"; import Typography from "@material-ui/core/Typography";
import Divider from "@material-ui/core/Divider"; import Divider from "@material-ui/core/Divider";
import RequestParams from "../../redux/api/RequestParams"; import RequestParams from "../../utils/api/RequestParams";
import FullScreenDialogService from "../../services/FullScreenDialogService"; import FullScreenDialogService from "../../services/FullScreenDialogService";
import useStepper from "../../hooks/useStepper"; import useStepper from "../../hooks/useStepper";
import useInvalidateAll from "../../hooks/useInvalidateAll";
import FullScreenDialogFrame from "../common/FullScreenDialogFrame"; import FullScreenDialogFrame from "../common/FullScreenDialogFrame";
import dateTimeStrToStr from "../../utils/dateTimeStrToStr"; import dateTimeStrToStr from "../../utils/dateTimeStrToStr";
import withNetworkWrapper, { import withNetworkWrapper, {
getApiPropTypes, getApiPropTypes,
NetWrapParam NetWrapParam
} from "../../hoc/withNetworkWrapper"; } from "../../hoc/withNetworkWrapper";
import { useApiInvalidateAll } from "../../hooks/wrappers/api";
const useStyles = makeStyles(theme => ({ const useStyles = makeStyles(theme => ({
editButton: { editButton: {
...@@ -88,7 +88,7 @@ function History({ ...@@ -88,7 +88,7 @@ function History({
editFromVersion, editFromVersion,
rawModelDataEx rawModelDataEx
}) { }) {
const resetVersions = useInvalidateAll("versions"); const resetVersions = useApiInvalidateAll("versions");
useEffect(() => { useEffect(() => {
return resetVersions(); // only on unmount return resetVersions(); // only on unmount
}, []); }, []);
......
...@@ -6,14 +6,14 @@ import Button from "@material-ui/core/Button"; ...@@ -6,14 +6,14 @@ import Button from "@material-ui/core/Button";
import Typography from "@material-ui/core/Typography"; import Typography from "@material-ui/core/Typography";
import Divider from "@material-ui/core/Divider"; import Divider from "@material-ui/core/Divider";
import { makeStyles } from "@material-ui/styles"; import { makeStyles } from "@material-ui/styles";
import RequestParams from "../../redux/api/RequestParams"; import RequestParams from "../../utils/api/RequestParams";
import FullScreenDialogService from "../../services/FullScreenDialogService"; import FullScreenDialogService from "../../services/FullScreenDialogService";
import FullScreenDialogFrame from "../common/FullScreenDialogFrame"; import FullScreenDialogFrame from "../common/FullScreenDialogFrame";
import withNetworkWrapper, { import withNetworkWrapper, {
getApiPropTypes, getApiPropTypes,
NetWrapParam NetWrapParam
} from "../../hoc/withNetworkWrapper"; } from "../../hoc/withNetworkWrapper";
import useInvalidateAll from "../../hooks/useInvalidateAll"; import { useApiInvalidateAll } from "../../hooks/wrappers/api";
const useStyles = makeStyles(theme => ({ const useStyles = makeStyles(theme => ({
editButton: { editButton: {
...@@ -77,7 +77,7 @@ function PendingModeration({ ...@@ -77,7 +77,7 @@ function PendingModeration({
renderCore, renderCore,
userCanModerate userCanModerate
}) { }) {
const resetData = useInvalidateAll("pendingModerationObj"); const resetData = useApiInvalidateAll("pendingModerationObj");
useEffect(() => { useEffect(() => {
return resetData(); return resetData();
......
...@@ -4,12 +4,12 @@ import TextField from "./TextField"; ...@@ -4,12 +4,12 @@ import TextField from "./TextField";
import MultiSelectField from "./MultiSelectField"; import MultiSelectField from "./MultiSelectField";
import UniversityService from "../../../services/data/UniversityService"; import UniversityService from "../../../services/data/UniversityService";
import MarkdownField from "./MarkdownField"; import MarkdownField from "./MarkdownField";
import { getLatestReadDataFromStore } from "../../../redux/api/utils";
import getObjModerationLevel from "../../../utils/getObjModerationLevels"; import getObjModerationLevel from "../../../utils/getObjModerationLevels";
import SelectField from "./SelectField"; import SelectField from "./SelectField";
import CountryService from "../../../services/data/CountryService"; import CountryService from "../../../services/data/CountryService";
import CurrencyService from "../../../services/data/CurrencyService"; import CurrencyService from "../../../services/data/CurrencyService";
import LanguageService from "../../../services/data/LanguageService"; import LanguageService from "../../../services/data/LanguageService";
import { getLatestApiReadData } from "../../../hooks/usePersistentState";
export function TitleField() { export function TitleField() {
return <TextField required fieldMapping="title" label="Titre" />; return <TextField required fieldMapping="title" label="Titre" />;
...@@ -71,7 +71,7 @@ export function LanguageField() { ...@@ -71,7 +71,7 @@ export function LanguageField() {
export function ObjModerationLevelField() { export function ObjModerationLevelField() {
// hack to access directly the store and get the value we need. // hack to access directly the store and get the value we need.
const userData = getLatestReadDataFromStore("userDataOne"); const userData = getLatestApiReadData("userData-one");
const possibleObjModeration = getObjModerationLevel( const possibleObjModeration = getObjModerationLevel(
userData.owner_level, userData.owner_level,
true true
......
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import { useDispatch } from "react-redux";
import ExpansionPanel from "@material-ui/core/ExpansionPanel"; import ExpansionPanel from "@material-ui/core/ExpansionPanel";
import ExpansionPanelSummary from "@material-ui/core/ExpansionPanelSummary"; import ExpansionPanelSummary from "@material-ui/core/ExpansionPanelSummary";
import ExpansionPanelDetails from "@material-ui/core/ExpansionPanelDetails"; import ExpansionPanelDetails from "@material-ui/core/ExpansionPanelDetails";
...@@ -8,11 +6,11 @@ import ExpandMoreIcon from "@material-ui/icons/ExpandMore"; ...@@ -8,11 +6,11 @@ import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
import Typography from "@material-ui/core/Typography"; import Typography from "@material-ui/core/Typography";
import uuid from "uuid/v4"; import uuid from "uuid/v4";
import { makeStyles } from "@material-ui/styles"; import { makeStyles } from "@material-ui/styles";
import { saveSelectedUniversities } from "../../redux/actions/filter";
import DownshiftMultiple from "../common/DownshiftMultiple"; import DownshiftMultiple from "../common/DownshiftMultiple";
import usePersistentState from "../../hooks/usePersistentState"; import usePersistentState from "../../hooks/usePersistentState";
import FilterService from "../../services/FilterService"; import FilterService from "../../services/FilterService";
import FilterStatus from "./FilterStatus"; import FilterStatus from "./FilterStatus";
import { useSetSelectedUniversities } from "../../hooks/wrappers/useSelectedUniversities";
const useStyles = makeStyles(theme => ({ const useStyles = makeStyles(theme => ({
root: { root: {
...@@ -43,7 +41,7 @@ const DOWNSHIFT_MAJORS_ID = uuid(); ...@@ -43,7 +41,7 @@ const DOWNSHIFT_MAJORS_ID = uuid();
*/ */
function Filter() { function Filter() {
const classes = useStyles(); const classes = useStyles();
const dispatch = useDispatch(); const saveSelectedUniversities = useSetSelectedUniversities();
const [isOpened, setIsOpened] = usePersistentState("filter-open", false); const [isOpened, setIsOpened] = usePersistentState("filter-open", false);
const [countries, setCountries] = usePersistentState("filter-countries", []); const [countries, setCountries] = usePersistentState("filter-countries", []);
...@@ -66,10 +64,7 @@ function Filter() { ...@@ -66,10 +64,7 @@ function Filter() {
const hasSelection = [countries, semesters, majorMinors].some( const hasSelection = [countries, semesters, majorMinors].some(
arr => arr.length !== 0 arr => arr.length !== 0
); );
saveSelectedUniversities(hasSelection ? selectedUniversities : null);
dispatch(
saveSelectedUniversities(hasSelection ? selectedUniversities : null)
);
}, [countries, semesters, majorMinors]); }, [countries, semesters, majorMinors]);
const { const {
......
...@@ -2,7 +2,7 @@ import InfoIcon from "@material-ui/icons/InfoOutlined"; ...@@ -2,7 +2,7 @@ import InfoIcon from "@material-ui/icons/InfoOutlined";
import Typography from "@material-ui/core/Typography"; import Typography from "@material-ui/core/Typography";
import React from "react"; import React from "react";
import { makeStyles } from "@material-ui/styles"; import { makeStyles } from "@material-ui/styles";
import { useSelector } from "react-redux"; import { useSelectedUniversities } from "../../hooks/wrappers/useSelectedUniversities";
const useStyles = makeStyles(theme => ({ const useStyles = makeStyles(theme => ({
infoFilter: { infoFilter: {
...@@ -27,9 +27,7 @@ function getMessage(selectedUniversities) { ...@@ -27,9 +27,7 @@ function getMessage(selectedUniversities) {
function FilterStatus() { function FilterStatus() {
const classes = useStyles(); const classes = useStyles();
const selectedUniversities = useSelector( const [selectedUniversities] = useSelectedUniversities();
state => state.app.selectedUniversities
);
const hasSelection = selectedUniversities !== null; const hasSelection = selectedUniversities !== null;
return ( return (
......
...@@ -18,7 +18,7 @@ const Map = ReactMapboxGl({ ...@@ -18,7 +18,7 @@ const Map = ReactMapboxGl({
* If an id is provided, the state of the map will be automatically saved and regenerated. * If an id is provided, the state of the map will be automatically saved and regenerated.
*/ */
class BaseMap extends Component { class BaseMap extends Component {
// Static variable to hold the map center in a generic way without redux // Static variable to hold the map center in a generic way without globalState
static allMaps = {}; static allMaps = {};
// campusesMarkers = []; // campusesMarkers = [];
......
import React, { useMemo } from "react"; import React, { useMemo } from "react";
import { useSelector } from "react-redux";
import uuid from "uuid/v4"; import uuid from "uuid/v4";
import BaseMap from "./BaseMap"; import BaseMap from "./BaseMap";
import "./map.scss"; import "./map.scss";
import UniversityService from "../../services/data/UniversityService"; import UniversityService from "../../services/data/UniversityService";
import { useSelectedUniversities } from "../../hooks/wrappers/useSelectedUniversities";
const MAIN_MAP_ID = uuid(); const MAIN_MAP_ID = uuid();
...@@ -13,7 +13,7 @@ const MAIN_MAP_ID = uuid(); ...@@ -13,7 +13,7 @@ const MAIN_MAP_ID = uuid();
* Main map of the application (map tab) * Main map of the application (map tab)
*/ */
function MainMap() { function MainMap() {
const listUnivSel = useSelector(state => state.app.selectedUniversities); const [listUnivSel] = useSelectedUniversities();
const mainCampusesSelection = useMemo(() => { const mainCampusesSelection = useMemo(() => {
const out = []; const out = [];
...@@ -43,7 +43,7 @@ function MainMap() { ...@@ -43,7 +43,7 @@ function MainMap() {
}); });
return out; return out;
}); }, [listUnivSel]);
// create all the markers // create all the markers
return <BaseMap id={MAIN_MAP_ID} campuses={mainCampusesSelection} />; return <BaseMap id={MAIN_MAP_ID} campuses={mainCampusesSelection} />;
......
...@@ -6,7 +6,7 @@ import { makeStyles } from "@material-ui/styles"; ...@@ -6,7 +6,7 @@ import { makeStyles } from "@material-ui/styles";
import { withErrorBoundary } from "../common/ErrorBoundary"; import { withErrorBoundary } from "../common/ErrorBoundary";
import { withPaddedPaper } from "./shared"; import { withPaddedPaper } from "./shared";
import EditModuleGeneralPreviousExchangeFeedback from "../university/modules/previousExchangeFeedback/edit/EditModuleGeneralFeedback"; import EditModuleGeneralPreviousExchangeFeedback from "../university/modules/previousExchangeFeedback/edit/EditModuleGeneralFeedback";
import RequestParams from "../../redux/api/RequestParams"; import RequestParams from "../../utils/api/RequestParams";
import EditModuleCoursesFeedback from "../university/modules/previousExchangeFeedback/edit/EditModuleCoursesFeedback"; import EditModuleCoursesFeedback from "../university/modules/previousExchangeFeedback/edit/EditModuleCoursesFeedback";
import CustomLink from "../common/CustomLink"; import CustomLink from "../common/CustomLink";
import APP_ROUTES from "../../config/appRoutes"; import APP_ROUTES from "../../config/appRoutes";
......
...@@ -4,9 +4,8 @@ import Paper from "@material-ui/core/Paper"; ...@@ -4,9 +4,8 @@ import Paper from "@material-ui/core/Paper";
import { compose } from "recompose"; import { compose } from "recompose";
import { Typography } from "@material-ui/core"; import { Typography } from "@material-ui/core";
import { makeStyles } from "@material-ui/styles"; import { makeStyles } from "@material-ui/styles";
import RequestParams from "../../redux/api/RequestParams";