Giter Club home page Giter Club logo

organisation_app_frontend's Introduction

EventTrove

EventTrove is a one-stop location for all your event discovery, sharing and organisation needs! This interactive platform includes the option to view, add, edit and delete events and posts to share all kinds of events, big and small! A built in calendar allows visual organisation of your events to make sure you never miss an event!

The project has been split into two parts - the back-end constructed with Django REST Framework and the frontend supercharged with React.

More information on the back-end of the site can be found in the back-end README.

Link to the live site - EventTrove Live Site

Link to the live API - EventTrove Live API

Link to the back-end repository - EventTrove Back-End Repo

AmIResponsive screenshot

Project Goals

The primary goal of this project was to create a full stack application where users can view, add, edit and delete events. These events can be viewed as a list, individually and as a calendar view. Users can add posts about specific events to share and remind other users about the upcoming events, or add "plans" to upcoming events and "memories" to events which have already passed, allowing different users to collate their experiences together in one place.

Agile Development Process

GitHub Projects

GitHub Projects served as an Agile tool for this project. It isn't a specialized tool, but with the right tags and project creation/issue assignments, it can be made to work.

These goals were split into four major themes and used as "Epics" for the agile development of the application. The Epics were as follows:

  1. Account management
  2. Posts
  3. Events
  4. Calendar

epics completed

Each of the epics were then further split into "user stories", each of which representing one small, contained feature to be integrated into the site. Each user story contained an action statement in the format:

As a role I can capability so that received benefit

Each user story then had a list of acceptance criteria (what the user needs to be able to see/do to consider the story "completed") and a task list (what the developer needs to do in order to complete the story).

Each story was assigned to its respective Epic and classified into one of each of the four MoSCoW categories:

  1. Must do. High priority. Features that the application needs in order to be used. Should account for approx 60% stories
  2. Should do. Medium priority. Features that are not required for the feature to run, but significantly improve the application and/or user experience. Should account for approx 20% stories
  3. Could do. Low priority. Features that are not required for the application to run, but would make a nice addition if included. Should account for the remaining ~20% stories
  4. Won't do. This feature will not be added in this iteration of the application development.

In addition, "story points" were assigned to each of the user stories. These points denoted how difficult each user story is and/or how long it should take to complete, relative to the other stories. The points ranged from 1-8 on a logarithmic scale (i.e. the points available were 1, 2, 4 or 8, each being approximately double the difficulty and/or time requirement of the previous).

User story issues on Github were assigned labels to keep track of which MoSCoW prioritisation and number of story points each story has.
github lables

As this project has both a backend and frontend component, each user story had associated frontend and backend tasks. Each repository, therefore, has its own github issue referencing each user story with the same user story and acceptance criteria, but with different tasks. The issue number for each user story is the same for both repositories and the corresponding user story to make tracking and review easy. Both sets of user stories can be found on the associated project board

All user stories can be found in the User Story grid

In the grid, each user story has details of it's EPIC, the user story number, the title, user story, acceptance criteria and both the backend and frontend tasks (with link to backend and frontend issues).

User stories (and bugs) were tracked using a Kanban board. This board has 3 columns - Todo, in progress and done. All user stories start life in the "to do" column and get moved, a maximum of five at a time, to the "in progress" column. When tasks are completed, they are moved to the "done" column and a new task(s) may be moved to the "in progress" column to be worked on.

An example of the kanban board during development and on completion of the application are shown below:

Kanban board in progress:
kanban in progress Kanban board with all tasks completed:
kanban completed

UX

Wireframes

Prior to starting work on the project, wireframes were designed to plan the basic structure and layout of some of the pages on the site. This helped when designing components in React to see how the components fit together an what differences (if any) are present for different screen sizes.

Wireframes were made for three screen sizes - mobile, tablet and desktop - to help guide styling from a "mobile-first" perspective.

The wireframes for the project can be found in this toggle
  • Event list view Event Page
  • Event detail view Individual Event Page
  • Calendar page Calendar Page

Design choices

Colour Scheme

The colour scheme for the project was kept extremely minimal as the focus of the site is user uploaded images and having bold colours throughout the site may detract or even clash with user uploaded image colours.

Colours were selected from the assets throughout the site to colour buttons and icons but otherwise most things were left with the default react-bootstrap colour scheme. This also improved accessibility by keeping contrast between backgrounds and text high.

colour scheme

Typography

DM-Sans was used as the typeface throughout the project as it is a sans-serif font designed to be readable at small text sizes and is compatible with FullCalendar. Reguls sans-serif is used as a backup font incase the google fonts typeface cannot be loaded.

DM Sans

Logo/favicon

A basic logo featuring a blue gemstone was used as a "home" button on the navbar and for the favicon.

logo and favicon

Main features

Existing

This project was developed using React.

One of the main advantages of the React framework is the ability to create and use reusable components. This improves efficiency and readability of the code and allows global changes to be made with ease. This also reduces repetition in the code which is time consuming and liable to errors when a piece of code is updated and this must be correctly updated all areas where the original code was reused.

For this project, several reusable components were created and used throughout various pages. First I will detail the reusable components, then the pages in which some of these components were utilised.

Reusable Components

