mirror of
https://framagit.org/framasoft/framadate/funky-framadate-front.git
synced 2023-08-25 13:53:14 +02:00
⚡ admin route calling the backend
This commit is contained in:
parent
15b10f9381
commit
8fa39250d5
@ -19,30 +19,31 @@ import { VotingComponent } from './pages/voting/voting.component';
|
||||
import { PollGraphicComponent } from './poll-graphic/poll-graphic.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{ path: '', redirectTo: 'step/creation', pathMatch: 'full' },
|
||||
{ path: 'home', component: HomeComponent },
|
||||
{ path: 'base', component: BaseComponent },
|
||||
{ path: 'step/base', component: BaseComponent },
|
||||
{ path: 'step/creation', component: CreateOrRetrieveComponent },
|
||||
{ path: 'step/date', component: DatesComponent },
|
||||
{ path: 'step/kind', component: KindComponent },
|
||||
{ path: 'step/answers', component: AnswersComponent },
|
||||
{ path: 'step/admin', component: AdminComponent },
|
||||
{ path: 'step/pictures', component: PicturesComponent },
|
||||
{ path: 'step/visibility', component: VisibilityComponent },
|
||||
{ path: 'step/resume', component: ResumeComponent },
|
||||
{ path: 'step/end', component: EndConfirmationComponent },
|
||||
{ path: 'graphic/:poll', component: PollGraphicComponent },
|
||||
{ path: 'vote/poll/id/:poll', component: PollDisplayComponent },
|
||||
{ path: 'vote/poll/slug/:pollSlug', component: PollDisplayComponent },
|
||||
{ path: 'votingchoice', component: VotingChoiceComponent },
|
||||
{ path: 'voting', component: VotingComponent },
|
||||
{ path: 'step/password', component: PasswordComponent },
|
||||
{ path: '**', redirectTo: '/home', pathMatch: 'full' },
|
||||
{ path: '', redirectTo: 'step/creation', pathMatch: 'full' },
|
||||
{ path: 'admin/:token', component: AdminComponent }, // http://localhost:4200/#/admin/srfdgedsTGETHRYJtujTUjTUkTIUKTK
|
||||
{ path: 'home', component: HomeComponent },
|
||||
{ path: 'base', component: BaseComponent },
|
||||
{ path: 'step/base', component: BaseComponent },
|
||||
{ path: 'step/creation', component: CreateOrRetrieveComponent },
|
||||
{ path: 'step/date', component: DatesComponent },
|
||||
{ path: 'step/kind', component: KindComponent },
|
||||
{ path: 'step/answers', component: AnswersComponent },
|
||||
{ path: 'step/admin', component: AdminComponent },
|
||||
{ path: 'step/pictures', component: PicturesComponent },
|
||||
{ path: 'step/visibility', component: VisibilityComponent },
|
||||
{ path: 'step/resume', component: ResumeComponent },
|
||||
{ path: 'step/end', component: EndConfirmationComponent },
|
||||
{ path: 'graphic/:poll', component: PollGraphicComponent },
|
||||
{ path: 'vote/poll/id/:poll', component: PollDisplayComponent },
|
||||
{ path: 'vote/poll/slug/:pollSlug', component: PollDisplayComponent },
|
||||
{ path: 'votingchoice', component: VotingChoiceComponent },
|
||||
{ path: 'voting', component: VotingComponent },
|
||||
{ path: 'step/password', component: PasswordComponent },
|
||||
{ path: '**', redirectTo: '/home', pathMatch: 'full' },
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forRoot(routes, { useHash: true, anchorScrolling: 'enabled' })],
|
||||
exports: [RouterModule],
|
||||
imports: [RouterModule.forRoot(routes, { useHash: true, anchorScrolling: 'enabled' })],
|
||||
exports: [RouterModule],
|
||||
})
|
||||
export class AppRoutingModule {}
|
||||
|
@ -1,42 +1,4 @@
|
||||
import { AdminComponent } from '../pages/admin/admin.component';
|
||||
import { AnswersComponent } from '../pages/answers/answers.component';
|
||||
import { BaseComponent } from '../pages/base-page/base.component';
|
||||
import { CreateOrRetrieveComponent } from '../pages/create-or-retrieve/create-or-retrieve.component';
|
||||
import { DatesComponent } from '../pages/dates/dates.component';
|
||||
import { EndConfirmationComponent } from '../pages/end-confirmation/end-confirmation.component';
|
||||
import { HomeComponent } from '../pages/home/home.component';
|
||||
import { KindComponent } from '../pages/kind/kind.component';
|
||||
import { PasswordComponent } from '../pages/password/password.component';
|
||||
import { PicturesComponent } from '../pages/pictures/pictures.component';
|
||||
import { PollDisplayComponent } from '../pages/poll-display/poll-display.component';
|
||||
import { ResumeComponent } from '../pages/resume/resume.component';
|
||||
import { VisibilityComponent } from '../pages/visibility/visibility.component';
|
||||
import { VotingChoiceComponent } from '../pages/voting/voting-choice/voting-choice.component';
|
||||
import { VotingComponent } from '../pages/voting/voting.component';
|
||||
import { PollGraphicComponent } from '../poll-graphic/poll-graphic.component';
|
||||
|
||||
/**
|
||||
* each step in the form is a component
|
||||
*/
|
||||
export const Routes = [
|
||||
{ path: '', redirectTo: 'step/creation', pathMatch: 'full' },
|
||||
{ path: 'home', component: HomeComponent },
|
||||
{ path: 'base', component: BaseComponent },
|
||||
{ path: 'step/base', component: BaseComponent },
|
||||
{ path: 'step/creation', component: CreateOrRetrieveComponent },
|
||||
{ path: 'step/date', component: DatesComponent },
|
||||
{ path: 'step/kind', component: KindComponent },
|
||||
{ path: 'step/answers', component: AnswersComponent },
|
||||
{ path: 'step/pictures', component: PicturesComponent },
|
||||
{ path: 'step/visibility', component: VisibilityComponent },
|
||||
{ path: 'step/resume', component: ResumeComponent },
|
||||
{ path: 'step/end', component: EndConfirmationComponent },
|
||||
{ path: 'graphic/:poll', component: PollGraphicComponent },
|
||||
{ path: 'admin/:token', component: AdminComponent },
|
||||
{ path: 'vote/poll/id/:poll', component: PollDisplayComponent },
|
||||
{ path: 'vote/poll/slug/:pollSlug', component: PollDisplayComponent },
|
||||
{ path: 'votingchoice', component: VotingChoiceComponent },
|
||||
{ path: 'voting', component: VotingComponent },
|
||||
{ path: 'step/password', component: PasswordComponent },
|
||||
{ path: '**', redirectTo: '/home', pathMatch: 'full' },
|
||||
];
|
||||
export const Routes = [];
|
||||
|
@ -1,3 +1,10 @@
|
||||
<p>
|
||||
admin page to modify a poll
|
||||
</p>
|
||||
<div>
|
||||
<h1>
|
||||
admin page to modify a poll
|
||||
</h1>
|
||||
<div class="well">
|
||||
<h2>Anybody with this link can modify and delete the poll</h2>
|
||||
<strong> token: {{ tokenForAdministration }} </strong>
|
||||
coming soon
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,5 +1,9 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { ConfigService } from '../../services/config.service';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { PollUtilities } from '../../config/PollUtilities';
|
||||
import { environment } from '../../../environments/environment';
|
||||
|
||||
@Component({
|
||||
selector: 'framadate-admin',
|
||||
@ -7,11 +11,51 @@ import { ConfigService } from '../../services/config.service';
|
||||
styleUrls: ['./admin.component.scss'],
|
||||
})
|
||||
export class AdminComponent implements OnInit {
|
||||
constructor(public config: ConfigService) {}
|
||||
public tokenForAdministration = '';
|
||||
|
||||
constructor(
|
||||
public config: ConfigService,
|
||||
public router: Router,
|
||||
private utils: PollUtilities,
|
||||
public http: HttpClient,
|
||||
public activeRoute: ActivatedRoute
|
||||
) {}
|
||||
|
||||
ngOnInit() {
|
||||
// get token paarameter from route
|
||||
// fetch admin version of the poll
|
||||
// then, populate UI.
|
||||
this.activeRoute.paramMap.subscribe((params) => {
|
||||
console.log('params', params);
|
||||
this.tokenForAdministration = params.get('token');
|
||||
// redirect to home if no token provided
|
||||
if (!this.tokenForAdministration) {
|
||||
alert('pas de token pour administrer un sondage, mauvaise URL.');
|
||||
this.router.navigate(['/home']);
|
||||
}
|
||||
if (!this.config.loading) {
|
||||
// get token paarameter from route
|
||||
// fetch admin version of the poll
|
||||
// then, populate UI.
|
||||
this.fetchPoll();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// fetch poll with its ID or slug.
|
||||
fetchPoll() {
|
||||
const token = this.tokenForAdministration;
|
||||
const headers = this.utils.makeHeaders({ token: token });
|
||||
this.config.loading = true;
|
||||
// store it in the poll property here
|
||||
this.http.get(`${environment.baseApiHref}/admin/${token}`, headers).subscribe(
|
||||
(res: any) => {
|
||||
console.log('res', res);
|
||||
this.config.updateCurrentPollFromResponse(res);
|
||||
this.config.loading = false;
|
||||
},
|
||||
(e) => {
|
||||
// handle need for a password
|
||||
console.log('e', e);
|
||||
this.config.handleError(e);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user