gctools-outilsgc / gccollab-frontend Goto Github PK
View Code? Open in Web Editor NEWAngular frontend app for GCcollab
Angular frontend app for GCcollab
Developing the design System for GCC new UI.
Our app needs a generic button component that can be re-used. We will need to create a component that wraps an Angular Material button, GCDC Components button, or the default button. Since this component will be replacing <button/>
it will need to have all relevant attributes exposed as well as a callback function that executes on click.
There should also be an option for an "icon-only" mode where the button will display an icon instead of text. The button should be styled to match what's provided in the design document (the icon buttons in the news feed cards).
See the docs for a list of the attributes we need to consider.
button.component.ts
btnClick
to store a callback function.button.component.spec.ts
in the folder, with a minimum of 1 unit test in a passing state.Using dependency-cruiser and Graphviz.
Building the events and event registration pages.
Start looking into reactive forms with Angular. Official documentation can be found here, but there are 3rd party solutions we might want to consider.
N/A
Create a proof of concept that shows...
We will need to be able to transition the header/footer theme depending on scroll position or for certain routes. We should follow up with @Chaza-A to discuss this feature in more detail.
Add a method for pulling persisted data from all the mock services (people, events etc.)
We need a profile card component that matches the design doc. See below the events.
Tests for subcomponents:
e2e testing for the new GCcollab frontend
Tests for subcomponents:
We need a generic input component that can be used as a replacement for the default <input/>
. This component can use either Angular Material, GCDS, or the default element. Since this is a wrapper we will need to expose all relevant attributes.
For this iteration we only need text, number, search, and password.
For reference see the design.
We need to try to match the design document for the rich text editor. Look into the features currently available in our rich text editor (app-editor) and see if we have all the required features shown in the design document. Also look to see if the design doc might be missing some features that we currently have. Follow up with @Chaza-A to discuss your findings and then implement the changes in the component.
We should see if we can use TypeScript for our translations instead of JSON. Currently we use strings for all our translations. This is very error prone due to the potential for typos and the fact that keys might not match between language files.
Our header needs to be updated to the new design
We need to create an Event Card Component that matches the design doc found here. The event card component should use mat-card for its base with an image that fills 100% of the width and 50% of the top of the card. The bottom half will have centered text that displays the name of the group as well as the group state (closed/open). If the card becomes focused/moused-over the group name should become underlined, and it would be nice if the group picture zoomed in slightly without changing the image size. If a user clicks on the group (at the mat-card level so any part of the card is clickable) we will want to send them to the groups page. Since we haven't setup any subrouting yet we can just send them to the /groups
route for now. Make sure to use RouterLink so we don't do a hard refresh. See the header/footer for reference.
Styling will be similar to the news card component (box shadow, border etc.) so feel free to re-use any of the styles found in src > app > features > news-fed > components > news-card > news-card.component.scss
A component called group-card.component
should be added to the groups feature module found under src > app > features > groups > components
. Make sure to add the newly created group-card component to the declarations
and exports
array of the groups.module.ts
file so it can be imported into other modules in our project. Once the component is available for export you will want to add the GroupsModule
to the imports
array of the home.module.ts
file found in src > app > features > home
. You should then be able to use the groups-card component on the home page.
You should create a new folder called models
under the groups folder found at src > app > features > groups
. Similar to the news-feed feature, this will be used to mock a data model that will be used in the group-card.component
as well as other instances in our app where group is used. The model should be called Group
and the file named group.model
, consisting of the following properties:
groupStatus
should be an enum with at least 2 options: Open
and Closed
. Add a new file called group-type.ts
to the same folder (models). See button-type/input-type etc. for reference src > app > shared > models
.
Since this is mock data and our model isn't set in stone feel free to add any other properties you see fit beside the 4 outlined above.
Once you've setup your models you'll want to instantiate a group.model
class inside the home.component.ts
file and fill it with whatever data you want. You can then pass the model to your group-card.component
as an Input in the home.component.html
template and it should populate with the expected data. For reference on Input and the model pattern I've outlined feel free to check out news-feed-card.component.ts
We need a modal component for the project that matches the design doc here. We will be using the Angular Material dialog as our base. A component with the naming convention modal.component.ts should be added to the shared folder of the project. We will also want to have a way to pass in data to be displayed in the modal and a function to execute on submit.
Since upgrading to Angular 16 material themes have changed. The theme will need to be updated so we stop getting warnings.
We need to finalize what we're going to do about state management for the app. Some more research will need to be done on NGrX, as well as getting a better understanding of RXJS. Look into any alternatives as well.
The project has some sort of global state store, with at least one component/service the uses it.
We need to do some investigation into how the login flow for our app will work. Currently we are using this package to authenticate, which redirects the user to GCAccount to handle registration/login.
Look into that package and see if there is support for a login/register flow where we stay inside our Angular app and send the requests to GCAccount without redirecting.
We will need a component that displays a user profile image. You can see an example of the profile picture in the design in the news card and header.
We need a rich text editor for our project. We might also want to consider having support for markdown. One potential option is ngx-editor.
For reference see the design.
In order to start implementing the mock-ups we will need to add some global styles, fonts, theme etc. For reference the design file can be found here.
Look into web components and if/how we can use them in our Angular application.
https://indepth.dev/posts/1116/angular-web-components-a-complete-guide
Starting with a simple one to run angular tests. later to be expanded to creating / updating a dev instance and running e2e / acceptance style tests as well.
Once Angular 16 is released (May 2023) we should look into updating our app from v14 to v16. The main reason for the upgrade is to make use of Signals.
The footer needs to be updated to match the new design outlined here. The component already exists in the project so some tweaks to the template and styles is all that's required.
RouterLink
We need a component for a profile button that wraps the existing profile-picture component. The component should have a flag that tells it that it's the profile button for the current user. If it is, it should show a "Login" button if the user is not authenticated, or the profile picture if they are already logged in. See design doc for more details.
Create a component for the calendar icon that's currently being used in the event-card component. This should be stored in the shared module since it will be used in multiple places throughout the app. Once completed, use in place of the old event calendar in the event-card component and on the event page.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.