click to expand
  • Navbar

    The navbar is featured on every page and helps the user to effectively navigate through the site without having to enter routes into the url bar manually.

    The navbar renders different content depending on whether the user is logged in or not and features an image of the Northern Lights which can be seen when the dropdown menu is opened. From here, logged in users can add posts and events, navigate to the main posts and events pages, calendar, user's own profile and friends page. They can also nagivate the the filtered versions of posts and events (watched events, liked posts, friend's event and friends posts). They can also sign out of the site.

    Logged out users may only view the posts and events page, sign up and sign in.

    navbar component

  • Dropdown
    The <MoreDropdown /> component is present on all editable and deletable components, including <Post />, <Event />, <Comment />, <Memory /> and gives asset owners the option to edit and delete their assets. This component takes the handleEdit and handleShow (necessary for the confirm deletion modal) methods directly as props.

    The <ProfileEditDropdown /> component is present on the <Profile /> component and handles redirects to the change password, change username and edit profile pages.

    dropdown component

  • Asset
    The <Asset /> is a reusable component, useful for displaying a variety of, well... assets. This includes the image for the <NotFound /> page, the images for upload and no results, and the loading spinners used throughout the site.

    asset component

  • Avatar
    The <Avatar /> component contains the profile image of users and is used in many other components. This includes each user's <Profile />, the <Navbar /> component (as the dropdown menu toggle), part of the <Profile /> component for the <PopularProfiles /> sidebar, and at the top of each <Post /> and <Event /> asset.

    avatar component

  • Event mini

    The <EventMini /> component takes the key details from each event (the title, image and start date) and makes a small component which is used in the calendar event modals and upcoming events sidebar.

    event mini component

  • Event modal
    In the <Calendar /> component, both the dateClick and eventClick functionalities from FullCalendar are used to determine user clicks on a whole day or on a specific event. When either of these is clicked, relevant information is passed to the <EventModal /> component to render the relevant event(s) in the modal.

    If a specific event is clicked, the name of that event becomes the modal title and the specific event is displayed in the body through the <EventMini /> component. The footer of the modal contains a cancel or "view event" button to take the user to that specific event detail page (where it can be edited or deleted, if the user owns the event).

    If a whole day is clicked, "Events for <date clicked>" becomes the modal title and each of the events taking place that day are listed as <EventMini /> components. The footer of the modal contains a cancel or "add event" button to take the user to the "create new event" page so a user can create a new event. A future feature could automatically populate the new event form with the clicked date.

    calendar modals

  • Delete modal
    The delete confirm modal is used in each of the places where assets can be deleted. This includes the <Post />, <Event />, <Comment /> and <Memory /> components. Each time the modal component is used, props in the form of a custom confirmation message and the specific handleDelete method are passed to the modal. This makes the modal completely interchangable for all delete instances.

    delete modals

  • Selector switch
    The selector switch was designed as there were a few places where multiple versions of a page could be displayed so I wanted a reusable component which could handle each of these instances. The switch has a left and right hand side and props are passed to it to determine the text rendered on each side, which side contains a link and the route for the link. This makes the component reusable on the profile page (for switching between a user's posts and events), on the main events page to switch between events in the past and those in the future and on individual events to switch between plans and memories.

    selector switch

Signup and Signin

These pages relate to the following user stories:

  • As a visitor I can register for an account so that I can have a user profile with picture and have full access to the site, make, comment on and like posts and events
  • As a registered user I can log in to my account so that I can have full access to the site, make, comment on and like posts and events
click to expand
  • Signup

    The signup page was taken from the Code Institute Moments walkthrough project. The image was changed to a photo of lanterns but is otherwise unchanged from the walkthrough.

    signup page

    • Signin

    The signin page was also taken from the Code Institute Moments walkthrough project. The image was changed to a photo of confetti at an event but is otherwise unchanged from the walkthrough.

    signin page

404 page

click to expand

A '404 page not found' page replaces the default React 404 page. The <NotFound /> component contains the <Asset /> container with a custom "not found" image.

The 404 page will be rendered whenever a page not on the list of routes in <App /> is entered, for example https://organisation-app-frontend.herokuapp.com/nonexistantpage/

Custom routing has also been added for when the API returns a 400 or 404 error, for example when a resource does not exist. This means that if a non-existant resource id is entered (in an otherwise valid route), the 404 page will be returned. For example https://organisation-app-frontend.herokuapp.com/events/999.

The 404 page contains a button which links back to the homepage (post feed page).

page not found 404

Posts

These pages relate to the following user stories:

Posts:

  • As a user I can view specific posts from another user in their profile so that I can see that user's post activity
  • As a visitor I can view a list of posts so that I can view recent uploads and decide if I want to sign up
  • As a visitor I can view individual posts so that I can read the post in more detail and see the associated comments
  • As a user or visitor I can scroll through a list of posts so that I can browse the site more comfortably
  • As a user I can create posts so that I can share information about events with other users
  • As a user I can edit or delete my own posts so that I can fix incorrect information, add more information, or remove the post entirely
  • As a user I can see posts made specifically by my friends so that I can easily access the posts most relevant to me
  • As a user I can access a page containing posts I've liked so that I can easily find these posts again
  • As a user I can choose an event from my event list when I post so that I can make a post about that specific event

Comments:

  • As a user I can create comments on posts so that I can communicate with the poster and other users about the post content
  • As a user I can edit and delete my own comments so that I can amend or remove the comment I wrote

Likes:

  • As a user I can like other user's posts so that I can show that user I appreciated their content
  • As a user I can access a page containing posts I've liked so that I can easily find these posts again
click to expand

The posts page can be accessed through the base route of the application and is in a "feed" style with <Post /> components from all users loaded on top of one another, starting from the most recent. 10 posts are loaded on page load, with another 10 being loaded when the user scrolls to the bottom, infinitely until the end of the post list is reached. Each <Post /> component contains the poster's avatar, name and a link to their profile, the date of posting, the image (if present), title, post content and a link to the event (if added). Each post can be liked by all logged in users except the post owner. Any logged in user may comment on a post.

  • Posts page
    posts list page

  • Posts detail page
    posts detail page

  • Create post page create post page

    Posts can be liked and/or commented on by appropriately logged in users. Logged out users cannot like or comment on any posts, post owners can comment on but not like their own posts and logged in users who do not own the post may like/dislike and comment on any post they do not own.

    like icon
    comment icon

    The posts page also contains the <PopularProfiles/> component which displays the most followed profiles.

    popular profiles sidebar

Events

These pages relate to the following user stories:

Events:

  • As a user I can view specific events from another user in their profile so that I can see that user's events
  • As a user I can choose an event from my event list when I post so that I can make a post about that specific event
  • As a visitor I can view public events so that I can see what events are planned and see if I would like to create an account to add the event(s) to my calendar
  • As a visitor I can view individual events so that I can see more detail about the event and see any associated comments
  • As a user or visitor I can scroll through a list of events so that I can browse the site more comfortably
  • As a user I can create events so that I can share information about events with other users
  • As a user I can edit or delete my own events so that I can fix incorrect information, add more information, or remove the event entirely
  • As a user I can view my friend's events on a seperate page so that I can quickly browse events most relevant to me
  • As a user I can see my upcoming events on a sidebar so that I can quickly see which of my events are coming up soon

Watches:

  • As a user I can watch/unwatch other user's posts so that it is added to my watched events list
  • As a user I can view my watched events on a seperate page so that I can keep an eye on the event and easily find it again
click to expand
  • Events page
    events list page

  • Events detail page
    events detail page

  • Create event page
    create event page
    create event page detail

    Events can be watched and/or have a plan/memory added by appropriately logged in users. Logged out users cannot watch or make a plan/memory on any events or add an event to their calendar, event owners can leave a plan/memory on but not watch their own events or remove them from their calendar and logged in users who do not own the event may watch/unwatch and leave plans/memories on any event they do not own, plus add that event to their calendar.

    • watch icon
      watch icon
    • plan/memory icon
      plan/memory icon
    • add to calendar icon
      add to calendar icon
  • watch event
    Users can "watch" events if they do not own them. This adds them to their "watched events" page to make locating them again easier.
    watch event

  • add event to calendar
    Users can add and remove events they do not own to their calendar. This allows the event to be seen on the main Calendar page as well as the upcoming events sidepanel (if event is in the future)
    add to calendar

  • upcoming events
    Events in a user's calendar contain a boolean variable called "past" which indicates whether an event has already started or is upcoming. Upcoming events are displayed in a sidepanel on the "events" page and can be clicked to view more details of each individual event.
    upcoming events

Plans and Memories

These pages relate to the following user stories:

  • As a user I can add memories to past events so that I can store my comments and images to look at later

  • As a user I can edit or delete my own memories so that I can fix incorrect information, add more information, or remove the memory entirely

  • As a user I can add plans to future events so that I can plan my event more effectively and store useful information together

  • As a user I can edit or delete my own plans so that I can fix incorrect information, add more information, or remove the plan entirely

  • As a user I can switch between plans and memories so that I can see all information associated with an event

    click to expand Plans and Memories are variants of the same component, depending on whether they were created before or after the start date of their associated event. "Plans" are created when the asset is created before the start of the event, otherwise the asset is a "Memory".

    The <EventPage /> displays the detailed view of an event and also displays any plans that were created. The <EventPastPage /> also displays the detailed view of an event, but also displays the associated memories. The <SelectorSwtich /> component is reused here to switch between the two views.

    Placeholder text is rendered conditionally depending on whether the event's start date has passed ("The event is upcoming... add plans here!" if so, "This event has passed... add a memory here!" if not).

    plan or memory placeholder text

    Users may add a plan or memory with text content and an image (optional). The <MemoryCreateForm /> component is embedded inline and plans/memories are added to the top of the list without causing a full page refresh.

    plan or memory crud

    plan or memory crud

    The following shows the message displayed to the user when there are no plans or memories, depending on whether the event's start date is in the past or future and whether the user is logged in or not.
    no plan or memory message grid

Calendars

  • As a user I am automatically assigned a calendar so that I can easily view my events
  • As a user, the events I create are automatically added to my calendar so that I can immediately visualise them
  • As a user I can add and remove other user's events to/from my calendar so that I can visually see when they will take place on my personal calendar
  • As a user I can toggle the view of my calendar between year, month, week and day so that I can easily visualise my time and see when events are
  • As a user I can navigate between days, weeks, months and years using directional arrows so that I can easily visualise my events in my calendar
  • As a user I can click a day and see the events planned for that day so that I can quickly see which (if any) events are taking place on a day
  • As a user I have the option to add an event from my calendar so that I can easily create new events
  • As a user I can click an event in my calendar to see the event details so that I can easily visualise events in my calendar
  • As a user I have a button to see the specific event when I click in in my calendar so that I can view further details, edit and delete it
  • As a user I can syncronise my events with my google calendar so that I can keep one universal collection of events wherever I am

These pages relate to the following user stories:

click to expand - Calendar

calendar responsive

The calendar page makes heavy use of the FullCalendar component which generates the actual calendar grid. The project uses 3 plugins from FullCalendar to display different calendar views:

dayGridPlugin - provides the month and week views
timeGridPlugin - provides the day view (split into hours)
multiMonthPlugin - provides the year-at-a-glance view

initialView="dayGridMonth"
headerToolbar={{
  start: "today prevYear,prev,next,nextYear",
  center: "title",
  end: "multiMonthYear,dayGridMonth,timeGridWeek,timeGridDay",
}}

calendar views

The project also uses the interactionPlugin to allow targeting of the day or a specific event. This is used for the day and event modals which display detail of event(s) to the user. More detail about these modals can be found in the reusable component section above.

calendar modals

A custom pacman loading spinner makes this page a bit more fun as the API call can take a few seconds to complete
pacman loading spinner

Profiles

These pages relate to the following user stories:

  • As a user I can view other user's profiles so that I can see a specific user's posts and events

  • As a user I can have a profile created for me, add a profile picture and edit my profile so that I can have a custom profile picture and display information about myself

  • As a user I can add other users as friends so that I can preferentially see their posts and events

  • As a user I can view all the users I have added as a friend so that I can easily see them, access their profile or remove them

  • As a user I can see posts made specifically by my friends so that I can easily access the posts most relevant to me

  • As a user I can see popular profiles on the side panel on the posts page so that I can decide who to add as a friend

  • As a user I can view my friend's events on a seperate page so that I can quickly browse events most relevant to me

click to expand
  • Profile page profile page profile page

    The profile page is made up of several different components

    1. <Avatar />
    2. profile details supplied in<ProfilePage />
    3. <ProfileEditDropdown />
    4. <SelectorSwitch />
    5. <Post /> or <Event /> component, depending on which view is chosen
    6. <PopularProfiles /> profile page components

    If it is another user's profile, the edit dropdown menu is not visible, but the button to add/remove friend is visible. The <Asset /> component (the empty treasure chest here) is displayed if the user hasn't posted/added events yet.
    other user's profile page

The dropdown menu on a user's own profile allows the following actions:

Change username
change username

Change password
change password

Update profile details
Registered users can update their profile picture and profile details at any time with the profile edit form.
update profile details

Validation

Form validation was used throughout the application to ensure only valid data can be submitted to the API. Although there is thorough validation in the backend too, it is important to prevent users from entering invalid data on the frontend too, to ensure that no invalid data slips through the net. It is also important for user experience to notify the user when they have entered invalid data and give hints how to make their data valid.

Sign up

Users must enter a username and their password twice

sign up validation

Passwords must contain at least 8 characters and not be too common... sign up validation

... and of course, they must match!
sign up validation

Sign in

Login credentials must be entered in order to login sign in validation

And the username and password must match an entry in the database, or else entry is denied. sign in validation

Images

Custom image validation prevents images larger than 4MB being uploaded. This helps to save space in the database and improve loading times. profile image validation

Images must also not be too large. A limit of 4096 x 4096 pixels is the limit. profile image validation

Posts

The title field is madatory for post creation and so frontend validation is in place to prevent this field from being blank.

Post creation validation

Events

The title, location and start and end time fields are madatory for event creation and so frontend validation is in place to prevent these fields from being blank. Privacy and event type are also mandatory, but these have default values and therefore are never blank and so do not cause validation errors.

Event creation validation

There is also a custom validator to ensure that end time for an event is after the start time:
Event creation validation

Handling user interaction

A custom <AlertMsg /> component was created for displaying success/error messages to the user in a bar under the Navbar. This could handle custom success and error messages, however due to page redirects following creation or editing of resources, the alert only shows briefly before redirect. Additionally, for event creation/editing, the message was shown at the top of the screen and so is not visible unless the user quickly scrolls to the top of the page. As it is obvious that a resource has been created, as a user is immediately redirected to the newly created resource, it was decided that this feature would not be included in the project.

This could be improved in the future by designing a more sophisticated message handling system that lives, for example, in the <NavBar /> component and receives props from other resources. This could then display the message at the top of the redirected page, removing both problems.

Alternatively, Websockets could be used to convey bi-directional (i.e. between the React client and the DRF server) notifications to users about changes in real time.

Future Features

  • Link to google calendar (through API). This would allow users to synchronise their EvntTrove calendar to their actual Google calendar and be able to keep track of and add to events wherever they are.
  • Link to map service for location. This could Google maps or another map service provider. From here, a small interactive map could be rendered on each event to allow users to see exactly where the event will take place
  • A weather widget to display the weather forecast for an event at the time and specific location the event will take palce
  • Websockets for notifications. As mentioned above, the notification system could be improved by useing websockets.
  • Improve interface. The general user interface is a bit plain and very similar to the Moments walkthrough guide. The focus of this project was on the features and calendar integration, but it would be nice to improve the aesthetics in the future too!

Testing

All testing can be found in a seperate md file here

Deployment

Deployment to Heroku

This project uses Heroku, a platform as a service (PaaS) that enables developers to build, run, and operate applications entirely in the cloud.

Deployment steps are as follows, after account setup:

  • Select New in the top-right corner of your Heroku Dashboard, and select Create new app from the dropdown menu.
  • Your app name must be unique, and then choose a region closest to you (EU or USA), and finally, select Create App.

Head into the 'Deploy' tab select GitHub as the 'deployment method', find your project repository and click 'Connect'. Click 'Deploy branch' to trigger Heroku to start building the application. You can also enable automatic deployment if you wish. Once you see the message saying 'build succeeded' you can click 'Open App' to see your application in the browser.

Connecting to the API

In order to send and receive data to/from the API, the front and backend workspace need to be connected.

First, make sure that the API is successfully deployed to Heroku with the "CLIENT_ORIGIN" variable correctly set to the deployed URL of the frontend project so that it can recieve requests from the front-end (here https://organisation-app-frontend.herokuapp.com/). More details on API deployment may be found in the API respository for this project.

Then follow these steps to connect the front-end to the API:

  • In the frontend workspace, install the Axios library using the command 'npm install axios'.
  • Create a folder called 'API' and inside it create a file called 'axiosDefaults'.
  • Import axios at the top of the file
  • Define the baseURL which is the unique URL of the deployed API project (here https://organisation-app-api.herokuapp.com/).
  • Set the content-type header to multi-part/form-data as the API will need to deal with images as well as text in it's requests.
  • Import axiosDefaults into App.js (import "./api/axiosDefaults";) so that it may be accessed globally.

Local Deployment

This project can be cloned or forked in order to make a local copy on your own system.

Cloning

You can clone the repository by following these steps:

  1. Go to the GitHub repository
  2. Locate the Code button above the list of files and click it
  3. Select if you prefer to clone using HTTPS, SSH, or GitHub CLI and click the copy button to copy the URL to your clipboard
  4. Open Git Bash or Terminal
  5. Change the current working directory to the one where you want the cloned directory
  6. In your IDE Terminal, type the following command to clone my repository:
    • git clone https://github.com/dragon-fire-fly/organisation_app_frontend.git
  7. Press Enter to create your local clone.

Forking

By forking the GitHub Repository, we make a copy of the original repository on our GitHub account to view and/or make changes without affecting the original owner's repository. You can fork this repository by using the following steps:

  1. Log in to GitHub and locate the GitHub Repository
  2. At the top of the Repository (not top of page) just above the "Settings" Button on the menu, locate the "Fork" Button.
  3. Once clicked, you should now have a copy of the original repository in your own GitHub account!

Technologies and Tools

  • HTML used for the main site content.

  • CSS used for the main site design and layout.

  • JavaScript used to create the interactive elements of the website

  • React.js used as the frontend framework

  • React Bootstrap - A CSS framework that helps build solid, responsive, mobile-first sites

  • Balsamiq used to create the wireframes

  • Git used for version control. (git add, git commit, git push)

  • GitHub used for secure online code storage.

  • Heroku used for hosting the deployed front-end site.

  • Visual Studio Code used as a local IDE for development.

  • Lighthouse used to test site performance.

  • Google Chrome DevTools used to debug and test responsiveness.

  • Cloudinary used to host image files for the project.

  • HTML Validation used to validate HTML code

  • CSS Validation used to validate CSS code

  • ESLint used to lint JavaScript code

  • FullCalendar used to generate the calendar component for the calendar page

Credits

Images

Lantern photo https://www.pexels.com/photo/selective-focus-photography-of-lanterns-1313817/

Confetti photo https://unsplash.com/photos/ZODcBkEohk8

Navbar image https://images.pexels.com/photos/1933319/pexels-photo-1933319.jpeg

Images for resource not found, image upload placeholder and 404 page were created using dream.ai

jpg images were converted to webp using timy-img

Code references

https://react-bootstrap.github.io/components/modal/ - for creating modals https://www.npmjs.com/package/react-spinners - for custom spinner

https://stackoverflow.com/questions/72301355/how-to-populate-select-options-from-an-api-call-in-react-js-on-page-load - for event drop down in postcreateform

https://stackoverflow.com/questions/38049966/get-image-preview-before-uploading-in-react - for uploading images without using useRef() hook

Acknowledgements

  • I would like to thank my Code Institute mentor, Martina Terlevic for her support throughout the development of this project.
  • I would like to thank my previous Code Institute mentor, Tim Nelson. Although he isn't my mentor anymore, his previous support and guidance still helps me every day.
  • I would like to thank the Code Institute tutor team for their assistance with troubleshooting and debugging some project issues.
  • I would like to thank the Code Institute Slack community, particularly the class of May 2022, for the moral support; it kept me going during periods of self doubt and imposter syndrome.
  • I would like to thank my husband (Christian Schmidt), for believing in me, and allowing me to make this transition into software development.

organisation_app_frontend's People

Contributors

dragon-fire-fly avatar

Watchers

 avatar

organisation_app_frontend's Issues

USER STORY (Frontend): Specific page for liked posts

As a user I can access a page containing posts I've liked so that I can easily find these posts again

Backend issue: dragon-fire-fly/organisation_app_api#33

Acceptance Criteria

  • There is a link in the navbar so user's can quickly access liked posts
  • Clicking the link redirects the user to their liked posts page
  • Posts are filtered to that only that user's liked posts are shown

Tasks

  • Add button in navbar for liked posts
  • Redirect user to relevant filtered route for liked posts
  • Display only posts that user has liked

USER STORY (Frontend): View event from event modal

As a user I have a button to see the specific event when I click in in my calendar so that I can view further details, edit and delete it

Backend issue: dragon-fire-fly/organisation_app_api#28

Acceptance Criteria

  • Button in day event modal
  • Clicking button redirects user to specific event page

Tasks

  • Conditionally add "view event" button to modal if event modal view
  • When button pressed, redirects user to specific event page

USER STORY (Frontend): Friend's events page

As a user I can view my friend's events on a seperate page so that I can quickly browse events most relevant to me

Backend issue: dragon-fire-fly/organisation_app_api#34

Acceptance Criteria

  • There is a link in the navbar so user's can quickly access their friend's events
  • Clicking the link redirects the user to their "feed" where their friend's events are
  • Posts are filtered to that only that user's friend's events are shown

Tasks

  • Add button in navbar for friend's posts
  • Redirect user to relevant filtered route for friend's posts
  • Display only posts from user's friends

USER STORY (Frontend): Edit and delete memories

As a user I can edit or delete my own memories so that I can fix incorrect information, add more information, or remove the memory entirely

Backend issue: dragon-fire-fly/organisation_app_api#41

Acceptance Criteria

  • User who owns the memory can click “edit memory” button
  • An “edit memory” form is rendered on the event page
  • A specified memory is deleted when the user clicks the “delete memory” button
  • Only the memory owner has permission to edit or delete a memory

Tasks

  • Display edit and delete buttons next to a memory
  • Add “edit memory” form to event page
  • Add handle edit and handle delete functions
  • Add permissions so that only memory owners can see edit or delete buttons

USER STORY (Frontend): Edit and delete posts

As a user I can edit or delete my own posts so that I can fix incorrect information, add more information, or remove the post entirely

Backend issue: dragon-fire-fly/organisation_app_api#9

Acceptance Criteria

  • Users can click “edit post” button which links to “edit post” page
  • An “edit post” form is rendered on the “edit post” page
  • A specified post is deleted when the user clicks the “delete post” button
  • Only the post owner has permission to edit or delete a post

Tasks

  • Display edit and delete buttons next to a post
  • Add “edit post” form to “edit post” page
  • Add permissions so that only post owners can see edit or delete posts buttons

USER STORY (Frontend): View posts as a visitor

As a visitor I can view a list of posts so that I can view recent uploads and decide if I want to sign up

Backend issue: dragon-fire-fly/organisation_app_api#2

Acceptance Criteria

  • The list view API endpoints can be viewed by users who are not logged in
  • Appropriate permissions allow visitors to view but not create, edit or delete posts
  • Clicking an event takes the visitor to the individual post page

Tasks

  • Display all posts with the PostsPage component
  • Clicking on a specific post redirects to individual post page
  • visitors cannot add, edit or delete posts

USER STORY (Frontend): Create and edit user profiles

As a user I can have a profile created for me, add a profile picture and edit my profile so that I can have a custom profile picture and display information about myself

Backend issue: dragon-fire-fly/organisation_app_api#10

Acceptance Criteria

  • A user profile is automatically created when a user account is created
  • Users can view their own profile and have permission to edit it
  • The new user profile is added to the list of user accounts
  • Users can add a custom profile image

Tasks

  • Profile page created for each newly registered user
  • Edit form for profiles
  • Upload photo button and associated form

USER STORY (Frontend): Add event from day events modal

As a user I have the option to add an event from my calendar so that I can easily create new events

Backend issue: dragon-fire-fly/organisation_app_api#26

Acceptance Criteria

  • Button in day event modal
  • Clicking button redirects user to create event page
  • Create event form has the date clicked auto generated as the start date (could do)

Tasks

  • Conditionally add "add event" button to modal if day modal view
  • When button pressed, redirects user to "create event" page

Sends the relevant day to the create event form as start date (could do)

USER STORY (Frontend): Edit and delete comments

As a user I can edit and delete my own comments so that I can amend or remove the comment I wrote

Backend issue: dragon-fire-fly/organisation_app_api#17

Acceptance Criteria

  • User who oens the comment can click “edit comment” button
  • An “edit comment” form is rendered on the post page
  • A specified comment is deleted when the user clicks the “delete comment” button
  • Only the post owner has permission to edit or delete a comment

Tasks

  • Display edit and delete buttons next to a comment
  • Add “edit comment” form to post page
  • Add permissions so that only comment owners can see edit or delete buttons

USER STORY (Frontend): Create new event

As a user I can create events so that I can share information about events with other users

Backend issue: dragon-fire-fly/organisation_app_api#13

Acceptance Criteria

  • Users can create new events
  • A new event button brings the user to a new event form
  • Submitting the new event form creates a event entry in the db
  • Users can see the new event on the list and individual views

Tasks

  • Create “new event” button linking to “new event” page
  • Add “new event” form to “new event” page
  • Send new event data to db

USER STORY (Frontend): Events created by other users can be added to and removed from the calendar

As a user I can add and remove other user's events to/from my calendar so that I can visually see when they will take place on my personal calendar

Backend issue: dragon-fire-fly/organisation_app_api#22

Acceptance Criteria

  • When users click "add to calendar" on an event it adds that event to their calendar
  • When users click "remove from calendar" on an event it removes that event to their calendar
  • Only logged in users can add events to their calendar
  • If event is deleted, it is removed from the calendar
  • Event list is filtered to include these other events

Tasks

  • Add handleAddToCalendar to add the selected event to the calendar of the user who added it
  • Add handleRemoveFromCalendar to add the selected event to the calendar of the user who added it
  • update the state with setEvents so that the component reloads after adding/removing from calendar

USER STORY (Frontend): Watch and unwatch events

As a user I can watch/unwatch other user's posts so that it is added to my watched events list

Backend issue: dragon-fire-fly/organisation_app_api#18

Acceptance Criteria

  • Logged in users can click "watch" events which adds them to their watch list
  • Watched events gain an increase in watchers by 1
  • Clicking "watch" again will remove the watch and associated counts
  • Logged out users and post owners cannot watch an event

Tasks

  • Add watch icon to posts
  • Clicking watch increaes count on event by 1 and turns icon solid
  • Clicking again removes 1 from counts and makes icon outline only
  • Only logged in users who are not the event owner can like posts

BUG: Past events page doesn't render "no results found"

Describe the bug
The past events page is showing a blank page instead of "no results" result when there are no results present.
It works correctly when a search term that could not be found is entered.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'http://localhost:3000/events/past'
  2. See error

Expected behavior
The past events page should show "no events, amend your search" when no events are present.

Screenshots
with no results and no search term:
bug-not-showing-past-events
showing correctly when a search term is entered:
bug-shows-past-events-with-searchterm

Desktop (please complete the following information):

  • OS: Ubuntu
  • Browser Chrome

USER STORY (Frontend): Scroll through months/weeks/days in calendar

As a user I can navigate between days, weeks, months and years using directional arrows so that I can easily visualise my events in my calendar

Backend issue: dragon-fire-fly/organisation_app_api#24

Acceptance Criteria

  • Arrow buttons are shown at the top to nagivate between days/weeks/months (depending on view)
  • A double arrow is show for navigating through years
  • "Today" button automatically takes user back to the current day

Tasks

  • Configure FullCalendar navigation buttons
  • Add double arrow for years
  • Add today button and configure

USER STORY (Frontend): View individual posts as a visitor

As a visitor I can view individual posts so that I can read the post in more detail and see the associated comments

Backend issue: dragon-fire-fly/organisation_app_api#4

Acceptance Criteria

  • The detail view API endpoints can be viewed by users who are not logged in
  • Appropriate permissions allow visitors to view but not create, edit or delete posts
  • Individual posts have their associated comments visible to visitors

Tasks

  • Display individual posts with the PostPage and Post components
  • Visitors cannot edit or delete posts
  • Visitors can view comments but not add, edit or delete them

USER STORY (Frontend): Link to Google calendar

As a role I can capability so that received benefit

Backend issue: dragon-fire-fly/organisation_app_api#45

Acceptance Criteria

  • Users can log in using their Google credentials
  • A new calendar is created in Google calendars upon account creation
  • events can be synchronized across platforms

Tasks

  • Retrieve all events including those from Google calendar and display in the built in calendar

USER STORY (Frontend): Calendar event details modal

As a user I can click an event in my calendar to see the event details so that I can easily visualise events in my calendar

Backend issue: dragon-fire-fly/organisation_app_api#27

Acceptance Criteria

  • When user clicks on a day, a modal appears
  • Details of the specific event clicked are shown in the modal
  • The title of the modal includes the event title

Tasks

  • Add an event modal component
  • Send relevant props to modal
  • Render relevant event details in the event modal

USER STORY (Frontend): User profiles feature posts from that specific user

As a user I can view specific posts from another user in their profile so that I can see that user's post activity

Backend issue: dragon-fire-fly/organisation_app_api#30

Acceptance Criteria

  • When clicking their own or another user's profile, posts from that specific user are shown
  • Users can click individual posts to view them in a new window
  • 10 posts are shown initially, then more load as the user scrolls

Tasks

  • Retrieve posts from a specific user with an axios request
  • Map posts so they are rendered individually
  • Add infinite scroll component

USER STORY (Frontend): Upcoming events sidebar

As a user I can see my upcoming events on a sidebar so that I can quickly see which of my events are coming up soon

Backend issue: dragon-fire-fly/organisation_app_api#38

Acceptance Criteria

  • A sidebar is rendered on the events page to show upcoming events for the user
  • EventMini component renders the event picture, title and date for each event
  • Sidebar is responsive and becomes a top bar on mobile devices

Tasks

  • Retrieve events from API and order FUTURE events by date (soonest first)
  • Create EventMini component for displaying events on sidebar
  • Add responsiveness so upcoming events display as sidebar on larger devices and top bar on smaller devices

USER STORY (Frontend): View plans and memories on each event page

As a user I can switch between plans and memories so that I can see all information associated with an event

Backend issue: dragon-fire-fly/organisation_app_api#44

Acceptance Criteria

  • Users can switch between plans and memories on individual event pages
  • If the event is in the future, my memory becomes a "plan", if the event has already started, it stays a "memory"

Tasks

  • Add a selector switch component to switch between plans and memories
  • Render only plans on the plans page and memories on the memories page
  • Adjust the placeholder texts and no memory text depending on if the event has started

USER STORY (Frontend): Plans

As a user I can add plans to future events so that I can plan my event more effectively and store useful information together

Backend issue: dragon-fire-fly/organisation_app_api#42

Acceptance Criteria

  • Users can add "plans" to events
  • Plans may only be added to events which have not yet taken place
  • Plans are displayed on the event's detail page

Tasks

  • Add plans icon to events
  • Render plan form on event page if logged in
  • Only logged in users can add plans

USER STORY (Frontend): Create New Post

As a user I can create posts so that I can share information about events with other users

Backend issue: dragon-fire-fly/organisation_app_api#8

Acceptance Criteria

Users can create new posts
A new post button brings the user to a new post form
Users can see the new post on the list and individual views

Tasks

  • Create “new post” button linking to “new post” page
  • Add “new post” form to “new post” page
  • Send new post data to db

USER STORY (Frontend): Add and remove friends from friends list

As a user I can add other users as friends so that I can preferentially see their posts and events

Backend issue: dragon-fire-fly/organisation_app_api#35

Acceptance Criteria

  • Users can add other users as friends
  • Adding a friend increases the user's "friends" count and the other user's "added by" count by 1
  • Once a friend is added, users have the option to remove the friend, reducing the counts by 1

Tasks

  • Add "add/remove friend" button to profile component
  • Conditionally render the button depending on if already followed or not
  • Clicking the button triggers handleFollow or handleUnfollow functions

USER STORY (Frontend): Like and unlike posts

As a user I can like other user's posts so that I can show that user I appreciated their content

Backend issue: dragon-fire-fly/organisation_app_api#15

Acceptance Criteria

  • Logged in users can like posts
  • Liked posts gain an increase in likes by 1
  • Clicking "like" again will remove the like and associated counts
  • Logged out users and post owners cannot like a post

Tasks

  • Add like icon to posts
  • Clicking like increaes count on post by 1 and turns heart solid
  • Clicking again removes 1 from counts and makes heart outline only
  • Only logged in users who are not the post owner can like posts

USER STORY (Frontend): Calendar assignment on registration

As a user I am automatically assigned a calendar so that I can easily view my events

Backend issue: dragon-fire-fly/organisation_app_api#20

Acceptance Criteria

  • Calendar automatically generated and linked to user
  • Calendar button in navbar takes user to calendar page
  • Calendar page renders user's calendar

Tasks

  • User's calendar retrieved from database
  • Create calendar component
  • Add route to display calendar
  • Add calendar icon in navbar

USER STORY (Frontend): Friends page

As a user I can view all the users I have added as a friend so that I can easily see them, access their profile or remove them

Backend issue: dragon-fire-fly/organisation_app_api#36

Acceptance Criteria

  • "Friends" link is available on the navbar
  • Clicking the link takes the user to the "friends" page
  • The profiles of any added "friends" are displayed on the page

Tasks

  • Add route in App.js to friends page and create Friends component
  • Display profile component for each friend with the remove friend button
  • Add refresh function so that clicking remove friend button refreshes friends page

USER STORY (Frontend): Calendar day details modal

As a user I can click a day and see the events planned for that day so that I can quickly see which (if any) events are taking place on a day

Backend issue: dragon-fire-fly/organisation_app_api#25

Acceptance Criteria

  • When user clicks on a day, a modal appears
  • Details of events taking place on (or through) that specific day are shown in the modal
  • The title of the modal includes the date

Tasks

  • Add an event modal component
  • Send relevant props to modal
  • Render relevant event details in the event modal

USER STORY (Frontend): Events automatically added to their calendar

As a user, the events I create are automatically added to my calendar so that I can immediately visualise them

Backend issue: dragon-fire-fly/organisation_app_api#21

Acceptance Criteria

  • Events added automatically to event owner's calendar when created
  • Events are filtered so that only owner's events are automatically added
  • If event is deleted, it is removed from the calendar

Tasks

  • Owner's events are automatically rendered in the calendar upon creation
  • Filter is applied so that only owner's posts are automatically added
  • Deleted events are no longer rendered in the calendar

USER STORY (Frontend): View user profiles

As a user I can view other user's profiles so that I can see a specific user's posts and events

Backend issue: dragon-fire-fly/organisation_app_api#12

Acceptance Criteria

  • Users can see other user's individual profile pages
  • Profile pages show specific user's posts and events
  • Profile pages show counts for comments, followers and events

Tasks

  • Clicking an individual user redirects to the individual profile page
  • Profile component renders all relevant profile content
  • Post, event and follower counts are displayed with icons

BUG: Upcoming events not showing on mobile devices

Describe the bug
The upcoming events panel is showing on larger device screens, but not on smaller screen sizes

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'http://localhost:3000/events' on a mobile device screen size
  2. See error

Expected behavior
The upcoming events should show on a smaller, horizontal bar at the top of the screen

Screenshots
bug_upcoming_events_not_on_mobile

Desktop (please complete the following information):

  • OS: Ubuntu
  • Browser: Chrome

Additional context
Add any other context about the problem here.

USER STORY (Frontend): Popular profiles sidebar

As a user I can see popular profiles on the side panel on the posts page so that I can decide who to add as a friend

Backend issue: dragon-fire-fly/organisation_app_api#37

Acceptance Criteria

  • A sidebar is rendered on the posts page to show the profiles with the highest follower counts
  • Profile component renders the profile picture, username and add/remove friend button
  • Sidebar is responsive and becomes a top bar on mobile devices

Tasks

  • Retrieve profiles from API and order by follower count (highest first)
  • Create Profile and PopularProfiles components for displaying profiles on sidebar
  • Add responsiveness so popular profiles display as sidebar on larger devices and top bar on smaller devices

USER STORY (Frontend): Specific page for posts by friends

As a user I can see posts made specifically by my friends so that I can easily access the posts most relevant to me

Backend issue: dragon-fire-fly/organisation_app_api#32

Acceptance Criteria

  • There is a link in the navbar so user's can quickly access their friend's posts
  • Clicking the link redirects the user to their "feed" where their friend's posts are
  • Posts are filtered to that only that user's friend's posts are shown

Tasks

  • Add button in navbar for friend's posts
  • Redirect user to relevant filtered route for friend's posts
  • Display only posts from user's friends

USER STORY (Frontend): Calendar can be viewed as year, month, week and day

As a user I can toggle the view of my calendar between year, month, week and day so that I can easily visualise my time and see when events are

Backend issue: dragon-fire-fly/organisation_app_api#23

Acceptance Criteria

  • Buttons allow navigation between different calendar views
  • Year, month, week and day views are available
  • Relevant events are visible in all different views

Tasks

  • Add relevant plugins for FullCalendar
  • Add header toolbar buttons for different views
  • Add initial month view

BUG: 404 page not rendering when an unknown resource is called from a valid path

Describe the bug
The 404 page is working correctly for unknown resources (e.g. /dfgfgh)
However, if there is a theoretically valid path (e.g. /posts/999), but with a missing resource, the 404 page is not rendered, but rather an infinite spinner displays.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '/posts/999'
  2. See error

Expected behavior
The 404 page should be rendered also when a valid path for an invalid resource is given.

Screenshots
image

Desktop (please complete the following information):

  • OS: Ubuntu
  • Browser: Chrome

Additional context
The error that is console logged is a 400 error, even though a 404 is also recorded (see screenshot). Perhaps this is why it is not automatically redirecting to the 404 page?

USER STORY (Frontend): Account registration

As a visitor I can register for an account so that I can have a user profile with picture and have full access to the site, make, comment on and like posts and events

Backend issue: dragon-fire-fly/organisation_app_api#1

Acceptance Criteria

  • New users can create user accounts through the sign up form
  • User accounts automatically have user profiles associated with them
  • Newly registered users are redirected to the sign in form

Tasks

  • Create user sign up form
  • Link backend to front so user registration adds new user to db
  • Add form validation to ensure data received from sign up form can be stored
  • Provide appropriate error messages when account creation is unsuccessful
  • Redirect user to log in page following successful registration

USER STORY (Frontend): Infinite scroll posts

As a user or visitor I can scroll through a list of posts so that I can browse the site more comfortably

Backend issue: dragon-fire-fly/organisation_app_api#6

Acceptance Criteria

  • A default of 10 posts, events and comments per page
  • More posts load when users scroll down
  • Loading spinner indicates that the page is loading

Tasks

  • Infinitie scroll component
  • Spinner component

USER STORY (Frontend): Add comments to posts

As a user I can create comments on posts so that I can communicate with the poster and other users about the post content

Backend issue: dragon-fire-fly/organisation_app_api#16

Acceptance Criteria

  • Logged in users can add comments to posts
  • A comment form is rendered on the individual post page
  • The comment count for posts with comments increases by one for each comment
  • Logged out users cannot leave comments

Tasks

  • Add comment icon to posts
  • Render comment form on post page if logged in
  • Only logged in users can comment on posts

USER STORY (Frontend): View public events as a visitor

As a visitor I can view public events so that I can see what events are planned and see if I would like to create an account to add the event(s) to my calendar

Backend issue: dragon-fire-fly/organisation_app_api#3

Acceptance Criteria

  • The list view API endpoints can be viewed by users who are not logged in
  • Appropriate permissions allow visitors to view but not create, edit or delete events
  • Clicking an event takes the visitor to the individual event page

Tasks

  • Display all events with the EventsPage component
  • Clicking on a specific event redirects to individual event page
  • Visitors cannot add, edit or delete events

BUG: Unable to edit post without adding event

Describe the bug
Posts may be created with an optional event. However, when the post is edited, an error occurs stating that the id of the event cannot be null.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'edit post' on a post without an attached event
  2. Click 'save'
  3. See error

Expected behavior
The post should be able to be edited without having to attach an event to the post

Screenshots
image

BUG: When a post is edited, the event cannot be left unchanged

Describe the bug
When editing a post, the content can be changed if the event also changes, however if the event is not changed, the following error occurs:
{event: ["Incorrect type. Expected pk value, received str."]}

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'edit post'
  2. Do not change the event
  3. Click save
  4. See error

Expected behavior
On update, the event should be able to both be changed or kept the same.

Screenshots
image
image

USER STORY (Frontend): Memories

As a user I can add memories to past events so that I can store my comments and images to look at later

Backend issue: dragon-fire-fly/organisation_app_api#40

Acceptance Criteria

  • Users can add "memories" to events
  • Memories may only be added by logged in users
  • Memories are displayed on the event's detail page

Tasks

  • Add memories icon to posts
  • Render memory form on post page if logged in
  • Only logged in users can add memories

USER STORY (Frontend): View individual events as a visitor

As a visitor I can view individual events so that I can see more detail about the event and see any associated comments

Backend issue: dragon-fire-fly/organisation_app_api#5

Acceptance Criteria

  • The detail view API endpoints can be viewed by users who are not logged in
  • Appropriate permissions allow visitors to view but not create, edit or delete events
  • Individual events have their associated comments visible to visitors

Tasks

  • Display individual events with the EventPage and Event components
  • Visitors cannot edit or delete events
  • Visitors can view memories but not add, edit or delete them

USER STORY (Frontend): Add an event to a post

As a user I can choose an event from my event list when I post so that I can make a post about that specific event

Backend issue: dragon-fire-fly/organisation_app_api#29

Acceptance Criteria

  • A drop down menu allows users to optionally select an event to add to their post
  • A user can select any event from their event list (their own events or ones they've added to calendar)
  • In API post has a field called "event" and events have a field called "posts" which are both updated on a new post with associated event

Tasks

  • Add dropdown to PostCreateForm
  • Obtain user's event list from API with axios request
  • Populate dropdown options from user's event list
  • Send the event id with form so the lists can be updated
  • Add event (with link to event) to post component if present

BUG: Cannot upload a post or event without an image

Describe the bug
Users cannot upload posts of events without uploading an image first. They receive a "The submitted data was not a file. Check the encoding type on the form" error

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'http://localhost:3000/posts/create'
  2. Enter a title
  3. Click create
  4. See error

Expected behavior
Posts and events should be able to be created without associated images

Screenshots
image
image

Desktop (please complete the following information):

  • OS: Ubuntu
  • Browser: Chrome
  • Version [e.g. 22]

Additional context
Posts and events without pictures CAN be created in the REST API, so this appears to be a front end issue.
image

The axios default headers are set to accept multipart/form-data
axios.defaults.headers.post["Content-Type"] = "multipart/form-data";

USER STORY (Frontend): Edit and delete events

As a user I can edit or delete my own events so that I can fix incorrect information, add more information, or remove the event entirely

Backend issue: dragon-fire-fly/organisation_app_api#14

Acceptance Criteria

  • Users can click “edit event” button which links to “edit event” page
  • Users can click “delete event” button which deletes a specific event entry and all associated memories
  • An “edit event” form is rendered on the “edit event” page
  • Only the event owner has permission to edit or delete a event

Tasks

  • Display edit and delete buttons next to a event if user is owner
  • Add “edit event” form to “edit event” page
  • Add permissions so that only event owners can see edit or delete event buttons

USER STORY (Frontend): User profiles feature events from that specific user

As a user I can view specific events from another user in their profile so that I can see that user's events

Backend issue: dragon-fire-fly/organisation_app_api#31

Acceptance Criteria

  • When clicking their own or another user's profile, events from that specific user are shown
  • Users can click individual events to view them in a new window
  • 10 events are shown initially, then more load as the user scrolls
  • Users can navigate between post and event view on each user's profile

Tasks

  • Add new page for viewing user's specific events
  • Retrieve events from a specific user with an axios request and map them appropriately
  • Add infinite scroll component
  • Add link to render specific events page from standard user profile

USER STORY (Frontend): Log in functionality

As a registered user I can log in to my account so that I can have full access to the site, make, comment on and like posts and events

Backend issue: dragon-fire-fly/organisation_app_api#11

Acceptance Criteria

  • Registered users can sign in on the sign in page
  • If user details are entered incorrectly, users receive appropriate error messages
  • When users successfully log in, they are redirected to the main feed page

Tasks

  • Log in form
  • Form validation with appropriate error messages
  • Redirect user to main feed

USER STORY (Frontend): Edit and delete plans

As a user I can edit or delete my own plans so that I can fix incorrect information, add more information, or remove the plan entirely

Backend issue: dragon-fire-fly/organisation_app_api#43

Acceptance Criteria

  • User who owns the plan can click “edit plan” button
  • An “edit plan” form is rendered on the event page
  • A specified plan is deleted when the user clicks the “delete plan” button
  • Only the plan owner has permission to edit or delete a plan

Tasks

  • Display edit and delete buttons next to a plan
  • Add “edit plan” form to event page
  • Add permissions so that only plan owners can see edit or delete buttons

USER STORY (Frontend): Watched events page

As a user I can view my watched events on a seperate page so that I can keep an eye on the event and easily find it again

Backend issue: dragon-fire-fly/organisation_app_api#19

Acceptance Criteria

  • Add route for watched events page (FE)
  • Add filters for watched events (API)
  • Add watched events button which redirects to watched events page

Tasks

  • Add icon for watched events page
  • Add route to watched events page
  • Apply filters so only watched events show on page

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.