Merge branch 'julius-dev' of Software_Engineering_I/greenvironment-frontend into master

master
Trivernis 5 years ago committed by Gitea
commit bf051165db

@ -12,9 +12,9 @@ export class AppComponent implements OnInit {
constructor(private data: DatasharingService, private selfservice: SelfService) { }
userInfo: User
userInfo: User;
loggedIn : boolean = false;
loggedIn = false;
userID: number;
username: string;
handle: string;
@ -32,8 +32,8 @@ export class AppComponent implements OnInit {
this.data.currentUserInfo.subscribe(user => {
this.userInfo = user;
console.log(this.userInfo);
this.data.changeChatIDs(user.chatIDs)
})
this.data.changeChatIDs(user.chatIDs);
});
if (this.loggedIn != true) {
this.selfservice.checkIfLoggedIn();
}

@ -63,7 +63,7 @@ const appRoutes: Routes = [
{ path: 'register', component: RegisterComponent },
{ path: 'about', component: AboutComponent },
{ path: 'imprint', component: ImprintComponent },
]
];
@NgModule({
declarations: [

@ -15,57 +15,56 @@ import { environment } from 'src/environments/environment';
})
export class AppScaffoldComponent implements OnInit {
loggedIn: boolean = false;
loggedIn = false;
userId: number;
username: string
user: User
levellist: Levellist = new Levellist()
level: string
points: number
username: string;
user: User;
levellist: Levellist = new Levellist();
level: string;
points: number;
profileUrl: string;
dropdownShown: boolean = false
dropdownShown = false;
constructor(private data: DatasharingService, private selfservice: SelfService, private http: Http, private router: Router) { }
ngOnInit() {
this.data.currentUserInfo.subscribe(user => {
this.user = user
this.user = user;
this.loggedIn = user.loggedIn;
this.userId = user.userID;
this.username = user.username
this.level = this.levellist.getLevelName(user.level)
this.points = user.points
this.username = user.username;
this.level = this.levellist.getLevelName(user.level);
this.points = user.points;
this.profileUrl = '/profile/' + this.userId;
})
});
}
showDropdown() {
if (!this.dropdownShown) {
this.dropdownShown = true
}
else {
this.dropdownShown = false
this.dropdownShown = true;
} else {
this.dropdownShown = false;
}
}
logout() {
let url = environment.graphQLUrl
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
const body = {query: `mutation {
logout
}`}
}`};
this.http.post(url, body).subscribe(response => {
console.log(response.text())})
this.loggedIn = false
let user = new User()
user.loggedIn = false
this.data.changeUserInfo(user)
this.router.navigate(['login'])
console.log(response.text()); });
this.loggedIn = false;
const user = new User();
user.loggedIn = false;
this.data.changeUserInfo(user);
this.router.navigate(['login']);
}
}

@ -11,7 +11,7 @@ import { Chat } from 'src/app/models/chat';
})
export class ChatComponent implements OnInit {
messages:Array<Chatmessage>
messages: Array<Chatmessage>;
@Output() goBackEvent = new EventEmitter<boolean>();
@Input() childChat: Chat;
@ -19,29 +19,28 @@ export class ChatComponent implements OnInit {
constructor(private chatService: ChatService) { }
ngOnInit() {
this.refresh()
this.refresh();
}
goBack() {
this.goBackEvent.emit(true)
this.goBackEvent.emit(true);
}
sendMessage(pElement) {
this.chatService.sendMessage(this.childChat.id, pElement.value)
.subscribe(response => {
console.log("Message sent")
pElement.value = ""
this.refresh()
})
console.log('Message sent');
pElement.value = '';
this.refresh();
});
}
refresh() {
this.chatService.getMessagesRaw(this.childChat.id)
.subscribe(response =>
{
console.log("Downloading messages ...")
this.messages = this.chatService.renderMessages(response.json())
})
.subscribe(response => {
console.log('Downloading messages ...');
this.messages = this.chatService.renderMessages(response.json());
});
}
}

@ -10,7 +10,7 @@ import { ChatService } from 'src/app/services/chat/chat.service';
})
export class ChatlistComponent implements OnInit {
@Input() childChats: Array<Chat>
@Input() childChats: Array<Chat>;
@Output() showChatEvent = new EventEmitter<Chat>();
@Output() showCreateChatEvent = new EventEmitter<boolean>();
selectedChat: Chat;
@ -22,16 +22,16 @@ export class ChatlistComponent implements OnInit {
}
showNewChat() {
this.showCreateChatEvent.emit(true)
this.showCreateChatEvent.emit(true);
}
showChat(pChat: Chat) {
this.selectedChat = pChat
this.showChatEvent.emit(this.selectedChat)
this.selectedChat = pChat;
this.showChatEvent.emit(this.selectedChat);
}
newChat() {
console.error("not implemented")
console.error('not implemented');
}
}

@ -10,7 +10,7 @@ import { ChatService } from 'src/app/services/chat/chat.service';
export class ChatcontactsComponent implements OnInit {
@Output() goBackEvent = new EventEmitter<boolean>();
selectedContact: FriendInfo
selectedContact: FriendInfo;
constructor(private chatService: ChatService) { }
@ -18,17 +18,17 @@ export class ChatcontactsComponent implements OnInit {
}
goBack() {
this.goBackEvent.emit(true)
this.goBackEvent.emit(true);
}
createChat(pFriendInfo: FriendInfo) {
this.selectedContact = pFriendInfo
this.chatService.createNewChat(pFriendInfo.id)
this.goBack()
this.selectedContact = pFriendInfo;
this.chatService.createNewChat(pFriendInfo.id);
this.goBack();
}
contactList() {
console.error("Not Imlemented!")
console.error('Not Imlemented!');
}
}

@ -1,5 +1,5 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { ChatService } from '../../services/chat/chat.service'
import { ChatService } from '../../services/chat/chat.service';
import { ChatComponent } from '../chat/chat.component';
import { Chatinfo } from 'src/app/models/chatinfo';
import { DatasharingService } from 'src/app/services/datasharing.service';
@ -12,12 +12,12 @@ import { Chat } from 'src/app/models/chat';
})
export class ChatmanagerComponent implements OnInit {
showChatlist: boolean = true
showChat: boolean = false
showCreateNewChat: boolean = false
showChatlist = true;
showChat = false;
showCreateNewChat = false;
parentSelectedChat: Chat
parentChats: Array<Chat>
parentSelectedChat: Chat;
parentChats: Array<Chat>;
constructor(private data: DatasharingService, private chatService: ChatService) { }
@ -25,36 +25,36 @@ export class ChatmanagerComponent implements OnInit {
/*this.data.currentChatIDs.subscribe(chatIDs => {
this.parentChatIds = chatIDs
})*/
this.refresh()
this.refresh();
}
goBackToChatlist($event) {
this.showChatlist = $event
this.showChat = false
this.showCreateNewChat = false
this.showChatlist = $event;
this.showChat = false;
this.showCreateNewChat = false;
this.refresh()
this.refresh();
}
showSpecialChat($event) {
this.parentSelectedChat = $event
this.showChatlist = false
this.showChat = true
this.showCreateNewChat = false
this.parentSelectedChat = $event;
this.showChatlist = false;
this.showChat = true;
this.showCreateNewChat = false;
}
showNewChat($event) {
this.showChatlist = false
this.showChat = false
this.showCreateNewChat = $event
this.showChatlist = false;
this.showChat = false;
this.showCreateNewChat = $event;
}
refresh() {
this.chatService.getAllChatsRaw()
.subscribe(response => {
console.log(response)
this.parentChats = this.chatService.renderAllChats(response.json())
})
console.log(response);
this.parentChats = this.chatService.renderAllChats(response.json());
});
}
}

@ -9,16 +9,16 @@ import { Actionlist } from 'src/app/models/actionlist';
styleUrls: ['./feed.component.sass']
})
export class FeedComponent implements OnInit {
checked: boolean //if the "I protected the environment."-box is checked
checked: boolean; // if the "I protected the environment."-box is checked
// points value of the green action
value: any
viewNew: boolean = true
viewMostLiked: boolean = false
value: any;
viewNew = true;
viewMostLiked = false;
feedNew: Array<Post>
feedMostLiked: Array<Post>
feedNew: Array<Post>;
feedMostLiked: Array<Post>;
parentSelectedPostList: Array<Post>
parentSelectedPostList: Array<Post>;
actionlist: Actionlist = new Actionlist();
@ -26,46 +26,46 @@ export class FeedComponent implements OnInit {
ngOnInit() {
this.feedService.getAllPostsRaw().subscribe(response => {
this.feedNew = this.feedService.renderAllPosts(response.json())
this.parentSelectedPostList = this.feedNew
this.feedMostLiked = this.feedNew
console.log(this.feedNew)
})
this.feedNew = this.feedService.renderAllPosts(response.json());
this.parentSelectedPostList = this.feedNew;
this.feedMostLiked = this.feedNew;
console.log(this.feedNew);
});
}
createPost(pElement) {
this.feedService.createPost(pElement.value)
pElement.value = ""
this.feedService.createPost(pElement.value);
pElement.value = '';
this.feedService.getAllPostsRaw().subscribe(response => {
this.feedNew = this.feedService.renderAllPosts(response.json())
this.parentSelectedPostList = this.feedNew
this.feedMostLiked = this.feedNew})
this.feedNew = this.feedService.renderAllPosts(response.json());
this.parentSelectedPostList = this.feedNew;
this.feedMostLiked = this.feedNew; });
}
showNew() {
console.log("showNew()")
console.log('showNew()');
this.feedService.getAllPostsRaw().subscribe(response => {
this.feedNew = this.feedService.renderAllPosts(response.json())
this.parentSelectedPostList = this.feedNew})
this.viewNew = true
this.viewMostLiked = false
this.feedNew = this.feedService.renderAllPosts(response.json());
this.parentSelectedPostList = this.feedNew; });
this.viewNew = true;
this.viewMostLiked = false;
}
showMostLiked() {
console.log("showMostLiked()")
console.log('showMostLiked()');
this.feedService.getAllPostsRaw().subscribe(response => {
this.feedMostLiked = this.feedService.renderAllPosts(response.json())
this.parentSelectedPostList = this.feedMostLiked})
this.viewNew = false
this.viewMostLiked = true
this.feedMostLiked = this.feedService.renderAllPosts(response.json());
this.parentSelectedPostList = this.feedMostLiked; });
this.viewNew = false;
this.viewMostLiked = true;
}
refresh($event) {
this.feedService.getAllPostsRaw().subscribe(response => {
this.parentSelectedPostList = this.feedService.renderAllPosts(response.json())
console.log("Refresh")
})
this.parentSelectedPostList = this.feedService.renderAllPosts(response.json());
console.log('Refresh');
});
}
}

@ -9,9 +9,9 @@ import { FeedService } from 'src/app/services/feed/feed.service';
})
export class PostlistComponent implements OnInit {
@Input() childPostList: Array<Post>
@Output() voteEvent = new EventEmitter<boolean>()
selectedPost: Post
@Input() childPostList: Array<Post>;
@Output() voteEvent = new EventEmitter<boolean>();
selectedPost: Post;
constructor(private feedService: FeedService) { }
@ -20,12 +20,12 @@ export class PostlistComponent implements OnInit {
voteUp(pPost: Post) {
this.feedService.upvote(pPost.id).subscribe(response => {
this.voteEvent.emit(true)})
this.voteEvent.emit(true); });
}
voteDown(pPost: Post) {
this.feedService.downvote(pPost.id).subscribe(response => {
this.voteEvent.emit(true)})
this.voteEvent.emit(true); });
}
}

@ -9,15 +9,15 @@ import { FeedService } from 'src/app/services/feed/feed.service';
})
export class HomeComponent implements OnInit {
loggedIn: boolean
loggedIn: boolean;
constructor(private data: DatasharingService, private feedService: FeedService) { }
ngOnInit() {
this.data.currentUserInfo.subscribe(user => {
this.loggedIn = user.loggedIn;
})
this.feedService.getAllPosts()
});
this.feedService.getAllPosts();
}
}

@ -11,7 +11,7 @@ import * as sha512 from 'js-sha512';
styleUrls: ['./login.component.sass']
})
export class LoginComponent implements OnInit {
login: Login
login: Login;
hide = true;
errorOccurred: boolean = false;
errorMessage: string;
@ -34,11 +34,11 @@ export class LoginComponent implements OnInit {
console.log('try to login with mail adress:' + pEmail);
this.errorOccurred = false;
this.errorMessage = " ";
this.login.email = pEmail.trim()
this.login.email = pEmail.trim();
this.login.passwordHash = sha512.sha512(pPasswordHash);
console.log(this.login.passwordHash);
console.log(this.login.passwordHash)
console.log(this.login.passwordHash);
this.loginService.login(this.login, error => this.loginError(error.json()));
}

@ -17,16 +17,20 @@ import { OverlayContainer} from '@angular/cdk/overlay';
styleUrls: ['./main-navigation.component.sass']
})
export class MainNavigationComponent implements OnInit {
loggedIn: boolean = false
userId: number
username: string
user: User
levellist: Levellist = new Levellist()
level: string
points: number
profileUrl: string = "/profile/1"
lighttheme : boolean = true
constructor(public overlayContainer: OverlayContainer, private data: DatasharingService, private selfservice: SelfService, private breakpointObserver: BreakpointObserver, private http: Http, private router: Router) {
this.overlay = overlayContainer.getContainerElement();
}
loggedIn = false;
userId: number;
username: string;
user: User;
levellist: Levellist = new Levellist();
level: string;
points: number;
profileUrl = '/profile/1';
lighttheme = true;
overlay;
isHandset$: Observable<boolean> = this.breakpointObserver.observe(Breakpoints.Handset)
@ -34,22 +38,6 @@ export class MainNavigationComponent implements OnInit {
map(result => result.matches),
shareReplay()
);
constructor(public overlayContainer: OverlayContainer, private data: DatasharingService,private selfservice: SelfService,private breakpointObserver: BreakpointObserver, private http: Http, private router: Router) {
this.overlay = overlayContainer.getContainerElement();
}
ngOnInit() {
this.data.currentUserInfo.subscribe(user => {
this.user = user
this.loggedIn = user.loggedIn;
this.userId = user.userID;
this.username = user.username
this.level = this.levellist.getLevelName(user.level)
this.points = user.points
this.profileUrl = '/profile/' + this.userId;
this.updateLinks();
})
}
navLinksLoggedIn = [
{ path: '', label: 'Home' },
{ path: this.profileUrl, label: 'Profile' },
@ -63,18 +51,32 @@ export class MainNavigationComponent implements OnInit {
{ path: '/login', label: 'Login' },
];
@HostBinding('class') componentCssClass;
ngOnInit() {
this.data.currentUserInfo.subscribe(user => {
this.user = user;
this.loggedIn = user.loggedIn;
this.userId = user.userID;
this.username = user.username;
this.level = this.levellist.getLevelName(user.level);
this.points = user.points;
this.profileUrl = '/profile/' + this.userId;
this.updateLinks();
});
}
toggleTheme() {
if (this.overlay.classList.contains("dark-theme")) {
this.overlay.classList.remove("dark-theme");
this.overlay.classList.add("light-theme");
this.onSetTheme("light-theme");
} else if (this.overlay.classList.contains("light-theme")) {
this.overlay.classList.remove("light-theme");
this.overlay.classList.add("dark-theme");
this.onSetTheme("dark-theme");
if (this.overlay.classList.contains('dark-theme')) {
this.overlay.classList.remove('dark-theme');
this.overlay.classList.add('light-theme');
this.onSetTheme('light-theme');
} else if (this.overlay.classList.contains('light-theme')) {
this.overlay.classList.remove('light-theme');
this.overlay.classList.add('dark-theme');
this.onSetTheme('dark-theme');
} else {
this.overlay.classList.add("dark-theme");
this.onSetTheme("dark-theme");
this.overlay.classList.add('dark-theme');
this.onSetTheme('dark-theme');
}
}
updateLinks() {
@ -85,28 +87,26 @@ export class MainNavigationComponent implements OnInit {
{ path: '/imprint', label: 'Imprint' },
];
}
@HostBinding('class') componentCssClass;
onSetTheme(theme) {
this.overlayContainer.getContainerElement().classList.add(theme);
this.componentCssClass = theme;
}
logout() {
let url = environment.graphQLUrl
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
const body = {query: `mutation {
logout
}`}
}`};
this.http.post(url, body).subscribe(response => {
console.log(response.text())})
this.loggedIn = false
let user = new User()
user.loggedIn = false
this.data.changeUserInfo(user)
this.router.navigate(['login'])
console.log(response.text()); });
this.loggedIn = false;
const user = new User();
user.loggedIn = false;
this.data.changeUserInfo(user);
this.router.navigate(['login']);
}
}

@ -15,26 +15,26 @@ import {MatTableDataSource} from '@angular/material/table';
})
export class ProfileComponent implements OnInit {
actionlist: Actionlist = new Actionlist()
actionlist: Actionlist = new Actionlist();
levellist: Levellist = new Levellist()
user: User = new User()
id : string
rankname: string
profileNotFound : boolean = false
displayedColumns = ['points', 'name']
dataSource = new MatTableDataSource(this.actionlist.Actions)
displayedLevelColumns = ['level', 'name']
levelSource = this.levellist.levels
levellist: Levellist = new Levellist();
user: User = new User();
id: string;
rankname: string;
profileNotFound = false;
displayedColumns = ['points', 'name'];
dataSource = new MatTableDataSource(this.actionlist.Actions);
displayedLevelColumns = ['level', 'name'];
levelSource = this.levellist.levels;
constructor(private router: Router, private http: Http) { }
@ViewChild(MatSort, {static: true}) sort: MatSort;
ngOnInit() {
this.dataSource.sort = this.sort;
this.id = this.router.url.substr(this.router.url.lastIndexOf("/") + 1);
this.id = this.router.url.substr(this.router.url.lastIndexOf('/') + 1);
// let url = './graphql'
let url = environment.graphQLUrl
let headers = new Headers();
const url = environment.graphQLUrl;
const headers = new Headers();
headers.set('Content-Type', 'application/json');
return this.http.post(url, this.buildJson(this.id))

@ -12,8 +12,8 @@ import * as sha512 from 'js-sha512';
styleUrls: ['./register.component.sass']
})
export class RegisterComponent implements OnInit {
registration: Registration
errorOccurred: boolean = false;
registration: Registration;
errorOccurred = false;
errorMessage: string;
hide1 = true;
hide2 = true;
@ -30,10 +30,10 @@ export class RegisterComponent implements OnInit {
onClickSubmit(pUsername: string, pEmail: string, pPasswordHash: string, pPasswordHashRepeat: string ) {
this.errorOccurred = false;
this.errorMessage = " ";
this.errorMessage = ' ';
if (this.passwordSame(pPasswordHash, pPasswordHashRepeat)) {
this.registration.username = pUsername.trim()
this.registration.email = pEmail.trim()
this.registration.username = pUsername.trim();
this.registration.email = pEmail.trim();
this.registration.passwordHash = sha512.sha512(pPasswordHash);
this.registerService.register(this.registration, error => this.registerError(error.json()));
}
@ -45,7 +45,7 @@ export class RegisterComponent implements OnInit {
return true;
} else {
this.errorOccurred = true;
this.errorMessage = "not the same password";
this.errorMessage = 'not the same password';
return false;
}
}

@ -12,30 +12,30 @@ import { environment } from 'src/environments/environment';
})
export class FriendsComponent implements OnInit {
friendIDs: number[] = [29, 27, 30, 31]
friends = new Array<FriendInfo>() //= ["Friend 1", "Friend 2", "Friend 3", "Friend 4", "Friend 5", "Friend 6"]
friendIDs: number[] = [29, 27, 30, 31];
friends = new Array<FriendInfo>(); // = ["Friend 1", "Friend 2", "Friend 3", "Friend 4", "Friend 5", "Friend 6"]
constructor(private data: DatasharingService, private http: Http, private router: Router) { }
ngOnInit() {
// this.data.currentUserInfo.subscribe(user => {
// this.friendIDs = user.friendIDs})
this.getFriendsNames()
this.getFriendsNames();
}
getFriendsNames() {
for(let id of this.friendIDs) {
let url = environment.graphQLUrl
let headers = new Headers();
for (const id of this.friendIDs) {
const url = environment.graphQLUrl;
const headers = new Headers();
headers.set('Content-Type', 'application/json');
this.http.post(url, this.buildJson(id))
.subscribe(response => {this.readOutFriendsNames(id, response.json())})
.subscribe(response => {this.readOutFriendsNames(id, response.json()); });
}
}
readOutFriendsNames(pId: number, pResponse: any) {
this.friends.push(new FriendInfo(pId, pResponse.data.getUser.name,pResponse.data.getUser.level ))
this.friends.push(new FriendInfo(pId, pResponse.data.getUser.name, pResponse.data.getUser.level ));
}
buildJson(pId: number): any {
@ -46,13 +46,13 @@ export class FriendsComponent implements OnInit {
}
}`, variables: {
userId: pId
}}
}};
return body
return body;
}
public showFriendProfile(pFriend: FriendInfo) {
this.router.navigate(['profile/' + pFriend.id])
this.router.navigate(['profile/' + pFriend.id]);
}
}

@ -7,7 +7,7 @@ import { GroupInfo } from 'src/app/models/groupinfo';
styleUrls: ['./groups.component.sass']
})
export class GroupsComponent implements OnInit {
groups: Array<GroupInfo> = [new GroupInfo(1,"Group 1",[]), new GroupInfo(1,"Group 2",[]), new GroupInfo(1,"Group 3",[]), new GroupInfo(1,"Group 4",[])]
groups: Array<GroupInfo> = [new GroupInfo(1, 'Group 1', []), new GroupInfo(1, 'Group 2', []), new GroupInfo(1, 'Group 3', []), new GroupInfo(1, 'Group 4', [])];
constructor() { }
ngOnInit() {

@ -1,6 +1,6 @@
export interface Action {
id: number
id: number;
name: string;
points: number;
}
@ -8,16 +8,16 @@ export interface Action {
export class Actionlist {
Actions: Action[] = [
{ id: 0, name: "collect a lot of trash",points: 25},
{ id: 1, name: "collect a bit of trash",points: 10 },
{ id: 2, name: "do trash seperation", points: 5 },
{ id: 3, name: "plant a tree", points: 2 },
{ id: 4, name: "beautify your surroundings", points: 8 },
{ id: 5, name: "reduce waste", points: 5 },
{ id: 6, name: "reduce CO2 emission", points: 5 },
{ id: 7, name: "eat a vegetarian meal", points: 2 },
{ id: 8, name: "don't use the car", points: 10 },
{ id: 9, name: "buy a fair trade / local product", points: 1 },
{ id: 10, name: "donate money to an environment organisation ", points: 10 },
{ id: 0, name: 'collect a lot of trash', points: 25},
{ id: 1, name: 'collect a bit of trash', points: 10 },
{ id: 2, name: 'do trash seperation', points: 5 },
{ id: 3, name: 'plant a tree', points: 2 },
{ id: 4, name: 'beautify your surroundings', points: 8 },
{ id: 5, name: 'reduce waste', points: 5 },
{ id: 6, name: 'reduce CO2 emission', points: 5 },
{ id: 7, name: 'eat a vegetarian meal', points: 2 },
{ id: 8, name: 'don\'t use the car', points: 10 },
{ id: 9, name: 'buy a fair trade / local product', points: 1 },
{ id: 10, name: 'donate money to an environment organisation ', points: 10 },
];
}

@ -1,11 +1,11 @@
export class Author {
id: number
name: string
handle: string
id: number;
name: string;
handle: string;
constructor(pId: number, pName: string, pHandle: string) {
this.id = pId
this.name = pName
this.handle = pHandle
this.id = pId;
this.name = pName;
this.handle = pHandle;
}
}

@ -1,16 +1,16 @@
import { Chatmessage } from "./chatmessage"
import { Chatmessage } from './chatmessage';
export class Chat {
id: number
memberID: number
memberName: string
messages: Array<Chatmessage>
id: number;
memberID: number;
memberName: string;
messages: Array<Chatmessage>;
constructor(pId: number, pMemberID: number, pMemberName: string, pMessages: Array<Chatmessage>) {
this.id = pId
this.memberID = pMemberID
this.memberName = pMemberName
this.messages = pMessages
this.id = pId;
this.memberID = pMemberID;
this.memberName = pMemberName;
this.messages = pMessages;
}
}

@ -3,7 +3,7 @@ export class Chatinfo {
date: string;
constructor(pId: string, pDate: string) {
this.id = pId
this.date = pDate
this.id = pId;
this.date = pDate;
}
}

@ -1,11 +1,11 @@
export class Chatmessage {
content: string
date: string
myself: boolean
content: string;
date: string;
myself: boolean;
constructor(pContent: string, pDate: string, pMyself: boolean) {
this.content = pContent
this.date = pDate
this.myself = pMyself
this.content = pContent;
this.date = pDate;
this.myself = pMyself;
}
}

@ -2,13 +2,13 @@ import { Levellist } from 'src/app/models/levellist';
export class FriendInfo {
levellist: Levellist = new Levellist();
id: number
name: string
rankname: string
id: number;
name: string;
rankname: string;
constructor(pId: number, pName: string, pLevel: number) {
this.id = pId
this.name = pName
this.id = pId;
this.name = pName;
this.rankname = this.levellist.getLevelName(pLevel);
}
}

@ -1,11 +1,11 @@
export class GroupInfo {
id: number
name: string
members: number[]
id: number;
name: string;
members: number[];
constructor(pId: number, pName: string, pMembers: number[]) {
this.id = pId
this.name = pName
this.members = pMembers
this.id = pId;
this.name = pName;
this.members = pMembers;
}
}

@ -1,22 +1,22 @@
export class Levellist {
levels: {level: number, name: string, points: number}[] = [
{level: 0, name: "Green Horn",points: 0},
{level: 1, name: "Good Willed",points: 100 },
{level: 2, name: "Helper", points: 200 },
{level: 3, name: "World Saver", points: 300 },
{level: 4, name: "Hero of the Green Country", points: 400 },
{level: 5, name: "Champion of the Earth", points: 500 },
{level: 6, name: "Intergallactic Superhero", points: 600 },
{level: 0, name: 'Green Horn', points: 0},
{level: 1, name: 'Good Willed', points: 100 },
{level: 2, name: 'Helper', points: 200 },
{level: 3, name: 'World Saver', points: 300 },
{level: 4, name: 'Hero of the Green Country', points: 400 },
{level: 5, name: 'Champion of the Earth', points: 500 },
{level: 6, name: 'Intergallactic Superhero', points: 600 },
];
getLevelName(lev: number): any {
var name: string = 'not defined';
let name = 'not defined';
this.levels.forEach(rank => {
if (lev == rank.level) {
name = rank.name;
}
});
return name
return name;
}
}

@ -1,6 +1,6 @@
import { Hash } from "crypto";
import { Hash } from 'crypto';
export interface Login {
email: string;
passwordHash: string
passwordHash: string;
}

@ -1,23 +1,23 @@
import { Author } from "./author"
import { Author } from './author';
export class Post {
id: number
content: string
htmlContent: string
date: string
upvotes: number
downvotes: number
userVote: string
author: Author
id: number;
content: string;
htmlContent: string;
date: string;
upvotes: number;
downvotes: number;
userVote: string;
author: Author;
constructor(pId: number, pContent: string, pHtmlContent: string, pUpvotes: number, pDownvotes: number, pUserVote: string, pDate: string, pAuthor: Author) {
this.id = pId
this.content = pContent
this.htmlContent = pHtmlContent
this.upvotes = pUpvotes
this.downvotes = pDownvotes
this.userVote = pUserVote
this.date = pDate
this.author = pAuthor
this.id = pId;
this.content = pContent;
this.htmlContent = pHtmlContent;
this.upvotes = pUpvotes;
this.downvotes = pDownvotes;
this.userVote = pUserVote;
this.date = pDate;
this.author = pAuthor;
}
}

@ -1,5 +1,5 @@
export interface Registration {
username: string;
email: string;
passwordHash: string
passwordHash: string;
}

@ -1,15 +1,15 @@
export class User {
loggedIn : boolean
userID : number
username : string
handle : string
email : string
points : number
level : number
friendIDs : number[]
groupIDs : number[]
chatIDs : number[]
requestIDs : number[]
constructor(
public userID: number,
public loggedIn: boolean,
public username: string,
public handle: string,
public email: string,
public points: number,
public level: number,
public friendIDs: number[],
public groupIDs: number[],
public chatIDs: number[],
public requestIDs: number[],
) {}
}

@ -12,212 +12,211 @@ import { environment } from 'src/environments/environment';
})
export class ChatService {
arr: number[]
ownID: number
chats: Array<Chat> = []
arr: number[];
ownID: number;
chats: Array<Chat> = [];
constructor(private http: Http, private data: DatasharingService) {
this.data.currentUserInfo.subscribe(user => {
this.ownID = user.userID})
this.ownID = user.userID; });
}
public getAllChats(): Array<Chat> {
console.log("Getting all chats ..")
let url = environment.graphQLUrl
console.log('Getting all chats ..');
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
this.http.post(url, this.getBodyForGetAllChats())
.subscribe(response => {
this.chats = this.renderAllChats(response.json())
this.chats = this.renderAllChats(response.json());
});
return this.chats
return this.chats;
}
public getAllChatsRaw(): any {
console.log("Getting all chats ..")
let url = 'https://greenvironment.net/graphql'
console.log('Getting all chats ..');
const url = 'https://greenvironment.net/graphql';
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
return this.http.post(url, this.getBodyForGetAllChats())
return this.http.post(url, this.getBodyForGetAllChats());
}
public getChatsByID(pChatIDs: number[]): Array<Chat> {
this.chats = []
console.log("Getting chats by ID..")
this.chats = [];
console.log('Getting chats by ID..');
for(let chatId of pChatIDs) {
let url = environment.graphQLUrl
for (const chatId of pChatIDs) {
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
this.http.post(url, this.getBodyForGetChatsByID(chatId))
.subscribe(response => {
this.updateChat(response.json())
})
this.updateChat(response.json());
});
}
return this.chats
return this.chats;
}
public getChatsByIDRaw(pChatIDs: number[]): any {
console.log("Getting chats by ID..")
console.log('Getting chats by ID..');
for(let chatId of pChatIDs) {
let url = 'https://greenvironment.net/graphql'
for (const chatId of pChatIDs) {
const url = 'https://greenvironment.net/graphql';
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
this.http.post(url, this.getBodyForGetChatsByID(chatId))
.subscribe(response => {
this.updateChat(response.json())
})
this.updateChat(response.json());
});
}
return this.chats
return this.chats;
}
public createNewChat(pUserID: number) {
let url = environment.graphQLUrl
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
this.http.post(url, this.getBodyForNewChat(pUserID))
this.http.post(url, this.getBodyForNewChat(pUserID));
}
public requestAllChatPartners(): Array<FriendInfo> {
let url = environment.graphQLUrl
let chatPartners: Array<FriendInfo>
let temp
const url = environment.graphQLUrl;
let chatPartners: Array<FriendInfo>;
let temp;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
this.http.post(url, this.getBodyForRequestOfAllChatPartners())
.subscribe(response => {
temp = response.json()
})
temp = response.json();
});
for(let chat of temp.data.getSelf.chats) {
let memberID: number
let memberName: string
let memberLevel: number
for(let member of chat.members) {
for (const chat of temp.data.getSelf.chats) {
let memberID: number;
let memberName: string;
let memberLevel: number;
for (const member of chat.members) {
if (member.id != this.ownID) {
memberID = member.id
memberName = member.name
memberLevel = member.level
memberID = member.id;
memberName = member.name;
memberLevel = member.level;
}
}
chatPartners.push(new FriendInfo(memberID, memberName, memberLevel))
chatPartners.push(new FriendInfo(memberID, memberName, memberLevel));
}
return chatPartners
return chatPartners;
}
public sendMessage(pChatID: number, pContent: string): any {
let url = environment.graphQLUrl
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
return this.http.post(url, this.getBodyForSendMessage(pChatID, pContent))
return this.http.post(url, this.getBodyForSendMessage(pChatID, pContent));
}
public getMessages(pChatID): Array<Chatmessage> {
let messages: Array<Chatmessage>
let url = environment.graphQLUrl
let messages: Array<Chatmessage>;
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
this.http.post(url, this.getBodyForGetMessagesInChat(pChatID)).subscribe(response =>
{
console.log("Downloading messages ...")
messages = this.renderMessages(response.json())
})
return messages
this.http.post(url, this.getBodyForGetMessagesInChat(pChatID)).subscribe(response => {
console.log('Downloading messages ...');
messages = this.renderMessages(response.json());
});
return messages;
}
public getMessagesRaw(pChatID): any {
let url = 'https://greenvironment.net/graphql'
const url = 'https://greenvironment.net/graphql';
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
return this.http.post(url, this.getBodyForGetMessagesInChat(pChatID))
return this.http.post(url, this.getBodyForGetMessagesInChat(pChatID));
}
public renderMessages(pResponse: any): Array<Chatmessage> {
let messages = new Array<Chatmessage>()
for(let message of pResponse.data.getChat.messages) {
const messages = new Array<Chatmessage>();
for (const message of pResponse.data.getChat.messages) {
if (message.author.id == this.ownID) {
messages.push(new Chatmessage(message.content, message.createdAt, true))
messages.push(new Chatmessage(message.content, message.createdAt, true));
} else {
messages.push(new Chatmessage(message.content, message.createdAt, false))
messages.push(new Chatmessage(message.content, message.createdAt, false));
}
}
return messages
return messages;
}
public renderAllChats(pResponse: any): Array<Chat> {
let chats = Array<Chat>()
for(let chat of pResponse.data.getSelf.chats) {
let memberID: number
let memberName: string
for(let member of chat.members) {
const chats = Array<Chat>();
for (const chat of pResponse.data.getSelf.chats) {
let memberID: number;
let memberName: string;
for (const member of chat.members) {
if (member.id != this.ownID) {
memberID = member.id
memberName = member.name
memberID = member.id;
memberName = member.name;
}
}
let messages = new Array<Chatmessage>()
for(let message of chat.messages) {
const messages = new Array<Chatmessage>();
for (const message of chat.messages) {
if (message.author.id == this.ownID) {
messages.push(new Chatmessage(message.content, message.createdAt, true))
messages.push(new Chatmessage(message.content, message.createdAt, true));
} else {
messages.push(new Chatmessage(message.content, message.createdAt, false))
messages.push(new Chatmessage(message.content, message.createdAt, false));
}
}
chats.push(new Chat(chat.id, memberID, memberName, messages))
chats.push(new Chat(chat.id, memberID, memberName, messages));
}
return chats
return chats;
}
updateChat(pResponse: any) {
let id = pResponse.data.getChat.id
let memberId : number
let memberName: string
for(let member of pResponse.data.getChat.members) {
const id = pResponse.data.getChat.id;
let memberId: number;
let memberName: string;
for (const member of pResponse.data.getChat.members) {
if (member.id != this.ownID) {
memberId = member.id
memberName = member.name
memberId = member.id;
memberName = member.name;
}
}
let messages = new Array<Chatmessage>()
for(let message of pResponse.data.getChat.messages) {
const messages = new Array<Chatmessage>();
for (const message of pResponse.data.getChat.messages) {
if (message.author.id == this.ownID) {
messages.push(new Chatmessage(message.content, message.createdAt, true))
messages.push(new Chatmessage(message.content, message.createdAt, true));
} else {
messages.push(new Chatmessage(message.content, message.createdAt, false))
messages.push(new Chatmessage(message.content, message.createdAt, false));
}
}
this.chats.push(new Chat(id, memberId, memberName, messages))
this.chats.push(new Chat(id, memberId, memberName, messages));
}
getBodyForNewChat(pUserID: number) {
this.arr = [pUserID]
this.arr = [pUserID];
const body = {query: `mutation($userID: number[]) {
createChat(members: $userID) {id}
}`, variables: {
members: this.arr
}};
return body
return body;
}
getBodyForRequestOfAllChatPartners() {
@ -225,9 +224,9 @@ export class ChatService {
getSelf {
chats(first: 1000, offset: 0) {members{name, id, level}}
}}`
}
};
return body
return body;
}
getBodyForSendMessage(pchatID: number, pContent: string) {
@ -238,7 +237,7 @@ export class ChatService {
content: pContent
}};
return body
return body;
}
getBodyForGetAllChats() {
@ -252,8 +251,8 @@ export class ChatService {
}
}
}`
}
return body
};
return body;
}
getBodyForGetChatsByID(pChatID: number) {
@ -263,8 +262,8 @@ export class ChatService {
}
}`, variables: {
chatId: pChatID
}}
return body
}};
return body;
}
getBodyForGetMessagesInChat(pChatID: number) {
@ -274,7 +273,7 @@ export class ChatService {
}
}`, variables: {
chatId: pChatID
}}
return body
}};
return body;
}
}

@ -7,18 +7,18 @@ import { User } from '../models/user';
})
export class DatasharingService {
private userInfoSource = new BehaviorSubject<User>(new User())
private chatIDsSource = new BehaviorSubject<number[]>(new Array<number>())
currentUserInfo = this.userInfoSource.asObservable()
currentChatIDs = this.chatIDsSource.asObservable()
private userInfoSource = new BehaviorSubject<User>(new User());
private chatIDsSource = new BehaviorSubject<number[]>(new Array<number>());
currentUserInfo = this.userInfoSource.asObservable();
currentChatIDs = this.chatIDsSource.asObservable();
constructor() { }
changeUserInfo(pUserInfo: User) {
this.userInfoSource.next(pUserInfo)
this.userInfoSource.next(pUserInfo);
}
changeChatIDs(pChatIDs: number[]) {
this.chatIDsSource.next(pChatIDs)
this.chatIDsSource.next(pChatIDs);
}
}

@ -9,117 +9,117 @@ import { environment } from 'src/environments/environment';
})
export class FeedService {
posts: Array<Post>
posts: Array<Post>;
constructor(private http: Http) { }
public createPost(pContent: String) {
let url = environment.graphQLUrl
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const url = environment.graphQLUrl;
const headers = new Headers();
headers.set('Content-Type', 'application/json');
const body = {query: `mutation($content: String!) {
createPost(content: $content) {id}
}`, variables: {
content: pContent
}}
}};
this.http.post(url, body).subscribe(response => {
console.log(response.text())})
console.log(response.text()); });
}
public createPost2(pContent: String) {
let url = environment.graphQLUrl
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
const body = {query: `query{
getSelf {name}
}`}
}`};
this.http.post(url, body).subscribe(response => {
console.log(response.text())})
console.log(response.text()); });
}
public upvote(pPostID: number): any {
let url = environment.graphQLUrl
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
const body = {query: `mutation($postId: ID!) {
vote(postId: $postId, type: UPVOTE)
}`, variables: {
postId: pPostID
}}
}};
return this.http.post(url, body)
return this.http.post(url, body);
}
public downvote(pPostID: number): any {
let url = environment.graphQLUrl
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
const body = {query: `mutation($postId: ID!) {
vote(postId: $postId, type: DOWNVOTE)
}`, variables: {
postId: pPostID
}}
}};
return this.http.post(url, body)
return this.http.post(url, body);
}
public getAllPosts(): Array<Post> {
let url = environment.graphQLUrl
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
this.http.post(url, this.getBodyForGetAllPosts())
.subscribe(response => {
this.posts = this.renderAllPosts(response.json())
console.log(response)
this.posts = this.renderAllPosts(response.json());
console.log(response);
});
return this.posts
return this.posts;
}
public getAllPostsRaw(): any {
let url = environment.graphQLUrl
const url = environment.graphQLUrl;
let headers = new Headers()
headers.set('Content-Type', 'application/json')
const headers = new Headers();
headers.set('Content-Type', 'application/json');
return this.http.post(url, this.getBodyForGetAllPosts())
return this.http.post(url, this.getBodyForGetAllPosts());
}
getBodyForGetAllPosts() {
const body = {query: `query {
getPosts (first: 1000, offset: 0) {id, content, htmlContent, upvotes, downvotes, userVote, author{name, handle, id}, createdAt}
}`
}
};
return body
return body;
}
public renderAllPosts(pResponse: any): Array<Post> {
let posts = new Array<Post>()
const posts = new Array<Post>();
// let options = {year: 'numeric', month: 'short', day: 'numeric', hour: '' }
for(let post of pResponse.data.getPosts) {
let id: number = post.id
let content: string = post.content
let htmlContent: string = post.htmlContent
let upvotes: number = post.upvotes
let downvotes: number = post.downvotes
let userVote: string = post.userVote
let author = new Author(post.author.id, post.author.name, post.author.handle)
let temp = new Date(Number(post.createdAt))
let date = temp.toLocaleString("en-GB")
posts.push(new Post(id, content, htmlContent, upvotes, downvotes, userVote, date, author))
for (const post of pResponse.data.getPosts) {
const id: number = post.id;
const content: string = post.content;
const htmlContent: string = post.htmlContent;
const upvotes: number = post.upvotes;
const downvotes: number = post.downvotes;
const userVote: string = post.userVote;
const author = new Author(post.author.id, post.author.name, post.author.handle);
const temp = new Date(Number(post.createdAt));
const date = temp.toLocaleString('en-GB');
posts.push(new Post(id, content, htmlContent, upvotes, downvotes, userVote, date, author));
}
return posts
return posts;
}
}

@ -1,9 +1,8 @@
import { Injectable, EventEmitter, Output } from '@angular/core';
import {Http, URLSearchParams, Headers} from '@angular/http';
import {Injectable} from '@angular/core';
import {Headers, Http} from '@angular/http';
import {Login} from '../../models/login';
import {User} from 'src/app/models/user';
import {DatasharingService} from '../datasharing.service';
import { userInfo } from 'os';
import {Router} from '@angular/router';
import {environment} from 'src/environments/environment';
@ -12,55 +11,73 @@ import { environment } from 'src/environments/environment';
})
export class LoginService {
constructor(private http: Http, private data: DatasharingService,private router: Router) { }
constructor(private http: Http, private data: DatasharingService, private router: Router) {
}
public login(login: Login, errorCb: any) {
//let url = './graphql'
let url = environment.graphQLUrl
let headers = new Headers();
const headers = new Headers();
headers.set('Content-Type', 'application/json');
return this.http.post(url, this.buildJson(login))
return this.http.post(environment.graphQLUrl, this.buildJson(login))
.subscribe(response => {
console.log(response.text());
this.loginSuccess();
this.updateUserInfo(response.json())
this.updateUserInfo(response.json());
}, errorCb
);
}
public loginSuccess() {
console.log('alles supi dupi');
//do routing
this.router.navigateByUrl('');
}
public updateUserInfo(response: any) {
const user: User = new User();
user.loggedIn = true;
user.userID = response.data.login.id;
user.username = response.data.login.name;
user.handle = response.data.login.handle;
user.email = response.data.login.email;
user.points = response.data.login.points;
user.level = response.data.login.level;
user.friendIDs = response.data.login.friends;
user.groupIDs = response.data.login.groups;
user.chatIDs = response.data.login.chats;
user.requestIDs = response.data.login.requests;
this.data.changeUserInfo(user)
const loginData = response.data.login;
const user: User = new User(
loginData.login.id,
true,
loginData.name,
loginData.handle,
loginData.email,
loginData.points,
loginData.level,
loginData.friends,
loginData.groups,
loginData.chats,
loginData.requests,
);
this.data.changeUserInfo(user);
}
public buildJson(login: Login): any {
const body = {query: `mutation($email: String, $pwHash: String) {
login(email: $email, passwordHash: $pwHash) {id, name,email, handle, points, level, friends{id}, groups{id},chats{id}}
}`, variables: {
const body = {
query: `mutation($email: String, $pwHash: String) {
login(email: $email, passwordHash: $pwHash) {
id,
name,
email,
handle,
points,
level,
friends {
id
},
groups {
id
},
chats{
id
}
}
}`
, variables: {
email: login.email,
pwHash: login.passwordHash,
}};
}
};
return body;
}
}//add ,receivedRequests{id} later
}

@ -16,16 +16,16 @@ export class RegisterService {
public register(registration: Registration, errorCb: any) {
// let url = './graphql'
let url = environment.graphQLUrl
const url = environment.graphQLUrl;
let headers = new Headers();
const headers = new Headers();
headers.set('Content-Type', 'application/json');
return this.http.post(url, this.buildJson(registration))
.subscribe(response => {
console.log(response.text());
this.registerSuccess();
this.updateUserInfo(response.json())
this.updateUserInfo(response.json());
}, errorCb
);
}
@ -50,7 +50,7 @@ export class RegisterService {
user.chatIDs = response.data.register.chats;
user.requestIDs = response.data.register.requests;
this.data.changeUserInfo(user)
this.data.changeUserInfo(user);
}

@ -17,19 +17,19 @@ export class SelfService {
public checkIfLoggedIn() {
console.log('check if logged in...');
let url = environment.graphQLUrl;
const url = environment.graphQLUrl;
let headers = new Headers();
const headers = new Headers();
headers.set('Content-Type', 'application/json');
return this.http.post(url, this.buildJson())
.subscribe(response => {
console.log(response.text());
this.stillLoggedIn();
this.updateUserInfo(response.json())
this.updateUserInfo(response.json());
}, error => {
this.notLoggedIn()
console.log(error.text())
this.notLoggedIn();
console.log(error.text());
}
);
}
@ -55,7 +55,7 @@ export class SelfService {
user.chatIDs = response.data.getSelf.chats;
user.requestIDs = response.data.getSelf.requests;
this.data.changeUserInfo(user)
this.data.changeUserInfo(user);
}
public buildJson(): any {

@ -12,6 +12,9 @@
"element",
"app",
"kebab-case"
]
],
"indent": {
"options": "spaces"
}
}
}

