Skip to content
This repository was archived by the owner on Aug 15, 2023. It is now read-only.

Commit a02d6ae

Browse files
committed
fix(taboule): tk paginated metadata with GET /v2/metadata
1 parent 3d4389f commit a02d6ae

File tree

19 files changed

+519
-137
lines changed

19 files changed

+519
-137
lines changed
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import * as t from 'io-ts';
2+
import { date } from 'io-ts-types/lib/date';
3+
import { DateFromISOString } from 'io-ts-types/lib/DateFromISOString';
4+
5+
export const MetadataBase = t.type(
6+
{
7+
id: t.string,
8+
/**
9+
* The href where the evidence has been collected
10+
*/
11+
href: t.string,
12+
/**
13+
* The supporter publicKey
14+
*
15+
* TODO: it may be replaced by the supporter id
16+
*/
17+
blang: t.union([t.string, t.null]),
18+
supporter: t.string,
19+
researchTag: t.union([t.string, t.undefined]),
20+
experimentId: t.union([t.string, t.undefined]),
21+
/**
22+
* DB saving time
23+
*/
24+
clientTime: t.union([date, DateFromISOString]),
25+
savingTime: t.union([date, DateFromISOString]),
26+
},
27+
'MetadataBase'
28+
);
29+
30+
export type MetadataBase = t.TypeOf<typeof MetadataBase>;

packages/taboule/public/index.html

+7-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ <h2>Taboule</h2>
3232
<option value="tikTokPersonalHTMLSummary">
3333
TikTok Personal HTML Summary
3434
</option>
35-
<option value="tikTokPersonalSearch">TikTok Personal Search</option>
35+
<option value="tikTokPersonalSearch">
36+
TikTok Personal Metadata: search
37+
</option>
38+
<option value="tikTokPersonalNative">
39+
TikTok Personal Metadata: native
40+
</option>
3641
<option value="tikTokSearches" selected>
3742
TikTok (Collective) Searches
3843
</option>
@@ -48,7 +53,7 @@ <h2>Taboule</h2>
4853
<script type="text/javascript" src="./taboule.js"></script>
4954
<script type="text/javascript">
5055
// var baseURL = 'http://localhost:9000/api/';
51-
var baseURL = 'http://localhost:9000/api/';
56+
var baseURL = 'http://localhost:14000/api/';
5257
// var baseURL = 'https://tiktok.tracking.exposed/api/';
5358
// var baseURL = 'https://youtube.tracking.exposed/api/';
5459

packages/taboule/src/config/index.tsx

+162-23
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
import { Box } from '@material-ui/core';
22
import { DataGridProps, GridColTypeDef } from '@mui/x-data-grid';
33
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';
412
import {
5-
VideoMetadata as YTVideoMetadata,
613
HomeMetadata as YTHomeMetadata,
14+
Metadata as YTMetadata,
715
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';
1718
import * as React from 'react';
1819
import CSVDownloadButton from '../components/buttons/CSVDownloadButton';
1920
import DeleteButton from '../components/buttons/DeleteButton';
@@ -36,15 +37,17 @@ export interface TabouleQueryConfiguration<P extends Record<string, any>>
3637

3738
interface TabouleConfiguration {
3839
YCAIccRelatedUsers: TabouleQueryConfiguration<ChannelRelated>;
39-
youtubeGetExperimentById: TabouleQueryConfiguration<Metadata>;
40+
youtubeGetExperimentById: TabouleQueryConfiguration<YTMetadata>;
4041
youtubeGetExperimentList: TabouleQueryConfiguration<GuardoniExperiment>;
4142
youtubePersonalAds: TabouleQueryConfiguration<{}>;
4243
youtubePersonalHomes: TabouleQueryConfiguration<YTHomeMetadata>;
4344
youtubePersonalSearches: TabouleQueryConfiguration<YTSearchMetadata>;
4445
youtubePersonalVideos: TabouleQueryConfiguration<YTVideoMetadata>;
4546
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>;
4851
}
4952

5053
const columnDefault: Partial<GridColTypeDef> = {
@@ -286,7 +289,7 @@ export const defaultConfiguration = (
286289
},
287290
],
288291
},
289-
tikTokPersonalHTMLSummary: {
292+
tikTokPersonalNative: {
290293
inputs: inputs.publicKeyInput,
291294
columns: [
292295
{
@@ -295,19 +298,143 @@ export const defaultConfiguration = (
295298
},
296299
{
297300
...columnDefault,
298-
field: 'timelineId',
301+
field: 'authorId',
299302
},
300303
{
301304
...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+
},
303369
},
304370
{
305371
...columnDefault,
306372
field: 'savingTime',
373+
headerName: 'when',
307374
renderCell: cells.distanceFromNowCell,
308375
},
309376
],
310377
},
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+
},
311438
tikTokPersonalSearch: {
312439
inputs: inputs.publicKeyInput,
313440
actions: () => {
@@ -360,21 +487,33 @@ export const defaultConfiguration = (
360487
},
361488
{
362489
...columnDefault,
363-
field: 'rejected',
364-
headerName: 'was answered?',
365-
width: 40,
490+
field: 'results',
366491
renderCell: (params) => {
367-
return <span>{params.formattedValue === true ? '🚫' : '✔️'}</span>;
492+
return <span>{params.row.results.length}</span>;
368493
},
494+
width: 40,
495+
},
496+
],
497+
},
498+
tikTokPersonalHTMLSummary: {
499+
inputs: inputs.publicKeyInput,
500+
columns: [
501+
{
502+
...columnDefault,
503+
field: 'id',
369504
},
370505
{
371506
...columnDefault,
372-
field: 'results',
373-
width: 40,
507+
field: 'timelineId',
374508
},
375509
{
376510
...columnDefault,
377-
field: 'sources',
511+
field: 'href',
512+
},
513+
{
514+
...columnDefault,
515+
field: 'savingTime',
516+
renderCell: cells.distanceFromNowCell,
378517
},
379518
],
380519
},

packages/taboule/src/config/params.ts

+1
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ export const defaultParams: TabouleDefaultParams = {
1717
tikTokPersonalHTMLSummary: {},
1818
tikTokPersonalSearch: {},
1919
tikTokSearches: {},
20+
tikTokPersonalNative: {},
2021
};

0 commit comments

Comments
 (0)