Commit 4c042246 authored by Cédric Moreau's avatar Cédric Moreau

[enh] Consultation d'un vendeur

parent b80f341d
......@@ -14,7 +14,7 @@ import {AnnounceService} from "../services/announce-service";
import {HomePage} from "../pages/home/home";
import {ProfilPage} from "../pages/profil/profil";
import {AccountPage} from "../pages/account/account";
import {AccountEditPage} from "../pages/account_edit/account_edit";
import {MyAnnouncesPage} from "../pages/my_announces/my_announces";
import {ItemDetailsPage} from "../pages/item-details/item-details";
import {ListPage} from "../pages/list/list";
......@@ -25,6 +25,7 @@ import {ImageModalPage} from "../pages/image-service/modal-page";
import {AnnouncePage} from "../pages/announce/announce";
import {AuthService} from "../services/auth-service";
import {AuthModal} from "../components/auth_modal/auth_modal";
import {AccountPage} from "../pages/account/account";
const appRoutes: Routes = [
{
......@@ -39,12 +40,12 @@ const appRoutes: Routes = [
},
{
path: 'mon_compte/creer',
component: AccountPage,
component: AccountEditPage,
data: { creation: true }
},
{
path: 'mon_compte/edit/:pub',
component: AccountPage
component: AccountEditPage
},
{
path: 'mes_annonces',
......@@ -63,6 +64,10 @@ const appRoutes: Routes = [
{
path: 'announce/:uuid',
component: AnnouncePage
},
{
path: 'account/:pub',
component: AccountPage
}
];
......@@ -71,10 +76,11 @@ const appRoutes: Routes = [
MyApp,
HomePage,
ProfilPage,
AccountPage,
AccountEditPage,
MyAnnouncesPage,
AnnounceEditPage,
AnnouncePage,
AccountPage,
ImageModalPage,
AuthModal,
ImageCropperComponent,
......@@ -94,7 +100,7 @@ const appRoutes: Routes = [
MyApp,
HomePage,
ProfilPage,
AccountPage,
AccountEditPage,
MyAnnouncesPage,
AnnounceEditPage,
ImageModalPage,
......
<ion-content padding>
<ion-row>
<ion-col col-12 col-sm-12 col-lg-8>
<h2 *ngIf="!accountService.acc.uuid">Création du compte ğchange</h2>
<h2 *ngIf="accountService.acc.uuid">Modification du compte ğchange</h2>
<form #accountForm="ngForm" >
<ion-list inset>
<ion-item>
<ion-label>UUID</ion-label>
<ion-input type="text" value="{{ accountService.acc.uuid }}" disabled></ion-input>
</ion-item>
<ion-item>
<ion-label>Pubkey</ion-label>
<ion-input type="text" value="{{ accountService.acc.pub }}" disabled></ion-input>
</ion-item>
<ion-item >
<ion-label>Nom public</ion-label>
<ion-input type="text"
required
minlength="10"
maxlength="100"
[(ngModel)]="accountService.acc.title"
name="title"
placeholder="Nom sur ğchange."
#title="ngModel"
></ion-input>
</ion-item>
<ion-label class="error" [hidden]="title.valid || (title.pristine && title.untouched)">
<span [hidden]="!title.errors || !title.errors.required">Ce champ est requis.</span>
<span [hidden]="!title.errors || !title.errors.minlength">Au moins 10 caractères.</span>
<span [hidden]="!title.errors || !title.errors.maxlength">Au plus 100 caractères.</span>
</ion-label>
<ion-item>
<ion-label>Description</ion-label>
<ion-textarea required
minlength="10"
maxlength="10000"
[(ngModel)]="accountService.acc.desc"
name="desc"
#desc="ngModel"
placeholder="Tapez votre texte ici."></ion-textarea>
</ion-item>
<ion-label class="error" [hidden]="desc.valid || (desc.pristine && desc.untouched)">
<span [hidden]="!desc.errors || !desc.errors.required">Ce champ est requis.</span>
<span [hidden]="!desc.errors || !desc.errors.minlength">Au moins 10 caractères.</span>
<span [hidden]="!desc.errors || !desc.errors.maxlength">Au plus 100 caractères.</span>
</ion-label>
<ion-item>
<ion-label>Adresse</ion-label>
<ion-input type="text"
required
minlength="4"
maxlength="100"
[(ngModel)]="accountService.acc.address"
name="address"
#address="ngModel"
placeholder="Exemple : « 10 rue de la Monnaie Libre, ... »"
></ion-input>
</ion-item>
<ion-label class="error" [hidden]="address.valid || (address.pristine && address.untouched)">
<span [hidden]="!address.errors || !address.errors.required">Ce champ est requis.</span>
<span [hidden]="!address.errors || !address.errors.minlength">Au moins 4 caractères.</span>
<span [hidden]="!address.errors || !address.errors.maxlength">Au plus 100 caractères.</span>
</ion-label>
<ion-item>
<ion-label>Liens</ion-label>
<ion-input type="text"
minlength="10"
maxlength="100"
[(ngModel)]="accountService.link"
name="link"
#link="ngModel"
placeholder="http://..." ></ion-input>
<button ion-button type="none" item-right (click)="accountService.ajouterLien(accountService.link)" [disabled]="!link.valid || !accountService.link">Ajouter</button>
</ion-item>
<ion-label class="error" [hidden]="link.valid || (link.pristine && link.untouched)">
<span [hidden]="!link.errors || !link.errors.minlength">Au moins 10 caractères.</span>
<span [hidden]="!link.errors || !link.errors.maxlength">Au plus 100 caractères.</span>
</ion-label>
<ion-item *ngFor="let lien of accountService.acc.links">
<ion-label>{{ lien }}</ion-label>
<button ion-button item-right color="danger" (click)="accountService.retirerLien(lien)">Retirer</button>
</ion-item>
<!--<h2>Document final généré, à signer</h2>-->
<!--<pre>{{ accountService.raw }}</pre>-->
</ion-list>
<button type="submit" ion-button [disabled]="!accountForm.form.valid" (click)="accountService.createOrModifyAccount(accountForm)" >Valider les modifications</button>
</form>
<ion-col col-12 col-sm-12 col-lg-6>
<h2>{{ accountService.acc.title }}</h2>
<pre>{{ accountService.acc.desc }}</pre>
<h3>Annonces</h3>
<ion-list id="home-list">
<button ion-item *ngFor="let a of announces" routerLink="/announce/{{ a.uuid }}">
<ion-avatar item-left>
<img *ngIf="a.thumbnail" src="{{ a.thumbnail }}">
<div class="nophoto" *ngIf="!a.thumbnail">
<ion-icon name="photos"></ion-icon>
</div>
</ion-avatar>
<h2>{{ a.title }}</h2>
<p>{{ a.desc }}</p>
<h3 clear item-right>{{ a.price }} Ğ1</h3>
</button>
</ion-list>
</ion-col>
</ion-row>
......
account {
announce {
textarea {
height: 200px;
border-left: 1px dashed #ddd !important;
padding-left: 15px !important;
}
.error {
background-color: #ffe0e0;
margin: 0px;
padding: 13px 8px 13px 12px;
}
.input-has-focus + .error {
background-color: #d9e4ff;
margin: 0px;
padding: 13px 8px 13px 12px;
img {
padding-right: 30px;
}
}
import {Component, OnInit} from "@angular/core";
import {AccountService} from "../../services/account-service";
import {ActivatedRoute} from "@angular/router";
import {LoginService} from "../../services/login-service";
import {ActivatedRoute} from "@angular/router";
import {AnnounceService} from "../../services/announce-service";
@Component({
selector: 'account',
selector: 'announce',
template: require('../../app/topbar.html') + require('./account.html')
})
export class AccountPage implements OnInit {
title:string = "Créer ou modifier mon compte"
title:string = "Consulter un vendeur"
announces:any
constructor(
private route: ActivatedRoute,
public loginService:LoginService,
public accountService:AccountService) {
public accountService:AccountService,
public announceService:AnnounceService) {
if (this.route.snapshot.data.creation) {
accountService.beginCreation(loginService.pub)
this.accountService.beginCreation(loginService.pub)
}
}
......@@ -26,6 +29,17 @@ export class AccountPage implements OnInit {
if (params['pub']) {
return this.accountService.getAccountInfos(params['pub'])
.then(res => this.accountService.acc = res.acc)
.then(() => {
return this.announceService.myAnnounces(this.accountService.acc.pub)
})
.then(res => {
this.announces = []
for (const a of res.announces) {
if (parseInt(a.stock)) {
this.announces.push(a)
}
}
})
}
});
}
......
<ion-content padding>
<ion-row>
<ion-col col-12 col-sm-12 col-lg-8>
<h2 *ngIf="!accountService.acc.uuid">Création du compte ğchange</h2>
<h2 *ngIf="accountService.acc.uuid">Modification du compte ğchange</h2>
<form #accountForm="ngForm" >
<ion-list inset>
<ion-item>
<ion-label>UUID</ion-label>
<ion-input type="text" value="{{ accountService.acc.uuid }}" disabled></ion-input>
</ion-item>
<ion-item>
<ion-label>Pubkey</ion-label>
<ion-input type="text" value="{{ accountService.acc.pub }}" disabled></ion-input>
</ion-item>
<ion-item >
<ion-label>Nom public</ion-label>
<ion-input type="text"
required
minlength="10"
maxlength="100"
[(ngModel)]="accountService.acc.title"
name="title"
placeholder="Nom sur ğchange."
#title="ngModel"
></ion-input>
</ion-item>
<ion-label class="error" [hidden]="title.valid || (title.pristine && title.untouched)">
<span [hidden]="!title.errors || !title.errors.required">Ce champ est requis.</span>
<span [hidden]="!title.errors || !title.errors.minlength">Au moins 10 caractères.</span>
<span [hidden]="!title.errors || !title.errors.maxlength">Au plus 100 caractères.</span>
</ion-label>
<ion-item>
<ion-label>Description</ion-label>
<ion-textarea required
minlength="10"
maxlength="10000"
[(ngModel)]="accountService.acc.desc"
name="desc"
#desc="ngModel"
placeholder="Tapez votre texte ici."></ion-textarea>
</ion-item>
<ion-label class="error" [hidden]="desc.valid || (desc.pristine && desc.untouched)">
<span [hidden]="!desc.errors || !desc.errors.required">Ce champ est requis.</span>
<span [hidden]="!desc.errors || !desc.errors.minlength">Au moins 10 caractères.</span>
<span [hidden]="!desc.errors || !desc.errors.maxlength">Au plus 100 caractères.</span>
</ion-label>
<ion-item>
<ion-label>Adresse</ion-label>
<ion-input type="text"
required
minlength="4"
maxlength="100"
[(ngModel)]="accountService.acc.address"
name="address"
#address="ngModel"
placeholder="Exemple : « 10 rue de la Monnaie Libre, ... »"
></ion-input>
</ion-item>
<ion-label class="error" [hidden]="address.valid || (address.pristine && address.untouched)">
<span [hidden]="!address.errors || !address.errors.required">Ce champ est requis.</span>
<span [hidden]="!address.errors || !address.errors.minlength">Au moins 4 caractères.</span>
<span [hidden]="!address.errors || !address.errors.maxlength">Au plus 100 caractères.</span>
</ion-label>
<ion-item>
<ion-label>Liens</ion-label>
<ion-input type="text"
minlength="10"
maxlength="100"
[(ngModel)]="accountService.link"
name="link"
#link="ngModel"
placeholder="http://..." ></ion-input>
<button ion-button type="none" item-right (click)="accountService.ajouterLien(accountService.link)" [disabled]="!link.valid || !accountService.link">Ajouter</button>
</ion-item>
<ion-label class="error" [hidden]="link.valid || (link.pristine && link.untouched)">
<span [hidden]="!link.errors || !link.errors.minlength">Au moins 10 caractères.</span>
<span [hidden]="!link.errors || !link.errors.maxlength">Au plus 100 caractères.</span>
</ion-label>
<ion-item *ngFor="let lien of accountService.acc.links">
<ion-label>{{ lien }}</ion-label>
<button ion-button item-right color="danger" (click)="accountService.retirerLien(lien)">Retirer</button>
</ion-item>
<!--<h2>Document final généré, à signer</h2>-->
<!--<pre>{{ accountService.raw }}</pre>-->
</ion-list>
<button type="submit" ion-button [disabled]="!accountForm.form.valid" (click)="accountService.createOrModifyAccount(accountForm)" >Valider les modifications</button>
</form>
</ion-col>
</ion-row>
</ion-content>
account_edit {
textarea {
height: 200px;
border-left: 1px dashed #ddd !important;
padding-left: 15px !important;
}
.error {
background-color: #ffe0e0;
margin: 0px;
padding: 13px 8px 13px 12px;
}
.input-has-focus + .error {
background-color: #d9e4ff;
margin: 0px;
padding: 13px 8px 13px 12px;
}
}
import {Component, OnInit} from "@angular/core";
import {AccountService} from "../../services/account-service";
import {ActivatedRoute} from "@angular/router";
import {LoginService} from "../../services/login-service";
@Component({
selector: 'account_edit',
template: require('../../app/topbar.html') + require('./account_edit.html')
})
export class AccountEditPage implements OnInit {
title:string = "Créer ou modifier mon compte"
constructor(
private route: ActivatedRoute,
public loginService:LoginService,
public accountService:AccountService) {
if (this.route.snapshot.data.creation) {
accountService.beginCreation(loginService.pub)
}
}
ngOnInit() {
this.route.params.subscribe(params => {
if (params['pub']) {
return this.accountService.getAccountInfos(params['pub'])
.then(res => this.accountService.acc = res.acc)
}
});
}
}
......@@ -14,9 +14,14 @@
{{ announceService.ann.stock }} unités disponibles.
</p>
<ng-container *ngIf="announceService.ann.pub == loginService.pub">
<button ion-button [routerLink]="['/announce/edit', announceService.ann.uuid]">Modifier votre annonce</button>
<ng-container *ngIf="announceService.ann.account">
<h3>Vendeur</h3>
<a class="author" [routerLink]="['/account/', announceService.ann.account.pub]">{{ announceService.ann.account.title }}</a>
</ng-container>
<p *ngIf="announceService.ann.pub == loginService.pub">
<button ion-button [routerLink]="['/announce/edit', announceService.ann.uuid]">Modifier votre annonce</button>
</p>
</ion-col>
</ion-row>
......
......@@ -10,7 +10,7 @@
<ion-icon name="photos"></ion-icon>
</div>
</ion-avatar>
<h2>{{ a.title }}</h2>
<h2>{{ a.title }}<span class="author">{{ a.account.title }}</span></h2>
<p>{{ a.desc }}</p>
<h3 clear item-right>{{ a.price }} Ğ1</h3>
</button>
......
......@@ -8,4 +8,9 @@ home {
ion-thumbnail img {
border-radius: 0 !important;
}
.author {
font-size: 13px;
color: #588fee;
}
}
......@@ -11,14 +11,7 @@ export class HomePage {
announces:Array<any>
constructor(private announceService:AnnounceService) {
this.announces = [{
title: "Ajout d'un tutoriel ğchange",
thumbnail: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABHNCSVQICAgIfAhkiAAADORJREFUWIWtmWmMndV5x39ned/73m12j4cZbxivgLFdG5yUtjFu0hAcmlSIUqBVSSiqVPjQNI26pLQfogihqkKVQqo0FVkITQoSSUtMAgJDmpQluIAB72Mbjz37neXu73bO6Yc7Xq4XGkIe6fkwuuc9//95nv855znPCH4JEwK5cVWwdfvmwo6t67LbVi/NrLmsRw8W87IAUK3b2vhsOnbkZHR4z8Hmqy++Udu9dzjc4xz2fWO9n8EDPXrJPTf33Hv7R7vuXD7gL0VoZMd6ZHE9IrsI4WcQSuOsgyTGNqaxlXewlX2cGG+e/O5z84/961OzX5mcTUd/pQS7Cqr3i3/U/6W7PtH92Ww2m9H9O1CLN6G6u0BOAmPg6heZPQcsxaWLMFNjpCefoj47HH3zR3OPfPnRqfvna2bmAxP83V/vuO2h+wa/sri/r89b8QfowZWgDoOb/EXWdo5JkBswU03iQ99mcnK89LmvjN33Xy9V/uO9vlKX/EEK/eA9lz385bsHH+had0c+uOZWZPEYuGGwNXC8T3dgJ5DZebwlnyTrdO5Tm2Zv6Snqgd1v1J+5lD4vSjDjiey3/mrpk3fcuOqO3NYvCr24BnYfuLgF9IHcghtD969AqHViU+/RrVdfHmz54SuV7xtL+v8SVBL9zS8se/LmHRt25rb9BcJ7CWz5kpFJ6zHN6QrNqXmaU2XCUoW4XMeEKUJKpFYX/9ZWkB0amd3K5d7BNVcuCzb950vlx8+P5AUEH/jMwMN33nTlHblt94H9CThzweQutdROligfPkX55CQNIoKuPHEjS5T4vLIvy7cfH2Z1fg4zX8GmDp0NAHEeyRiZtwhvPSv9Y2s686r/uTdquy5J8JPbOm770l3LH8h/6C8F/GwhJe3kmpPzzB14l7RRQ2UFIjSMVAUEhulGjVf3lXj59TFeP1CnOZNw7XU54mqd5sQcUmtUkDlvzhRVzGDjDjYumtmy/2R08PBotO8Cgp151fvEXy9/um/LPXmZHwbbrjdnLeUjozSnptEFhd/l43d6qGIGdarB5ERKzQnCyJE2DNd1O265uZv8UIAOJEhHOFvGNBP8Qg5xeuM4BzZG9/STTs+I61e57Y++MP9IlLhmG8F/uH3xP23/0IaPBOs34NKx9pRax/yhk6RRrUWsy8MraFRW4eUVujtDMZOjM+xlINPJ5pVZrr4+oLAkwM8ppCdRvkRqSdpoElea+MVCC/gMToQsLsErHc1lfVF8fm8r1QpgcZde8vCfDn2juOl2LeThdnLOUTk+ThrXF6Lmo3MKlVGooBtPr0WYTmqxx1xaYd6k1OQiVO4q+pdsQGZCEDWEFEgtEFpiwpi0EePnCm1Y0rfYhmRdT/2ax16c/0Y9slUFcN9NfX/zW5uWbs+t34xLp9tSG85WaM7NkFmInM62yHmZq0hKMSdGXufI+DQjkzO8O1ln+GSFvQfHeP6n+3n66T3k5EpWrd8MYgQELaJKkNSbCKFRnteGJ4IMZuyUbsYu+p+D9eeVEMiH7hp8pP/Kj3aq/DTO2bOrMo7KyCm8osLv9NA5jfQlnnc1lbG3qLoKwvcRAlLjSBNHHDui2BFGjtmy5dn/Pkp5bIIP/+bHQZwAQAgBQhBXGvi5jrZUC5WSTE8zVBAr/u352X9WG5YF195746LPB6uvRehqW8gbM3MYE57RnPQlXrCSmRMHibSlp1ujFSSJI2tD+rNNLivE+MoyPiuo1R3NpuPnb5cZCOqs3bQeQWmBJNjU4hKB8jKQ1nHxFC6ZwaWGXJR0PvNm9Wl9/dr8DmdB5XM449rOxKhSQRcUOqsQWiA9TWOyyqlyRG+PJootIg4ZakxRPpFgdRYVaJYuTviNpSH/8pxmqgR9nRDPHGDuZUXndS0tOk+iAkc0+y5adoBLzuDKQgZn4fq1+R1684rsNuF3gmi0EbRJgnMpKsggvdYOVLKPw8P7aaoAr2rQSUh3aYKJEzkWbVuKzp09VpNKzJ/fPMHm5SnXFADdQdDfAKdAVcHNAWVsEmLCZUjlnSWY0SAEm1dkt+mVfZk1qjCEbU62hHoaoBGiMhLpS4QSCCWw1RLDE4JC0WCMY1X3NJPvZhnYfllLV+ckwCv6uNwQG0enKV6Rwe9McHYEGyYID5AWoQUqq0jjBM/XbdkTvmZlX2aN7i/qQaE9MO33tE3jhbQKhBQICfOlGWbLlsQY8jIibKR0bRpaKFYcQluEjsFGmGYTlzTp2hCCc5iYVnFnNQKJXFi09CQYDefJSyhFf1EP6rwvC86GmEYdhDrjJpyBIAIX4JwGJLXZUU6MQD4HPa5BqOoUAg+TGPwei8ycBZBFR1qxpPNuIW0Cr0shA7kwoLWbhRYgMzjT0qBwCdI0kITkfVnQGIdNQmzUbFuBaUyBCLFJgDQaZxWeGeHgIUshryialK3rUqzpI1jsIb322lcIgdepWkQkqJxsyeDsgFZEBUjpI8MZhA0RrpVJZwQYhy43bC0fh12YFHdO7SCEPFeSAAwMeNQqNapVy0+qcPtGhcqLC8hBHm0+AmEJbUq4cAbKMxCXqGe7CBYHbXpXTiDiWovYaYklUG7Ymp4qp2MDzUaXas7jhAKhcUKjnCOxrvUAOl3V5AtsWjbLrtc0JV/w432C27YtBmbPI1jHNJ9AHj4KqW1xceCcoJLqBYILbAwIcjjTPoMJYaqcjsmjk9HhpNrEOQXGQhojkgaeS7CpwxnXKoKtI811cucNivHJhNHxhGMnY/ypeYRZzQWWvxrb+3ukkWp53HKbOpxrLdxZhyOLSB3OijZPGoKjk9Fh+eZI+KppJqRN0apNF1w6iaKIiW2LpHHIjOSKdYv4k49Bs2H4xEZJMrkXu/cAYuLXELWtUN0EY1dh3hwnHn7qDLE0UphIYeJWNpxxuNShMxsx84fasNNGq9p7cyR8Vb98rL7bWYjmDNne9iBkRDdxcxRbsNhUIj0wPd3c/5km99/awNOCNAZmDkPpSEs/C6kEcE6Ca52Prd8ETrUWa1OHTSzadWPjqA03mgdrnHv5WH233j8R7jk5E59cEXhLg652grI+gyqsxoTHkb7EaoGXV1S7+9HlSYRJ2sFPa+2c0t4haMym1EJF32KJC8AmFptYcIOIuZkL9BfOCk7Nxqf2T4R7pHPYH7xVfiypCpL6wqPrtKcGr5nFhAVsZDGxRQcS4Uuipf3MxTmaFXGBzszC31FDMnEgZt5lKW4fJBzoXniKWExo8b0bSCZ+3oaZ1CGpwff3lr/jHFYA9BX00PN/tupoR4/IdCy7UO9q9ceJzY/xOxUqqzAGymMxAHEpIh2pwlyESCwIQRpZUgSuM0Pxmi68bv9MZS4lFHs1Uu7AHTuOKR9tw6qMCCqzNvrtrw5fUaqlowqgEdtqb1YPXtWdu9bLt6qNlnZa7spj+EOfJqm/s3A9CZQniOoGmVXogTz68g7ksgJyMI+/totgfRfB8jwykLiFh6SQrfRmix9GTErSyTfbcJK6oD4O33197uvPHKx8D85pfXQEqnfXZ684uLhb93Wtak12romgB3/DzUT1x9A5g8xI0sRRmU6wCxo696JwC48i58DLCIq9Hi6xGHsTfqlKMvrTtvmdhblhmJpLSzsfObquErb6Nmeujih1zVPz8cjHVnbcYmMh/CLtb5OkiZk8QrDkLoxtYqMJlCfIdmikBJc60sRijcMahxDgB4J8pyZXUEi1Fl9+CnvoFdKpty94zlZPQVRz7m9/NHb3ganwtTPyOncVx2bjfZ0ZPbC+M7sVB172PJJpQnLqf9HqSry+G3HOJ62Poj1HkFctMkVFvkORKyqC/GX4hRuQza2Y43XC/T/Ehhd2KRpTUC/h/v2Nua996/XZB9syd/6GkAL90M4lP9hxeXFnrh/y/ZdugOne9fhDWyArwTMIaXHWQgIuBDM3QTK+B5dcpDW3YI0pR30Kdh+v7vrcrlOftq69P3NRdF+J7D/+ztATN6ws7gy6oHCZAHmxkR/AnKM2Bs153IvHqk9/4dnRW2PjmucPu2h3yzjSZ49WHu/wVf/aYrAlKiNURiA1F6Tnl/G0DuV3Iao6972357729y+M/3FqiS/G5ZL9QQf2ZyP1XUdmooNbFuW2i6rMmRCkd+Ex9Is5mCbUxhy1CShV09LfvTB+96NvzT7ouHTv+pIET9vx+Xjfk4fKjwRKFFfmMtck80LHVYczCzWnFO8RLYeNWndrfcJRn4R6zUaP75/7+uefG73lYOnsbr2Uva8mem9WD/3+uq57d67q/MPBgr8UQCpQGZDe2bPT2VbBaWKwKTicG68lp3YNl7/z+MH5h2eav+Im+kU+kmt7g63XDuR2XL0ou215h7+mL6sHC37r3xC12NZKzXTsRCU+/M5089XXJhq7D82Ee94rlZey/wOScSPS9rNNvwAAAABJRU5ErkJggg==",
desc: "ğchange est un nouvel outil développé pour faciliter le contact entre acheteurs et vendeurs dans la monnaie Ğ1.",
type: "Crowdfunding",
uuid: "a9fg8ef4-4897",
price: "112,00"
}]
this.announces = []
this.announceService.listAllAnnounces().then(announces => this.announces = announces.map(a => {
a.thumbnail = a.images[0]
return a
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment