1
1
import { Box } from '@material-ui/core' ;
2
2
import { DataGridProps , GridColTypeDef } from '@mui/x-data-grid' ;
3
3
import { ChannelRelated } from '@shared/models/ChannelRelated' ;
4
+ import { SummaryHTMLMetadata } from '@shared/models/contributor/ContributorPersonalSummary' ;
5
+ import { GuardoniExperiment } from '@shared/models/Experiment' ;
6
+ import {
7
+ ForYouMetadata as TKForYouMetadata ,
8
+ NativeMetadata as TikTokNativeMetadata ,
9
+ ProfileMetadata as TKProfileMetadata ,
10
+ SearchMetadata as TikTokSearchMetadata ,
11
+ } from '@tktrex/shared/models/metadata' ;
4
12
import {
5
- VideoMetadata as YTVideoMetadata ,
6
13
HomeMetadata as YTHomeMetadata ,
14
+ Metadata as YTMetadata ,
7
15
SearchMetadata as YTSearchMetadata ,
8
- } from '@yttrex/shared/models/Metadata' ;
9
- import {
10
- SummaryHTMLMetadata ,
11
- TikTokPSearchMetadata ,
12
- // SummaryMetadata,
13
- } from '@shared/models/contributor/ContributorPersonalSummary' ;
14
- import { SearchMetadata as TikTokSearchMetadata } from '@tktrex/shared/models/metadata' ;
15
- import { Metadata } from '@shared/models/Metadata' ;
16
- import { GuardoniExperiment } from '@shared/models/Experiment' ;
16
+ VideoMetadata as YTVideoMetadata ,
17
+ } from '@yttrex/shared/models/metadata/Metadata' ;
17
18
import * as React from 'react' ;
18
19
import CSVDownloadButton from '../components/buttons/CSVDownloadButton' ;
19
20
import DeleteButton from '../components/buttons/DeleteButton' ;
@@ -36,15 +37,17 @@ export interface TabouleQueryConfiguration<P extends Record<string, any>>
36
37
37
38
interface TabouleConfiguration {
38
39
YCAIccRelatedUsers : TabouleQueryConfiguration < ChannelRelated > ;
39
- youtubeGetExperimentById : TabouleQueryConfiguration < Metadata > ;
40
+ youtubeGetExperimentById : TabouleQueryConfiguration < YTMetadata > ;
40
41
youtubeGetExperimentList : TabouleQueryConfiguration < GuardoniExperiment > ;
41
42
youtubePersonalAds : TabouleQueryConfiguration < { } > ;
42
43
youtubePersonalHomes : TabouleQueryConfiguration < YTHomeMetadata > ;
43
44
youtubePersonalSearches : TabouleQueryConfiguration < YTSearchMetadata > ;
44
45
youtubePersonalVideos : TabouleQueryConfiguration < YTVideoMetadata > ;
45
46
tikTokPersonalHTMLSummary : TabouleQueryConfiguration < SummaryHTMLMetadata > ;
46
- tikTokPersonalSearch : TabouleQueryConfiguration < TikTokPSearchMetadata > ;
47
- tikTokSearches : TabouleQueryConfiguration < TikTokSearchMetadata > ;
47
+ tikTokPersonalSearch : TabouleQueryConfiguration < TikTokSearchMetadata > ;
48
+ tikTokPersonalNative : TabouleQueryConfiguration < TikTokNativeMetadata > ;
49
+ tikTokPersonalProfile : TabouleQueryConfiguration < TKProfileMetadata > ;
50
+ tikTokPersonalForYou : TabouleQueryConfiguration < TKForYouMetadata > ;
48
51
}
49
52
50
53
const columnDefault : Partial < GridColTypeDef > = {
@@ -286,7 +289,7 @@ export const defaultConfiguration = (
286
289
} ,
287
290
] ,
288
291
} ,
289
- tikTokPersonalHTMLSummary : {
292
+ tikTokPersonalNative : {
290
293
inputs : inputs . publicKeyInput ,
291
294
columns : [
292
295
{
@@ -295,19 +298,143 @@ export const defaultConfiguration = (
295
298
} ,
296
299
{
297
300
...columnDefault ,
298
- field : 'timelineId ' ,
301
+ field : 'authorId ' ,
299
302
} ,
300
303
{
301
304
...columnDefault ,
302
- field : 'href' ,
305
+ field : 'videoId' ,
306
+ renderCell : ( params ) => {
307
+ return < a href = "" > { params . row . videoId } </ a > ;
308
+ } ,
309
+ } ,
310
+ {
311
+ ...columnDefault ,
312
+ field : 'hashtags' ,
313
+ renderCell : ( params ) => {
314
+ const hashtags = params . row . hashtags ?? [ ] ;
315
+ return < span > { hashtags . join ( ',' ) } </ span > ;
316
+ } ,
317
+ } ,
318
+ ] ,
319
+ } ,
320
+
321
+ tikTokPersonalForYou : {
322
+ inputs : inputs . publicKeyInput ,
323
+ actions : ( ) => {
324
+ return (
325
+ < Box textAlign = { 'right' } >
326
+ < CSVDownloadButton
327
+ onClick = { ( ) => {
328
+ void commands . downloadAsCSV ( {
329
+ Params : {
330
+ publicKey : params . publicKey ,
331
+ type : 'search' ,
332
+ } ,
333
+ } ) ( ) ;
334
+ } }
335
+ />
336
+ </ Box >
337
+ ) ;
338
+ } ,
339
+ columns : [
340
+ {
341
+ ...columnDefault ,
342
+ field : 'id' ,
343
+ width : 40 ,
344
+ renderCell : ( params ) => {
345
+ const longId = params . formattedValue ;
346
+ const shortId = ( longId as string ) . substr ( 0 , 7 ) ;
347
+ return (
348
+ < a href = { `/details/#${ encodeURI ( longId as string ) } ` } > { shortId } </ a >
349
+ ) ;
350
+ } ,
351
+ } ,
352
+ {
353
+ ...columnDefault ,
354
+ field : 'author' ,
355
+ renderCell : ( params ) => {
356
+ if ( params . value ) {
357
+ return (
358
+ < a
359
+ href = { `/search/#${ encodeURI (
360
+ params . formattedValue . username as string
361
+ ) } `}
362
+ >
363
+ { params . formattedValue . username }
364
+ </ a >
365
+ ) ;
366
+ }
367
+ return '-' ;
368
+ } ,
303
369
} ,
304
370
{
305
371
...columnDefault ,
306
372
field : 'savingTime' ,
373
+ headerName : 'when' ,
307
374
renderCell : cells . distanceFromNowCell ,
308
375
} ,
309
376
] ,
310
377
} ,
378
+ tikTokPersonalProfile : {
379
+ inputs : inputs . publicKeyInput ,
380
+ actions : ( ) => {
381
+ return (
382
+ < Box textAlign = { 'right' } >
383
+ < CSVDownloadButton
384
+ onClick = { ( ) => {
385
+ void commands . downloadAsCSV ( {
386
+ Params : {
387
+ publicKey : params . publicKey ,
388
+ type : 'search' ,
389
+ } ,
390
+ } ) ( ) ;
391
+ } }
392
+ />
393
+ </ Box >
394
+ ) ;
395
+ } ,
396
+ columns : [
397
+ {
398
+ ...columnDefault ,
399
+ field : 'id' ,
400
+ width : 40 ,
401
+ renderCell : ( params ) => {
402
+ const longId = params . formattedValue ;
403
+ const shortId = ( longId as string ) . substr ( 0 , 7 ) ;
404
+ return (
405
+ < a href = { `/details/#${ encodeURI ( longId as string ) } ` } > { shortId } </ a >
406
+ ) ;
407
+ } ,
408
+ } ,
409
+ {
410
+ ...columnDefault ,
411
+ field : 'savingTime' ,
412
+ headerName : 'when' ,
413
+ renderCell : cells . distanceFromNowCell ,
414
+ } ,
415
+ {
416
+ ...columnDefault ,
417
+ field : 'rejected' ,
418
+ headerName : 'was answered?' ,
419
+ width : 40 ,
420
+ renderCell : ( params ) => {
421
+ return < span > { params . formattedValue === true ? '🚫' : '✔️' } </ span > ;
422
+ } ,
423
+ } ,
424
+ {
425
+ ...columnDefault ,
426
+ field : 'results' ,
427
+ renderCell : ( params ) => {
428
+ return < span > { params . row . results . length } </ span > ;
429
+ } ,
430
+ width : 40 ,
431
+ } ,
432
+ {
433
+ ...columnDefault ,
434
+ field : 'sources' ,
435
+ } ,
436
+ ] ,
437
+ } ,
311
438
tikTokPersonalSearch : {
312
439
inputs : inputs . publicKeyInput ,
313
440
actions : ( ) => {
@@ -360,21 +487,33 @@ export const defaultConfiguration = (
360
487
} ,
361
488
{
362
489
...columnDefault ,
363
- field : 'rejected' ,
364
- headerName : 'was answered?' ,
365
- width : 40 ,
490
+ field : 'results' ,
366
491
renderCell : ( params ) => {
367
- return < span > { params . formattedValue === true ? '🚫' : '✔️' } </ span > ;
492
+ return < span > { params . row . results . length } </ span > ;
368
493
} ,
494
+ width : 40 ,
495
+ } ,
496
+ ] ,
497
+ } ,
498
+ tikTokPersonalHTMLSummary : {
499
+ inputs : inputs . publicKeyInput ,
500
+ columns : [
501
+ {
502
+ ...columnDefault ,
503
+ field : 'id' ,
369
504
} ,
370
505
{
371
506
...columnDefault ,
372
- field : 'results' ,
373
- width : 40 ,
507
+ field : 'timelineId' ,
374
508
} ,
375
509
{
376
510
...columnDefault ,
377
- field : 'sources' ,
511
+ field : 'href' ,
512
+ } ,
513
+ {
514
+ ...columnDefault ,
515
+ field : 'savingTime' ,
516
+ renderCell : cells . distanceFromNowCell ,
378
517
} ,
379
518
] ,
380
519
} ,
0 commit comments