mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-02-20 11:48:31 -06:00
align ownership change video list table with moderation tables
This commit is contained in:
parent
afa4456c1a
commit
4c9e9d2ee9
@ -7,27 +7,27 @@
|
|||||||
|
|
||||||
<div class="modal-body" [formGroup]="form">
|
<div class="modal-body" [formGroup]="form">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label i18n for="channel">Select the target channel</label>
|
<label i18n for="channel">Select a channel to receive the video</label>
|
||||||
<select formControlName="channel" id="channel" class="peertube-select-container">
|
<div class="peertube-select-container">
|
||||||
<option></option>
|
<select formControlName="channel" id="channel" class="form-control">
|
||||||
<option *ngFor="let channel of videoChannels" [value]="channel.id">{{ channel.displayName }}
|
<option i18n value="undefined" disabled>Channel that will receive the video</option>
|
||||||
</option>
|
<option *ngFor="let channel of videoChannels" [value]="channel.id">{{ channel.displayName }}
|
||||||
</select>
|
</option>
|
||||||
<div *ngIf="formErrors.channel" class="form-error">
|
</select>
|
||||||
{{ formErrors.channel }}
|
|
||||||
</div>
|
</div>
|
||||||
|
<div *ngIf="formErrors.channel" class="form-error">{{ formErrors.channel }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer inputs">
|
<div class="modal-footer inputs">
|
||||||
<div class="form-group inputs">
|
<div class="inputs">
|
||||||
<input
|
<input
|
||||||
type="button" role="button" i18n-value value="Cancel" class="action-button action-button-cancel"
|
type="button" role="button" i18n-value value="Cancel" class="action-button action-button-cancel"
|
||||||
(click)="dismiss()" (key.enter)="dismiss()"
|
(click)="dismiss()" (key.enter)="dismiss()"
|
||||||
>
|
>
|
||||||
|
|
||||||
<input
|
<input
|
||||||
type="submit" i18n-value value="Submit" class="action-button-submit"
|
type="submit" i18n-value value="Accept" class="action-button-submit"
|
||||||
[disabled]="!form.valid"
|
[disabled]="!form.valid"
|
||||||
(click)="close()"
|
(click)="close()"
|
||||||
>
|
>
|
||||||
|
@ -5,6 +5,10 @@ select {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.peertube-select-container {
|
||||||
|
@include peertube-select-container(350px);
|
||||||
|
}
|
||||||
|
|
||||||
.form-group {
|
.form-group {
|
||||||
margin: 20px 0;
|
margin: 20px 0;
|
||||||
}
|
}
|
@ -11,31 +11,53 @@
|
|||||||
>
|
>
|
||||||
<ng-template pTemplate="header">
|
<ng-template pTemplate="header">
|
||||||
<tr>
|
<tr>
|
||||||
<th i18n>Initiator</th>
|
<th style="width: 35%;" i18n>Initiator</th>
|
||||||
<th i18n>Video</th>
|
<th style="width: 65%;" i18n>Video</th>
|
||||||
<th i18n pSortableColumn="createdAt">
|
<th style="width: 150px;" i18n pSortableColumn="createdAt">
|
||||||
Created
|
Created
|
||||||
<p-sortIcon field="createdAt"></p-sortIcon>
|
<p-sortIcon field="createdAt"></p-sortIcon>
|
||||||
</th>
|
</th>
|
||||||
<th i18n>Status</th>
|
<th style="width: 100px;" i18n>Status</th>
|
||||||
<th i18n>Action</th>
|
<th style="width: 130px;" i18n>Action</th>
|
||||||
</tr>
|
</tr>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<ng-template pTemplate="body" let-videoChangeOwnership>
|
<ng-template pTemplate="body" let-videoChangeOwnership>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a [href]="videoChangeOwnership.initiatorAccount.url" i18n-title title="Account page"
|
<a [href]="videoChangeOwnership.initiatorAccount.url" i18n-title title="Open account in a new tab" target="_blank" rel="noopener noreferrer">
|
||||||
target="_blank" rel="noopener noreferrer">
|
<div class="chip two-lines">
|
||||||
{{ createByString(videoChangeOwnership.initiatorAccount) }}
|
<img
|
||||||
|
class="avatar"
|
||||||
|
[src]="videoChangeOwnership.initiatorAccount.avatar?.path"
|
||||||
|
(error)="switchToDefaultAvatar($event)"
|
||||||
|
alt="Avatar"
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
{{ videoChangeOwnership.initiatorAccount.displayName }}
|
||||||
|
<span class="text-muted">{{ videoChangeOwnership.initiatorAccount.nameWithHost }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
<a [href]="videoChangeOwnership.video.url" i18n-title title="Video page" target="_blank" rel="noopener noreferrer">
|
<a [href]="videoChangeOwnership.video.url" class="video-table-video-link" [title]="videoChangeOwnership.video.name" target="_blank" rel="noopener noreferrer">
|
||||||
{{ videoChangeOwnership.video.name }}
|
<div class="video-table-video">
|
||||||
|
<div class="video-table-video-image">
|
||||||
|
<img [src]="videoChangeOwnership.video.thumbnailPath">
|
||||||
|
</div>
|
||||||
|
<div class="video-table-video-text">
|
||||||
|
<div>
|
||||||
|
{{ videoChangeOwnership.video.name }}
|
||||||
|
</div>
|
||||||
|
<div class="text-muted">by {{ videoChangeOwnership.video.channel?.displayName }} </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ videoChangeOwnership.createdAt }}</td>
|
|
||||||
|
<td>{{ videoChangeOwnership.createdAt | date: 'short' }}</td>
|
||||||
<td i18n>{{ videoChangeOwnership.status }}</td>
|
<td i18n>{{ videoChangeOwnership.status }}</td>
|
||||||
<td class="action-cell">
|
<td class="action-cell">
|
||||||
<ng-container *ngIf="videoChangeOwnership.status === 'WAITING'">
|
<ng-container *ngIf="videoChangeOwnership.status === 'WAITING'">
|
||||||
@ -45,6 +67,16 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
|
<ng-template pTemplate="emptymessage">
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
<div class="no-results">
|
||||||
|
<ng-container i18n>No ownership change request found.</ng-container>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</ng-template>
|
||||||
</p-table>
|
</p-table>
|
||||||
|
|
||||||
<my-account-accept-ownership #myAccountAcceptOwnershipComponent (accepted)="accepted()"></my-account-accept-ownership>
|
<my-account-accept-ownership #myAccountAcceptOwnershipComponent (accepted)="accepted()"></my-account-accept-ownership>
|
||||||
|
@ -0,0 +1,67 @@
|
|||||||
|
@import 'miniature';
|
||||||
|
@import 'mixins';
|
||||||
|
|
||||||
|
.chip {
|
||||||
|
@include chip;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-table-video {
|
||||||
|
display: inline-flex;
|
||||||
|
|
||||||
|
.video-table-video-image {
|
||||||
|
@include miniature-thumbnail;
|
||||||
|
|
||||||
|
$image-height: 45px;
|
||||||
|
|
||||||
|
height: $image-height;
|
||||||
|
width: #{(16/9) * $image-height};
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
border-radius: 2px;
|
||||||
|
border: none;
|
||||||
|
background: transparent;
|
||||||
|
display: inline-flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
color: pvar(--inputPlaceholderColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-table-video-image-label {
|
||||||
|
@include static-thumbnail-overlay;
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 3px;
|
||||||
|
font-size: 10px;
|
||||||
|
padding: 0 3px;
|
||||||
|
line-height: 1.3;
|
||||||
|
bottom: 2px;
|
||||||
|
right: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.video-table-video-text {
|
||||||
|
display: inline-flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 90%;
|
||||||
|
color: pvar(--mainForegroundColor);
|
||||||
|
line-height: 1rem;
|
||||||
|
|
||||||
|
div .glyphicon {
|
||||||
|
font-size: 80%;
|
||||||
|
color: gray;
|
||||||
|
margin-left: 0.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
div + div {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,13 +1,15 @@
|
|||||||
import { SortMeta } from 'primeng/api'
|
import { SortMeta } from 'primeng/api'
|
||||||
import { Component, OnInit, ViewChild } from '@angular/core'
|
import { Component, OnInit, ViewChild } from '@angular/core'
|
||||||
import { Notifier, RestPagination, RestTable } from '@app/core'
|
import { Notifier, RestPagination, RestTable } from '@app/core'
|
||||||
import { Account, VideoOwnershipService } from '@app/shared/shared-main'
|
import { VideoOwnershipService, Actor, Video, Account } from '@app/shared/shared-main'
|
||||||
import { VideoChangeOwnership } from '@shared/models'
|
import { VideoChangeOwnership } from '@shared/models'
|
||||||
import { MyAccountAcceptOwnershipComponent } from './my-account-accept-ownership/my-account-accept-ownership.component'
|
import { MyAccountAcceptOwnershipComponent } from './my-account-accept-ownership/my-account-accept-ownership.component'
|
||||||
|
import { getAbsoluteAPIUrl } from '@app/helpers'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'my-account-ownership',
|
selector: 'my-account-ownership',
|
||||||
templateUrl: './my-account-ownership.component.html'
|
templateUrl: './my-account-ownership.component.html',
|
||||||
|
styleUrls: [ './my-account-ownership.component.scss' ]
|
||||||
})
|
})
|
||||||
export class MyAccountOwnershipComponent extends RestTable implements OnInit {
|
export class MyAccountOwnershipComponent extends RestTable implements OnInit {
|
||||||
videoChangeOwnerships: VideoChangeOwnership[] = []
|
videoChangeOwnerships: VideoChangeOwnership[] = []
|
||||||
@ -32,8 +34,8 @@ export class MyAccountOwnershipComponent extends RestTable implements OnInit {
|
|||||||
return 'MyAccountOwnershipComponent'
|
return 'MyAccountOwnershipComponent'
|
||||||
}
|
}
|
||||||
|
|
||||||
createByString (account: Account) {
|
switchToDefaultAvatar ($event: Event) {
|
||||||
return Account.CREATE_BY_STRING(account.name, account.host)
|
($event.target as HTMLImageElement).src = Actor.GET_DEFAULT_AVATAR_URL()
|
||||||
}
|
}
|
||||||
|
|
||||||
openAcceptModal (videoChangeOwnership: VideoChangeOwnership) {
|
openAcceptModal (videoChangeOwnership: VideoChangeOwnership) {
|
||||||
@ -56,7 +58,11 @@ export class MyAccountOwnershipComponent extends RestTable implements OnInit {
|
|||||||
return this.videoOwnershipService.getOwnershipChanges(this.pagination, this.sort)
|
return this.videoOwnershipService.getOwnershipChanges(this.pagination, this.sort)
|
||||||
.subscribe(
|
.subscribe(
|
||||||
resultList => {
|
resultList => {
|
||||||
this.videoChangeOwnerships = resultList.data
|
this.videoChangeOwnerships = resultList.data.map(change => ({
|
||||||
|
...change,
|
||||||
|
initiatorAccount: new Account(change.initiatorAccount),
|
||||||
|
nextOwnerAccount: new Account(change.nextOwnerAccount)
|
||||||
|
}))
|
||||||
this.totalRecords = resultList.total
|
this.totalRecords = resultList.total
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -46,7 +46,8 @@ enum ScopeNames {
|
|||||||
model: VideoModel.scope([
|
model: VideoModel.scope([
|
||||||
VideoScopeNames.WITH_THUMBNAILS,
|
VideoScopeNames.WITH_THUMBNAILS,
|
||||||
VideoScopeNames.WITH_WEBTORRENT_FILES,
|
VideoScopeNames.WITH_WEBTORRENT_FILES,
|
||||||
VideoScopeNames.WITH_STREAMING_PLAYLISTS
|
VideoScopeNames.WITH_STREAMING_PLAYLISTS,
|
||||||
|
VideoScopeNames.WITH_ACCOUNT_DETAILS
|
||||||
]),
|
]),
|
||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
@ -129,12 +130,7 @@ export class VideoChangeOwnershipModel extends Model<VideoChangeOwnershipModel>
|
|||||||
status: this.status,
|
status: this.status,
|
||||||
initiatorAccount: this.Initiator.toFormattedJSON(),
|
initiatorAccount: this.Initiator.toFormattedJSON(),
|
||||||
nextOwnerAccount: this.NextOwner.toFormattedJSON(),
|
nextOwnerAccount: this.NextOwner.toFormattedJSON(),
|
||||||
video: {
|
video: this.Video.toFormattedJSON(),
|
||||||
id: this.Video.id,
|
|
||||||
uuid: this.Video.uuid,
|
|
||||||
url: this.Video.url,
|
|
||||||
name: this.Video.name
|
|
||||||
},
|
|
||||||
createdAt: this.createdAt
|
createdAt: this.createdAt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user