Skip to content

Commit

Permalink
chore: update example
Browse files Browse the repository at this point in the history
  • Loading branch information
tclxshunquan-wang committed Aug 21, 2024
1 parent 93dd7f2 commit 4c4420f
Show file tree
Hide file tree
Showing 9 changed files with 144 additions and 36 deletions.
35 changes: 27 additions & 8 deletions examples/next-example/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,41 @@
'use client';

import { useEffect, useState } from 'react';
import { fetchGoodsList, GoodsRecord } from './service';
import mockjs from 'mockjs';
import { reportTrack } from '@/track/track';
import { GoodsRecord } from '@/track/types';
import { fetchGoodsList } from './service';

export default function Home() {
const [mounted, setMounted] = useState(false);

useEffect(() => {
setMounted(true);
}, []);

useEffect(() => {
if (!mounted) {
return;
}
reportTrack()
.select('reportAdapter')
.track(
'pv',
mockjs.mock({
timeStamp: Date.now(),
url: '@url()',
userName: '@name()',
userId: '@id(12)',
})
);
}, [mounted]);

const onAddToCart = (item: GoodsRecord) => {
console.log('onAddToCart', JSON.stringify(item));
// await reportTrack().select('reportAdapter').track('addCart', {
// price: 25.99,
// goodsId: '23432252',
// goodsName: 'Long Chair',
// count: 1,
// });
reportTrack()
.select('reportAdapter')
.track('addCart', {
...item,
});
};

return (
Expand Down
7 changes: 1 addition & 6 deletions examples/next-example/app/service.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
import Mock from 'mockjs';

export interface GoodsRecord {
goodsName: string;
goodsId: string;
price: number;
}
import { GoodsRecord } from '@/track/types';

export const fetchGoodsList = (): GoodsRecord[] => {
const data = Mock.mock({
Expand Down
2 changes: 1 addition & 1 deletion examples/next-example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
}
},
"dependencies": {
"@hyperse/track": "latest",
"@hyperse/track": "workspace:*",
"@types/node": "20.6.2",
"@types/react": "18.2.22",
"@types/react-dom": "18.2.7",
Expand Down
32 changes: 32 additions & 0 deletions examples/next-example/track/report-adapter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { AdapterReportData, BaseAdapter, TrackContext } from '@hyperse/track';
import {
ReportAdapterOptions,
ReportEventData,
ReportTrackData,
} from './types';

export class ReportAdapter extends BaseAdapter<
TrackContext<ReportTrackData>,
ReportEventData,
ReportAdapterOptions<TrackContext<ReportTrackData>, ReportEventData>
> {
isTrackable<EventType extends keyof ReportEventData>(
ctx: TrackContext<ReportTrackData>,
eventType: EventType,
eventData: ReportEventData[EventType]
): boolean | Promise<boolean> {
return true;
}

protected report(
ctx: TrackContext<ReportTrackData>,
reportData: AdapterReportData,
setupData?:
| { name: 'setup' | 'setup2' | 'setup3'; timeStamp: number }
| undefined
): void | Promise<void> {
alert(
`report: \n ctx: ${JSON.stringify(ctx, null, 2)} \n reportData: ${JSON.stringify(reportData, null, 2)} \n setupData: ${JSON.stringify(setupData, null, 2)}`
);
}
}
71 changes: 70 additions & 1 deletion examples/next-example/track/track.ts
Original file line number Diff line number Diff line change
@@ -1 +1,70 @@
export const reportTrack = () => {};
import {
createAdapterBuilder,
createTrackBuilder,
TrackContext,
} from '@hyperse/track';
import { ReportAdapter } from './report-adapter';
import {
ReportAdapterOptions,
ReportEventData,
ReportTrackData,
} from './types';

export const reportTrack = () => {
const reportAdapter = new ReportAdapter();

const adapterBuilder = createAdapterBuilder<
TrackContext<ReportTrackData>,
ReportEventData,
ReportAdapterOptions<TrackContext<ReportTrackData>, ReportEventData>
>(reportAdapter);

const adapter = adapterBuilder
.setup(() => {
return Promise.resolve({
name: 'setup',
timeStamp: Date.now(),
});
})
.before((ctx, eventType, eventData) => {
console.log('before', ctx, eventType, eventData);
})
.transform('addCart', (ctx, eventType, eventData) => {
return {
...eventData,
eventType,
goodName: 'ac_' + eventData?.goodsName,
};
})
.transform('pv', (ctx, eventType, eventData) => {
return { ...eventData, userName: 'pv_' + eventData?.userName };
})
.after((ctx, eventType, reportData) => {
console.log('after', ctx, eventType, reportData);
})
.build();

const trackBuilder = createTrackBuilder<
TrackContext<ReportTrackData>,
ReportEventData
>({
createData: {
env: 'prod',
platform: 'ios',
ip: '0.0.0.0',
},
});

return trackBuilder
.init(() => {
return {
reportAdapter: adapter,
};
})
.before((ctx) => {
console.log('before track', ctx);
})
.after((ctx) => {
console.log('after track', ctx);
});
};
13 changes: 7 additions & 6 deletions examples/next-example/track/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@ export type ReportEventData = {
userName: string;
userId: string;
};
addCart?: {
price: number;
goodsId: string;
goodsName: string;
count: number;
};
addCart?: GoodsRecord;
};

export interface GoodsRecord {
goodsName: string;
goodsId: string;
price: number;
}
3 changes: 2 additions & 1 deletion examples/next-example/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
}
],
"paths": {
"@/*": ["./*"]
"@/*": ["./*"],
"@hyperse/track": ["../../src/index.js"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
Expand Down
2 changes: 1 addition & 1 deletion website/docs/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ However we also provide some highly packaged plugins to facilitate rapid busines
<details>
<summary>What is Hyperse?</summary>

Hyperse is an open source full stack development suites, front end, architecture, tech solutions, built with TypeScript, GraphQL and Node.js
Leveraging a cutting-edge, robust open-source full-stack core, we deliver comprehensive and innovative architectural solutions and expert consulting services for medium to large tech enterprises. Our offerings encompass advanced front-end, back-end, big data, Android, and iOS technologies. Additionally, we specialize in crafting bespoke e-commerce platform solutions, tailored to meet the unique needs of your business.

More information please see [Hyperse](https://www.hyperse.net/)

Expand Down
15 changes: 3 additions & 12 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3273,7 +3273,7 @@ __metadata:
resolution: "@hyperse/next-example@workspace:examples/next-example"
dependencies:
"@hyperse/eslint-config-hyperse": "npm:1.1.3"
"@hyperse/track": "npm:latest"
"@hyperse/track": "workspace:*"
"@types/mockjs": "npm:^1"
"@types/node": "npm:20.6.2"
"@types/react": "npm:18.2.22"
Expand All @@ -3291,7 +3291,7 @@ __metadata:
languageName: unknown
linkType: soft

"@hyperse/pipeline@npm:^1.0.1, @hyperse/pipeline@npm:^1.0.4":
"@hyperse/pipeline@npm:^1.0.4":
version: 1.0.4
resolution: "@hyperse/pipeline@npm:1.0.4"
dependencies:
Expand Down Expand Up @@ -3338,16 +3338,7 @@ __metadata:
languageName: unknown
linkType: soft

"@hyperse/track@npm:latest":
version: 1.0.1
resolution: "@hyperse/track@npm:1.0.1"
dependencies:
"@hyperse/pipeline": "npm:^1.0.1"
checksum: 10/84045db71e332ddbc8593674bbb671806cc516994217c370a5c19ef45c6e51236fa63bf21b161564bd46f1a4eb32a64829cd7b67ed0c7f4b45050f3b4f9057ec
languageName: node
linkType: hard

"@hyperse/track@workspace:.":
"@hyperse/track@workspace:*, @hyperse/track@workspace:.":
version: 0.0.0-use.local
resolution: "@hyperse/track@workspace:."
dependencies:
Expand Down

0 comments on commit 4c4420f

Please sign in to comment.