@ -4,6 +4,7 @@
],
"rules": {
"arrow-return-shorthand": true,
"brace-style": "1tbs",
"callable-types": true,
"class-name": true,
"comment-format": [
@ -11,6 +12,7 @@
"check-space"
],
"curly": true,
"cyclomatic-complexity": true,
"deprecation": {
"severity": "warn"
},
@ -23,13 +25,15 @@
"import-spacing": true,
"indent": [
true,
"spaces"
"spaces",
4
],
"interface-over-type-literal": true,
"label-position": true,
"max-classes-per-file": true,
"max-line-length": [
true,
140
120
],
"member-access": false,
"member-ordering": [
@ -43,6 +47,7 @@
]
}
],
"new-parens": true,
"no-arg": true,
"no-bitwise": true,
"no-console": [
@ -74,6 +79,7 @@
"no-unnecessary-initializer": true,
"no-unused-expression": true,
"no-use-before-declare": true,
"no-var-requires": true,
"no-var-keyword": true,
"object-literal-sort-keys": false,
"one-line": [
@ -89,10 +95,7 @@
"single"
],
"radix": true,
"semicolon": [
true,
"always"
],
"semicolon": true,
"triple-equals": [
true,
"allow-null-check"
@ -121,6 +124,7 @@
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-internal-module": true,
"no-input-rename": true,
"no-output-rename": true,
"use-life-cycle-interface": true,

Loading…
Cancel
Save