Skip to content

Commit

Permalink
Merge pull request #2788 from IDEMSInternational/feat/google-auth-button
Browse files Browse the repository at this point in the history
feat: Google Sign In button component
  • Loading branch information
jfmcquade authored Feb 14, 2025
2 parents dab81ac + 9c55308 commit 096baf0
Show file tree
Hide file tree
Showing 4 changed files with 177 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!-- HTML copied from https://developers.google.com/identity/branding-guidelines
with Theme: Light; Shape: Pill -->
<button class="gsi-material-button" (click)="handleClick()">
<div class="gsi-material-button-state"></div>
<div class="gsi-material-button-content-wrapper">
<div class="gsi-material-button-icon">
<svg
version="1.1"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 48 48"
xmlns:xlink="http://www.w3.org/1999/xlink"
style="display: block"
>
<path
fill="#EA4335"
d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"
></path>
<path
fill="#4285F4"
d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"
></path>
<path
fill="#FBBC05"
d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"
></path>
<path
fill="#34A853"
d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"
></path>
<path fill="none" d="M0 0h48v48H0z"></path>
</svg>
</div>
<span class="gsi-material-button-contents">{{ value() }}</span>
<span style="display: none">{{ value() }}</span>
</div>
</button>
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
/* CSS copied from https://developers.google.com/identity/branding-guidelines
with Theme: Light; Shape: Pill
The only modification is using `margin-inline-end` instead of `margin-right` to support RTL languages
*/

.gsi-material-button {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
-webkit-appearance: none;
background-color: WHITE;
background-image: none;
border: 1px solid #747775;
-webkit-border-radius: 20px;
border-radius: 20px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: #1f1f1f;
cursor: pointer;
font-family: "Roboto", arial, sans-serif;
font-size: 14px;
height: 40px;
letter-spacing: 0.25px;
outline: none;
overflow: hidden;
padding: 0 12px;
position: relative;
text-align: center;
-webkit-transition:
background-color 0.218s,
border-color 0.218s,
box-shadow 0.218s;
transition:
background-color 0.218s,
border-color 0.218s,
box-shadow 0.218s;
vertical-align: middle;
white-space: nowrap;
width: auto;
max-width: 400px;
min-width: min-content;
}

.gsi-material-button .gsi-material-button-icon {
height: 20px;
margin-inline-end: 12px;
min-width: 20px;
width: 20px;
}

.gsi-material-button .gsi-material-button-content-wrapper {
-webkit-align-items: center;
align-items: center;
display: flex;
-webkit-flex-direction: row;
flex-direction: row;
-webkit-flex-wrap: nowrap;
flex-wrap: nowrap;
height: 100%;
justify-content: space-between;
position: relative;
width: 100%;
}

.gsi-material-button .gsi-material-button-contents {
-webkit-flex-grow: 1;
flex-grow: 1;
font-family: "Roboto", arial, sans-serif;
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: top;
}

.gsi-material-button .gsi-material-button-state {
-webkit-transition: opacity 0.218s;
transition: opacity 0.218s;
bottom: 0;
left: 0;
opacity: 0;
position: absolute;
right: 0;
top: 0;
}

.gsi-material-button:disabled {
cursor: default;
background-color: #ffffff61;
border-color: #1f1f1f1f;
}

.gsi-material-button:disabled .gsi-material-button-contents {
opacity: 38%;
}

.gsi-material-button:disabled .gsi-material-button-icon {
opacity: 38%;
}

.gsi-material-button:not(:disabled):active .gsi-material-button-state,
.gsi-material-button:not(:disabled):focus .gsi-material-button-state {
background-color: #303030;
opacity: 12%;
}

.gsi-material-button:not(:disabled):hover {
-webkit-box-shadow:
0 1px 2px 0 rgba(60, 64, 67, 0.3),
0 1px 3px 1px rgba(60, 64, 67, 0.15);
box-shadow:
0 1px 2px 0 rgba(60, 64, 67, 0.3),
0 1px 3px 1px rgba(60, 64, 67, 0.15);
}

.gsi-material-button:not(:disabled):hover .gsi-material-button-state {
background-color: #303030;
opacity: 8%;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Component } from "@angular/core";
import { TemplateBaseComponent } from "../base";
import { AuthService } from "src/app/shared/services/auth/auth.service";
@Component({
selector: "tmpl-button-google-sign-in",
templateUrl: "./button-google-sign-in.component.html",
styleUrls: ["./button-google-sign-in.component.scss"],
})
export class TmplButtonGoogleSignInComponent extends TemplateBaseComponent {
// The button text is set as row value directly in the HTML template

constructor(private authService: AuthService) {
super();
}

public async handleClick() {
await this.authService.provider.signInWithGoogle();
this.triggerActions("click");
}
}
3 changes: 3 additions & 0 deletions src/app/shared/components/template/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { TmplAdvancedDashedBoxComponent } from "./layout/advanced-dashed-box/adv
import { TmplAnimatedSlidesComponent } from "./animated-slides/animated-slides.component";
import { TmplAudioComponent } from "./audio/audio.component";
import { TmplButtonComponent } from "./button/button.component";
import { TmplButtonGoogleSignInComponent } from "./button-google-sign-in/button-google-sign-in.component";
import { TmplCarouselComponent } from "./carousel/carousel.component";
import { TmplComboBoxComponent } from "./combo-box/combo-box.component";
import { TmplDashedBoxComponent } from "./dashed-box/dashed-box.component";
Expand Down Expand Up @@ -87,6 +88,7 @@ export const TEMPLATE_COMPONENTS = [
TmplAnimatedSlidesComponent,
TmplAudioComponent,
TmplButtonComponent,
TmplButtonGoogleSignInComponent,
TmplCarouselComponent,
TmplComboBoxComponent,
TmplDashedBoxComponent,
Expand Down Expand Up @@ -161,6 +163,7 @@ const COMMON_COMPONENT_MAPPING = {
display_group_sticky: TmplDisplayGroupStickyComponent,
drawer: TmplDrawerComponent,
form: FormComponent,
google_sign_in_button: TmplButtonGoogleSignInComponent,
help_icon: TmplHelpIconComponent,
html: TemplateHTMLComponent,
icon_banner: TmplIconBannerComponent,
Expand Down

0 comments on commit 096baf0

Please sign in to comment.