diff --git a/src/frontend/App.js b/src/frontend/App.js index 272194d..a07e42b 100644 --- a/src/frontend/App.js +++ b/src/frontend/App.js @@ -6,7 +6,6 @@ import Cookies from 'js-cookie'; import * as userSelectors from './state/user/selectors'; import TopBar from './components/TopBar'; import LandingPage from './pages/landing/LandingPage'; -import FeaturesPage from './pages/features/FeaturesPage'; import SignInPage from './pages/sign-in/SignInPage'; import NotFoundPage from './pages/NotFound'; import PostingsRouter from './pages/postings/Postings.router'; @@ -15,6 +14,7 @@ import GeeseRouter from './pages/geese/Geese.router'; import TeamDescriptionsRouter from './pages/team-descriptions/TeamDescriptions.router'; import { addAuthTokenToRequests } from './api/server'; import BlogsRouter from './pages/blogs/Blogs.Router'; +import FeaturesRouter from './pages/features/Feature.router'; const App = () => { let token = useSelector(userSelectors.token) || Cookies.get('tokenId'); @@ -39,11 +39,11 @@ const App = () => { - +
{!token && } - +
diff --git a/src/frontend/api/geese-features.js b/src/frontend/api/geese-features.js new file mode 100644 index 0000000..6ceddd7 --- /dev/null +++ b/src/frontend/api/geese-features.js @@ -0,0 +1,17 @@ +const getGeeseFeatures = (server) => () => server.get('/api/geese-features'); +const getGeeseFeatureById = (server) => (id) => + server.get(`/api/geese-features/${id}`); +const addGeeseFeature = (server) => (featureInfo) => + server.post(`/api/geese-features`, featureInfo); +const updateGeeseFeature = (server) => (id, updatedFeatureInfo) => + server.patch(`/api/geese-features/${id}`, updatedFeatureInfo); +const deleteGeeseFeature = (server) => (id) => + server.delete(`/api/geese-features/${id}`); + +export default (server) => ({ + getGeeseFeatures: getGeeseFeatures(server), + getGeeseFeatureById: getGeeseFeatureById(server), + addGeeseFeature: addGeeseFeature(server), + updateGeeseFeature: updateGeeseFeature(server), + deleteGeeseFeature: deleteGeeseFeature(server), +}); diff --git a/src/frontend/api/index.js b/src/frontend/api/index.js index 85e794e..d30a881 100644 --- a/src/frontend/api/index.js +++ b/src/frontend/api/index.js @@ -7,6 +7,7 @@ import openingsDescription from './openings-description'; import sponsors from './sponsors'; import geeseInfo from './geese-info'; import blogs from './blogs'; +import geeseFeatures from './geese-features' export default { google: google(server), @@ -16,5 +17,6 @@ export default { formUpload: formUpload(server), openingsDescription: openingsDescription(server), geeseInfo: geeseInfo(server), - blogs: blogs(server) + blogs: blogs(server), + geeseFeatures: geeseFeatures(server) }; diff --git a/src/frontend/pages/features/EditFeature.js b/src/frontend/pages/features/EditFeature.js new file mode 100644 index 0000000..21697ee --- /dev/null +++ b/src/frontend/pages/features/EditFeature.js @@ -0,0 +1,151 @@ +import React, { useMemo } from 'react'; +import ImagePreview from '../../components/ImagePreview/index'; +import FormContainer from '../../components/FormContainer/index'; +import Button from '../../components/Button/index'; +import TextInput from '../../components/TextInput/index'; +import useFeaturesForm from './hooks/geese-features-form'; +import styled from 'styled-components'; + +const EditFeaturePage = styled.div` + padding: 64px 88px 65px 58px; +`; + +const TopRow = styled.div` + display: flex; +`; + +const LastUpdated = styled.div` + font-family: IBM Plex Sans; + font-size: 18px; + font-weight: 500; + text-align: right; + flex: auto; +`; + +const EditFeatureBody = styled.div` + padding-left: 30px; +`; + +const FeatureInfo = styled.div` + padding-left: 10px; +`; + +const FeatureImages = styled.div` + margin-bottom: 60px; +`; + +const ImagesText = styled.div` + font-family: IBM Plex Sans; + font-size: 18px; + color: #232535; + margin: 0; +`; + +const ImageCard = styled.div` + margin-right: 18px; +`; + +const ImageCards = styled.div` + padding-top: 20px; + display: flex; +`; + +const FeatureButtons = styled.div` + padding-left: 10px; +`; + +const EditFeature = ({ add }) => { + const { + featureName, + setFeatureName, + picture, + setPicture, + pictureUrl, + setPictureUrl, + description, + setDescription, + imageUpload, + imageDelete, + saveForm, + deleteForm, + showModal, + openModal, + closeModal, + closeForm + } = useFeaturesForm(); + + + const displayImages = useMemo(() => { + if (pictureUrl){ + return [ + + { + imageDelete(); + }} + /> + + ]}; + + }, [picture, pictureUrl]); + + return ( + + + + {/* {`Last updated: ${getLastUpdated()}`} */} + + + + + + + + + + + + + + + + + + If this Feature is not selected as the "current Feature", only + the leftmost image will be displayed. + + + The images can be rearranged by dragging them into the desired + order. + + + {displayImages} + + + + + + + +